diff --git a/src/euidSdk.ts b/src/euidSdk.ts index 5fa7f457..3f54971f 100644 --- a/src/euidSdk.ts +++ b/src/euidSdk.ts @@ -14,15 +14,7 @@ const productDetails: ProductDetails = { }; export class EUID extends SdkBase { - private static cookieName = productDetails.cookieName; - // Deprecated. Integrators should never access the cookie directly! - static get COOKIE_NAME() { - console.warn( - 'Detected access to EUID.COOKIE_NAME. This is deprecated and will be removed in the future. Integrators should not access the cookie directly.' - ); - return EUID.cookieName; - } - static get EuidDetails(): ProductDetails { + private static get EuidDetails(): ProductDetails { return productDetails; } diff --git a/src/integrationTests/euidSdk.test.ts b/src/integrationTests/euidSdk.test.ts index 73711d6b..682b5197 100644 --- a/src/integrationTests/euidSdk.test.ts +++ b/src/integrationTests/euidSdk.test.ts @@ -5,12 +5,11 @@ import { sdkWindow, EUID, __euidInternalHandleScriptLoad, SdkOptions } from '../ import { EventType, CallbackHandler } from '../callbackManager'; import { __euidSSProviderScriptLoad } from '../secureSignalEuid'; import { UidSecureSignalProvider } from '../secureSignal_shared'; -import { ProductDetails } from '../product'; import { removeConfig } from '../configManager'; +import { ProductDetails } from '../product'; let callback: any; let asyncCallback: jest.Mock; -let euid: EUID; let xhrMock: any; let uid2ESP: UidSecureSignalProvider; let secureSignalProvidersPushMock: jest.Mock<(p: any) => Promise>; @@ -26,12 +25,19 @@ jest.spyOn(document, 'URL', 'get').mockImplementation(() => mockUrl); const makeIdentity = mocks.makeIdentityV2; +const euidProductDetails: ProductDetails = { + name: 'EUID', + defaultBaseUrl: 'https://prod.euid.eu', + localStorageKey: 'EUID-sdk-identity', + cookieName: '__euid', +}; + const getConfigCookie = () => { const docCookie = document.cookie; if (docCookie) { const payload = docCookie .split('; ') - .find((row) => row.startsWith(EUID.COOKIE_NAME + '_config' + '=')); + .find((row) => row.startsWith(euidProductDetails.cookieName + '_config' + '=')); if (payload) { return JSON.parse(decodeURIComponent(payload.split('=')[1])); } @@ -150,17 +156,10 @@ describe('Store config EUID', () => { useCookie: false, }; - const productDetails: ProductDetails = { - cookieName: '__euid', - defaultBaseUrl: 'http://test-host', - localStorageKey: 'EUID-sdk-identity', - name: 'EUID', - }; - beforeEach(() => { sdkWindow.__euid = new EUID(); document.cookie = - EUID.COOKIE_NAME + '_config' + '=;expires=Tue, 1 Jan 1980 23:59:59 GMT;path=/'; + euidProductDetails.cookieName + '_config' + '=;expires=Tue, 1 Jan 1980 23:59:59 GMT;path=/'; }); afterEach(() => { @@ -190,7 +189,7 @@ describe('Store config EUID', () => { }); let cookie = getConfigCookie(); expect(cookie).toBeInstanceOf(Object); - removeConfig({ ...options, useCookie: true }, productDetails); + removeConfig({ ...options, useCookie: true }, euidProductDetails); cookie = getConfigCookie(); expect(cookie).toBeNull(); }); diff --git a/src/integrationTests/options.test.ts b/src/integrationTests/options.test.ts index 1b3c3cd0..cae62615 100644 --- a/src/integrationTests/options.test.ts +++ b/src/integrationTests/options.test.ts @@ -15,6 +15,13 @@ mocks.setupFakeTime(); const mockDomain = 'www.uidapi.com'; const mockUrl = `http://${mockDomain}/test/index.html`; +const uid2ProductDetails: ProductDetails = { + name: 'UID2', + defaultBaseUrl: 'https://prod.uidapi.com', + localStorageKey: 'UID2-sdk-identity', + cookieName: '__uid_2', +}; + beforeEach(() => { callback = jest.fn(); uid2 = new UID2(); @@ -41,7 +48,7 @@ const getConfigCookie = () => { if (docCookie) { const payload = docCookie .split('; ') - .find((row) => row.startsWith(UID2.COOKIE_NAME + '_config' + '=')); + .find((row) => row.startsWith(uid2ProductDetails.cookieName + '_config' + '=')); if (payload) { return JSON.parse(decodeURIComponent(payload.split('=')[1])); } @@ -69,7 +76,7 @@ describe('cookieDomain option', () => { }); test('should not mention domain in the cookie string', () => { - const cookie = cookieMock.getSetCookieString(UID2.COOKIE_NAME); + const cookie = cookieMock.getSetCookieString(uid2ProductDetails.cookieName); expect(cookie).not.toBe(''); expect(cookie).not.toContain('Domain='); }); @@ -88,7 +95,7 @@ describe('cookieDomain option', () => { }); test('should use domain in the cookie string', () => { - const cookie = cookieMock.getSetCookieString(UID2.COOKIE_NAME); + const cookie = cookieMock.getSetCookieString(uid2ProductDetails.cookieName); expect(cookie).toContain(`Domain=${domain};`); }); }); @@ -105,7 +112,7 @@ describe('cookiePath option', () => { }); test('should use the default path in the cookie string', () => { - const cookie = cookieMock.getSetCookieString(UID2.COOKIE_NAME) as string; + const cookie = cookieMock.getSetCookieString(uid2ProductDetails.cookieName) as string; expect(cookie + ';').toContain('Path=/;'); }); }); @@ -123,7 +130,7 @@ describe('cookiePath option', () => { }); test('should use custom path in the cookie string', () => { - const cookie = cookieMock.getSetCookieString(UID2.COOKIE_NAME) as string; + const cookie = cookieMock.getSetCookieString(uid2ProductDetails.cookieName) as string; expect(cookie + ';').toContain(`Path=${path};`); }); }); @@ -351,7 +358,7 @@ describe('multiple init calls', () => { }); test('should update cookie manager', () => { - const cookie = cookieMock.getSetCookieString(UID2.COOKIE_NAME); + const cookie = cookieMock.getSetCookieString(uid2ProductDetails.cookieName); expect(cookie).toContain(`Domain=${cookieDomain};`); expect(cookie + ';').toContain(`Path=${newCookiePath};`); const configCookie = getConfigCookie(); @@ -508,18 +515,13 @@ describe('Store config UID2', () => { refreshRetryPeriod: 1000, useCookie: false, }; - const productDetails: ProductDetails = { - cookieName: '__uid2', - defaultBaseUrl: 'http://test-host', - localStorageKey: 'UID2-sdk-identity', - name: 'UID2', - }; + const previousOptions: SdkOptions = options; beforeEach(() => { localStorage.removeItem('UID2-sdk-identity_config'); document.cookie = - UID2.COOKIE_NAME + '_config' + '=;expires=Tue, 1 Jan 1980 23:59:59 GMT;path=/'; + uid2ProductDetails.cookieName + '_config' + '=;expires=Tue, 1 Jan 1980 23:59:59 GMT;path=/'; }); describe('when useCookie is true', () => { @@ -528,14 +530,14 @@ describe('Store config UID2', () => { const cookie = getConfigCookie(); expect(cookie).toBeInstanceOf(Object); expect(cookie).toHaveProperty('cookieDomain'); - const storageConfig = loadConfig(productDetails); + const storageConfig = getConfigStorage(); expect(storageConfig).toBeNull(); }); }); describe('when useCookie is false', () => { test('should store config in local storage', () => { uid2.init({ callback: callback, identity: identity, ...options }); - const storageConfig = loadConfig(productDetails); + const storageConfig = getConfigStorage(); expect(storageConfig).toBeInstanceOf(Object); expect(storageConfig).toHaveProperty('cookieDomain'); const cookie = getConfigCookie(); @@ -545,11 +547,11 @@ describe('Store config UID2', () => { describe('when useCookie is false', () => { test('can successfully clear the config in storage', () => { uid2.init({ callback: callback, identity: identity, ...options }); - let storageConfig = loadConfig(productDetails); + let storageConfig = loadConfig(uid2ProductDetails); expect(storageConfig).toBeInstanceOf(Object); expect(storageConfig).toHaveProperty('cookieDomain'); - removeConfig(previousOptions, productDetails); - storageConfig = loadConfig(productDetails); + removeConfig(previousOptions, uid2ProductDetails); + storageConfig = loadConfig(uid2ProductDetails); expect(storageConfig).toBeNull(); }); }); diff --git a/src/mocks.ts b/src/mocks.ts index 2a94d028..e546c9f3 100644 --- a/src/mocks.ts +++ b/src/mocks.ts @@ -1,13 +1,20 @@ import * as jsdom from 'jsdom'; import { Cookie } from 'tough-cookie'; -import { UID2 } from './uid2Sdk'; import { Identity } from './Identity'; import { base64ToBytes, bytesToBase64 } from './encoding/base64'; import * as crypto from 'crypto'; +import { ProductDetails } from './product'; const uid2LocalStorageKeyName = 'UID2-sdk-identity'; const euidLocalStorageKeyName = 'EUID-sdk-identity'; +const uid2ProductDetails: ProductDetails = { + name: 'UID2', + defaultBaseUrl: 'https://prod.uidapi.com', + localStorageKey: 'UID2-sdk-identity', + cookieName: '__uid_2', +}; + export class CookieMock { jar: jsdom.CookieJar; url: string; @@ -281,7 +288,7 @@ export function setCookieMock(document: Document) { } export function setUid2Cookie(value: any) { - document.cookie = UID2.COOKIE_NAME + '=' + encodeURIComponent(JSON.stringify(value)); + document.cookie = uid2ProductDetails.cookieName + '=' + encodeURIComponent(JSON.stringify(value)); } export function removeUid2Cookie() { @@ -304,7 +311,9 @@ export function setUid2(value: any, useCookie?: boolean) { export function getUid2Cookie() { const docCookie = document.cookie; if (docCookie) { - const payload = docCookie.split('; ').find((row) => row.startsWith(UID2.COOKIE_NAME + '=')); + const payload = docCookie + .split('; ') + .find((row) => row.startsWith(uid2ProductDetails.cookieName + '=')); if (payload) { return JSON.parse(decodeURIComponent(payload.split('=')[1])); } diff --git a/src/sdkBase.ts b/src/sdkBase.ts index 684f1725..dc1d9fd9 100644 --- a/src/sdkBase.ts +++ b/src/sdkBase.ts @@ -185,14 +185,6 @@ export abstract class SdkBase { return !this.isIdentityAvailable(); } - /** - * @deprecated in version 3.10.0. Will remove in June 2025. Use isIdentityAvailable() instead. - **/ - public hasIdentity() { - if (!this._initComplete) return undefined; - return !(this.isIdentityValid() || this._apiClient?.hasActiveRequests()); - } - public isIdentityAvailable() { return this.isIdentityValid() || this._apiClient?.hasActiveRequests(); } @@ -223,21 +215,6 @@ export abstract class SdkBase { }); } - // Note: This doesn't invoke callbacks. It's a hard, silent reset. - /** - * @deprecated abort() is deprecated in version 3.10.0. Will be removed in June 2025. Use disconnect() instead - */ - public abort(reason?: string) { - this._tokenPromiseHandler.rejectAllPromises( - reason ?? new Error(`${this._product.name} SDK aborted.`) - ); - if (this._refreshTimerId) { - clearTimeout(this._refreshTimerId); - this._refreshTimerId = null; - } - if (this._apiClient) this._apiClient.abortActiveRequests(); - } - private initInternal(opts: SdkOptions | unknown) { if (!isSDKOptionsOrThrow(opts)) throw new TypeError(`Options provided to ${this._product.name} init couldn't be validated.`); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index 0568aff1..885ed8b6 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -14,14 +14,6 @@ const productDetails: ProductDetails = { }; export class UID2 extends SdkBase { - private static cookieName = productDetails.cookieName; - // Deprecated. Integrators should never access the cookie directly! - static get COOKIE_NAME() { - console.warn( - 'Detected access to UID2.COOKIE_NAME. This is deprecated and will be removed in the future. Integrators should not access the cookie directly.' - ); - return UID2.cookieName; - } private static get Uid2Details(): ProductDetails { return productDetails; }