From f95bbbca442878cda5657eeed66cffca691140d3 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Tue, 12 Nov 2024 23:02:26 -0700 Subject: [PATCH 1/7] move phone number function to sdkbase --- src/sdkBase.ts | 25 ++++++++++++++++++++++++- src/uid2Sdk.ts | 28 ---------------------------- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/src/sdkBase.ts b/src/sdkBase.ts index 980c651f..a238d656 100644 --- a/src/sdkBase.ts +++ b/src/sdkBase.ts @@ -9,7 +9,7 @@ import { ClientSideIdentityOptions, isClientSideIdentityOptionsOrThrow, } from './clientSideIdentityOptions'; -import { normalizeEmail } from './diiNormalization'; +import { isNormalizedPhone, normalizeEmail } from './diiNormalization'; import { isBase64Hash } from './hashedDii'; import { PromiseHandler } from './promiseHandler'; import { StorageManager } from './storageManager'; @@ -108,6 +108,29 @@ export abstract class SdkBase { await this.callCstgAndSetIdentity({ emailHash: emailHash }, opts); } + public async setIdentityFromPhone(phone: string, opts: ClientSideIdentityOptions) { + this.throwIfInitNotComplete('Cannot set identity before calling init.'); + isClientSideIdentityOptionsOrThrow(opts, this._product.name); + + if (!isNormalizedPhone(phone)) { + throw new Error('Invalid phone number'); + } + + const phoneHash = await hashAndEncodeIdentifier(phone); + await this.callCstgAndSetIdentity({ phoneHash: phoneHash }, opts); + } + + public async setIdentityFromPhoneHash(phoneHash: string, opts: ClientSideIdentityOptions) { + this.throwIfInitNotComplete('Cannot set identity before calling init.'); + isClientSideIdentityOptionsOrThrow(opts, this._product.name); + + if (!isBase64Hash(phoneHash)) { + throw new Error('Invalid hash'); + } + + await this.callCstgAndSetIdentity({ phoneHash: phoneHash }, opts); + } + public setIdentity(identity: Identity | OptoutIdentity) { if (this._apiClient) this._apiClient.abortActiveRequests(); const validatedIdentity = this.validateAndSetIdentity(identity); diff --git a/src/uid2Sdk.ts b/src/uid2Sdk.ts index 718aad18..4f101b4e 100644 --- a/src/uid2Sdk.ts +++ b/src/uid2Sdk.ts @@ -1,10 +1,5 @@ import { EventType, CallbackHandler } from './callbackManager'; -import { - ClientSideIdentityOptions, - isClientSideIdentityOptionsOrThrow, -} from './clientSideIdentityOptions'; import { isNormalizedPhone, normalizeEmail } from './diiNormalization'; -import { isBase64Hash } from './hashedDii'; import { hashAndEncodeIdentifier, hashIdentifier } from './encoding/hash'; import { CallbackContainer, sdkAssertErrorText, SdkBase, SDKSetup } from './sdkBase'; import { ProductDetails } from './product'; @@ -75,29 +70,6 @@ export class UID2 extends SdkBase { callbackContainer.callback = runCallbacks; } } - - public async setIdentityFromPhone(phone: string, opts: ClientSideIdentityOptions) { - this.throwIfInitNotComplete('Cannot set identity before calling init.'); - isClientSideIdentityOptionsOrThrow(opts, this._product.name); - - if (!isNormalizedPhone(phone)) { - throw new Error('Invalid phone number'); - } - - const phoneHash = await hashAndEncodeIdentifier(phone); - await this.callCstgAndSetIdentity({ phoneHash: phoneHash }, opts); - } - - public async setIdentityFromPhoneHash(phoneHash: string, opts: ClientSideIdentityOptions) { - this.throwIfInitNotComplete('Cannot set identity before calling init.'); - isClientSideIdentityOptionsOrThrow(opts, this._product.name); - - if (!isBase64Hash(phoneHash)) { - throw new Error('Invalid hash'); - } - - await this.callCstgAndSetIdentity({ phoneHash: phoneHash }, opts); - } } declare global { From 62dd3881f4a9bab3fc8bc1f38f8fbace7868a64d Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Tue, 12 Nov 2024 23:59:01 -0700 Subject: [PATCH 2/7] updating uid2 or euid options for tests --- src/integrationTests/basic.test.ts | 34 +++- .../clientSideTokenGeneration.test.ts | 158 ++++++++++++++---- src/mocks.ts | 34 +++- src/unitTests/uid2Sdk.test.ts | 16 +- 4 files changed, 191 insertions(+), 51 deletions(-) diff --git a/src/integrationTests/basic.test.ts b/src/integrationTests/basic.test.ts index 1ca2ba6e..90310024 100644 --- a/src/integrationTests/basic.test.ts +++ b/src/integrationTests/basic.test.ts @@ -1048,6 +1048,8 @@ describe('SDK bootstraps itself if init has already been completed', () => { const makeIdentity = mocks.makeIdentityV2; const email = 'test@test.com'; const emailHash = 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs='; + const phone = '+12345678901'; + const phoneHash = '10e6f0b47054a83359477dcb35231db6de5c69fb1816e1a6b98e192de9e5b9ee'; beforeEach(() => { sdkWindow.__uid2 = new UID2(); @@ -1066,10 +1068,16 @@ describe('SDK bootstraps itself if init has already been completed', () => { expect(uid2.getAdvertisingToken()).toBe(identity.advertising_token); expect(uid2.getIdentity()).toStrictEqual(identity); expect(async () => { - await uid2.setIdentityFromEmail(email, mocks.makeCstgOption()); + await uid2.setIdentityFromEmail(email, mocks.makeUid2CstgOption()); }).not.toThrow(); expect(async () => { - uid2.setIdentityFromEmailHash(emailHash, mocks.makeCstgOption()); + uid2.setIdentityFromEmailHash(emailHash, mocks.makeUid2CstgOption()); + }).not.toThrow(); + expect(async () => { + await uid2.setIdentityFromPhone(phone, mocks.makeUid2CstgOption()); + }).not.toThrow(); + expect(async () => { + uid2.setIdentityFromPhoneHash(phoneHash, mocks.makeUid2CstgOption()); }).not.toThrow(); }); @@ -1078,10 +1086,16 @@ describe('SDK bootstraps itself if init has already been completed', () => { expect(uid2.getAdvertisingToken()).toBe(undefined); expect(uid2.getIdentity()).toStrictEqual(null); expect(async () => { - await uid2.setIdentityFromEmail(email, mocks.makeCstgOption()); + await uid2.setIdentityFromEmail(email, mocks.makeUid2CstgOption()); + }).rejects.toThrow(); + expect(async () => { + await uid2.setIdentityFromEmailHash(emailHash, mocks.makeUid2CstgOption()); }).rejects.toThrow(); expect(async () => { - await uid2.setIdentityFromEmailHash(emailHash, mocks.makeCstgOption()); + await uid2.setIdentityFromPhone(phone, mocks.makeUid2CstgOption()); + }).rejects.toThrow(); + expect(async () => { + await uid2.setIdentityFromPhoneHash(phoneHash, mocks.makeUid2CstgOption()); }).rejects.toThrow(); }); }); @@ -1090,6 +1104,8 @@ describe('Token retrieval and related public functions working without init', () const makeIdentity = mocks.makeIdentityV2; const email = 'test@test.com'; const emailHash = 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs='; + const phone = '+12345678901'; + const phoneHash = '10e6f0b47054a83359477dcb35231db6de5c69fb1816e1a6b98e192de9e5b9ee'; test('should be able to find identity set without init', async () => { const identity = { ...makeIdentity(), refresh_from: Date.now() + 100 }; @@ -1110,10 +1126,16 @@ describe('Token retrieval and related public functions working without init', () expect(uid2.getIdentity()).toStrictEqual(identity); expect(uid2.getAdvertisingTokenAsync()).resolves.toBe(identity.advertising_token); expect(async () => { - await uid2.setIdentityFromEmail(email, mocks.makeCstgOption()); + await uid2.setIdentityFromEmail(email, mocks.makeUid2CstgOption()); + }).rejects.toThrow(); + expect(async () => { + await uid2.setIdentityFromEmailHash(emailHash, mocks.makeUid2CstgOption()); + }).rejects.toThrow(); + expect(async () => { + await uid2.setIdentityFromPhone(phone, mocks.makeUid2CstgOption()); }).rejects.toThrow(); expect(async () => { - await uid2.setIdentityFromEmailHash(emailHash, mocks.makeCstgOption()); + await uid2.setIdentityFromPhoneHash(phoneHash, mocks.makeUid2CstgOption()); }).rejects.toThrow(); functions.removeIdentity(); }); diff --git a/src/integrationTests/clientSideTokenGeneration.test.ts b/src/integrationTests/clientSideTokenGeneration.test.ts index fac23fec..c84450c6 100644 --- a/src/integrationTests/clientSideTokenGeneration.test.ts +++ b/src/integrationTests/clientSideTokenGeneration.test.ts @@ -3,11 +3,15 @@ import { NAME_CURVE } from '../mocks'; import { base64ToBytes, bytesToBase64 } from '../encoding/base64'; import { EventType } from '../callbackManager'; import { sdkWindow, UID2 } from '../uid2Sdk'; +import { EUID } from '../euidSdk'; let uid2: UID2; +let euid: EUID; +let uid2OrEuid: UID2 | EUID; let xhrMock: any; let serverKeyPair: CryptoKeyPair; -let serverPublicKey: string; +let serverPublicKeyUid2: string; +let serverPublicKeyEuid: string; mocks.setupFakeTime(); @@ -22,13 +26,15 @@ beforeAll(async () => { ); const serverPubKeyArray = await crypto.subtle.exportKey('spki', serverKeyPair.publicKey); - serverPublicKey = `UID2-X-L-` + bytesToBase64(new Uint8Array(serverPubKeyArray)); + serverPublicKeyUid2 = `UID2-X-L-` + bytesToBase64(new Uint8Array(serverPubKeyArray)); + serverPublicKeyEuid = `EUID-X-L-` + bytesToBase64(new Uint8Array(serverPubKeyArray)); }); beforeEach(() => { xhrMock = new mocks.XhrMock(sdkWindow); mocks.setCookieMock(sdkWindow.document); removeUid2LocalStorage(); + removeEuidLocalStorage(); }); afterEach(() => { @@ -36,39 +42,88 @@ afterEach(() => { }); const removeUid2LocalStorage = mocks.removeUid2LocalStorage; +const removeEuidLocalStorage = mocks.removeEuidLocalStorage; describe('Client-side token generation Tests', () => { const scenarios = [ { name: 'setIdentityFromEmail', - setInvalidIdentity: () => uid2.setIdentityFromEmail('test.com', mocks.makeCstgOption()), + identityType: 'uid2', + setInvalidIdentity: () => uid2.setIdentityFromEmail('test.com', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => - uid2.setIdentityFromEmail('test@example.com', mocks.makeCstgOption({ serverPublicKey })), + uid2.setIdentityFromEmail( + 'test@example.com', + mocks.makeUid2CstgOption({ serverPublicKey }) + ), }, { name: 'setIdentityFromEmailHash', + identityType: 'uid2', setInvalidIdentity: () => - uid2.setIdentityFromEmailHash('test@example.com', mocks.makeCstgOption()), + uid2.setIdentityFromEmailHash('test@example.com', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => uid2.setIdentityFromEmailHash( 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', - mocks.makeCstgOption({ serverPublicKey }) + mocks.makeUid2CstgOption({ serverPublicKey }) ), }, { name: 'setIdentityFromPhone', - setInvalidIdentity: () => uid2.setIdentityFromPhone('12345678910', mocks.makeCstgOption()), + identityType: 'uid2', + setInvalidIdentity: () => + uid2.setIdentityFromPhone('12345678910', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => - uid2.setIdentityFromPhone('+12345678910', mocks.makeCstgOption({ serverPublicKey })), + uid2.setIdentityFromPhone('+12345678910', mocks.makeUid2CstgOption({ serverPublicKey })), }, { name: 'setIdentityFromPhoneHash', + identityType: 'uid2', setInvalidIdentity: () => - uid2.setIdentityFromPhoneHash('+12345678910', mocks.makeCstgOption()), + uid2.setIdentityFromPhoneHash('+12345678910', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => uid2.setIdentityFromPhoneHash( 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=', - mocks.makeCstgOption({ serverPublicKey }) + mocks.makeUid2CstgOption({ serverPublicKey }) + ), + }, + { + name: 'setIdentityFromEmail', + identityType: 'euid', + setInvalidIdentity: () => euid.setIdentityFromEmail('test.com', mocks.makeEuidCstgOption()), + setIdentity: (serverPublicKey?: string) => + euid.setIdentityFromEmail( + 'test@example.com', + mocks.makeEuidCstgOption({ serverPublicKey }) + ), + }, + { + name: 'setIdentityFromEmailHash', + identityType: 'euid', + setInvalidIdentity: () => + euid.setIdentityFromEmailHash('test@example.com', mocks.makeEuidCstgOption()), + setIdentity: (serverPublicKey?: string) => + euid.setIdentityFromEmailHash( + 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', + mocks.makeEuidCstgOption({ serverPublicKey }) + ), + }, + { + name: 'setIdentityFromPhone', + identityType: 'euid', + setInvalidIdentity: () => + euid.setIdentityFromPhone('12345678910', mocks.makeEuidCstgOption()), + setIdentity: (serverPublicKey?: string) => + euid.setIdentityFromPhone('+12345678910', mocks.makeEuidCstgOption({ serverPublicKey })), + }, + { + name: 'setIdentityFromPhoneHash', + identityType: 'euid', + setInvalidIdentity: () => + euid.setIdentityFromPhoneHash('+12345678910', mocks.makeEuidCstgOption()), + setIdentity: (serverPublicKey?: string) => + euid.setIdentityFromPhoneHash( + 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=', + mocks.makeEuidCstgOption({ serverPublicKey }) ), }, ]; @@ -76,8 +131,15 @@ describe('Client-side token generation Tests', () => { scenarios.forEach((scenario) => { describe(scenario.name, () => { beforeEach(() => { - uid2 = new UID2(); - uid2.init({}); + if (scenario.identityType === 'uid2') { + uid2 = new UID2(); + uid2.init({}); + uid2OrEuid = uid2; + } else if (scenario.identityType === 'euid') { + euid = new EUID(); + euid.init({}); + uid2OrEuid = euid; + } }); describe('When invalid identity is provided', () => { @@ -107,27 +169,37 @@ describe('Client-side token generation Tests', () => { }); test('should invoke the callback when token is generated', (done) => { - uid2.callbacks.push((eventType, payload) => { + uid2OrEuid.callbacks.push((eventType, payload) => { if (eventType === EventType.IdentityUpdated) { expect(payload.identity).toEqual(cstgToken); done(); } }); - scenario.setIdentity(serverPublicKey); + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); }); test('should set identity to storage', async () => { - await scenario.setIdentity(serverPublicKey); - expect(mocks.getUid2()).toEqual(cstgToken); + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); + scenario.identityType === 'uid2' + ? expect(mocks.getUid2()).toEqual(cstgToken) + : expect(mocks.getEuid()).toEqual(cstgToken); }); - test('UID2 should be in available state', async () => { - await scenario.setIdentity(serverPublicKey); - (expect(uid2) as any).toBeInAvailableState(cstgToken.advertising_token); + test('UID2 or EUID should be in available state', async () => { + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); + (expect(uid2OrEuid) as any).toBeInAvailableState(cstgToken.advertising_token); }); test('should refresh token when generated token requires a refresh', async () => { - await scenario.setIdentity(serverPublicKey); + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); const refreshedToken = { ...mocks.makeIdentityV2(), advertising_token: 'refreshed_token', @@ -135,7 +207,9 @@ describe('Client-side token generation Tests', () => { jest.setSystemTime(refreshFrom); jest.runOnlyPendingTimers(); xhrMock.sendIdentityInEncodedResponse(refreshedToken, cstgToken.refresh_response_key); - expect(await uid2!.getAdvertisingTokenAsync()).toBe(refreshedToken.advertising_token); + expect(await uid2OrEuid!.getAdvertisingTokenAsync()).toBe( + refreshedToken.advertising_token + ); }); }); @@ -152,16 +226,22 @@ describe('Client-side token generation Tests', () => { }); }); test('should not set identity', async () => { - await expect(scenario.setIdentity(serverPublicKey)).rejects.toEqual( - 'Client error: Here is a client error' - ); - expect(mocks.getUid2()).toBeNull(); + await expect( + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ) + ).rejects.toEqual('Client error: Here is a client error'); + scenario.identityType === 'uid2' + ? expect(mocks.getUid2()).toBeNull() + : expect(mocks.getEuid()).toBeNull(); }); test('should be in unavailable state', async () => { - await expect(scenario.setIdentity(serverPublicKey)).rejects.toEqual( - 'Client error: Here is a client error' - ); - (expect(uid2) as any).toBeInUnavailableState(); + await expect( + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ) + ).rejects.toEqual('Client error: Here is a client error'); + (expect(uid2OrEuid) as any).toBeInUnavailableState(); }); }); @@ -178,28 +258,34 @@ describe('Client-side token generation Tests', () => { ); }); }); - test('UID2 should be in optout state', async () => { - await scenario.setIdentity(serverPublicKey); - (expect(uid2) as any).toBeInOptoutState(); + test('UID2 or EUID should be in optout state', async () => { + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); + (expect(uid2OrEuid) as any).toBeInOptoutState(); }); test('The callback should be called with no identity', (done) => { - uid2.callbacks.push((eventType, payload) => { + uid2OrEuid.callbacks.push((eventType, payload) => { if (eventType === EventType.IdentityUpdated) { expect(payload.identity).toBeNull(); done(); } }); - scenario.setIdentity(serverPublicKey); + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); }); test('The callback should be called with an optout event', (done) => { - uid2.callbacks.push((eventType, payload) => { + uid2OrEuid.callbacks.push((eventType, payload) => { if (eventType === EventType.OptoutReceived) { done(); } }); - scenario.setIdentity(serverPublicKey); + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); }); }); }); diff --git a/src/mocks.ts b/src/mocks.ts index ee334fcc..2a94d028 100644 --- a/src/mocks.ts +++ b/src/mocks.ts @@ -6,6 +6,7 @@ import { base64ToBytes, bytesToBase64 } from './encoding/base64'; import * as crypto from 'crypto'; const uid2LocalStorageKeyName = 'UID2-sdk-identity'; +const euidLocalStorageKeyName = 'EUID-sdk-identity'; export class CookieMock { jar: jsdom.CookieJar; @@ -325,6 +326,14 @@ export function getUid2LocalStorage() { return value !== null ? JSON.parse(value) : null; } +export function getEuid(useCookie?: boolean) { + return useCookie ? getEuidCookie() : getEuidLocalStorage(); +} + +export function setEuid(value: any, useCookie?: boolean) { + return useCookie ? setEuidCookie(value) : setEuidLocalStorage(value); +} + export function setEuidCookie(value: any) { document.cookie = '__euid' + '=' + encodeURIComponent(JSON.stringify(value)); } @@ -339,6 +348,20 @@ export function getEuidCookie() { } } +export function removeEuidLocalStorage() { + localStorage.removeItem(euidLocalStorageKeyName); +} + +export function setEuidLocalStorage(identity: any) { + const value = JSON.stringify(identity); + localStorage.setItem(euidLocalStorageKeyName, value); +} + +export function getEuidLocalStorage() { + const value = localStorage.getItem(euidLocalStorageKeyName); + return value !== null ? JSON.parse(value) : null; +} + export function makeIdentityV1(overrides?: any) { return { advertising_token: 'test_advertising_token', @@ -362,7 +385,7 @@ export function makeIdentityV2(overrides = {}) { }; } -export function makeCstgOption(overrides?: any) { +export function makeUid2CstgOption(overrides?: any) { return { serverPublicKey: 'UID2-X-L-24B8a/eLYBmRkXA9yPgRZt+ouKbXewG2OPs23+ov3JC8mtYJBCx6AxGwJ4MlwUcguebhdDp2CvzsCgS9ogwwGA==', @@ -371,6 +394,15 @@ export function makeCstgOption(overrides?: any) { }; } +export function makeEuidCstgOption(overrides?: any) { + return { + serverPublicKey: + 'EUID-X-L-24B8a/eLYBmRkXA9yPgRZt+ouKbXewG2OPs23+ov3JC8mtYJBCx6AxGwJ4MlwUcguebhdDp2CvzsCgS9ogwwGA==', + subscriptionId: 'subscription-id', + ...(overrides || {}), + }; +} + export function resetCrypto(window: Window) { Object.defineProperty(window, 'crypto', { get() { diff --git a/src/unitTests/uid2Sdk.test.ts b/src/unitTests/uid2Sdk.test.ts index 86a9a369..863efb50 100644 --- a/src/unitTests/uid2Sdk.test.ts +++ b/src/unitTests/uid2Sdk.test.ts @@ -1,4 +1,4 @@ -import { makeCstgOption } from '../mocks'; +import { makeUid2CstgOption } from '../mocks'; import { isClientSideIdentityOptionsOrThrow } from '../clientSideIdentityOptions'; import { UID2 } from '../uid2Sdk'; @@ -13,7 +13,7 @@ describe('#uid2Sdk', () => { describe('When setIdentity is called before init', () => { test('should throw init not complete error', async () => { try { - await uid2.setIdentityFromEmail('test@123.com', makeCstgOption()); + await uid2.setIdentityFromEmail('test@123.com', makeUid2CstgOption()); fail('Expected an error to be thrown'); } catch (err: unknown) { expect(err).toBeInstanceOf(Error); @@ -30,13 +30,13 @@ describe('#uid2Sdk', () => { }); test('should throw serverPublicKey must be a string error when serverPublicKey is not a string', () => { expect(() => - isClientSideIdentityOptionsOrThrow(makeCstgOption({ serverPublicKey: {} }), 'UID2') + isClientSideIdentityOptionsOrThrow(makeUid2CstgOption({ serverPublicKey: {} }), 'UID2') ).toThrow('opts.serverPublicKey must be a string'); }); test('should throw serverPublicKey prefix when serverPublicKey is invalid', () => { expect(() => isClientSideIdentityOptionsOrThrow( - makeCstgOption({ serverPublicKey: 'test-server-public-key' }), + makeUid2CstgOption({ serverPublicKey: 'test-server-public-key' }), 'UID2' ) ).toThrow('opts.serverPublicKey must match the regular expression /^UID2-X-[A-Z]-.+/'); @@ -44,23 +44,23 @@ describe('#uid2Sdk', () => { test('should throw serverPublicKey prefix (EUID) when serverPublicKey is invalid', () => { expect(() => isClientSideIdentityOptionsOrThrow( - makeCstgOption({ serverPublicKey: 'test-server-public-key' }), + makeUid2CstgOption({ serverPublicKey: 'test-server-public-key' }), 'EUID' ) ).toThrow('opts.serverPublicKey must match the regular expression /^EUID-X-[A-Z]-.+/'); }); test('should throw subscriptionId must be a string error when subscriptionId is not a string', () => { expect(() => - isClientSideIdentityOptionsOrThrow(makeCstgOption({ subscriptionId: {} }), 'UID2') + isClientSideIdentityOptionsOrThrow(makeUid2CstgOption({ subscriptionId: {} }), 'UID2') ).toThrow('opts.subscriptionId must be a string'); }); test('should throw subscriptionId is empty error when subscriptionId is not given', () => { expect(() => - isClientSideIdentityOptionsOrThrow(makeCstgOption({ subscriptionId: '' }), 'UID2') + isClientSideIdentityOptionsOrThrow(makeUid2CstgOption({ subscriptionId: '' }), 'UID2') ).toThrow('opts.subscriptionId is empty'); }); test('should succeed when given a valid object', () => { - expect(isClientSideIdentityOptionsOrThrow(makeCstgOption())).toBe(true); + expect(isClientSideIdentityOptionsOrThrow(makeUid2CstgOption())).toBe(true); }); }); }); From 5a40dc2279ad1855db6523925fd81ad61a56ac83 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Wed, 13 Nov 2024 00:15:48 -0700 Subject: [PATCH 3/7] euid public key --- 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 90310024..9a303aa6 100644 --- a/src/integrationTests/basic.test.ts +++ b/src/integrationTests/basic.test.ts @@ -1049,7 +1049,7 @@ describe('SDK bootstraps itself if init has already been completed', () => { const email = 'test@test.com'; const emailHash = 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs='; const phone = '+12345678901'; - const phoneHash = '10e6f0b47054a83359477dcb35231db6de5c69fb1816e1a6b98e192de9e5b9ee'; + const phoneHash = 'EObwtHBUqDNZR33LNSMdtt5cafsYFuGmuY4ZLenlue4='; beforeEach(() => { sdkWindow.__uid2 = new UID2(); @@ -1105,7 +1105,7 @@ describe('Token retrieval and related public functions working without init', () const email = 'test@test.com'; const emailHash = 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs='; const phone = '+12345678901'; - const phoneHash = '10e6f0b47054a83359477dcb35231db6de5c69fb1816e1a6b98e192de9e5b9ee'; + const phoneHash = 'EObwtHBUqDNZR33LNSMdtt5cafsYFuGmuY4ZLenlue4='; test('should be able to find identity set without init', async () => { const identity = { ...makeIdentity(), refresh_from: Date.now() + 100 }; From 66756e77c3d5441bcdd04c82b33ee125f0afebe8 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Wed, 13 Nov 2024 00:18:57 -0700 Subject: [PATCH 4/7] updated make cstg option --- src/unitTests/uid2ApiClient.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/unitTests/uid2ApiClient.test.ts b/src/unitTests/uid2ApiClient.test.ts index 0e46465b..0039fd39 100644 --- a/src/unitTests/uid2ApiClient.test.ts +++ b/src/unitTests/uid2ApiClient.test.ts @@ -1,8 +1,7 @@ -import { NAME_CURVE, XhrMock, makeCstgOption, makeIdentityV2 } from '../mocks'; +import { NAME_CURVE, XhrMock, makeUid2CstgOption, makeIdentityV2 } from '../mocks'; import { SuccessCstgResult, ApiClient } from '../apiClient'; import { base64ToBytes, bytesToBase64 } from '../encoding/base64'; import { sdkWindow } from '../uid2Sdk'; -import { Identity } from '../Identity'; describe('UID2 API client tests', () => { let uid2ApiClient: ApiClient; @@ -33,7 +32,7 @@ describe('UID2 API client tests', () => { const makeCstgApiCall = async () => { return uid2ApiClient.callCstgApi( { emailHash: 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=' }, - makeCstgOption({ serverPublicKey }) + makeUid2CstgOption({ serverPublicKey }) ); }; @@ -70,7 +69,7 @@ describe('UID2 API client tests', () => { await expect( uid2ApiClient.callCstgApi( { emailHash: 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=' }, - makeCstgOption({ serverPublicKey }) + makeUid2CstgOption({ serverPublicKey }) ) ).rejects.toContain('API error: Response body was invalid for HTTP status 200:'); }); From 63aed0e3a353cdfd308dcf4398ef8c473043c2aa Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Wed, 13 Nov 2024 00:39:09 -0700 Subject: [PATCH 5/7] identity type no longer needed --- .../clientSideTokenGeneration.test.ts | 80 ++++++++----------- 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/src/integrationTests/clientSideTokenGeneration.test.ts b/src/integrationTests/clientSideTokenGeneration.test.ts index c84450c6..76d0d27f 100644 --- a/src/integrationTests/clientSideTokenGeneration.test.ts +++ b/src/integrationTests/clientSideTokenGeneration.test.ts @@ -48,17 +48,17 @@ describe('Client-side token generation Tests', () => { const scenarios = [ { name: 'setIdentityFromEmail', - identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromEmail('test.com', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => uid2.setIdentityFromEmail( 'test@example.com', mocks.makeUid2CstgOption({ serverPublicKey }) ), + getIdentity: mocks.getUid2(), + serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromEmailHash', - identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromEmailHash('test@example.com', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => @@ -66,18 +66,20 @@ describe('Client-side token generation Tests', () => { 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', mocks.makeUid2CstgOption({ serverPublicKey }) ), + getIdentity: mocks.getUid2(), + serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromPhone', - identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromPhone('12345678910', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => uid2.setIdentityFromPhone('+12345678910', mocks.makeUid2CstgOption({ serverPublicKey })), + getIdentity: mocks.getUid2(), + serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromPhoneHash', - identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromPhoneHash('+12345678910', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => @@ -85,20 +87,22 @@ describe('Client-side token generation Tests', () => { 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=', mocks.makeUid2CstgOption({ serverPublicKey }) ), + getIdentity: mocks.getUid2(), + serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromEmail', - identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromEmail('test.com', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => euid.setIdentityFromEmail( 'test@example.com', mocks.makeEuidCstgOption({ serverPublicKey }) ), + getIdentity: mocks.getEuid(), + serverPublicKey: serverPublicKeyEuid, }, { name: 'setIdentityFromEmailHash', - identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromEmailHash('test@example.com', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => @@ -106,18 +110,20 @@ describe('Client-side token generation Tests', () => { 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', mocks.makeEuidCstgOption({ serverPublicKey }) ), + getIdentity: mocks.getEuid(), + serverPublicKey: serverPublicKeyEuid, }, { name: 'setIdentityFromPhone', - identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromPhone('12345678910', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => euid.setIdentityFromPhone('+12345678910', mocks.makeEuidCstgOption({ serverPublicKey })), + getIdentity: mocks.getEuid(), + serverPublicKey: serverPublicKeyEuid, }, { name: 'setIdentityFromPhoneHash', - identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromPhoneHash('+12345678910', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => @@ -125,17 +131,19 @@ describe('Client-side token generation Tests', () => { 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=', mocks.makeEuidCstgOption({ serverPublicKey }) ), + getIdentity: mocks.getEuid(), + serverPublicKey: serverPublicKeyEuid, }, ]; scenarios.forEach((scenario) => { describe(scenario.name, () => { beforeEach(() => { - if (scenario.identityType === 'uid2') { + if (scenario.serverPublicKey.includes('UID2')) { uid2 = new UID2(); uid2.init({}); uid2OrEuid = uid2; - } else if (scenario.identityType === 'euid') { + } else if (scenario.serverPublicKey.includes('EUID')) { euid = new EUID(); euid.init({}); uid2OrEuid = euid; @@ -175,31 +183,21 @@ describe('Client-side token generation Tests', () => { done(); } }); - scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ); + scenario.setIdentity(scenario.serverPublicKey); }); test('should set identity to storage', async () => { - await scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ); - scenario.identityType === 'uid2' - ? expect(mocks.getUid2()).toEqual(cstgToken) - : expect(mocks.getEuid()).toEqual(cstgToken); + await scenario.setIdentity(scenario.serverPublicKey); + expect(scenario.getIdentity).toEqual(cstgToken); }); test('UID2 or EUID should be in available state', async () => { - await scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ); + await scenario.setIdentity(scenario.serverPublicKey); (expect(uid2OrEuid) as any).toBeInAvailableState(cstgToken.advertising_token); }); test('should refresh token when generated token requires a refresh', async () => { - await scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ); + await scenario.setIdentity(scenario.serverPublicKey); const refreshedToken = { ...mocks.makeIdentityV2(), advertising_token: 'refreshed_token', @@ -226,21 +224,15 @@ describe('Client-side token generation Tests', () => { }); }); test('should not set identity', async () => { - await expect( - scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ) - ).rejects.toEqual('Client error: Here is a client error'); - scenario.identityType === 'uid2' - ? expect(mocks.getUid2()).toBeNull() - : expect(mocks.getEuid()).toBeNull(); + await expect(scenario.setIdentity(scenario.serverPublicKey)).rejects.toEqual( + 'Client error: Here is a client error' + ); + expect(scenario.getIdentity).toBeNull(); }); test('should be in unavailable state', async () => { - await expect( - scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ) - ).rejects.toEqual('Client error: Here is a client error'); + await expect(scenario.setIdentity(scenario.serverPublicKey)).rejects.toEqual( + 'Client error: Here is a client error' + ); (expect(uid2OrEuid) as any).toBeInUnavailableState(); }); }); @@ -259,9 +251,7 @@ describe('Client-side token generation Tests', () => { }); }); test('UID2 or EUID should be in optout state', async () => { - await scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ); + await scenario.setIdentity(scenario.serverPublicKey); (expect(uid2OrEuid) as any).toBeInOptoutState(); }); @@ -272,9 +262,7 @@ describe('Client-side token generation Tests', () => { done(); } }); - scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ); + scenario.setIdentity(scenario.serverPublicKey); }); test('The callback should be called with an optout event', (done) => { @@ -283,9 +271,7 @@ describe('Client-side token generation Tests', () => { done(); } }); - scenario.setIdentity( - scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid - ); + scenario.setIdentity(scenario.serverPublicKey); }); }); }); From d247887b170dd323fbce685019ef634c667aff75 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Wed, 13 Nov 2024 00:50:03 -0700 Subject: [PATCH 6/7] revert public key changes --- .../clientSideTokenGeneration.test.ts | 64 ++++++++++++------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/src/integrationTests/clientSideTokenGeneration.test.ts b/src/integrationTests/clientSideTokenGeneration.test.ts index 76d0d27f..f3be7dc0 100644 --- a/src/integrationTests/clientSideTokenGeneration.test.ts +++ b/src/integrationTests/clientSideTokenGeneration.test.ts @@ -48,6 +48,7 @@ describe('Client-side token generation Tests', () => { const scenarios = [ { name: 'setIdentityFromEmail', + identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromEmail('test.com', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => uid2.setIdentityFromEmail( @@ -55,10 +56,10 @@ describe('Client-side token generation Tests', () => { mocks.makeUid2CstgOption({ serverPublicKey }) ), getIdentity: mocks.getUid2(), - serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromEmailHash', + identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromEmailHash('test@example.com', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => @@ -67,19 +68,19 @@ describe('Client-side token generation Tests', () => { mocks.makeUid2CstgOption({ serverPublicKey }) ), getIdentity: mocks.getUid2(), - serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromPhone', + identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromPhone('12345678910', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => uid2.setIdentityFromPhone('+12345678910', mocks.makeUid2CstgOption({ serverPublicKey })), getIdentity: mocks.getUid2(), - serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromPhoneHash', + identityType: 'uid2', setInvalidIdentity: () => uid2.setIdentityFromPhoneHash('+12345678910', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => @@ -88,10 +89,10 @@ describe('Client-side token generation Tests', () => { mocks.makeUid2CstgOption({ serverPublicKey }) ), getIdentity: mocks.getUid2(), - serverPublicKey: serverPublicKeyUid2, }, { name: 'setIdentityFromEmail', + identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromEmail('test.com', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => euid.setIdentityFromEmail( @@ -99,10 +100,10 @@ describe('Client-side token generation Tests', () => { mocks.makeEuidCstgOption({ serverPublicKey }) ), getIdentity: mocks.getEuid(), - serverPublicKey: serverPublicKeyEuid, }, { name: 'setIdentityFromEmailHash', + identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromEmailHash('test@example.com', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => @@ -111,19 +112,19 @@ describe('Client-side token generation Tests', () => { mocks.makeEuidCstgOption({ serverPublicKey }) ), getIdentity: mocks.getEuid(), - serverPublicKey: serverPublicKeyEuid, }, { name: 'setIdentityFromPhone', + identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromPhone('12345678910', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => euid.setIdentityFromPhone('+12345678910', mocks.makeEuidCstgOption({ serverPublicKey })), getIdentity: mocks.getEuid(), - serverPublicKey: serverPublicKeyEuid, }, { name: 'setIdentityFromPhoneHash', + identityType: 'euid', setInvalidIdentity: () => euid.setIdentityFromPhoneHash('+12345678910', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => @@ -132,18 +133,17 @@ describe('Client-side token generation Tests', () => { mocks.makeEuidCstgOption({ serverPublicKey }) ), getIdentity: mocks.getEuid(), - serverPublicKey: serverPublicKeyEuid, }, ]; scenarios.forEach((scenario) => { describe(scenario.name, () => { beforeEach(() => { - if (scenario.serverPublicKey.includes('UID2')) { + if (scenario.identityType === 'uid2') { uid2 = new UID2(); uid2.init({}); uid2OrEuid = uid2; - } else if (scenario.serverPublicKey.includes('EUID')) { + } else if (scenario.identityType === 'euid') { euid = new EUID(); euid.init({}); uid2OrEuid = euid; @@ -183,21 +183,29 @@ describe('Client-side token generation Tests', () => { done(); } }); - scenario.setIdentity(scenario.serverPublicKey); + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); }); test('should set identity to storage', async () => { - await scenario.setIdentity(scenario.serverPublicKey); + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); expect(scenario.getIdentity).toEqual(cstgToken); }); test('UID2 or EUID should be in available state', async () => { - await scenario.setIdentity(scenario.serverPublicKey); + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); (expect(uid2OrEuid) as any).toBeInAvailableState(cstgToken.advertising_token); }); test('should refresh token when generated token requires a refresh', async () => { - await scenario.setIdentity(scenario.serverPublicKey); + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); const refreshedToken = { ...mocks.makeIdentityV2(), advertising_token: 'refreshed_token', @@ -224,15 +232,19 @@ describe('Client-side token generation Tests', () => { }); }); test('should not set identity', async () => { - await expect(scenario.setIdentity(scenario.serverPublicKey)).rejects.toEqual( - 'Client error: Here is a client error' - ); + await expect( + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ) + ).rejects.toEqual('Client error: Here is a client error'); expect(scenario.getIdentity).toBeNull(); }); test('should be in unavailable state', async () => { - await expect(scenario.setIdentity(scenario.serverPublicKey)).rejects.toEqual( - 'Client error: Here is a client error' - ); + await expect( + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ) + ).rejects.toEqual('Client error: Here is a client error'); (expect(uid2OrEuid) as any).toBeInUnavailableState(); }); }); @@ -251,7 +263,9 @@ describe('Client-side token generation Tests', () => { }); }); test('UID2 or EUID should be in optout state', async () => { - await scenario.setIdentity(scenario.serverPublicKey); + await scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); (expect(uid2OrEuid) as any).toBeInOptoutState(); }); @@ -262,7 +276,9 @@ describe('Client-side token generation Tests', () => { done(); } }); - scenario.setIdentity(scenario.serverPublicKey); + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); }); test('The callback should be called with an optout event', (done) => { @@ -271,7 +287,9 @@ describe('Client-side token generation Tests', () => { done(); } }); - scenario.setIdentity(scenario.serverPublicKey); + scenario.setIdentity( + scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid + ); }); }); }); From 2fec19cfcbe32f5f23940e5e59cde57e4743ab97 Mon Sep 17 00:00:00 2001 From: Ashley Smith Date: Wed, 13 Nov 2024 00:59:16 -0700 Subject: [PATCH 7/7] fixed getidentity setup --- .../clientSideTokenGeneration.test.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/integrationTests/clientSideTokenGeneration.test.ts b/src/integrationTests/clientSideTokenGeneration.test.ts index f3be7dc0..ff91188b 100644 --- a/src/integrationTests/clientSideTokenGeneration.test.ts +++ b/src/integrationTests/clientSideTokenGeneration.test.ts @@ -55,7 +55,7 @@ describe('Client-side token generation Tests', () => { 'test@example.com', mocks.makeUid2CstgOption({ serverPublicKey }) ), - getIdentity: mocks.getUid2(), + getIdentity: () => mocks.getUid2(), }, { name: 'setIdentityFromEmailHash', @@ -67,7 +67,7 @@ describe('Client-side token generation Tests', () => { 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', mocks.makeUid2CstgOption({ serverPublicKey }) ), - getIdentity: mocks.getUid2(), + getIdentity: () => mocks.getUid2(), }, { name: 'setIdentityFromPhone', @@ -76,7 +76,7 @@ describe('Client-side token generation Tests', () => { uid2.setIdentityFromPhone('12345678910', mocks.makeUid2CstgOption()), setIdentity: (serverPublicKey?: string) => uid2.setIdentityFromPhone('+12345678910', mocks.makeUid2CstgOption({ serverPublicKey })), - getIdentity: mocks.getUid2(), + getIdentity: () => mocks.getUid2(), }, { name: 'setIdentityFromPhoneHash', @@ -88,7 +88,7 @@ describe('Client-side token generation Tests', () => { 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=', mocks.makeUid2CstgOption({ serverPublicKey }) ), - getIdentity: mocks.getUid2(), + getIdentity: () => mocks.getUid2(), }, { name: 'setIdentityFromEmail', @@ -99,7 +99,7 @@ describe('Client-side token generation Tests', () => { 'test@example.com', mocks.makeEuidCstgOption({ serverPublicKey }) ), - getIdentity: mocks.getEuid(), + getIdentity: () => mocks.getEuid(), }, { name: 'setIdentityFromEmailHash', @@ -111,7 +111,7 @@ describe('Client-side token generation Tests', () => { 'lz3+Rj7IV4X1+Vr1ujkG7tstkxwk5pgkqJ6mXbpOgTs=', mocks.makeEuidCstgOption({ serverPublicKey }) ), - getIdentity: mocks.getEuid(), + getIdentity: () => mocks.getEuid(), }, { name: 'setIdentityFromPhone', @@ -120,7 +120,7 @@ describe('Client-side token generation Tests', () => { euid.setIdentityFromPhone('12345678910', mocks.makeEuidCstgOption()), setIdentity: (serverPublicKey?: string) => euid.setIdentityFromPhone('+12345678910', mocks.makeEuidCstgOption({ serverPublicKey })), - getIdentity: mocks.getEuid(), + getIdentity: () => mocks.getEuid(), }, { name: 'setIdentityFromPhoneHash', @@ -132,7 +132,7 @@ describe('Client-side token generation Tests', () => { 'kVJ+4ilhrqm3HZDDnCQy4niZknvCoM4MkoVzZrQSdJw=', mocks.makeEuidCstgOption({ serverPublicKey }) ), - getIdentity: mocks.getEuid(), + getIdentity: () => mocks.getEuid(), }, ]; @@ -192,7 +192,7 @@ describe('Client-side token generation Tests', () => { await scenario.setIdentity( scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid ); - expect(scenario.getIdentity).toEqual(cstgToken); + expect(scenario.getIdentity()).toEqual(cstgToken); }); test('UID2 or EUID should be in available state', async () => { @@ -237,7 +237,7 @@ describe('Client-side token generation Tests', () => { scenario.identityType === 'uid2' ? serverPublicKeyUid2 : serverPublicKeyEuid ) ).rejects.toEqual('Client error: Here is a client error'); - expect(scenario.getIdentity).toBeNull(); + expect(scenario.getIdentity()).toBeNull(); }); test('should be in unavailable state', async () => { await expect(