{"version":3,"sources":["/home/runner/work/flags/flags/packages/adapter-launchdarkly/dist/chunk-JTNOK7GK.cjs","../src/provider/index.ts"],"names":[],"mappings":"AAAA;ACgBA,MAAA,SAAsB,eAAA,CAAgB,OAAA,EAIZ;AACxB,EAAA,MAAM,MAAA,EAAmD,CAAC,CAAA;AAE1D,EAAA,GAAA,CAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,GAAA,EAAK,8BAAA;AAAA,MACL,IAAA,EAAM;AAAA,IACR,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,GAAA,CAAI,CAAC,OAAA,CAAQ,WAAA,EAAa;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,GAAA,EAAK,kCAAA;AAAA,MACL,IAAA,EAAM;AAAA,IACR,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,GAAA,CAAI,CAAC,OAAA,CAAQ,UAAA,EAAY;AACvB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,GAAA,EAAK,kCAAA;AAAA,MACL,IAAA,EAAM;AAAA,IACR,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,CAAA,EAAG;AACpB,IAAA,OAAO,EAAE,WAAA,EAAa,CAAC,CAAA,EAAG,MAAM,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,QAAA,EAAU;AAAA,IACd,aAAA,EAAe,OAAA,CAAQ,MAAA;AAAA,IACvB,gBAAA,EAAkB;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,IAAA,EAAM,MAAM,KAAA;AAAA,IAChB,CAAA,0CAAA,EAA6C,OAAA,CAAQ,UAAU,CAAA,qCAAA,CAAA;AAAA,IAC/D;AAAA,MACE,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA;AAAA,MACA,KAAA,EAAO;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,GAAA,CAAI,GAAA,CAAI,OAAA,IAAW,GAAA,EAAK;AACtB,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,CAAC,CAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL;AAAA,UACE,GAAA,EAAK,CAAA,6BAAA,EAAgC,OAAA,CAAQ,UAAU,CAAA,CAAA;AACH,UAAA;AACtD,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAEI,EAAA;AAC2B,IAAA;AAC6B,IAAA;AAGC,IAAA;AAC9B,MAAA;AAC4B,QAAA;AACrD,QAAA;AACU,UAAA;AACR,UAAA;AACO,UAAA;AACT,QAAA;AACF,MAAA;AAEiC,MAAA;AAEJ,QAAA;AACM,QAAA;AAC5B,MAAA;AACM,QAAA;AAC8C,UAAA;AACP,UAAA;AACjD,QAAA;AACH,MAAA;AACF,IAAA;AAEO,IAAA;AACyD,MAAA;AAC5C,QAAA;AAAA;AAEkC,UAAA;AAC9B,UAAA;AACF,UAAA;AAC6B,UAAA;AAC1B,YAAA;AACA,YAAA;AACjB,UAAA;AACJ,QAAA;AACO,QAAA;AACJ,MAAA;AACL,MAAA;AACF,IAAA;AACM,EAAA;AACC,IAAA;AACS,MAAA;AACP,MAAA;AACL,QAAA;AACyD,UAAA;AACjD,UAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF;AD/BkE;AACA;AACA;AACA","file":"/home/runner/work/flags/flags/packages/adapter-launchdarkly/dist/chunk-JTNOK7GK.cjs","sourcesContent":[null,"import type { FlagDefinitionsType, JsonValue, ProviderData } from 'flags';\n\n// See: https://apidocs.launchdarkly.com/tag/Feature-flags#operation/getFeatureFlags\ninterface LaunchDarklyApiData {\n  items: {\n    key: string;\n    variations: { value: JsonValue; name?: string }[];\n    description: string;\n    creationDate: number;\n    defaults: {\n      offVariation: number;\n    };\n  }[];\n  totalCount: number;\n}\n\nexport async function getProviderData(options: {\n  apiKey: string;\n  environment: string;\n  projectKey: string;\n}): Promise<ProviderData> {\n  const hints: Exclude<ProviderData['hints'], undefined> = [];\n\n  if (!options.apiKey) {\n    hints.push({\n      key: 'launchdarkly/missing-api-key',\n      text: 'Missing LaunchDarkly API Key',\n    });\n  }\n\n  if (!options.environment) {\n    hints.push({\n      key: 'launchdarkly/missing-environment',\n      text: 'Missing LaunchDarkly API Key',\n    });\n  }\n\n  if (!options.projectKey) {\n    hints.push({\n      key: 'launchdarkly/missing-environment',\n      text: 'Missing LaunchDarkly Project Key',\n    });\n  }\n\n  if (hints.length > 0) {\n    return { definitions: {}, hints };\n  }\n\n  const headers = {\n    Authorization: options.apiKey,\n    'LD-API-Version': '20240415',\n  };\n\n  const res = await fetch(\n    `https://app.launchdarkly.com/api/v2/flags/${options.projectKey}?offset=0&limit=100&sort=creationDate`,\n    {\n      method: 'GET',\n      headers,\n      cache: 'no-store',\n    },\n  );\n\n  if (res.status !== 200) {\n    return {\n      definitions: {},\n      hints: [\n        {\n          key: `launchdarkly/response-not-ok/${options.projectKey}`,\n          text: `Failed to fetch LaunchDarkly (Received ${res.status} response)`,\n        },\n      ],\n    };\n  }\n\n  try {\n    const data = (await res.json()) as LaunchDarklyApiData;\n    const items: LaunchDarklyApiData['items'] = [...data.items];\n\n    // paginate in a parallel\n    for (let offset = 100; offset < data.totalCount; offset += 100) {\n      const paginatedRes = await fetch(\n        `https://app.launchdarkly.com/api/v2/flags/${options.projectKey}?offset=${offset}&limit=100&sort=creationDate`,\n        {\n          method: 'GET',\n          headers,\n          cache: 'no-store',\n        },\n      );\n\n      if (paginatedRes.status === 200) {\n        const paginatedData =\n          (await paginatedRes.json()) as LaunchDarklyApiData;\n        items.push(...paginatedData.items);\n      } else {\n        hints.push({\n          key: `launchdarkly/response-not-ok/${options.projectKey}-${offset}`,\n          text: `Failed to fetch LaunchDarkly (Received ${paginatedRes.status} response)`,\n        });\n      }\n    }\n\n    return {\n      definitions: items.reduce<FlagDefinitionsType>((acc, item) => {\n        acc[item.key] = {\n          // defaultValue: item.variations[item.defaults.offVariation].value,\n          origin: `https://app.launchdarkly.com/${options.projectKey}/${options.environment}/features/${item.key}/targeting`,\n          description: item.description,\n          createdAt: item.creationDate,\n          options: item.variations.map((variation) => ({\n            value: variation.value,\n            label: variation.name,\n          })),\n        };\n        return acc;\n      }, {}),\n      hints,\n    };\n  } catch {\n    return {\n      definitions: {},\n      hints: [\n        {\n          key: `launchdarkly/response-not-ok/${options.projectKey}`,\n          text: `Failed to fetch LaunchDarkly`,\n        },\n      ],\n    };\n  }\n}\n"]}