diff --git a/packages/sdk/cloudflare/src/createFeatureStore.ts b/packages/sdk/cloudflare/src/createFeatureStore.ts index f7b8a7baf9..fb3318abb0 100644 --- a/packages/sdk/cloudflare/src/createFeatureStore.ts +++ b/packages/sdk/cloudflare/src/createFeatureStore.ts @@ -15,11 +15,11 @@ const createFeatureStore = (kvNamespace: KVNamespace, sdkKey: string, logger: LD const store: LDFeatureStore = { get( kind: DataKind, - flagKey: string, + dataKey: string, callback: (res: LDFeatureStoreItem | null) => void = noop ): void { const kindKey = kind.namespace === 'features' ? 'flags' : kind.namespace; - logger.debug(`Requesting ${flagKey} from ${key}.${kindKey}`); + logger.debug(`Requesting ${dataKey} from ${key}.${kindKey}`); kvNamespace .get(key) @@ -32,7 +32,17 @@ const createFeatureStore = (kvNamespace: KVNamespace, sdkKey: string, logger: LD if (!item) { throw new Error(`Error deserializing ${kindKey}`); } - callback(item[kindKey][flagKey]); + switch (kind.namespace) { + case 'features': + callback(item.flags[dataKey]); + break; + case 'segments': + callback(item.segments[dataKey]); + break; + default: + // Unsupported data kind. + callback(null); + } }) .catch((err) => { logger.error(err); @@ -54,7 +64,17 @@ const createFeatureStore = (kvNamespace: KVNamespace, sdkKey: string, logger: LD throw new Error(`Error deserializing ${kindKey}`); } - callback(item[kindKey]); + switch (kind.namespace) { + case 'features': + callback(item.flags); + break; + case 'segments': + callback(item.segments); + break; + default: + // Unsupported data kind. + callback({}); + } }) .catch((err) => { logger.error(err); diff --git a/packages/shared/sdk-server/src/store/serialization.ts b/packages/shared/sdk-server/src/store/serialization.ts index a75f803a4e..945f3b00c3 100644 --- a/packages/shared/sdk-server/src/store/serialization.ts +++ b/packages/shared/sdk-server/src/store/serialization.ts @@ -22,7 +22,6 @@ export function reviver(this: any, key: string, value: any): any { } interface FlagsAndSegments { - [key: string]: { [name: string]: Flag } | { [name: string]: Segment }; flags: { [name: string]: Flag }; segments: { [name: string]: Segment }; } @@ -158,6 +157,14 @@ export function deserializeAll(data: string): AllData | undefined { return parsed; } +/** + * This function is intended for usage inside LaunchDarkly SDKs. + * This function should NOT be used by customer applications. + * This function may be changed or removed without a major version. + * + * @param data String data from launchdarkly. + * @returns The parsed and processed data. + */ export function deserializePoll(data: string): FlagsAndSegments | undefined { const parsed = tryParse(data) as FlagsAndSegments;