{"version":3,"sources":["/home/runner/work/flags/flags/packages/adapter-launchdarkly/dist/index.cjs","../src/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/flags/flags/packages/adapter-launchdarkly/dist/index.cjs","sourcesContent":[null,"import {\n  init,\n  type LDClient,\n  type LDContext,\n} from '@launchdarkly/vercel-server-sdk';\nimport { createClient, type GlobalConfigClient } from '@vercel/global-config';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport type { Adapter } from 'flags';\n\nexport { getProviderData } from './provider';\nexport type { LDContext };\n\ninterface AdapterOptions<ValueType> {\n  defaultValue?: ValueType;\n}\n\ntype AdapterResponse = {\n  variation: <ValueType>(\n    options?: AdapterOptions<ValueType>,\n  ) => Adapter<ValueType, LDContext>;\n  /** The LaunchDarkly client instance used by the adapter. */\n  ldClient: LDClient;\n};\n\nlet defaultLaunchDarklyAdapter:\n  | ReturnType<typeof createLaunchDarklyAdapter>\n  | undefined;\n\nfunction assertEnv(name: string): string {\n  const value = process.env[name];\n  if (!value) {\n    throw new Error(\n      `LaunchDarkly Adapter: Missing ${name} environment variable`,\n    );\n  }\n  return value;\n}\n\nexport function createLaunchDarklyAdapter({\n  projectSlug,\n  clientSideId,\n  globalConfigConnectionString,\n  edgeConfigConnectionString,\n}: {\n  projectSlug: string;\n  clientSideId: string;\n  globalConfigConnectionString?: string;\n  /** @deprecated Use `globalConfigConnectionString` instead. */\n  edgeConfigConnectionString?: string;\n}): AdapterResponse {\n  const connectionString =\n    globalConfigConnectionString ?? edgeConfigConnectionString;\n  if (!connectionString) {\n    throw new Error(\n      'LaunchDarkly Adapter: Missing globalConfigConnectionString',\n    );\n  }\n  const globalConfigClient = createClient(connectionString);\n\n  const store = new AsyncLocalStorage<WeakKey>();\n  const cache = new WeakMap<WeakKey, Promise<unknown>>();\n\n  const patchedGlobalConfigClient: GlobalConfigClient = {\n    ...globalConfigClient,\n    get: async <T>(key: string) => {\n      const h = store.getStore();\n      if (h) {\n        const cached = cache.get(h);\n        if (cached) {\n          return cached as Promise<T>;\n        }\n      }\n\n      const promise = globalConfigClient.get<T>(key);\n      if (h) cache.set(h, promise);\n\n      return promise;\n    },\n  };\n\n  let initPromise: Promise<unknown> | null = null;\n\n  const ldClient = init(clientSideId, patchedGlobalConfigClient);\n\n  function origin(key: string) {\n    return `https://app.launchdarkly.com/projects/${projectSlug}/flags/${key}/`;\n  }\n\n  function variation<ValueType>(\n    options: AdapterOptions<ValueType> = {},\n  ): Adapter<ValueType, LDContext> {\n    return {\n      origin,\n      async decide({ key, entities, headers }): Promise<ValueType> {\n        if (!ldClient.initialized()) {\n          if (!initPromise) initPromise = ldClient.waitForInitialization();\n          await initPromise;\n        }\n\n        return store.run(\n          headers,\n          () =>\n            ldClient.variation(\n              key,\n              entities as LDContext,\n              options.defaultValue,\n            ) as ValueType,\n        );\n      },\n    };\n  }\n\n  return {\n    ldClient,\n    variation,\n  };\n}\n\nfunction getOrCreateDeaultAdapter() {\n  if (!defaultLaunchDarklyAdapter) {\n    const globalConfigConnectionString = assertEnv('EXPERIMENTATION_CONFIG');\n    const clientSideId = assertEnv('LAUNCHDARKLY_CLIENT_SIDE_ID');\n    const projectSlug = assertEnv('LAUNCHDARKLY_PROJECT_SLUG');\n\n    defaultLaunchDarklyAdapter = createLaunchDarklyAdapter({\n      projectSlug,\n      clientSideId,\n      globalConfigConnectionString,\n    });\n  }\n\n  return defaultLaunchDarklyAdapter;\n}\n\n/**\n * The default LaunchDarkly adapter.\n *\n * This is a convenience object that pre-initializes the LaunchDarkly SDK and provides\n * the adapter function for usage with the Flags SDK.\n *\n * This is the recommended way to use the LaunchDarkly adapter.\n *\n * ```ts\n * // flags.ts\n * import { flag } from 'flags/next';\n * import { ldAdapter, type LDContext } from '@flags-sdk/launchdarkly';\n *\n * const flag = flag<boolean, LDContext>({\n *   key: 'my-flag',\n *   defaultValue: false,\n *   identify: () => ({ key: \"user-123\" }),\n *   adapter: ldAdapter.variation(),\n * });\n * ```\n */\nexport const ldAdapter: AdapterResponse = {\n  variation: (...args) => getOrCreateDeaultAdapter().variation(...args),\n  get ldClient() {\n    return getOrCreateDeaultAdapter().ldClient;\n  },\n};\n"]}