@flopflip/launchdarkly-adapter 15.1.7 → 15.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +40 -40
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/flopflip/flopflip/packages/launchdarkly-adapter/dist/index.cjs","../src/adapter.ts","../src/index.ts"],"names":["updatedFlags","flags"],"mappings":"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","file":"/home/runner/work/flopflip/flopflip/packages/launchdarkly-adapter/dist/index.cjs","sourcesContent":[null,"import {\n denormalizeFlagName,\n exposeGlobally,\n normalizeFlag,\n normalizeFlags,\n} from '@flopflip/adapter-utilities';\nimport { getCache } from '@flopflip/cache';\nimport {\n AdapterConfigurationStatus,\n AdapterInitializationStatus,\n AdapterSubscriptionStatus,\n adapterIdentifiers,\n cacheModes,\n type TAdapterEventHandlers,\n type TAdapterStatus,\n type TAdapterStatusChange,\n type TCacheIdentifiers,\n type TCacheModes,\n type TFlagName,\n type TFlags,\n type TFlagsChange,\n type TFlagVariation,\n type TLaunchDarklyAdapterArgs,\n type TLaunchDarklyAdapterInterface,\n type TUpdateFlagsOptions,\n} from '@flopflip/types';\nimport debounce from 'debounce-fn';\nimport {\n initialize as initializeLaunchDarklyClient,\n type LDClient,\n type LDContext,\n} from 'launchdarkly-js-client-sdk';\nimport isEqual from 'lodash/isEqual.js';\nimport mitt, { type Emitter } from 'mitt';\nimport warning from 'tiny-warning';\nimport { merge } from 'ts-deepmerge';\n\ntype TEmitterEvents = {\n flagsStateChange: TFlags;\n statusStateChange: Partial<TAdapterStatus>;\n};\n\ntype TLaunchDarklyAdapterState = {\n context?: LDContext;\n client?: LDClient;\n flags: TFlags;\n emitter: Emitter<TEmitterEvents>;\n lockedFlags: Set<TFlagName>;\n unsubscribedFlags: Set<TFlagName>;\n};\n\nclass LaunchDarklyAdapter implements TLaunchDarklyAdapterInterface {\n id: typeof adapterIdentifiers.launchdarkly;\n\n readonly #adapterState: TAdapterStatus & TLaunchDarklyAdapterState;\n\n constructor() {\n this.#adapterState = {\n subscriptionStatus: AdapterSubscriptionStatus.Subscribed,\n configurationStatus: AdapterConfigurationStatus.Unconfigured,\n context: undefined,\n client: undefined,\n flags: {},\n // Typings are incorrect and state that mitt is not callable.\n // Value of type 'MittStatic' is not callable. Did you mean to include 'new'\n emitter: mitt(),\n lockedFlags: new Set<TFlagName>(),\n unsubscribedFlags: new Set<TFlagName>(),\n };\n this.id = adapterIdentifiers.launchdarkly;\n }\n\n readonly #updateFlagsInAdapterState = (\n flags: TFlags,\n options?: TUpdateFlagsOptions\n ): void => {\n const updatedFlags = Object.entries(flags).reduce(\n (updatedFlags, [flagName, flagValue]) => {\n if (this.#getIsFlagLocked(flagName)) {\n return updatedFlags;\n }\n\n if (options?.lockFlags) {\n this.#adapterState.lockedFlags.add(flagName);\n }\n\n if (options?.unsubscribeFlags) {\n this.#adapterState.unsubscribedFlags.add(flagName);\n }\n\n const updated = {\n ...updatedFlags,\n [flagName]: flagValue,\n };\n\n return updated;\n },\n {}\n );\n\n this.#adapterState.flags = {\n ...this.#adapterState.flags,\n ...updatedFlags,\n };\n };\n\n readonly #getIsAdapterUnsubscribed = () =>\n this.#adapterState.subscriptionStatus ===\n AdapterSubscriptionStatus.Unsubscribed;\n\n readonly #getIsFlagUnsubcribed = (flagName: TFlagName) =>\n this.#adapterState.unsubscribedFlags.has(flagName);\n\n readonly #getIsFlagLocked = (flagName: TFlagName) =>\n this.#adapterState.lockedFlags.has(flagName);\n\n readonly #withoutUnsubscribedOrLockedFlags = (flags: TFlags) =>\n Object.fromEntries(\n Object.entries(flags).filter(\n ([flagName]) =>\n !this.#getIsFlagUnsubcribed(flagName) &&\n !this.#getIsFlagLocked(flagName)\n )\n );\n\n readonly #getIsAnonymousContext = (context: LDContext) => !context?.key;\n\n readonly #ensureContext = (context: LDContext) => {\n const isAnonymousContext = this.#getIsAnonymousContext(context);\n\n // NOTE: When marked `anonymous` the SDK will generate a unique key and cache it in local storage\n return merge(context, {\n key: isAnonymousContext ? undefined : context.key,\n anonymous: isAnonymousContext,\n });\n };\n\n readonly #initializeClient = (\n clientSideId: TLaunchDarklyAdapterArgs['sdk']['clientSideId'],\n context: LDContext,\n options: TLaunchDarklyAdapterArgs['sdk']['clientOptions']\n ) => initializeLaunchDarklyClient(clientSideId, context, options);\n\n readonly #changeClientContext = async (nextContext: LDContext) =>\n this.#adapterState.client?.identify\n ? this.#adapterState.client.identify(nextContext)\n : Promise.reject(\n new Error('Can not change user context: client not yet initialized.')\n );\n\n readonly #maybeUpdateFlagsInCache = async (\n flagsToCache: TFlags,\n cacheIdentifier?: TCacheIdentifiers\n ) => {\n if (cacheIdentifier) {\n const cache = await getCache(\n cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n // NOTE: LDContextCommon is part of the type which we never use.\n this.#adapterState.context\n );\n\n const cachedFlags: TFlags = cache.get();\n\n cache.set({ ...cachedFlags, ...flagsToCache });\n }\n };\n\n readonly #getInitialFlags = async ({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier,\n cacheMode,\n initializationTimeout,\n }: Pick<\n TLaunchDarklyAdapterArgs,\n | 'flags'\n | 'throwOnInitializationFailure'\n | 'cacheIdentifier'\n | 'cacheMode'\n | 'initializationTimeout'\n >): Promise<{\n flagsFromSdk?: TFlags;\n initializationStatus: AdapterInitializationStatus;\n }> => {\n if (this.#adapterState.client) {\n return this.#adapterState.client\n .waitForInitialization(initializationTimeout)\n .then(async () => {\n let flagsFromSdk: TFlags | undefined;\n\n if (this.#adapterState.client && !flags) {\n flagsFromSdk = this.#adapterState.client.allFlags();\n } else if (this.#adapterState.client && flags) {\n flagsFromSdk = {};\n\n for (const [requestedFlagName, defaultFlagValue] of Object.entries(\n flags\n )) {\n const denormalizedRequestedFlagName =\n denormalizeFlagName(requestedFlagName);\n flagsFromSdk[denormalizedRequestedFlagName] =\n this.#adapterState.client.variation(\n denormalizedRequestedFlagName,\n defaultFlagValue\n );\n }\n }\n\n if (flagsFromSdk) {\n const normalizedFlags = normalizeFlags(flagsFromSdk);\n\n await this.#maybeUpdateFlagsInCache(\n normalizedFlags,\n cacheIdentifier\n );\n\n const flags =\n this.#withoutUnsubscribedOrLockedFlags(normalizedFlags);\n\n this.#updateFlagsInAdapterState(flags);\n\n if (cacheMode !== cacheModes.lazy) {\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags\n );\n }\n }\n\n this.setConfigurationStatus(AdapterConfigurationStatus.Configured);\n\n return Promise.resolve({\n flagsFromSdk,\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n })\n .catch(async () => {\n if (throwOnInitializationFailure) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.'\n )\n );\n }\n\n console.warn(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.'\n );\n\n return Promise.resolve({\n flagsFromSdk: undefined,\n initializationStatus: AdapterInitializationStatus.Failed,\n });\n });\n }\n\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: can not subscribe with non initialized client.'\n )\n );\n };\n\n readonly #didFlagChange = (\n flagName: TFlagName,\n nextFlagValue: TFlagVariation\n ) => {\n const previousFlagValue = this.getFlag(flagName);\n\n if (previousFlagValue === undefined) {\n return true;\n }\n\n return previousFlagValue !== nextFlagValue;\n };\n\n readonly #setupFlagSubcription = ({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier,\n cacheMode,\n }: {\n flagsFromSdk: TFlags;\n flagsUpdateDelayMs?: number;\n cacheIdentifier?: TCacheIdentifiers;\n cacheMode?: TCacheModes;\n }) => {\n for (const flagName in flagsFromSdk) {\n // Dispatch whenever a configured flag value changes\n if (Object.hasOwn(flagsFromSdk, flagName) && this.#adapterState.client) {\n this.#adapterState.client.on(\n `change:${flagName}`,\n async (flagValue) => {\n const [normalizedFlagName, normalizedFlagValue] = normalizeFlag(\n flagName,\n flagValue as TFlagVariation\n );\n\n await this.#maybeUpdateFlagsInCache(\n {\n [normalizedFlagName]: normalizedFlagValue,\n },\n cacheIdentifier\n );\n\n if (this.#getIsFlagUnsubcribed(normalizedFlagName)) {\n return;\n }\n\n // Sometimes the SDK flushes flag changes without a value having changed.\n if (!this.#didFlagChange(normalizedFlagName, normalizedFlagValue)) {\n return;\n }\n\n const updatedFlags: TFlags = {\n [normalizedFlagName]: normalizedFlagValue,\n };\n // NOTE: Adapter state needs to be updated outside of debounced-fn\n // so that no flag updates are lost.\n this.#updateFlagsInAdapterState(updatedFlags);\n\n const flushFlagsUpdate = () => {\n if (cacheMode === cacheModes.lazy) {\n return;\n }\n\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags\n );\n };\n\n const scheduleImmediately = { before: true, after: false };\n const scheduleTrailingEdge = { before: false, after: true };\n\n debounce(flushFlagsUpdate, {\n wait: flagsUpdateDelayMs,\n ...(flagsUpdateDelayMs\n ? scheduleTrailingEdge\n : scheduleImmediately),\n })();\n }\n );\n }\n }\n };\n\n // External. Flags are autolocked when updated.\n updateFlags = (flags: TFlags, options?: TUpdateFlagsOptions) => {\n this.#updateFlagsInAdapterState(flags, options);\n\n // ...and flush initial state of flags\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags\n );\n };\n\n async configure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) {\n const handleFlagsChange = (nextFlags: TFlagsChange['flags']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onFlagsStateChange({\n flags: nextFlags,\n id: this.id,\n });\n };\n\n const handleStatusChange = (nextStatus: TAdapterStatusChange['status']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onStatusStateChange({\n status: nextStatus,\n id: this.id,\n });\n };\n\n this.#adapterState.configurationStatus =\n AdapterConfigurationStatus.Configuring;\n\n this.#adapterState.emitter.on('flagsStateChange', handleFlagsChange);\n this.#adapterState.emitter.on('statusStateChange', handleStatusChange);\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n\n const {\n sdk,\n context,\n flags,\n throwOnInitializationFailure = false,\n initializationTimeout = 2, // 2 seconds\n flagsUpdateDelayMs,\n } = adapterArgs;\n let cachedFlags: TFlags;\n\n this.#adapterState.context = this.#ensureContext(context);\n\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context\n );\n\n cachedFlags = cache.get();\n\n if (cachedFlags) {\n this.#updateFlagsInAdapterState(cachedFlags);\n this.#adapterState.flags = cachedFlags;\n this.#adapterState.emitter.emit('flagsStateChange', cachedFlags);\n }\n }\n\n this.#adapterState.client = this.#initializeClient(\n sdk.clientSideId,\n this.#adapterState.context,\n sdk.clientOptions ?? {}\n );\n\n return this.#getInitialFlags({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n initializationTimeout,\n }).then(({ flagsFromSdk, initializationStatus }) => {\n if (flagsFromSdk) {\n this.#setupFlagSubcription({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n });\n }\n\n return { initializationStatus };\n });\n }\n\n async reconfigure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n _adapterEventHandlers: TAdapterEventHandlers\n ) {\n if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.'\n )\n );\n }\n\n const nextContext = this.#ensureContext(adapterArgs.context);\n\n if (!isEqual(this.#adapterState.context, nextContext)) {\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context\n );\n\n cache.unset();\n }\n\n this.#adapterState.context = nextContext;\n\n await this.#changeClientContext(this.#adapterState.context);\n }\n\n return Promise.resolve({\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n }\n\n getIsConfigurationStatus(configurationStatus: AdapterConfigurationStatus) {\n return this.#adapterState.configurationStatus === configurationStatus;\n }\n\n setConfigurationStatus(nextConfigurationStatus: AdapterConfigurationStatus) {\n this.#adapterState.configurationStatus = nextConfigurationStatus;\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n }\n\n getClient() {\n return this.#adapterState.client;\n }\n\n getFlag(flagName: TFlagName): TFlagVariation {\n return this.#adapterState.flags[flagName];\n }\n\n async updateClientContext(\n updatedContextProps: TLaunchDarklyAdapterArgs['context']\n ) {\n const isAdapterConfigured = this.getIsConfigurationStatus(\n AdapterConfigurationStatus.Configured\n );\n\n warning(\n isAdapterConfigured,\n '@flopflip/launchdarkly-adapter: adapter not configured. Client context can not be updated before.'\n );\n\n if (!isAdapterConfigured) {\n return Promise.reject(\n new Error('Can not update client context: adapter not yet configured.')\n );\n }\n\n return this.#changeClientContext({\n ...this.#adapterState.context,\n ...updatedContextProps,\n });\n }\n\n unsubscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Unsubscribed;\n };\n\n subscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Subscribed;\n };\n}\n\nconst adapter = new LaunchDarklyAdapter();\n\nexposeGlobally(adapter);\n\nexport { adapter };\n","const version = '__@FLOPFLIP/VERSION_OF_RELEASE__';\n\nexport { version };\nexport { adapter } from './adapter';\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/flopflip/flopflip/packages/launchdarkly-adapter/dist/index.cjs","../src/adapter.ts","../src/index.ts"],"names":["updatedFlags","flags"],"mappings":"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","file":"/home/runner/work/flopflip/flopflip/packages/launchdarkly-adapter/dist/index.cjs","sourcesContent":[null,"import {\n denormalizeFlagName,\n exposeGlobally,\n normalizeFlag,\n normalizeFlags,\n} from '@flopflip/adapter-utilities';\nimport { getCache } from '@flopflip/cache';\nimport {\n AdapterConfigurationStatus,\n AdapterInitializationStatus,\n AdapterSubscriptionStatus,\n adapterIdentifiers,\n cacheModes,\n type TAdapterEventHandlers,\n type TAdapterStatus,\n type TAdapterStatusChange,\n type TCacheIdentifiers,\n type TCacheModes,\n type TFlagName,\n type TFlags,\n type TFlagsChange,\n type TFlagVariation,\n type TLaunchDarklyAdapterArgs,\n type TLaunchDarklyAdapterInterface,\n type TUpdateFlagsOptions,\n} from '@flopflip/types';\nimport debounce from 'debounce-fn';\nimport {\n initialize as initializeLaunchDarklyClient,\n type LDClient,\n type LDContext,\n} from 'launchdarkly-js-client-sdk';\nimport isEqual from 'lodash/isEqual.js';\nimport mitt, { type Emitter } from 'mitt';\nimport warning from 'tiny-warning';\nimport { merge } from 'ts-deepmerge';\n\ntype TEmitterEvents = {\n flagsStateChange: TFlags;\n statusStateChange: Partial<TAdapterStatus>;\n};\n\ntype TLaunchDarklyAdapterState = {\n context?: LDContext;\n client?: LDClient;\n flags: TFlags;\n emitter: Emitter<TEmitterEvents>;\n lockedFlags: Set<TFlagName>;\n unsubscribedFlags: Set<TFlagName>;\n};\n\nclass LaunchDarklyAdapter implements TLaunchDarklyAdapterInterface {\n id: typeof adapterIdentifiers.launchdarkly;\n\n readonly #adapterState: TAdapterStatus & TLaunchDarklyAdapterState;\n\n constructor() {\n this.#adapterState = {\n subscriptionStatus: AdapterSubscriptionStatus.Subscribed,\n configurationStatus: AdapterConfigurationStatus.Unconfigured,\n context: undefined,\n client: undefined,\n flags: {},\n // Typings are incorrect and state that mitt is not callable.\n // Value of type 'MittStatic' is not callable. Did you mean to include 'new'\n emitter: mitt(),\n lockedFlags: new Set<TFlagName>(),\n unsubscribedFlags: new Set<TFlagName>(),\n };\n this.id = adapterIdentifiers.launchdarkly;\n }\n\n readonly #updateFlagsInAdapterState = (\n flags: TFlags,\n options?: TUpdateFlagsOptions,\n ): void => {\n const updatedFlags = Object.entries(flags).reduce(\n (updatedFlags, [flagName, flagValue]) => {\n if (this.#getIsFlagLocked(flagName)) {\n return updatedFlags;\n }\n\n if (options?.lockFlags) {\n this.#adapterState.lockedFlags.add(flagName);\n }\n\n if (options?.unsubscribeFlags) {\n this.#adapterState.unsubscribedFlags.add(flagName);\n }\n\n const updated = {\n ...updatedFlags,\n [flagName]: flagValue,\n };\n\n return updated;\n },\n {},\n );\n\n this.#adapterState.flags = {\n ...this.#adapterState.flags,\n ...updatedFlags,\n };\n };\n\n readonly #getIsAdapterUnsubscribed = () =>\n this.#adapterState.subscriptionStatus ===\n AdapterSubscriptionStatus.Unsubscribed;\n\n readonly #getIsFlagUnsubcribed = (flagName: TFlagName) =>\n this.#adapterState.unsubscribedFlags.has(flagName);\n\n readonly #getIsFlagLocked = (flagName: TFlagName) =>\n this.#adapterState.lockedFlags.has(flagName);\n\n readonly #withoutUnsubscribedOrLockedFlags = (flags: TFlags) =>\n Object.fromEntries(\n Object.entries(flags).filter(\n ([flagName]) =>\n !this.#getIsFlagUnsubcribed(flagName) &&\n !this.#getIsFlagLocked(flagName),\n ),\n );\n\n readonly #getIsAnonymousContext = (context: LDContext) => !context?.key;\n\n readonly #ensureContext = (context: LDContext) => {\n const isAnonymousContext = this.#getIsAnonymousContext(context);\n\n // NOTE: When marked `anonymous` the SDK will generate a unique key and cache it in local storage\n return merge(context, {\n key: isAnonymousContext ? undefined : context.key,\n anonymous: isAnonymousContext,\n });\n };\n\n readonly #initializeClient = (\n clientSideId: TLaunchDarklyAdapterArgs['sdk']['clientSideId'],\n context: LDContext,\n options: TLaunchDarklyAdapterArgs['sdk']['clientOptions'],\n ) => initializeLaunchDarklyClient(clientSideId, context, options);\n\n readonly #changeClientContext = async (nextContext: LDContext) =>\n this.#adapterState.client?.identify\n ? this.#adapterState.client.identify(nextContext)\n : Promise.reject(\n new Error('Can not change user context: client not yet initialized.'),\n );\n\n readonly #maybeUpdateFlagsInCache = async (\n flagsToCache: TFlags,\n cacheIdentifier?: TCacheIdentifiers,\n ) => {\n if (cacheIdentifier) {\n const cache = await getCache(\n cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n // NOTE: LDContextCommon is part of the type which we never use.\n this.#adapterState.context,\n );\n\n const cachedFlags: TFlags = cache.get();\n\n cache.set({ ...cachedFlags, ...flagsToCache });\n }\n };\n\n readonly #getInitialFlags = async ({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier,\n cacheMode,\n initializationTimeout,\n }: Pick<\n TLaunchDarklyAdapterArgs,\n | 'flags'\n | 'throwOnInitializationFailure'\n | 'cacheIdentifier'\n | 'cacheMode'\n | 'initializationTimeout'\n >): Promise<{\n flagsFromSdk?: TFlags;\n initializationStatus: AdapterInitializationStatus;\n }> => {\n if (this.#adapterState.client) {\n return this.#adapterState.client\n .waitForInitialization(initializationTimeout)\n .then(async () => {\n let flagsFromSdk: TFlags | undefined;\n\n if (this.#adapterState.client && !flags) {\n flagsFromSdk = this.#adapterState.client.allFlags();\n } else if (this.#adapterState.client && flags) {\n flagsFromSdk = {};\n\n for (const [requestedFlagName, defaultFlagValue] of Object.entries(\n flags,\n )) {\n const denormalizedRequestedFlagName =\n denormalizeFlagName(requestedFlagName);\n flagsFromSdk[denormalizedRequestedFlagName] =\n this.#adapterState.client.variation(\n denormalizedRequestedFlagName,\n defaultFlagValue,\n );\n }\n }\n\n if (flagsFromSdk) {\n const normalizedFlags = normalizeFlags(flagsFromSdk);\n\n await this.#maybeUpdateFlagsInCache(\n normalizedFlags,\n cacheIdentifier,\n );\n\n const flags =\n this.#withoutUnsubscribedOrLockedFlags(normalizedFlags);\n\n this.#updateFlagsInAdapterState(flags);\n\n if (cacheMode !== cacheModes.lazy) {\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags,\n );\n }\n }\n\n this.setConfigurationStatus(AdapterConfigurationStatus.Configured);\n\n return Promise.resolve({\n flagsFromSdk,\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n })\n .catch(async () => {\n if (throwOnInitializationFailure) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.',\n ),\n );\n }\n\n console.warn(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.',\n );\n\n return Promise.resolve({\n flagsFromSdk: undefined,\n initializationStatus: AdapterInitializationStatus.Failed,\n });\n });\n }\n\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: can not subscribe with non initialized client.',\n ),\n );\n };\n\n readonly #didFlagChange = (\n flagName: TFlagName,\n nextFlagValue: TFlagVariation,\n ) => {\n const previousFlagValue = this.getFlag(flagName);\n\n if (previousFlagValue === undefined) {\n return true;\n }\n\n return previousFlagValue !== nextFlagValue;\n };\n\n readonly #setupFlagSubcription = ({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier,\n cacheMode,\n }: {\n flagsFromSdk: TFlags;\n flagsUpdateDelayMs?: number;\n cacheIdentifier?: TCacheIdentifiers;\n cacheMode?: TCacheModes;\n }) => {\n for (const flagName in flagsFromSdk) {\n // Dispatch whenever a configured flag value changes\n if (Object.hasOwn(flagsFromSdk, flagName) && this.#adapterState.client) {\n this.#adapterState.client.on(\n `change:${flagName}`,\n async (flagValue) => {\n const [normalizedFlagName, normalizedFlagValue] = normalizeFlag(\n flagName,\n flagValue as TFlagVariation,\n );\n\n await this.#maybeUpdateFlagsInCache(\n {\n [normalizedFlagName]: normalizedFlagValue,\n },\n cacheIdentifier,\n );\n\n if (this.#getIsFlagUnsubcribed(normalizedFlagName)) {\n return;\n }\n\n // Sometimes the SDK flushes flag changes without a value having changed.\n if (!this.#didFlagChange(normalizedFlagName, normalizedFlagValue)) {\n return;\n }\n\n const updatedFlags: TFlags = {\n [normalizedFlagName]: normalizedFlagValue,\n };\n // NOTE: Adapter state needs to be updated outside of debounced-fn\n // so that no flag updates are lost.\n this.#updateFlagsInAdapterState(updatedFlags);\n\n const flushFlagsUpdate = () => {\n if (cacheMode === cacheModes.lazy) {\n return;\n }\n\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags,\n );\n };\n\n const scheduleImmediately = { before: true, after: false };\n const scheduleTrailingEdge = { before: false, after: true };\n\n debounce(flushFlagsUpdate, {\n wait: flagsUpdateDelayMs,\n ...(flagsUpdateDelayMs\n ? scheduleTrailingEdge\n : scheduleImmediately),\n })();\n },\n );\n }\n }\n };\n\n // External. Flags are autolocked when updated.\n updateFlags = (flags: TFlags, options?: TUpdateFlagsOptions) => {\n this.#updateFlagsInAdapterState(flags, options);\n\n // ...and flush initial state of flags\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags,\n );\n };\n\n async configure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers,\n ) {\n const handleFlagsChange = (nextFlags: TFlagsChange['flags']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onFlagsStateChange({\n flags: nextFlags,\n id: this.id,\n });\n };\n\n const handleStatusChange = (nextStatus: TAdapterStatusChange['status']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onStatusStateChange({\n status: nextStatus,\n id: this.id,\n });\n };\n\n this.#adapterState.configurationStatus =\n AdapterConfigurationStatus.Configuring;\n\n this.#adapterState.emitter.on('flagsStateChange', handleFlagsChange);\n this.#adapterState.emitter.on('statusStateChange', handleStatusChange);\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n\n const {\n sdk,\n context,\n flags,\n throwOnInitializationFailure = false,\n initializationTimeout = 2, // 2 seconds\n flagsUpdateDelayMs,\n } = adapterArgs;\n let cachedFlags: TFlags;\n\n this.#adapterState.context = this.#ensureContext(context);\n\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context,\n );\n\n cachedFlags = cache.get();\n\n if (cachedFlags) {\n this.#updateFlagsInAdapterState(cachedFlags);\n this.#adapterState.flags = cachedFlags;\n this.#adapterState.emitter.emit('flagsStateChange', cachedFlags);\n }\n }\n\n this.#adapterState.client = this.#initializeClient(\n sdk.clientSideId,\n this.#adapterState.context,\n sdk.clientOptions ?? {},\n );\n\n return this.#getInitialFlags({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n initializationTimeout,\n }).then(({ flagsFromSdk, initializationStatus }) => {\n if (flagsFromSdk) {\n this.#setupFlagSubcription({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n });\n }\n\n return { initializationStatus };\n });\n }\n\n async reconfigure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n _adapterEventHandlers: TAdapterEventHandlers,\n ) {\n if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.',\n ),\n );\n }\n\n const nextContext = this.#ensureContext(adapterArgs.context);\n\n if (!isEqual(this.#adapterState.context, nextContext)) {\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context,\n );\n\n cache.unset();\n }\n\n this.#adapterState.context = nextContext;\n\n await this.#changeClientContext(this.#adapterState.context);\n }\n\n return Promise.resolve({\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n }\n\n getIsConfigurationStatus(configurationStatus: AdapterConfigurationStatus) {\n return this.#adapterState.configurationStatus === configurationStatus;\n }\n\n setConfigurationStatus(nextConfigurationStatus: AdapterConfigurationStatus) {\n this.#adapterState.configurationStatus = nextConfigurationStatus;\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n }\n\n getClient() {\n return this.#adapterState.client;\n }\n\n getFlag(flagName: TFlagName): TFlagVariation {\n return this.#adapterState.flags[flagName];\n }\n\n async updateClientContext(\n updatedContextProps: TLaunchDarklyAdapterArgs['context'],\n ) {\n const isAdapterConfigured = this.getIsConfigurationStatus(\n AdapterConfigurationStatus.Configured,\n );\n\n warning(\n isAdapterConfigured,\n '@flopflip/launchdarkly-adapter: adapter not configured. Client context can not be updated before.',\n );\n\n if (!isAdapterConfigured) {\n return Promise.reject(\n new Error('Can not update client context: adapter not yet configured.'),\n );\n }\n\n return this.#changeClientContext({\n ...this.#adapterState.context,\n ...updatedContextProps,\n });\n }\n\n unsubscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Unsubscribed;\n };\n\n subscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Subscribed;\n };\n}\n\nconst adapter = new LaunchDarklyAdapter();\n\nexposeGlobally(adapter);\n\nexport { adapter };\n","const version = '__@FLOPFLIP/VERSION_OF_RELEASE__';\n\nexport { version };\nexport { adapter } from './adapter';\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter.ts","../src/index.ts"],"sourcesContent":["import {\n denormalizeFlagName,\n exposeGlobally,\n normalizeFlag,\n normalizeFlags,\n} from '@flopflip/adapter-utilities';\nimport { getCache } from '@flopflip/cache';\nimport {\n AdapterConfigurationStatus,\n AdapterInitializationStatus,\n AdapterSubscriptionStatus,\n adapterIdentifiers,\n cacheModes,\n type TAdapterEventHandlers,\n type TAdapterStatus,\n type TAdapterStatusChange,\n type TCacheIdentifiers,\n type TCacheModes,\n type TFlagName,\n type TFlags,\n type TFlagsChange,\n type TFlagVariation,\n type TLaunchDarklyAdapterArgs,\n type TLaunchDarklyAdapterInterface,\n type TUpdateFlagsOptions,\n} from '@flopflip/types';\nimport debounce from 'debounce-fn';\nimport {\n initialize as initializeLaunchDarklyClient,\n type LDClient,\n type LDContext,\n} from 'launchdarkly-js-client-sdk';\nimport isEqual from 'lodash/isEqual.js';\nimport mitt, { type Emitter } from 'mitt';\nimport warning from 'tiny-warning';\nimport { merge } from 'ts-deepmerge';\n\ntype TEmitterEvents = {\n flagsStateChange: TFlags;\n statusStateChange: Partial<TAdapterStatus>;\n};\n\ntype TLaunchDarklyAdapterState = {\n context?: LDContext;\n client?: LDClient;\n flags: TFlags;\n emitter: Emitter<TEmitterEvents>;\n lockedFlags: Set<TFlagName>;\n unsubscribedFlags: Set<TFlagName>;\n};\n\nclass LaunchDarklyAdapter implements TLaunchDarklyAdapterInterface {\n id: typeof adapterIdentifiers.launchdarkly;\n\n readonly #adapterState: TAdapterStatus & TLaunchDarklyAdapterState;\n\n constructor() {\n this.#adapterState = {\n subscriptionStatus: AdapterSubscriptionStatus.Subscribed,\n configurationStatus: AdapterConfigurationStatus.Unconfigured,\n context: undefined,\n client: undefined,\n flags: {},\n // Typings are incorrect and state that mitt is not callable.\n // Value of type 'MittStatic' is not callable. Did you mean to include 'new'\n emitter: mitt(),\n lockedFlags: new Set<TFlagName>(),\n unsubscribedFlags: new Set<TFlagName>(),\n };\n this.id = adapterIdentifiers.launchdarkly;\n }\n\n readonly #updateFlagsInAdapterState = (\n flags: TFlags,\n options?: TUpdateFlagsOptions\n ): void => {\n const updatedFlags = Object.entries(flags).reduce(\n (updatedFlags, [flagName, flagValue]) => {\n if (this.#getIsFlagLocked(flagName)) {\n return updatedFlags;\n }\n\n if (options?.lockFlags) {\n this.#adapterState.lockedFlags.add(flagName);\n }\n\n if (options?.unsubscribeFlags) {\n this.#adapterState.unsubscribedFlags.add(flagName);\n }\n\n const updated = {\n ...updatedFlags,\n [flagName]: flagValue,\n };\n\n return updated;\n },\n {}\n );\n\n this.#adapterState.flags = {\n ...this.#adapterState.flags,\n ...updatedFlags,\n };\n };\n\n readonly #getIsAdapterUnsubscribed = () =>\n this.#adapterState.subscriptionStatus ===\n AdapterSubscriptionStatus.Unsubscribed;\n\n readonly #getIsFlagUnsubcribed = (flagName: TFlagName) =>\n this.#adapterState.unsubscribedFlags.has(flagName);\n\n readonly #getIsFlagLocked = (flagName: TFlagName) =>\n this.#adapterState.lockedFlags.has(flagName);\n\n readonly #withoutUnsubscribedOrLockedFlags = (flags: TFlags) =>\n Object.fromEntries(\n Object.entries(flags).filter(\n ([flagName]) =>\n !this.#getIsFlagUnsubcribed(flagName) &&\n !this.#getIsFlagLocked(flagName)\n )\n );\n\n readonly #getIsAnonymousContext = (context: LDContext) => !context?.key;\n\n readonly #ensureContext = (context: LDContext) => {\n const isAnonymousContext = this.#getIsAnonymousContext(context);\n\n // NOTE: When marked `anonymous` the SDK will generate a unique key and cache it in local storage\n return merge(context, {\n key: isAnonymousContext ? undefined : context.key,\n anonymous: isAnonymousContext,\n });\n };\n\n readonly #initializeClient = (\n clientSideId: TLaunchDarklyAdapterArgs['sdk']['clientSideId'],\n context: LDContext,\n options: TLaunchDarklyAdapterArgs['sdk']['clientOptions']\n ) => initializeLaunchDarklyClient(clientSideId, context, options);\n\n readonly #changeClientContext = async (nextContext: LDContext) =>\n this.#adapterState.client?.identify\n ? this.#adapterState.client.identify(nextContext)\n : Promise.reject(\n new Error('Can not change user context: client not yet initialized.')\n );\n\n readonly #maybeUpdateFlagsInCache = async (\n flagsToCache: TFlags,\n cacheIdentifier?: TCacheIdentifiers\n ) => {\n if (cacheIdentifier) {\n const cache = await getCache(\n cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n // NOTE: LDContextCommon is part of the type which we never use.\n this.#adapterState.context\n );\n\n const cachedFlags: TFlags = cache.get();\n\n cache.set({ ...cachedFlags, ...flagsToCache });\n }\n };\n\n readonly #getInitialFlags = async ({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier,\n cacheMode,\n initializationTimeout,\n }: Pick<\n TLaunchDarklyAdapterArgs,\n | 'flags'\n | 'throwOnInitializationFailure'\n | 'cacheIdentifier'\n | 'cacheMode'\n | 'initializationTimeout'\n >): Promise<{\n flagsFromSdk?: TFlags;\n initializationStatus: AdapterInitializationStatus;\n }> => {\n if (this.#adapterState.client) {\n return this.#adapterState.client\n .waitForInitialization(initializationTimeout)\n .then(async () => {\n let flagsFromSdk: TFlags | undefined;\n\n if (this.#adapterState.client && !flags) {\n flagsFromSdk = this.#adapterState.client.allFlags();\n } else if (this.#adapterState.client && flags) {\n flagsFromSdk = {};\n\n for (const [requestedFlagName, defaultFlagValue] of Object.entries(\n flags\n )) {\n const denormalizedRequestedFlagName =\n denormalizeFlagName(requestedFlagName);\n flagsFromSdk[denormalizedRequestedFlagName] =\n this.#adapterState.client.variation(\n denormalizedRequestedFlagName,\n defaultFlagValue\n );\n }\n }\n\n if (flagsFromSdk) {\n const normalizedFlags = normalizeFlags(flagsFromSdk);\n\n await this.#maybeUpdateFlagsInCache(\n normalizedFlags,\n cacheIdentifier\n );\n\n const flags =\n this.#withoutUnsubscribedOrLockedFlags(normalizedFlags);\n\n this.#updateFlagsInAdapterState(flags);\n\n if (cacheMode !== cacheModes.lazy) {\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags\n );\n }\n }\n\n this.setConfigurationStatus(AdapterConfigurationStatus.Configured);\n\n return Promise.resolve({\n flagsFromSdk,\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n })\n .catch(async () => {\n if (throwOnInitializationFailure) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.'\n )\n );\n }\n\n console.warn(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.'\n );\n\n return Promise.resolve({\n flagsFromSdk: undefined,\n initializationStatus: AdapterInitializationStatus.Failed,\n });\n });\n }\n\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: can not subscribe with non initialized client.'\n )\n );\n };\n\n readonly #didFlagChange = (\n flagName: TFlagName,\n nextFlagValue: TFlagVariation\n ) => {\n const previousFlagValue = this.getFlag(flagName);\n\n if (previousFlagValue === undefined) {\n return true;\n }\n\n return previousFlagValue !== nextFlagValue;\n };\n\n readonly #setupFlagSubcription = ({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier,\n cacheMode,\n }: {\n flagsFromSdk: TFlags;\n flagsUpdateDelayMs?: number;\n cacheIdentifier?: TCacheIdentifiers;\n cacheMode?: TCacheModes;\n }) => {\n for (const flagName in flagsFromSdk) {\n // Dispatch whenever a configured flag value changes\n if (Object.hasOwn(flagsFromSdk, flagName) && this.#adapterState.client) {\n this.#adapterState.client.on(\n `change:${flagName}`,\n async (flagValue) => {\n const [normalizedFlagName, normalizedFlagValue] = normalizeFlag(\n flagName,\n flagValue as TFlagVariation\n );\n\n await this.#maybeUpdateFlagsInCache(\n {\n [normalizedFlagName]: normalizedFlagValue,\n },\n cacheIdentifier\n );\n\n if (this.#getIsFlagUnsubcribed(normalizedFlagName)) {\n return;\n }\n\n // Sometimes the SDK flushes flag changes without a value having changed.\n if (!this.#didFlagChange(normalizedFlagName, normalizedFlagValue)) {\n return;\n }\n\n const updatedFlags: TFlags = {\n [normalizedFlagName]: normalizedFlagValue,\n };\n // NOTE: Adapter state needs to be updated outside of debounced-fn\n // so that no flag updates are lost.\n this.#updateFlagsInAdapterState(updatedFlags);\n\n const flushFlagsUpdate = () => {\n if (cacheMode === cacheModes.lazy) {\n return;\n }\n\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags\n );\n };\n\n const scheduleImmediately = { before: true, after: false };\n const scheduleTrailingEdge = { before: false, after: true };\n\n debounce(flushFlagsUpdate, {\n wait: flagsUpdateDelayMs,\n ...(flagsUpdateDelayMs\n ? scheduleTrailingEdge\n : scheduleImmediately),\n })();\n }\n );\n }\n }\n };\n\n // External. Flags are autolocked when updated.\n updateFlags = (flags: TFlags, options?: TUpdateFlagsOptions) => {\n this.#updateFlagsInAdapterState(flags, options);\n\n // ...and flush initial state of flags\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags\n );\n };\n\n async configure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) {\n const handleFlagsChange = (nextFlags: TFlagsChange['flags']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onFlagsStateChange({\n flags: nextFlags,\n id: this.id,\n });\n };\n\n const handleStatusChange = (nextStatus: TAdapterStatusChange['status']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onStatusStateChange({\n status: nextStatus,\n id: this.id,\n });\n };\n\n this.#adapterState.configurationStatus =\n AdapterConfigurationStatus.Configuring;\n\n this.#adapterState.emitter.on('flagsStateChange', handleFlagsChange);\n this.#adapterState.emitter.on('statusStateChange', handleStatusChange);\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n\n const {\n sdk,\n context,\n flags,\n throwOnInitializationFailure = false,\n initializationTimeout = 2, // 2 seconds\n flagsUpdateDelayMs,\n } = adapterArgs;\n let cachedFlags: TFlags;\n\n this.#adapterState.context = this.#ensureContext(context);\n\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context\n );\n\n cachedFlags = cache.get();\n\n if (cachedFlags) {\n this.#updateFlagsInAdapterState(cachedFlags);\n this.#adapterState.flags = cachedFlags;\n this.#adapterState.emitter.emit('flagsStateChange', cachedFlags);\n }\n }\n\n this.#adapterState.client = this.#initializeClient(\n sdk.clientSideId,\n this.#adapterState.context,\n sdk.clientOptions ?? {}\n );\n\n return this.#getInitialFlags({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n initializationTimeout,\n }).then(({ flagsFromSdk, initializationStatus }) => {\n if (flagsFromSdk) {\n this.#setupFlagSubcription({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n });\n }\n\n return { initializationStatus };\n });\n }\n\n async reconfigure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n _adapterEventHandlers: TAdapterEventHandlers\n ) {\n if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.'\n )\n );\n }\n\n const nextContext = this.#ensureContext(adapterArgs.context);\n\n if (!isEqual(this.#adapterState.context, nextContext)) {\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context\n );\n\n cache.unset();\n }\n\n this.#adapterState.context = nextContext;\n\n await this.#changeClientContext(this.#adapterState.context);\n }\n\n return Promise.resolve({\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n }\n\n getIsConfigurationStatus(configurationStatus: AdapterConfigurationStatus) {\n return this.#adapterState.configurationStatus === configurationStatus;\n }\n\n setConfigurationStatus(nextConfigurationStatus: AdapterConfigurationStatus) {\n this.#adapterState.configurationStatus = nextConfigurationStatus;\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n }\n\n getClient() {\n return this.#adapterState.client;\n }\n\n getFlag(flagName: TFlagName): TFlagVariation {\n return this.#adapterState.flags[flagName];\n }\n\n async updateClientContext(\n updatedContextProps: TLaunchDarklyAdapterArgs['context']\n ) {\n const isAdapterConfigured = this.getIsConfigurationStatus(\n AdapterConfigurationStatus.Configured\n );\n\n warning(\n isAdapterConfigured,\n '@flopflip/launchdarkly-adapter: adapter not configured. Client context can not be updated before.'\n );\n\n if (!isAdapterConfigured) {\n return Promise.reject(\n new Error('Can not update client context: adapter not yet configured.')\n );\n }\n\n return this.#changeClientContext({\n ...this.#adapterState.context,\n ...updatedContextProps,\n });\n }\n\n unsubscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Unsubscribed;\n };\n\n subscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Subscribed;\n };\n}\n\nconst adapter = new LaunchDarklyAdapter();\n\nexposeGlobally(adapter);\n\nexport { adapter };\n","const version = '__@FLOPFLIP/VERSION_OF_RELEASE__';\n\nexport { version };\nexport { adapter } from './adapter';\n"],"mappings":"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","names":["updatedFlags","flags"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapter.ts","../src/index.ts"],"sourcesContent":["import {\n denormalizeFlagName,\n exposeGlobally,\n normalizeFlag,\n normalizeFlags,\n} from '@flopflip/adapter-utilities';\nimport { getCache } from '@flopflip/cache';\nimport {\n AdapterConfigurationStatus,\n AdapterInitializationStatus,\n AdapterSubscriptionStatus,\n adapterIdentifiers,\n cacheModes,\n type TAdapterEventHandlers,\n type TAdapterStatus,\n type TAdapterStatusChange,\n type TCacheIdentifiers,\n type TCacheModes,\n type TFlagName,\n type TFlags,\n type TFlagsChange,\n type TFlagVariation,\n type TLaunchDarklyAdapterArgs,\n type TLaunchDarklyAdapterInterface,\n type TUpdateFlagsOptions,\n} from '@flopflip/types';\nimport debounce from 'debounce-fn';\nimport {\n initialize as initializeLaunchDarklyClient,\n type LDClient,\n type LDContext,\n} from 'launchdarkly-js-client-sdk';\nimport isEqual from 'lodash/isEqual.js';\nimport mitt, { type Emitter } from 'mitt';\nimport warning from 'tiny-warning';\nimport { merge } from 'ts-deepmerge';\n\ntype TEmitterEvents = {\n flagsStateChange: TFlags;\n statusStateChange: Partial<TAdapterStatus>;\n};\n\ntype TLaunchDarklyAdapterState = {\n context?: LDContext;\n client?: LDClient;\n flags: TFlags;\n emitter: Emitter<TEmitterEvents>;\n lockedFlags: Set<TFlagName>;\n unsubscribedFlags: Set<TFlagName>;\n};\n\nclass LaunchDarklyAdapter implements TLaunchDarklyAdapterInterface {\n id: typeof adapterIdentifiers.launchdarkly;\n\n readonly #adapterState: TAdapterStatus & TLaunchDarklyAdapterState;\n\n constructor() {\n this.#adapterState = {\n subscriptionStatus: AdapterSubscriptionStatus.Subscribed,\n configurationStatus: AdapterConfigurationStatus.Unconfigured,\n context: undefined,\n client: undefined,\n flags: {},\n // Typings are incorrect and state that mitt is not callable.\n // Value of type 'MittStatic' is not callable. Did you mean to include 'new'\n emitter: mitt(),\n lockedFlags: new Set<TFlagName>(),\n unsubscribedFlags: new Set<TFlagName>(),\n };\n this.id = adapterIdentifiers.launchdarkly;\n }\n\n readonly #updateFlagsInAdapterState = (\n flags: TFlags,\n options?: TUpdateFlagsOptions,\n ): void => {\n const updatedFlags = Object.entries(flags).reduce(\n (updatedFlags, [flagName, flagValue]) => {\n if (this.#getIsFlagLocked(flagName)) {\n return updatedFlags;\n }\n\n if (options?.lockFlags) {\n this.#adapterState.lockedFlags.add(flagName);\n }\n\n if (options?.unsubscribeFlags) {\n this.#adapterState.unsubscribedFlags.add(flagName);\n }\n\n const updated = {\n ...updatedFlags,\n [flagName]: flagValue,\n };\n\n return updated;\n },\n {},\n );\n\n this.#adapterState.flags = {\n ...this.#adapterState.flags,\n ...updatedFlags,\n };\n };\n\n readonly #getIsAdapterUnsubscribed = () =>\n this.#adapterState.subscriptionStatus ===\n AdapterSubscriptionStatus.Unsubscribed;\n\n readonly #getIsFlagUnsubcribed = (flagName: TFlagName) =>\n this.#adapterState.unsubscribedFlags.has(flagName);\n\n readonly #getIsFlagLocked = (flagName: TFlagName) =>\n this.#adapterState.lockedFlags.has(flagName);\n\n readonly #withoutUnsubscribedOrLockedFlags = (flags: TFlags) =>\n Object.fromEntries(\n Object.entries(flags).filter(\n ([flagName]) =>\n !this.#getIsFlagUnsubcribed(flagName) &&\n !this.#getIsFlagLocked(flagName),\n ),\n );\n\n readonly #getIsAnonymousContext = (context: LDContext) => !context?.key;\n\n readonly #ensureContext = (context: LDContext) => {\n const isAnonymousContext = this.#getIsAnonymousContext(context);\n\n // NOTE: When marked `anonymous` the SDK will generate a unique key and cache it in local storage\n return merge(context, {\n key: isAnonymousContext ? undefined : context.key,\n anonymous: isAnonymousContext,\n });\n };\n\n readonly #initializeClient = (\n clientSideId: TLaunchDarklyAdapterArgs['sdk']['clientSideId'],\n context: LDContext,\n options: TLaunchDarklyAdapterArgs['sdk']['clientOptions'],\n ) => initializeLaunchDarklyClient(clientSideId, context, options);\n\n readonly #changeClientContext = async (nextContext: LDContext) =>\n this.#adapterState.client?.identify\n ? this.#adapterState.client.identify(nextContext)\n : Promise.reject(\n new Error('Can not change user context: client not yet initialized.'),\n );\n\n readonly #maybeUpdateFlagsInCache = async (\n flagsToCache: TFlags,\n cacheIdentifier?: TCacheIdentifiers,\n ) => {\n if (cacheIdentifier) {\n const cache = await getCache(\n cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n // NOTE: LDContextCommon is part of the type which we never use.\n this.#adapterState.context,\n );\n\n const cachedFlags: TFlags = cache.get();\n\n cache.set({ ...cachedFlags, ...flagsToCache });\n }\n };\n\n readonly #getInitialFlags = async ({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier,\n cacheMode,\n initializationTimeout,\n }: Pick<\n TLaunchDarklyAdapterArgs,\n | 'flags'\n | 'throwOnInitializationFailure'\n | 'cacheIdentifier'\n | 'cacheMode'\n | 'initializationTimeout'\n >): Promise<{\n flagsFromSdk?: TFlags;\n initializationStatus: AdapterInitializationStatus;\n }> => {\n if (this.#adapterState.client) {\n return this.#adapterState.client\n .waitForInitialization(initializationTimeout)\n .then(async () => {\n let flagsFromSdk: TFlags | undefined;\n\n if (this.#adapterState.client && !flags) {\n flagsFromSdk = this.#adapterState.client.allFlags();\n } else if (this.#adapterState.client && flags) {\n flagsFromSdk = {};\n\n for (const [requestedFlagName, defaultFlagValue] of Object.entries(\n flags,\n )) {\n const denormalizedRequestedFlagName =\n denormalizeFlagName(requestedFlagName);\n flagsFromSdk[denormalizedRequestedFlagName] =\n this.#adapterState.client.variation(\n denormalizedRequestedFlagName,\n defaultFlagValue,\n );\n }\n }\n\n if (flagsFromSdk) {\n const normalizedFlags = normalizeFlags(flagsFromSdk);\n\n await this.#maybeUpdateFlagsInCache(\n normalizedFlags,\n cacheIdentifier,\n );\n\n const flags =\n this.#withoutUnsubscribedOrLockedFlags(normalizedFlags);\n\n this.#updateFlagsInAdapterState(flags);\n\n if (cacheMode !== cacheModes.lazy) {\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags,\n );\n }\n }\n\n this.setConfigurationStatus(AdapterConfigurationStatus.Configured);\n\n return Promise.resolve({\n flagsFromSdk,\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n })\n .catch(async () => {\n if (throwOnInitializationFailure) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.',\n ),\n );\n }\n\n console.warn(\n '@flopflip/launchdarkly-adapter: adapter failed to initialize.',\n );\n\n return Promise.resolve({\n flagsFromSdk: undefined,\n initializationStatus: AdapterInitializationStatus.Failed,\n });\n });\n }\n\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: can not subscribe with non initialized client.',\n ),\n );\n };\n\n readonly #didFlagChange = (\n flagName: TFlagName,\n nextFlagValue: TFlagVariation,\n ) => {\n const previousFlagValue = this.getFlag(flagName);\n\n if (previousFlagValue === undefined) {\n return true;\n }\n\n return previousFlagValue !== nextFlagValue;\n };\n\n readonly #setupFlagSubcription = ({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier,\n cacheMode,\n }: {\n flagsFromSdk: TFlags;\n flagsUpdateDelayMs?: number;\n cacheIdentifier?: TCacheIdentifiers;\n cacheMode?: TCacheModes;\n }) => {\n for (const flagName in flagsFromSdk) {\n // Dispatch whenever a configured flag value changes\n if (Object.hasOwn(flagsFromSdk, flagName) && this.#adapterState.client) {\n this.#adapterState.client.on(\n `change:${flagName}`,\n async (flagValue) => {\n const [normalizedFlagName, normalizedFlagValue] = normalizeFlag(\n flagName,\n flagValue as TFlagVariation,\n );\n\n await this.#maybeUpdateFlagsInCache(\n {\n [normalizedFlagName]: normalizedFlagValue,\n },\n cacheIdentifier,\n );\n\n if (this.#getIsFlagUnsubcribed(normalizedFlagName)) {\n return;\n }\n\n // Sometimes the SDK flushes flag changes without a value having changed.\n if (!this.#didFlagChange(normalizedFlagName, normalizedFlagValue)) {\n return;\n }\n\n const updatedFlags: TFlags = {\n [normalizedFlagName]: normalizedFlagValue,\n };\n // NOTE: Adapter state needs to be updated outside of debounced-fn\n // so that no flag updates are lost.\n this.#updateFlagsInAdapterState(updatedFlags);\n\n const flushFlagsUpdate = () => {\n if (cacheMode === cacheModes.lazy) {\n return;\n }\n\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags,\n );\n };\n\n const scheduleImmediately = { before: true, after: false };\n const scheduleTrailingEdge = { before: false, after: true };\n\n debounce(flushFlagsUpdate, {\n wait: flagsUpdateDelayMs,\n ...(flagsUpdateDelayMs\n ? scheduleTrailingEdge\n : scheduleImmediately),\n })();\n },\n );\n }\n }\n };\n\n // External. Flags are autolocked when updated.\n updateFlags = (flags: TFlags, options?: TUpdateFlagsOptions) => {\n this.#updateFlagsInAdapterState(flags, options);\n\n // ...and flush initial state of flags\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n this.#adapterState.flags,\n );\n };\n\n async configure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers,\n ) {\n const handleFlagsChange = (nextFlags: TFlagsChange['flags']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onFlagsStateChange({\n flags: nextFlags,\n id: this.id,\n });\n };\n\n const handleStatusChange = (nextStatus: TAdapterStatusChange['status']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onStatusStateChange({\n status: nextStatus,\n id: this.id,\n });\n };\n\n this.#adapterState.configurationStatus =\n AdapterConfigurationStatus.Configuring;\n\n this.#adapterState.emitter.on('flagsStateChange', handleFlagsChange);\n this.#adapterState.emitter.on('statusStateChange', handleStatusChange);\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n\n const {\n sdk,\n context,\n flags,\n throwOnInitializationFailure = false,\n initializationTimeout = 2, // 2 seconds\n flagsUpdateDelayMs,\n } = adapterArgs;\n let cachedFlags: TFlags;\n\n this.#adapterState.context = this.#ensureContext(context);\n\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context,\n );\n\n cachedFlags = cache.get();\n\n if (cachedFlags) {\n this.#updateFlagsInAdapterState(cachedFlags);\n this.#adapterState.flags = cachedFlags;\n this.#adapterState.emitter.emit('flagsStateChange', cachedFlags);\n }\n }\n\n this.#adapterState.client = this.#initializeClient(\n sdk.clientSideId,\n this.#adapterState.context,\n sdk.clientOptions ?? {},\n );\n\n return this.#getInitialFlags({\n flags,\n throwOnInitializationFailure,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n initializationTimeout,\n }).then(({ flagsFromSdk, initializationStatus }) => {\n if (flagsFromSdk) {\n this.#setupFlagSubcription({\n flagsFromSdk,\n flagsUpdateDelayMs,\n cacheIdentifier: adapterArgs.cacheIdentifier,\n cacheMode: adapterArgs.cacheMode,\n });\n }\n\n return { initializationStatus };\n });\n }\n\n async reconfigure(\n adapterArgs: TLaunchDarklyAdapterArgs,\n _adapterEventHandlers: TAdapterEventHandlers,\n ) {\n if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) {\n return Promise.reject(\n new Error(\n '@flopflip/launchdarkly-adapter: please configure adapter before reconfiguring.',\n ),\n );\n }\n\n const nextContext = this.#ensureContext(adapterArgs.context);\n\n if (!isEqual(this.#adapterState.context, nextContext)) {\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.launchdarkly,\n this.#adapterState.context,\n );\n\n cache.unset();\n }\n\n this.#adapterState.context = nextContext;\n\n await this.#changeClientContext(this.#adapterState.context);\n }\n\n return Promise.resolve({\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n }\n\n getIsConfigurationStatus(configurationStatus: AdapterConfigurationStatus) {\n return this.#adapterState.configurationStatus === configurationStatus;\n }\n\n setConfigurationStatus(nextConfigurationStatus: AdapterConfigurationStatus) {\n this.#adapterState.configurationStatus = nextConfigurationStatus;\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n }\n\n getClient() {\n return this.#adapterState.client;\n }\n\n getFlag(flagName: TFlagName): TFlagVariation {\n return this.#adapterState.flags[flagName];\n }\n\n async updateClientContext(\n updatedContextProps: TLaunchDarklyAdapterArgs['context'],\n ) {\n const isAdapterConfigured = this.getIsConfigurationStatus(\n AdapterConfigurationStatus.Configured,\n );\n\n warning(\n isAdapterConfigured,\n '@flopflip/launchdarkly-adapter: adapter not configured. Client context can not be updated before.',\n );\n\n if (!isAdapterConfigured) {\n return Promise.reject(\n new Error('Can not update client context: adapter not yet configured.'),\n );\n }\n\n return this.#changeClientContext({\n ...this.#adapterState.context,\n ...updatedContextProps,\n });\n }\n\n unsubscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Unsubscribed;\n };\n\n subscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Subscribed;\n };\n}\n\nconst adapter = new LaunchDarklyAdapter();\n\nexposeGlobally(adapter);\n\nexport { adapter };\n","const version = '__@FLOPFLIP/VERSION_OF_RELEASE__';\n\nexport { version };\nexport { adapter } from './adapter';\n"],"mappings":"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","names":["updatedFlags","flags"]}
|
package/package.json
CHANGED
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flopflip/launchdarkly-adapter",
|
|
3
|
-
"version": "15.1.
|
|
3
|
+
"version": "15.1.9",
|
|
4
4
|
"description": "A adapter around the LaunchDarkly client for flipflop",
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
"keywords": [
|
|
6
|
+
"LaunchDarkly",
|
|
7
|
+
"client",
|
|
8
|
+
"feature-flags",
|
|
9
|
+
"feature-toggles"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://github.com/tdeekens/flopflip#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/tdeekens/flopflip/issues"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"author": "Tobias Deekens <nerd@tdeekens.name>",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/tdeekens/flopflip.git",
|
|
20
|
+
"directory": "packages/launchdarkly-adapter"
|
|
12
21
|
},
|
|
22
|
+
"files": [
|
|
23
|
+
"readme.md",
|
|
24
|
+
"dist/**"
|
|
25
|
+
],
|
|
26
|
+
"type": "module",
|
|
27
|
+
"sideEffects": false,
|
|
13
28
|
"main": "./dist/index.js",
|
|
14
29
|
"typesVersions": {
|
|
15
30
|
"*": {
|
|
@@ -19,49 +34,34 @@
|
|
|
19
34
|
]
|
|
20
35
|
}
|
|
21
36
|
},
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
"exports": {
|
|
38
|
+
".": {
|
|
39
|
+
"import": "./dist/index.js",
|
|
40
|
+
"require": "./dist/index.cjs"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
26
43
|
"publishConfig": {
|
|
27
44
|
"access": "public"
|
|
28
45
|
},
|
|
29
|
-
"repository": {
|
|
30
|
-
"type": "git",
|
|
31
|
-
"url": "https://github.com/tdeekens/flopflip.git",
|
|
32
|
-
"directory": "packages/launchdarkly-adapter"
|
|
33
|
-
},
|
|
34
|
-
"author": "Tobias Deekens <nerd@tdeekens.name>",
|
|
35
|
-
"license": "MIT",
|
|
36
|
-
"bugs": {
|
|
37
|
-
"url": "https://github.com/tdeekens/flopflip/issues"
|
|
38
|
-
},
|
|
39
|
-
"homepage": "https://github.com/tdeekens/flopflip#readme",
|
|
40
|
-
"devDependencies": {
|
|
41
|
-
"globalthis": "1.0.4",
|
|
42
|
-
"tsup": "8.5.1",
|
|
43
|
-
"@flopflip/tsconfig": "15.1.7"
|
|
44
|
-
},
|
|
45
46
|
"dependencies": {
|
|
46
|
-
"@babel/runtime": "7.
|
|
47
|
+
"@babel/runtime": "7.29.2",
|
|
47
48
|
"debounce-fn": "4.0.0",
|
|
48
49
|
"launchdarkly-js-client-sdk": "3.9.0",
|
|
49
50
|
"lodash": "4.17.23",
|
|
50
51
|
"mitt": "3.0.1",
|
|
51
52
|
"tiny-warning": "1.0.3",
|
|
52
53
|
"ts-deepmerge": "7.0.3",
|
|
53
|
-
"@flopflip/adapter-utilities": "15.1.
|
|
54
|
-
"@flopflip/cache": "15.1.
|
|
55
|
-
"@flopflip/localstorage-cache": "15.1.
|
|
56
|
-
"@flopflip/sessionstorage-cache": "15.1.
|
|
57
|
-
"@flopflip/types": "15.1.
|
|
54
|
+
"@flopflip/adapter-utilities": "15.1.9",
|
|
55
|
+
"@flopflip/cache": "15.1.9",
|
|
56
|
+
"@flopflip/localstorage-cache": "15.1.9",
|
|
57
|
+
"@flopflip/sessionstorage-cache": "15.1.9",
|
|
58
|
+
"@flopflip/types": "15.1.9"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"globalthis": "1.0.4",
|
|
62
|
+
"tsup": "8.5.1",
|
|
63
|
+
"@flopflip/tsconfig": "15.1.9"
|
|
58
64
|
},
|
|
59
|
-
"keywords": [
|
|
60
|
-
"feature-flags",
|
|
61
|
-
"feature-toggles",
|
|
62
|
-
"LaunchDarkly",
|
|
63
|
-
"client"
|
|
64
|
-
],
|
|
65
65
|
"scripts": {
|
|
66
66
|
"build": "rimraf dist && tsup",
|
|
67
67
|
"check-types": "tsc --noEmit",
|