diff --git a/packages/shared/sdk-client/__tests__/datasource/fdv2/CacheInitializer.test.ts b/packages/shared/sdk-client/__tests__/datasource/fdv2/CacheInitializer.test.ts index 9cf6a72456..26f8b303e8 100644 --- a/packages/shared/sdk-client/__tests__/datasource/fdv2/CacheInitializer.test.ts +++ b/packages/shared/sdk-client/__tests__/datasource/fdv2/CacheInitializer.test.ts @@ -68,12 +68,12 @@ describe('CacheInitializer', () => { const flag1Update = result.payload.updates.find((u) => u.key === 'flag1'); expect(flag1Update).toBeDefined(); - expect(flag1Update!.kind).toBe('flagEval'); + expect(flag1Update!.kind).toBe('flag-eval'); expect(flag1Update!.version).toBe(1); const flag2Update = result.payload.updates.find((u) => u.key === 'flag2'); expect(flag2Update).toBeDefined(); - expect(flag2Update!.kind).toBe('flagEval'); + expect(flag2Update!.kind).toBe('flag-eval'); expect(flag2Update!.version).toBe(2); } }); diff --git a/packages/shared/sdk-client/__tests__/datasource/fdv2/PollingBase.test.ts b/packages/shared/sdk-client/__tests__/datasource/fdv2/PollingBase.test.ts index ac36bfa7af..2a3ac8ae38 100644 --- a/packages/shared/sdk-client/__tests__/datasource/fdv2/PollingBase.test.ts +++ b/packages/shared/sdk-client/__tests__/datasource/fdv2/PollingBase.test.ts @@ -456,7 +456,7 @@ describe('given a partial (changes) transfer', () => { { event: 'put-object', data: { - kind: 'flagEval', + kind: 'flag-eval', key: 'updatedFlag', version: 5, object: { value: 'new-value', trackEvents: true }, @@ -499,7 +499,7 @@ describe('given a delete-object event', () => { { event: 'delete-object', data: { - kind: 'flagEval', + kind: 'flag-eval', key: 'deletedFlag', version: 3, }, diff --git a/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingFDv2Base.test.ts b/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingFDv2Base.test.ts index ee28828e47..33086a5bb4 100644 --- a/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingFDv2Base.test.ts +++ b/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingFDv2Base.test.ts @@ -70,13 +70,13 @@ it('produces a partial changeSet for incremental updates', async () => { await base.takeResult(); simulateEvent(mockEventSource, 'put-object', { - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-a', version: 2, object: { value: false, trackEvents: true }, }); simulateEvent(mockEventSource, 'delete-object', { - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-b', version: 3, }); @@ -165,7 +165,7 @@ it('silently ignores unrecognized object kinds', async () => { payloads: [{ intentCode: 'xfer-full', id: 'p1', target: 1, reason: 'test' }], }); simulateEvent(mockEventSource, 'put-object', { - kind: 'flagEval', + kind: 'flag-eval', key: 'known', version: 1, object: { value: true, trackEvents: false }, @@ -291,7 +291,7 @@ it('resets protocol handler on reconnection (onopen)', async () => { payloads: [{ intentCode: 'xfer-full', id: 'p1', target: 1, reason: 'test' }], }); simulateEvent(mockEventSource, 'put-object', { - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-a', version: 1, object: { value: true, trackEvents: false }, @@ -322,7 +322,9 @@ it('handles ping events by calling ping handler and queuing the result', async ( version: 1, state: '(p:p1:1)', type: 'full' as const, - updates: [{ kind: 'flagEval', key: 'ping-flag', version: 1, object: { value: 'from-ping' } }], + updates: [ + { kind: 'flag-eval', key: 'ping-flag', version: 1, object: { value: 'from-ping' } }, + ], }, fdv1Fallback: false, }; diff --git a/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingSynchronizerFDv2.test.ts b/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingSynchronizerFDv2.test.ts index 188b62cccd..b4b8c8caab 100644 --- a/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingSynchronizerFDv2.test.ts +++ b/packages/shared/sdk-client/__tests__/datasource/fdv2/StreamingSynchronizerFDv2.test.ts @@ -73,7 +73,7 @@ it('returns successive changeSet results', async () => { const p2 = synchronizer.next(); simulateEvent(mockEventSource, 'put-object', { - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-2', version: 2, object: { value: 'second', trackEvents: false }, diff --git a/packages/shared/sdk-client/__tests__/datasource/fdv2/streamingTestHelpers.ts b/packages/shared/sdk-client/__tests__/datasource/fdv2/streamingTestHelpers.ts index 28162299dc..9b140d8cab 100644 --- a/packages/shared/sdk-client/__tests__/datasource/fdv2/streamingTestHelpers.ts +++ b/packages/shared/sdk-client/__tests__/datasource/fdv2/streamingTestHelpers.ts @@ -82,7 +82,7 @@ export function sendFullTransfer( flags.forEach((flag) => { simulateEvent(mockEventSource, 'put-object', { - kind: 'flagEval', + kind: 'flag-eval', key: flag.key, version: flag.version, object: { value: flag.value, trackEvents: false }, diff --git a/packages/shared/sdk-client/__tests__/datasource/fdv2/testHelpers.ts b/packages/shared/sdk-client/__tests__/datasource/fdv2/testHelpers.ts index 53a1f07b26..996fedf6c6 100644 --- a/packages/shared/sdk-client/__tests__/datasource/fdv2/testHelpers.ts +++ b/packages/shared/sdk-client/__tests__/datasource/fdv2/testHelpers.ts @@ -32,7 +32,7 @@ export function makeFullPayloadBody( events.push({ event: 'put-object', data: { - kind: 'flagEval', + kind: 'flag-eval', key, version: 1, object: { value: flag.value, trackEvents: flag.trackEvents ?? false }, diff --git a/packages/shared/sdk-client/__tests__/datasource/flagEvalMapper.test.ts b/packages/shared/sdk-client/__tests__/datasource/flagEvalMapper.test.ts index 2355d96098..0155ec5229 100644 --- a/packages/shared/sdk-client/__tests__/datasource/flagEvalMapper.test.ts +++ b/packages/shared/sdk-client/__tests__/datasource/flagEvalMapper.test.ts @@ -43,7 +43,7 @@ it('passes through objects with extra unrecognized fields in processFlagEval', ( it('converts a put update with all fields into an ItemDescriptor', () => { const update: internal.Update = { - kind: 'flagEval', + kind: 'flag-eval', key: 'my-flag', version: 5, object: fullEvalResult, @@ -66,7 +66,7 @@ it('converts a put update with all fields into an ItemDescriptor', () => { it('preserves all FlagEvaluationResult fields on the mapped flag', () => { const update: internal.Update = { - kind: 'flagEval', + kind: 'flag-eval', key: 'all-fields', version: 5, object: fullEvalResult, @@ -84,7 +84,7 @@ it('preserves all FlagEvaluationResult fields on the mapped flag', () => { it('converts a put update with only required fields', () => { const update: internal.Update = { - kind: 'flagEval', + kind: 'flag-eval', key: 'minimal-flag', version: 1, object: minimalEvalResult, @@ -106,7 +106,7 @@ it('converts a put update with only required fields', () => { it('converts a delete update into a tombstone descriptor', () => { const update: internal.Update = { - kind: 'flagEval', + kind: 'flag-eval', key: 'deleted-flag', version: 10, deleted: true, @@ -123,7 +123,7 @@ it('converts a delete update into a tombstone descriptor', () => { it('uses the envelope version as both ItemDescriptor.version and Flag.version', () => { const update: internal.Update = { - kind: 'flagEval', + kind: 'flag-eval', key: 'versioned-flag', version: 99, object: { ...minimalEvalResult, flagVersion: 7 }, @@ -138,7 +138,7 @@ it('uses the envelope version as both ItemDescriptor.version and Flag.version', it('handles null value in evaluation result', () => { const update: internal.Update = { - kind: 'flagEval', + kind: 'flag-eval', key: 'null-flag', version: 1, object: { value: null, trackEvents: false }, @@ -152,7 +152,7 @@ it('handles null value in evaluation result', () => { it('handles complex object values', () => { const complexValue = { nested: { deeply: { value: [1, 2, 3] } } }; const update: internal.Update = { - kind: 'flagEval', + kind: 'flag-eval', key: 'complex-flag', version: 3, object: { value: complexValue, trackEvents: true }, @@ -166,13 +166,13 @@ it('handles complex object values', () => { it('converts multiple flagEval updates into a map of ItemDescriptors', () => { const updates: internal.Update[] = [ { - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-1', version: 1, object: { value: true, trackEvents: false }, }, { - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-2', version: 2, object: { value: 'blue', trackEvents: true, variation: 0 }, @@ -190,7 +190,7 @@ it('converts multiple flagEval updates into a map of ItemDescriptors', () => { it('silently ignores updates with unrecognized kinds', () => { const updates: internal.Update[] = [ { - kind: 'flagEval', + kind: 'flag-eval', key: 'known-flag', version: 1, object: { value: true, trackEvents: false }, @@ -225,13 +225,13 @@ it('returns an empty map for an empty updates array', () => { it('handles a mix of puts and deletes', () => { const updates: internal.Update[] = [ { - kind: 'flagEval', + kind: 'flag-eval', key: 'active-flag', version: 5, object: { value: 'red', trackEvents: true }, }, { - kind: 'flagEval', + kind: 'flag-eval', key: 'removed-flag', version: 3, deleted: true, @@ -250,13 +250,13 @@ it('handles a mix of puts and deletes', () => { it('uses the last update when a key appears multiple times', () => { const updates: internal.Update[] = [ { - kind: 'flagEval', + kind: 'flag-eval', key: 'dup-flag', version: 1, object: { value: 'first', trackEvents: false }, }, { - kind: 'flagEval', + kind: 'flag-eval', key: 'dup-flag', version: 2, object: { value: 'second', trackEvents: true }, diff --git a/packages/shared/sdk-client/__tests__/datasource/flagEvalProtocol.test.ts b/packages/shared/sdk-client/__tests__/datasource/flagEvalProtocol.test.ts index 2b3259fed1..6ef1dafa70 100644 --- a/packages/shared/sdk-client/__tests__/datasource/flagEvalProtocol.test.ts +++ b/packages/shared/sdk-client/__tests__/datasource/flagEvalProtocol.test.ts @@ -27,14 +27,14 @@ function transferredEvent(state: string, version: number): internal.FDv2Event { } function createHandler() { - return internal.createProtocolHandler({ flagEval: processFlagEval }); + return internal.createProtocolHandler({ 'flag-eval': processFlagEval }); } it('processes flagEval put-object events through the protocol handler', () => { const handler = createHandler(); handler.processEvent(intentEvent('xfer-full', 'p1', 1)); handler.processEvent( - putEvent('flagEval', 'my-flag', 5, { + putEvent('flag-eval', 'my-flag', 5, { flagVersion: 42, value: 'green', variation: 1, @@ -47,7 +47,7 @@ it('processes flagEval put-object events through the protocol handler', () => { if (action.type !== 'payload') return; expect(action.payload.updates).toHaveLength(1); - expect(action.payload.updates[0].kind).toBe('flagEval'); + expect(action.payload.updates[0].kind).toBe('flag-eval'); expect(action.payload.updates[0].key).toBe('my-flag'); expect(action.payload.updates[0].version).toBe(5); expect(action.payload.updates[0].object.value).toBe('green'); @@ -56,14 +56,14 @@ it('processes flagEval put-object events through the protocol handler', () => { it('processes flagEval delete-object events through the protocol handler', () => { const handler = createHandler(); handler.processEvent(intentEvent('xfer-changes', 'p1', 1)); - handler.processEvent(deleteEvent('flagEval', 'old-flag', 10)); + handler.processEvent(deleteEvent('flag-eval', 'old-flag', 10)); const action = handler.processEvent(transferredEvent('(p:p1:1)', 1)); expect(action.type).toBe('payload'); if (action.type !== 'payload') return; expect(action.payload.updates).toHaveLength(1); - expect(action.payload.updates[0].kind).toBe('flagEval'); + expect(action.payload.updates[0].kind).toBe('flag-eval'); expect(action.payload.updates[0].key).toBe('old-flag'); expect(action.payload.updates[0].version).toBe(10); expect(action.payload.updates[0].deleted).toBe(true); @@ -72,7 +72,7 @@ it('processes flagEval delete-object events through the protocol handler', () => it('silently ignores unrecognized object kinds when flagEval is the only processor', () => { const handler = createHandler(); handler.processEvent(intentEvent('xfer-full', 'p1', 1)); - handler.processEvent(putEvent('flagEval', 'known', 1, { value: true, trackEvents: false })); + handler.processEvent(putEvent('flag-eval', 'known', 1, { value: true, trackEvents: false })); handler.processEvent(putEvent('unknown_kind', 'mystery', 1, { data: 'ignored' })); const action = handler.processEvent(transferredEvent('(p:p1:1)', 1)); @@ -86,11 +86,11 @@ it('silently ignores unrecognized object kinds when flagEval is the only process it('handles a full transfer of multiple flagEval objects', () => { const handler = createHandler(); handler.processEvent(intentEvent('xfer-full', 'p1', 52)); - handler.processEvent(putEvent('flagEval', 'flag-a', 1, { value: true, trackEvents: false })); + handler.processEvent(putEvent('flag-eval', 'flag-a', 1, { value: true, trackEvents: false })); handler.processEvent( - putEvent('flagEval', 'flag-b', 2, { value: 'blue', trackEvents: true, variation: 1 }), + putEvent('flag-eval', 'flag-b', 2, { value: 'blue', trackEvents: true, variation: 1 }), ); - handler.processEvent(putEvent('flagEval', 'flag-c', 3, { value: 42, trackEvents: false })); + handler.processEvent(putEvent('flag-eval', 'flag-c', 3, { value: 42, trackEvents: false })); const action = handler.processEvent(transferredEvent('(p:p1:52)', 52)); expect(action.type).toBe('payload'); @@ -106,12 +106,12 @@ it('handles incremental updates with flagEval after a full transfer', () => { // Full transfer handler.processEvent(intentEvent('xfer-full', 'p1', 1)); - handler.processEvent(putEvent('flagEval', 'flag-a', 1, { value: true, trackEvents: false })); + handler.processEvent(putEvent('flag-eval', 'flag-a', 1, { value: true, trackEvents: false })); handler.processEvent(transferredEvent('(p:p1:1)', 1)); // Incremental update - handler.processEvent(putEvent('flagEval', 'flag-a', 2, { value: false, trackEvents: true })); - handler.processEvent(deleteEvent('flagEval', 'flag-b', 3)); + handler.processEvent(putEvent('flag-eval', 'flag-a', 2, { value: false, trackEvents: true })); + handler.processEvent(deleteEvent('flag-eval', 'flag-b', 3)); const action = handler.processEvent(transferredEvent('(p:p1:2)', 2)); expect(action.type).toBe('payload'); @@ -120,12 +120,12 @@ it('handles incremental updates with flagEval after a full transfer', () => { expect(action.payload.type).toBe('partial'); expect(action.payload.updates).toHaveLength(2); expect(action.payload.updates[0]).toMatchObject({ - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-a', object: { value: false }, }); expect(action.payload.updates[1]).toMatchObject({ - kind: 'flagEval', + kind: 'flag-eval', key: 'flag-b', deleted: true, }); diff --git a/packages/shared/sdk-client/src/datasource/fdv2/CacheInitializer.ts b/packages/shared/sdk-client/src/datasource/fdv2/CacheInitializer.ts index 7030d26d3b..356f91a5cc 100644 --- a/packages/shared/sdk-client/src/datasource/fdv2/CacheInitializer.ts +++ b/packages/shared/sdk-client/src/datasource/fdv2/CacheInitializer.ts @@ -61,7 +61,7 @@ async function loadFromCache(config: CacheInitializerConfig): Promise ({ - kind: 'flagEval', + kind: 'flag-eval', key, version: flag.version, object: flagToEvaluationResult(flag), diff --git a/packages/shared/sdk-client/src/datasource/fdv2/PollingBase.ts b/packages/shared/sdk-client/src/datasource/fdv2/PollingBase.ts index 942bb9d86d..5c0caed58f 100644 --- a/packages/shared/sdk-client/src/datasource/fdv2/PollingBase.ts +++ b/packages/shared/sdk-client/src/datasource/fdv2/PollingBase.ts @@ -40,7 +40,7 @@ function processEvents( ): FDv2SourceResult { const handler = internal.createProtocolHandler( { - flagEval: processFlagEval, + 'flag-eval': processFlagEval, }, logger, ); diff --git a/packages/shared/sdk-client/src/datasource/fdv2/StreamingFDv2Base.ts b/packages/shared/sdk-client/src/datasource/fdv2/StreamingFDv2Base.ts index 89bdd50ba4..890cca3e35 100644 --- a/packages/shared/sdk-client/src/datasource/fdv2/StreamingFDv2Base.ts +++ b/packages/shared/sdk-client/src/datasource/fdv2/StreamingFDv2Base.ts @@ -91,7 +91,7 @@ export function createStreamingBase(config: { }): StreamingFDv2Base { const resultQueue = createAsyncQueue(); const protocolHandler = internal.createProtocolHandler( - { flagEval: processFlagEval }, + { 'flag-eval': processFlagEval }, config.logger, ); diff --git a/packages/shared/sdk-client/src/datasource/flagEvalMapper.ts b/packages/shared/sdk-client/src/datasource/flagEvalMapper.ts index 5f4213e9a5..953b6e2668 100644 --- a/packages/shared/sdk-client/src/datasource/flagEvalMapper.ts +++ b/packages/shared/sdk-client/src/datasource/flagEvalMapper.ts @@ -4,7 +4,7 @@ import { ItemDescriptor } from '../flag-manager/ItemDescriptor'; import { FlagEvaluationResult } from '../types'; /** - * ObjProcessor for the `flagEval` object kind. Used by the protocol handler to + * ObjProcessor for the `flag-eval` object kind. Used by the protocol handler to * process objects received in `put-object` events. * * Client-side evaluation results are already in their final form (pre-evaluated @@ -15,7 +15,7 @@ export function processFlagEval(object: unknown): FlagEvaluationResult { } /** - * Converts an FDv2 {@link internal.Update} with `kind: 'flagEval'` into an + * Converts an FDv2 {@link internal.Update} with `kind: 'flag-eval'` into an * {@link ItemDescriptor} suitable for {@link FlagManager}. * * For put updates the envelope `version` is used as the {@link ItemDescriptor.version} @@ -49,7 +49,7 @@ export function flagEvalUpdateToItemDescriptor(update: internal.Update): ItemDes /** * Converts an array of FDv2 payload updates into a map of flag key to - * {@link ItemDescriptor}. Only `flagEval` kind updates are processed; + * {@link ItemDescriptor}. Only `flag-eval` kind updates are processed; * unrecognized kinds are silently ignored. */ export function flagEvalPayloadToItemDescriptors(updates: internal.Update[]): { @@ -58,7 +58,7 @@ export function flagEvalPayloadToItemDescriptors(updates: internal.Update[]): { const descriptors: { [key: string]: ItemDescriptor } = {}; updates.forEach((update) => { - if (update.kind === 'flagEval') { + if (update.kind === 'flag-eval') { descriptors[update.key] = flagEvalUpdateToItemDescriptor(update); } });