From b6c1b9bd5bcf85d016a6b57e2d24759f5309ce44 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 15 Aug 2024 13:13:26 -0600 Subject: [PATCH 01/14] added ability to load config if already initialized --- src/configManager.ts | 10 ++++------ src/integrationTests/options.test.ts | 8 ++++---- src/sdkBase.ts | 4 ++++ src/uid2Sdk.ts | 9 ++++++++- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/configManager.ts b/src/configManager.ts index 2a975d6..c379d6d 100644 --- a/src/configManager.ts +++ b/src/configManager.ts @@ -25,12 +25,10 @@ export const storeConfig = (options: SdkOptions, productDetails: ProductDetails) } }; -export const loadConfig = ( - options: SdkOptions, - productDetails: ProductDetails -): storedConfig | null => { - if (options.useCookie) { - return loadConfigFromCookie(productDetails); +export const loadConfig = (productDetails: ProductDetails): storedConfig | null => { + const configCookie = loadConfigFromCookie(productDetails); + if (configCookie) { + return configCookie; } else { return loadConfigFromLocalStorage(productDetails); } diff --git a/src/integrationTests/options.test.ts b/src/integrationTests/options.test.ts index 416b818..0553765 100644 --- a/src/integrationTests/options.test.ts +++ b/src/integrationTests/options.test.ts @@ -236,14 +236,14 @@ describe('Store config UID2', () => { const cookie = getConfigCookie(); expect(cookie).toBeInstanceOf(Object); expect(cookie).toHaveProperty('cookieDomain'); - const storageConfig = loadConfig(options, productDetails); + const storageConfig = loadConfig(productDetails); 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(options, productDetails); + const storageConfig = loadConfig(productDetails); expect(storageConfig).toBeInstanceOf(Object); expect(storageConfig).toHaveProperty('cookieDomain'); const cookie = getConfigCookie(); @@ -253,11 +253,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(options, productDetails); + let storageConfig = loadConfig(productDetails); expect(storageConfig).toBeInstanceOf(Object); expect(storageConfig).toHaveProperty('cookieDomain'); removeConfig(options, productDetails); - storageConfig = loadConfig(options, productDetails); + storageConfig = loadConfig(productDetails); expect(storageConfig).toBeNull(); }); }); diff --git a/src/sdkBase.ts b/src/sdkBase.ts index f2cee4e..3d67b72 100644 --- a/src/sdkBase.ts +++ b/src/sdkBase.ts @@ -139,6 +139,10 @@ export abstract class SdkBase { return !(this.isLoggedIn() || this._apiClient?.hasActiveRequests()); } + public isInitialized() { + return this._initComplete; + } + public hasOptedOut() { if (!this._initComplete) return undefined; return isOptoutIdentity(this._identity); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index ee759f1..0ef2aaf 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -8,6 +8,7 @@ import { isBase64Hash } from './hashedDii'; import { hashAndEncodeIdentifier, hashIdentifier } from './encoding/hash'; import { CallbackContainer, sdkAssertErrorText, SdkBase, SDKSetup } from './sdkBase'; import { ProductDetails } from './product'; +import { loadConfig } from './configManager'; export * from './exports'; @@ -38,7 +39,7 @@ export class UID2 extends SdkBase { ); return UID2.cookieName; } - private static get Uid2Details(): ProductDetails { + static get Uid2Details(): ProductDetails { return { name: 'UID2', defaultBaseUrl: 'https://prod.uidapi.com', @@ -113,6 +114,12 @@ export function __uid2InternalHandleScriptLoad() { window.__uid2 = new UID2(callbacks, callbackContainer); window.__uid2Helper = new UID2Helper(); if (callbackContainer.callback) callbackContainer.callback(); + if (window.__uid2 instanceof UID2 && window.__uid2.isInitialized()) { + const config = loadConfig(UID2.Uid2Details); + if (config) { + window.__uid2.init(config); + } + } } __uid2InternalHandleScriptLoad(); From e5175f0f397c85f87d242554d2f5d60a5fa78786 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 09:21:09 -0600 Subject: [PATCH 02/14] only product details needed for loadconfig --- src/integrationTests/options.test.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/integrationTests/options.test.ts b/src/integrationTests/options.test.ts index 54f64df..1b3c3cd 100644 --- a/src/integrationTests/options.test.ts +++ b/src/integrationTests/options.test.ts @@ -548,13 +548,8 @@ describe('Store config UID2', () => { let storageConfig = loadConfig(productDetails); expect(storageConfig).toBeInstanceOf(Object); expect(storageConfig).toHaveProperty('cookieDomain'); -<<<<<<< HEAD - removeConfig(options, productDetails); - storageConfig = loadConfig(productDetails); -======= removeConfig(previousOptions, productDetails); - storageConfig = loadConfig(options, productDetails); ->>>>>>> main + storageConfig = loadConfig(productDetails); expect(storageConfig).toBeNull(); }); }); From eb31bbca6cc39b84b1c234455a60c40001e7afda Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 09:27:14 -0600 Subject: [PATCH 03/14] remove duplicated isinitialized function --- src/sdkBase.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/sdkBase.ts b/src/sdkBase.ts index 19c20c0..c12bcfa 100644 --- a/src/sdkBase.ts +++ b/src/sdkBase.ts @@ -74,10 +74,6 @@ export abstract class SdkBase { this.initInternal(opts); } - public isInitialized() { - return this._initComplete; - } - private setInitComplete(isInitComplete: boolean) { this._initComplete = isInitComplete; } From d77f220c4d3ed7381932ca10b011c725df14e2f6 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 09:30:35 -0600 Subject: [PATCH 04/14] removed duplicate init completed functions --- src/sdkBase.ts | 8 ++------ src/uid2Sdk.ts | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/sdkBase.ts b/src/sdkBase.ts index c12bcfa..c5c9752 100644 --- a/src/sdkBase.ts +++ b/src/sdkBase.ts @@ -133,7 +133,7 @@ export abstract class SdkBase { return this._tokenPromiseHandler.createMaybeDeferredPromise(token ?? null); } - public initComplete(): boolean { + public isInitComplete(): boolean { return this._initComplete; } @@ -149,10 +149,6 @@ export abstract class SdkBase { return !(this.isLoggedIn() || this._apiClient?.hasActiveRequests()); } - public isInitialized() { - return this._initComplete; - } - public hasOptedOut() { if (!this._initComplete) return undefined; return isOptoutIdentity(this._identity); @@ -195,7 +191,7 @@ export abstract class SdkBase { throw new TypeError('Calling init() once aborted or disconnected is not allowed'); } - if (this.isInitialized()) { + if (this.isInitComplete()) { const previousOpts = { ...this._opts }; Object.assign(this._opts, opts); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index 288fa88..3ae0f6e 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -121,7 +121,7 @@ export function __uid2InternalHandleScriptLoad() { window.__uid2 = new UID2(callbacks, callbackContainer); window.__uid2Helper = new UID2Helper(); if (callbackContainer.callback) callbackContainer.callback(); - if (window.__uid2 instanceof UID2 && window.__uid2.isInitialized()) { + if (window.__uid2 instanceof UID2 && window.__uid2.isInitComplete()) { const config = loadConfig(UID2.Uid2Details); if (config) { window.__uid2.init(config); From 3a5d82ac6ecfe2ca066f567044df9e0b3be12fab Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 12:16:06 -0600 Subject: [PATCH 05/14] adding tests --- src/integrationTests/basic.test.ts | 47 ++++++++++++++++++++++++++++++ src/uid2Sdk.ts | 3 +- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/integrationTests/basic.test.ts b/src/integrationTests/basic.test.ts index d3beb8d..43d1de3 100644 --- a/src/integrationTests/basic.test.ts +++ b/src/integrationTests/basic.test.ts @@ -3,6 +3,9 @@ import { afterEach, beforeEach, describe, expect, jest, test } from '@jest/globa import * as mocks from '../mocks'; import { __uid2InternalHandleScriptLoad, sdkWindow, UID2 } from '../uid2Sdk'; import { CallbackHandler, EventType } from '../callbackManager'; +import { ProductDetails } from '../product'; +import { loadConfig } from '../configManager'; +import { error } from 'console'; let callback: any; let uid2: UID2; @@ -1061,3 +1064,47 @@ describe('Include sdk script multiple times', () => { expect(asyncCallback).toBeCalledWith(EventType.SdkLoaded, expect.anything()); }); }); + +describe('SDK bootstraps itself if init has already been completed', () => { + const makeIdentity = mocks.makeIdentityV2; + let asyncCallback: jest.Mock; + const debugOutput = false; + + asyncCallback = jest.fn((event, payload) => { + if (debugOutput) { + console.log('Async Callback Event:', event); + console.log('Payload:', payload); + } + }); + + beforeEach(() => { + sdkWindow.__uid2 = new UID2(); + }); + + test('sdk bootstraps with config after init has already been called', async () => { + const identity = { ...makeIdentity(), refresh_from: Date.now() + 100 }; + + uid2.init({ identity }); + + // mimicking closing the page + sdkWindow.__uid2 = undefined; + + __uid2InternalHandleScriptLoad(); + + expect(uid2.getAdvertisingToken()).toBe(identity.advertising_token); + expect(uid2.getIdentity()).toStrictEqual(identity); + // expect(() => uid2.setIdentityFromEmail('test@test.com', mocks.makeCstgOption())).not.toThrow( + // error + // ); + // expect(() => + // uid2.setIdentityFromEmailHash( + // 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', + // mocks.makeCstgOption() + // ) + // ).not.toThrow(error); + }); + + test('sdk does not bootstrap if no init has occurred', async () => { + __uid2InternalHandleScriptLoad(); + }); +}); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index 3ae0f6e..99c7444 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -121,10 +121,11 @@ export function __uid2InternalHandleScriptLoad() { window.__uid2 = new UID2(callbacks, callbackContainer); window.__uid2Helper = new UID2Helper(); if (callbackContainer.callback) callbackContainer.callback(); - if (window.__uid2 instanceof UID2 && window.__uid2.isInitComplete()) { + if (window.__uid2 instanceof UID2) { const config = loadConfig(UID2.Uid2Details); if (config) { window.__uid2.init(config); + console.log('bootstrapping'); } } } From bd2c9aa26b3de7c0b0db1a9ef0412c9ee18bc125 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 14:15:23 -0600 Subject: [PATCH 06/14] added tests and added euid functionality --- src/euidSdk.ts | 9 +++++- src/integrationTests/basic.test.ts | 36 +++++++++++------------ src/integrationTests/secureSignal.test.ts | 1 + src/uid2Sdk.ts | 1 - 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/euidSdk.ts b/src/euidSdk.ts index ec9c028..e0d7f19 100644 --- a/src/euidSdk.ts +++ b/src/euidSdk.ts @@ -2,6 +2,7 @@ import { EventType, CallbackHandler } from './callbackManager'; import { CallbackContainer, sdkAssertErrorText, SdkBase, SDKSetup } from './sdkBase'; import { ProductDetails } from './product'; import { UidSecureSignalProviderType } from './secureSignal_types'; +import { loadConfig } from './configManager'; export * from './exports'; @@ -14,7 +15,7 @@ export class EUID extends SdkBase { ); return EUID.cookieName; } - private static get EuidDetails(): ProductDetails { + static get EuidDetails(): ProductDetails { return { name: 'EUID', defaultBaseUrl: 'https://prod.euid.eu', @@ -69,6 +70,12 @@ export function __euidInternalHandleScriptLoad() { const callbackContainer: CallbackContainer = {}; window.__euid = new EUID(callbacks, callbackContainer); if (callbackContainer.callback) callbackContainer.callback(); + if (window.__uid2 instanceof EUID) { + const config = loadConfig(EUID.EuidDetails); + if (config) { + window.__uid2.init(config); + } + } } __euidInternalHandleScriptLoad(); diff --git a/src/integrationTests/basic.test.ts b/src/integrationTests/basic.test.ts index 43d1de3..797c8d0 100644 --- a/src/integrationTests/basic.test.ts +++ b/src/integrationTests/basic.test.ts @@ -1067,15 +1067,8 @@ describe('Include sdk script multiple times', () => { describe('SDK bootstraps itself if init has already been completed', () => { const makeIdentity = mocks.makeIdentityV2; - let asyncCallback: jest.Mock; - const debugOutput = false; - - asyncCallback = jest.fn((event, payload) => { - if (debugOutput) { - console.log('Async Callback Event:', event); - console.log('Payload:', payload); - } - }); + const email = 'test@test.com'; + const emailHash = 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs='; beforeEach(() => { sdkWindow.__uid2 = new UID2(); @@ -1086,25 +1079,30 @@ describe('SDK bootstraps itself if init has already been completed', () => { uid2.init({ identity }); - // mimicking closing the page + // mimicking closing the page, but not re-calling the UID2 constructor sdkWindow.__uid2 = undefined; __uid2InternalHandleScriptLoad(); expect(uid2.getAdvertisingToken()).toBe(identity.advertising_token); expect(uid2.getIdentity()).toStrictEqual(identity); - // expect(() => uid2.setIdentityFromEmail('test@test.com', mocks.makeCstgOption())).not.toThrow( - // error - // ); - // expect(() => - // uid2.setIdentityFromEmailHash( - // 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', - // mocks.makeCstgOption() - // ) - // ).not.toThrow(error); + expect(async () => { + await uid2.setIdentityFromEmail(email, mocks.makeCstgOption()); + }).not.toThrow(); + expect(async () => { + uid2.setIdentityFromEmailHash(emailHash, mocks.makeCstgOption()); + }).not.toThrow(); }); test('sdk does not bootstrap if no init has occurred', async () => { __uid2InternalHandleScriptLoad(); + expect(uid2.getAdvertisingToken()).toBe(undefined); + expect(uid2.getIdentity()).toStrictEqual(null); + expect(async () => { + await uid2.setIdentityFromEmail(email, mocks.makeCstgOption()); + }).rejects.toThrow(); + expect(async () => { + await uid2.setIdentityFromEmailHash(emailHash, mocks.makeCstgOption()); + }).rejects.toThrow(); }); }); diff --git a/src/integrationTests/secureSignal.test.ts b/src/integrationTests/secureSignal.test.ts index 9289e8a..a392c93 100644 --- a/src/integrationTests/secureSignal.test.ts +++ b/src/integrationTests/secureSignal.test.ts @@ -185,6 +185,7 @@ describe('Secure Signal Tests', () => { describe('When SDK initialized after both SDK and SS script loaded - UID2', () => { test('should send identity to Google ESP', async () => { + window.__uid2 = new UID2(); __uid2InternalHandleScriptLoad(); __uid2SSProviderScriptLoad(); (window.__uid2 as UID2).init({ identity }); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index 99c7444..9fe9106 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -125,7 +125,6 @@ export function __uid2InternalHandleScriptLoad() { const config = loadConfig(UID2.Uid2Details); if (config) { window.__uid2.init(config); - console.log('bootstrapping'); } } } From 4fe96c41ef81a10635349b43266153659681c213 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 14:17:03 -0600 Subject: [PATCH 07/14] euid instead of uid2 --- src/euidSdk.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/euidSdk.ts b/src/euidSdk.ts index e0d7f19..7bc3ebf 100644 --- a/src/euidSdk.ts +++ b/src/euidSdk.ts @@ -70,10 +70,10 @@ export function __euidInternalHandleScriptLoad() { const callbackContainer: CallbackContainer = {}; window.__euid = new EUID(callbacks, callbackContainer); if (callbackContainer.callback) callbackContainer.callback(); - if (window.__uid2 instanceof EUID) { + if (window.__euid instanceof EUID) { const config = loadConfig(EUID.EuidDetails); if (config) { - window.__uid2.init(config); + window.__euid.init(config); } } } From 3e424b5559144a50a39ca9da9bd38796ba078b62 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 14:17:36 -0600 Subject: [PATCH 08/14] removed unused imports in basic test file --- src/integrationTests/basic.test.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/integrationTests/basic.test.ts b/src/integrationTests/basic.test.ts index 797c8d0..263e4fc 100644 --- a/src/integrationTests/basic.test.ts +++ b/src/integrationTests/basic.test.ts @@ -3,9 +3,6 @@ import { afterEach, beforeEach, describe, expect, jest, test } from '@jest/globa import * as mocks from '../mocks'; import { __uid2InternalHandleScriptLoad, sdkWindow, UID2 } from '../uid2Sdk'; import { CallbackHandler, EventType } from '../callbackManager'; -import { ProductDetails } from '../product'; -import { loadConfig } from '../configManager'; -import { error } from 'console'; let callback: any; let uid2: UID2; From 4ca87a079c0ce3cd1d2b40e384475f57d77eee7c Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 14:23:00 -0600 Subject: [PATCH 09/14] improved test descriptions --- src/integrationTests/basic.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/integrationTests/basic.test.ts b/src/integrationTests/basic.test.ts index 263e4fc..18a0877 100644 --- a/src/integrationTests/basic.test.ts +++ b/src/integrationTests/basic.test.ts @@ -1071,7 +1071,7 @@ describe('SDK bootstraps itself if init has already been completed', () => { sdkWindow.__uid2 = new UID2(); }); - test('sdk bootstraps with config after init has already been called', async () => { + test('should bootstrap therefore public functions should return the correct values without calling init again', async () => { const identity = { ...makeIdentity(), refresh_from: Date.now() + 100 }; uid2.init({ identity }); @@ -1091,7 +1091,7 @@ describe('SDK bootstraps itself if init has already been completed', () => { }).not.toThrow(); }); - test('sdk does not bootstrap if no init has occurred', async () => { + test('should not bootstrap therefore public functions error or return undefined/null', async () => { __uid2InternalHandleScriptLoad(); expect(uid2.getAdvertisingToken()).toBe(undefined); expect(uid2.getIdentity()).toStrictEqual(null); From 7216cc09921d8ac60ac0e510128ff38893e70756 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Thu, 22 Aug 2024 17:16:45 -0600 Subject: [PATCH 10/14] changed product details variable source --- src/uid2Sdk.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index 9fe9106..82dd012 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -31,8 +31,15 @@ export class UID2Helper { } } +const productDetails: ProductDetails = { + name: 'UID2', + defaultBaseUrl: 'https://prod.uidapi.com', + localStorageKey: 'UID2-sdk-identity', + cookieName: '__uid_2', +}; + export class UID2 extends SdkBase { - private static cookieName = '__uid_2'; + private static cookieName = productDetails.cookieName; // Deprecated. Integrators should never access the cookie directly! static get COOKIE_NAME() { console.warn( @@ -40,13 +47,8 @@ export class UID2 extends SdkBase { ); return UID2.cookieName; } - static get Uid2Details(): ProductDetails { - return { - name: 'UID2', - defaultBaseUrl: 'https://prod.uidapi.com', - localStorageKey: 'UID2-sdk-identity', - cookieName: UID2.cookieName, - }; + private static get Uid2Details(): ProductDetails { + return productDetails; } static setupGoogleTag() { @@ -122,7 +124,7 @@ export function __uid2InternalHandleScriptLoad() { window.__uid2Helper = new UID2Helper(); if (callbackContainer.callback) callbackContainer.callback(); if (window.__uid2 instanceof UID2) { - const config = loadConfig(UID2.Uid2Details); + const config = loadConfig(productDetails); if (config) { window.__uid2.init(config); } From b75c3c2c766d85456fed76fd547324d98d65fdd2 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Fri, 23 Aug 2024 10:33:17 -0600 Subject: [PATCH 11/14] changed the euid pattern to match uid2 --- src/euidSdk.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/euidSdk.ts b/src/euidSdk.ts index 7bc3ebf..2ea137d 100644 --- a/src/euidSdk.ts +++ b/src/euidSdk.ts @@ -6,8 +6,15 @@ import { loadConfig } from './configManager'; export * from './exports'; +const productDetails: ProductDetails = { + name: 'EUID', + defaultBaseUrl: 'https://prod.euid.eu', + localStorageKey: 'EUID-sdk-identity', + cookieName: '__euid', +}; + export class EUID extends SdkBase { - private static cookieName = '__euid'; + private static cookieName = productDetails.cookieName; // Deprecated. Integrators should never access the cookie directly! static get COOKIE_NAME() { console.warn( @@ -16,12 +23,7 @@ export class EUID extends SdkBase { return EUID.cookieName; } static get EuidDetails(): ProductDetails { - return { - name: 'EUID', - defaultBaseUrl: 'https://prod.euid.eu', - localStorageKey: 'EUID-sdk-identity', - cookieName: EUID.cookieName, - }; + return productDetails; } static setupGoogleTag() { @@ -71,7 +73,7 @@ export function __euidInternalHandleScriptLoad() { window.__euid = new EUID(callbacks, callbackContainer); if (callbackContainer.callback) callbackContainer.callback(); if (window.__euid instanceof EUID) { - const config = loadConfig(EUID.EuidDetails); + const config = loadConfig(productDetails); if (config) { window.__euid.init(config); } From f69aaf10679a3081fb7647df662b8b66747c6f7f Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Fri, 23 Aug 2024 10:48:59 -0600 Subject: [PATCH 12/14] put uid2 reset in beforeeach call for this test --- src/integrationTests/secureSignal.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/integrationTests/secureSignal.test.ts b/src/integrationTests/secureSignal.test.ts index a392c93..6bb4484 100644 --- a/src/integrationTests/secureSignal.test.ts +++ b/src/integrationTests/secureSignal.test.ts @@ -184,8 +184,10 @@ describe('Secure Signal Tests', () => { }); describe('When SDK initialized after both SDK and SS script loaded - UID2', () => { - test('should send identity to Google ESP', async () => { + beforeEach(() => { window.__uid2 = new UID2(); + }); + test('should send identity to Google ESP', async () => { __uid2InternalHandleScriptLoad(); __uid2SSProviderScriptLoad(); (window.__uid2 as UID2).init({ identity }); From 129e3bb680043c3aec7f3ed366d0c49c9000565a Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Fri, 23 Aug 2024 10:57:12 -0600 Subject: [PATCH 13/14] extracted bootstrap into its own function --- src/euidSdk.ts | 16 ++++++++++------ src/uid2Sdk.ts | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/euidSdk.ts b/src/euidSdk.ts index 2ea137d..3f1ae07 100644 --- a/src/euidSdk.ts +++ b/src/euidSdk.ts @@ -62,6 +62,15 @@ export function assertEUID(sdk: typeof window.__euid): asserts sdk is EUID { if (!(sdk instanceof EUID)) throw new Error(sdkAssertErrorText('EUID', 'assertEUID')); } +function bootStrapInit() { + if (window.__euid instanceof EUID) { + const config = loadConfig(productDetails); + if (config) { + window.__euid.init(config); + } + } +} + export function __euidInternalHandleScriptLoad() { if (window.__euid && 'init' in window.__euid) { // This has already been run @@ -72,12 +81,7 @@ export function __euidInternalHandleScriptLoad() { const callbackContainer: CallbackContainer = {}; window.__euid = new EUID(callbacks, callbackContainer); if (callbackContainer.callback) callbackContainer.callback(); - if (window.__euid instanceof EUID) { - const config = loadConfig(productDetails); - if (config) { - window.__euid.init(config); - } - } + bootStrapInit(); } __euidInternalHandleScriptLoad(); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index 82dd012..bb69c41 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -112,6 +112,15 @@ export function assertUID2(sdk: typeof window.__uid2): asserts sdk is UID2 { if (!(sdk instanceof UID2)) throw new Error(sdkAssertErrorText('UID2', 'assertUID2')); } +function bootStrapInit() { + if (window.__uid2 instanceof UID2) { + const config = loadConfig(productDetails); + if (config) { + window.__uid2.init(config); + } + } +} + export function __uid2InternalHandleScriptLoad() { if (window.__uid2 && 'init' in window.__uid2) { // This has already been run @@ -123,12 +132,7 @@ export function __uid2InternalHandleScriptLoad() { window.__uid2 = new UID2(callbacks, callbackContainer); window.__uid2Helper = new UID2Helper(); if (callbackContainer.callback) callbackContainer.callback(); - if (window.__uid2 instanceof UID2) { - const config = loadConfig(productDetails); - if (config) { - window.__uid2.init(config); - } - } + bootStrapInit(); } __uid2InternalHandleScriptLoad(); From 043e89ec4a2704374dd42201097a1d582a79b43f Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Mon, 26 Aug 2024 16:06:41 -0600 Subject: [PATCH 14/14] fixed bootstrap casing --- src/euidSdk.ts | 4 ++-- src/uid2Sdk.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/euidSdk.ts b/src/euidSdk.ts index 3f1ae07..8a1d413 100644 --- a/src/euidSdk.ts +++ b/src/euidSdk.ts @@ -62,7 +62,7 @@ export function assertEUID(sdk: typeof window.__euid): asserts sdk is EUID { if (!(sdk instanceof EUID)) throw new Error(sdkAssertErrorText('EUID', 'assertEUID')); } -function bootStrapInit() { +function bootstrapInit() { if (window.__euid instanceof EUID) { const config = loadConfig(productDetails); if (config) { @@ -81,7 +81,7 @@ export function __euidInternalHandleScriptLoad() { const callbackContainer: CallbackContainer = {}; window.__euid = new EUID(callbacks, callbackContainer); if (callbackContainer.callback) callbackContainer.callback(); - bootStrapInit(); + bootstrapInit(); } __euidInternalHandleScriptLoad(); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index bb69c41..718aad1 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -112,7 +112,7 @@ export function assertUID2(sdk: typeof window.__uid2): asserts sdk is UID2 { if (!(sdk instanceof UID2)) throw new Error(sdkAssertErrorText('UID2', 'assertUID2')); } -function bootStrapInit() { +function bootstrapInit() { if (window.__uid2 instanceof UID2) { const config = loadConfig(productDetails); if (config) { @@ -132,7 +132,7 @@ export function __uid2InternalHandleScriptLoad() { window.__uid2 = new UID2(callbacks, callbackContainer); window.__uid2Helper = new UID2Helper(); if (callbackContainer.callback) callbackContainer.callback(); - bootStrapInit(); + bootstrapInit(); } __uid2InternalHandleScriptLoad();