diff --git a/src/callbackManager.ts b/src/callbackManager.ts index 9a65039..8648870 100644 --- a/src/callbackManager.ts +++ b/src/callbackManager.ts @@ -7,7 +7,6 @@ export enum EventType { IdentityUpdated = 'IdentityUpdated', SdkLoaded = 'SdkLoaded', OptoutReceived = 'OptoutReceived', - NoIdentityAvailable = 'NoIdentityAvailable', } export type CallbackPayload = SdkLoadedPayload | PayloadWithIdentity; diff --git a/src/integrationTests/options.test.ts b/src/integrationTests/options.test.ts index b84b55f..25df4b0 100644 --- a/src/integrationTests/options.test.ts +++ b/src/integrationTests/options.test.ts @@ -556,147 +556,3 @@ describe('Store config UID2', () => { }); }); }); - -describe('calls the NoIdentityAvailable event', () => { - let handler: ReturnType; - let expiredIdentity = makeIdentity({ - identity_expires: Date.now() - 100000, - refresh_expires: Date.now() - 100000, - }); - - beforeEach(() => { - handler = jest.fn(); - uid2.callbacks.push(handler); - }); - - test('when init is called for the first time with no identity', () => { - uid2.init({}); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when init is already complete and called again with no identity', () => { - uid2.init({}); - uid2.init({}); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when init is already complete and called again with an expired identity', () => { - uid2.init({}); - uid2.init({ - identity: expiredIdentity, - }); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { - identity: expiredIdentity, - }); - }); - test('when init is already complete but the existing identity is expired', () => { - uid2.init({ - identity: expiredIdentity, - }); - uid2.init({}); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { - identity: expiredIdentity, - }); - }); - test('when identity is expired but refreshable', () => { - let expiredRefreshableIdentity = makeIdentity({ - identity_expires: Date.now() - 10000, - refresh_expires: Date.now() + 10000, - }); - uid2.init({ identity: expiredRefreshableIdentity }); - - // in this case, identity is temporarily unavailable but still unavailable - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when login is required', () => { - uid2.isLoginRequired(); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when get identity returns null', () => { - uid2.getIdentity(); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when there is no advertising token', () => { - uid2.getAdvertisingToken(); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when cstg does not succeed', () => { - uid2.init({}); - - expect(uid2.setIdentityFromEmail('a', mocks.makeUid2CstgOption())).rejects.toThrow( - 'Invalid email address' - ); - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when identity was valid on init but has since expired', () => { - const originalIdentity = makeIdentity({ - advertising_token: 'original_advertising_token', - identity_expires: Date.now() + 100, - }); - uid2.init({ identity: originalIdentity }); - - expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { - identity: null, - }); - - // set time to an expired date for this identity - jest.setSystemTime(originalIdentity.refresh_expires * 1000 + 1); - - uid2.isIdentityAvailable(); - - expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { - identity: originalIdentity, - }); - }); -}); - -describe('does not call NoIdentityAvailable event', () => { - let validIdentity = makeIdentity(); - let handler: ReturnType; - beforeEach(() => { - handler = jest.fn(); - uid2.callbacks.push(handler); - }); - - test('when setIdentity is run with a valid identity, should not call NoIdentityAvailable on set or get', () => { - uid2.init({}); - handler = jest.fn(); - - uid2.setIdentity(validIdentity); - uid2.getIdentity(); - uid2.getAdvertisingToken(); - - expect(handler).not.toHaveBeenCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when identity is set with opted out identity', () => { - uid2.init({ identity: makeIdentity({ status: 'optout' }) }); - - expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when cstg is successful', async () => { - uid2.init({}); - handler = jest.fn(); - - expect(async () => { - await uid2.setIdentityFromEmail('test@test.com', mocks.makeUid2CstgOption()); - }).not.toThrow(); - expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when identity is set with local storage and init has never been called', () => { - mocks.setUid2LocalStorage(validIdentity); - uid2.isIdentityAvailable(); - - expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); - test('when identity is set with cookie and init has never been called', () => { - mocks.setUid2Cookie(validIdentity); - uid2.isIdentityAvailable(); - - expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null }); - }); -}); diff --git a/src/sdkBase.ts b/src/sdkBase.ts index 544e58b..ec06df1 100644 --- a/src/sdkBase.ts +++ b/src/sdkBase.ts @@ -165,7 +165,6 @@ export abstract class SdkBase { public getIdentity(): Identity | null { const identity = this._identity ?? this.getIdentityNoInit(); if (!isValidIdentity(identity) || this.temporarilyUnavailable(identity)) { - this._callbackManager.runCallbacks(EventType.NoIdentityAvailable, {}); return null; } return identity; @@ -199,17 +198,10 @@ export abstract class SdkBase { public isIdentityAvailable() { const identity = this._identity ?? this.getIdentityNoInit(); - const identityAvailable = - (this.isIdentityValid(identity) && !this.temporarilyUnavailable(identity)) || - this._apiClient?.hasActiveRequests(); - - if (!identityAvailable) { - if (this._callbackManager) { - this._callbackManager.runCallbacks(EventType.NoIdentityAvailable, {}); - } - return false; - } - return true; + return ( + (identity && !hasExpired && !this.temporarilyUnavailable(identity)) || + this._apiClient?.hasActiveRequests() + ); } public hasOptedOut() { @@ -309,10 +301,6 @@ export abstract class SdkBase { if (this.hasOptedOut()) this._callbackManager.runCallbacks(EventType.OptoutReceived, {}); } - private isIdentityValid(identity: Identity | OptoutIdentity | null | undefined) { - return identity && !hasExpired(identity.refresh_expires); - } - private temporarilyUnavailable(identity: Identity | OptoutIdentity | null | undefined) { if (!identity && this._apiClient?.hasActiveRequests()) return true; // returns true if identity is expired but refreshable