diff --git a/flagsmith-core.ts b/flagsmith-core.ts index a39a8fd..d1a36c5 100644 --- a/flagsmith-core.ts +++ b/flagsmith-core.ts @@ -137,6 +137,7 @@ const Flagsmith = class { }; if (identifier) { this.evaluationContext.identity.identifier = identifier; + this.identity = identifier; } } this.flags = flags; @@ -277,6 +278,7 @@ const Flagsmith = class { flags:IFlags|null= null getFlagInterval: NodeJS.Timer|null= null headers?: object | null= null + identity:string|null|undefined = null initialised= false oldFlags:IFlags|null= null onChange:IInitConfig['onChange']|null= null @@ -439,7 +441,7 @@ const Flagsmith = class { const onRetrievedStorage = async (error: Error | null, res: string | null) => { if (res) { let flagsChanged = null - let traitsChanged = null + const traitsChanged = null try { const json = JSON.parse(res) as IState; let cachePopulated = false; @@ -563,6 +565,7 @@ const Flagsmith = class { } identify(userId?: string | null, traits?: ITraits, transient?: boolean) { + this.identity = userId this.evaluationContext.identity = { identifier: userId, transient: transient, @@ -591,6 +594,7 @@ const Flagsmith = class { flags: this.flags, ts: this.ts, evaluationContext: this.evaluationContext, + identity: this.identity, evaluationEvent: this.evaluationEvent, } as IState } @@ -602,11 +606,13 @@ const Flagsmith = class { this.flags = state.flags || this.flags; this.evaluationContext = state.evaluationContext || this.evaluationContext, this.evaluationEvent = state.evaluationEvent || this.evaluationEvent; + this.identity = this.getContext()?.identity?.identifier this.log("setState called", this) } } logout() { + this.identity = null this.evaluationContext.identity = null; if (this.initialised) { return this.getFlags(); @@ -676,6 +682,7 @@ const Flagsmith = class { ...evaluationContext, environment: evaluationContext.environment || this.evaluationContext.environment, }; + this.identity = this.getContext()?.identity?.identifier if (this.initialised) { return this.getFlags(); diff --git a/lib/flagsmith/package.json b/lib/flagsmith/package.json index 14da61d..3b6a0b7 100644 --- a/lib/flagsmith/package.json +++ b/lib/flagsmith/package.json @@ -1,6 +1,6 @@ { "name": "flagsmith", - "version": "9.2.1", + "version": "9.2.2", "description": "Feature flagging to support continuous development", "main": "./index.js", "module": "./index.mjs", diff --git a/lib/react-native-flagsmith/package.json b/lib/react-native-flagsmith/package.json index 39b6044..7a51663 100644 --- a/lib/react-native-flagsmith/package.json +++ b/lib/react-native-flagsmith/package.json @@ -1,6 +1,6 @@ { "name": "react-native-flagsmith", - "version": "9.2.1", + "version": "9.2.2", "description": "Feature flagging to support continuous development", "main": "./index.js", "repository": { diff --git a/test/init.test.ts b/test/init.test.ts index d60ccf5..4b162c8 100644 --- a/test/init.test.ts +++ b/test/init.test.ts @@ -78,6 +78,7 @@ describe('Flagsmith.init', () => { ); expect(getStateToCheck(flagsmith.getState())).toEqual({ ...identityState, + identity: testIdentityWithTraits, evaluationContext: { ...identityState.evaluationContext, identity: { @@ -135,7 +136,9 @@ describe('Flagsmith.init', () => { status: 200, text: () => fs.readFile(`./test/data/identities_${identityB}.json`, 'utf8'), }); + expect(flagsmith.identity).toEqual(identityA); await flagsmith.identify(identityB); + expect(flagsmith.identity).toEqual(identityB); expect(flagsmith.getTrait('a')).toEqual(undefined); mockFetch.mockResolvedValueOnce({ status: 200, diff --git a/test/test-constants.ts b/test/test-constants.ts index 0da6b4c..9cbf08d 100644 --- a/test/test-constants.ts +++ b/test/test-constants.ts @@ -27,6 +27,7 @@ export const defaultState = { export const testIdentity = 'test_identity' export const identityState = { api: 'https://edge.api.flagsmith.com/api/v1/', + identity: testIdentity, evaluationContext: { environment: {apiKey: environmentID}, identity: { @@ -63,6 +64,7 @@ export const defaultStateAlt = { export function getStateToCheck(_state: IState) { const state = { ..._state, + identity: _state.evaluationContext?.identity?.identifier, }; delete state.evaluationEvent; // @ts-ignore internal property diff --git a/types.d.ts b/types.d.ts index f22b575..a0d172f 100644 --- a/types.d.ts +++ b/types.d.ts @@ -53,6 +53,7 @@ export interface IState { evaluationContext?: EvaluationContext; evaluationEvent?: Record> | null; ts?: number; + identity?: string; } declare type ICacheOptions = {