{"version":3,"file":"feature-repository.mjs","names":["getPolyfills","promiseTimeout","cacheSettings","staleTTL","maxAge","cacheKey","backgroundSync","maxEntries","disableIdleStreams","idleStreamInterval","disableCache","polyfills","helpers","fetchFeaturesCall","_ref","host","clientKey","headers","fetch","concat","fetchRemoteEvalCall","_ref2","payload","options","method","_objectSpread","body","JSON","stringify","eventSourceCall","_ref3","EventSource","startIdleListener","idleTimeout","isBrowser","window","document","onVisibilityChange","visibilityState","clearTimeout","onVisible","setTimeout","onHidden","addEventListener","removeEventListener","stopIdleListener","globalThis","localStorage","e","subscribedInstances","Map","cacheInitialized","cache","activeFetches","streams","supportsSSE","Set","setPolyfills","overrides","Object","assign","configureCache","clearAutoRefresh","clearCache","clear","updatePersistentCache","refreshFeatures","_ref4","instance","timeout","skipCache","allowStale","fetchFeaturesWithCache","subscribe","key","getKey","subs","get","add","set","unsubscribe","forEach","s","delete","channel","state","disableChannel","enableChannel","setItem","Array","from","entries","_ref5","getCacheKey","now","Date","minStaleAt","getTime","initializeCache","existing","undefined","staleAt","sse","fetchFeatures","startAutoRefresh","data","success","source","res","error","Error","apiHost","getApiInfo","baseKey","isRemoteEval","attributes","getAttributes","cacheKeyAttributes","getCacheKeyAttributes","keys","ca","fv","getForcedVariations","url","getUrl","value","getItem","parsed","parse","isArray","_ref6","cleanupCache","cleanupFn","entriesWithTimestamps","map","_ref7","sort","a","b","entriesToRemoveCount","Math","min","max","size","i","onNewFeatureData","version","dateUpdated","has","instances","refreshInstance","setPayload","getPayload","apiRequestHeaders","getApiHosts","getClientKey","remoteEval","promise","fetcher","forcedVariations","forcedFeatures","getForcedFeatures","then","ok","status","json","catch","process","env","NODE_ENV","log","message","forceSSE","arguments","length","streamingHost","streamingHostRequestHeaders","src","cb","event","type","errors","onSSEError","readyState","delay","pow","random","includes","onopen","onerror","close","destroyChannel","startStreaming","streaming"],"sources":["../../src/feature-repository.ts"],"sourcesContent":["import {\n  Attributes,\n  CacheSettings,\n  FeatureApiResponse,\n  FetchResponse,\n  Helpers,\n  Polyfills,\n} from \"./types/growthbook\";\nimport { getPolyfills, promiseTimeout } from \"./util\";\nimport type {\n  GrowthBook,\n  InitOptions,\n  InitSyncOptions,\n  GrowthBookClient,\n} from \".\";\n\ntype CacheEntry = {\n  data: FeatureApiResponse;\n  sse?: boolean;\n  version: string;\n  staleAt: Date;\n};\ntype ScopedChannel = {\n  src: EventSource | null;\n  cb: (event: MessageEvent<string>) => void;\n  host: string;\n  clientKey: string;\n  headers?: Record<string, string>;\n  errors: number;\n  state: \"active\" | \"idle\" | \"disabled\";\n};\n\n// Config settings\nconst cacheSettings: CacheSettings = {\n  // Consider a fetch stale after 1 minute\n  staleTTL: 1000 * 60,\n  // Max time to keep a fetch in cache (4 hours default)\n  maxAge: 1000 * 60 * 60 * 4,\n  cacheKey: \"gbFeaturesCache\",\n  backgroundSync: true,\n  maxEntries: 10,\n  disableIdleStreams: false,\n  idleStreamInterval: 20000,\n  disableCache: false,\n};\n\nconst polyfills = getPolyfills();\n\nexport const helpers: Helpers = {\n  fetchFeaturesCall: ({ host, clientKey, headers }) => {\n    return (polyfills.fetch as typeof globalThis.fetch)(\n      `${host}/api/features/${clientKey}`,\n      { headers },\n    );\n  },\n  fetchRemoteEvalCall: ({ host, clientKey, payload, headers }) => {\n    const options = {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\", ...headers },\n      body: JSON.stringify(payload),\n    };\n    return (polyfills.fetch as typeof globalThis.fetch)(\n      `${host}/api/eval/${clientKey}`,\n      options,\n    );\n  },\n  eventSourceCall: ({ host, clientKey, headers }) => {\n    if (headers) {\n      return new polyfills.EventSource(`${host}/sub/${clientKey}`, {\n        headers,\n      });\n    }\n    return new polyfills.EventSource(`${host}/sub/${clientKey}`);\n  },\n  startIdleListener: () => {\n    let idleTimeout: number | undefined;\n    const isBrowser =\n      typeof window !== \"undefined\" && typeof document !== \"undefined\";\n    if (!isBrowser) return;\n    const onVisibilityChange = () => {\n      if (document.visibilityState === \"visible\") {\n        window.clearTimeout(idleTimeout);\n        onVisible();\n      } else if (document.visibilityState === \"hidden\") {\n        idleTimeout = window.setTimeout(\n          onHidden,\n          cacheSettings.idleStreamInterval,\n        );\n      }\n    };\n    document.addEventListener(\"visibilitychange\", onVisibilityChange);\n    return () =>\n      document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n  },\n  stopIdleListener: () => {\n    // No-op, replaced by startIdleListener\n  },\n};\n\ntry {\n  if (globalThis.localStorage) {\n    polyfills.localStorage = globalThis.localStorage;\n  }\n} catch (e) {\n  // Ignore localStorage errors\n}\n\n// Global state\nconst subscribedInstances: Map<\n  string,\n  Set<GrowthBook | GrowthBookClient>\n> = new Map();\nlet cacheInitialized = false;\nconst cache: Map<string, CacheEntry> = new Map();\nconst activeFetches: Map<string, Promise<FetchResponse>> = new Map();\nconst streams: Map<string, ScopedChannel> = new Map();\nconst supportsSSE: Set<string> = new Set();\n\n// Public functions\nexport function setPolyfills(overrides: Partial<Polyfills>): void {\n  Object.assign(polyfills, overrides);\n}\nexport function configureCache(overrides: Partial<CacheSettings>): void {\n  Object.assign(cacheSettings, overrides);\n  if (!cacheSettings.backgroundSync) {\n    clearAutoRefresh();\n  }\n}\n\nexport async function clearCache(): Promise<void> {\n  cache.clear();\n  activeFetches.clear();\n  clearAutoRefresh();\n  cacheInitialized = false;\n  await updatePersistentCache();\n}\n\n// Get or fetch features and refresh the SDK instance\nexport async function refreshFeatures({\n  instance,\n  timeout,\n  skipCache,\n  allowStale,\n  backgroundSync,\n}: {\n  instance: GrowthBook | GrowthBookClient;\n  timeout?: number;\n  skipCache?: boolean;\n  allowStale?: boolean;\n  backgroundSync?: boolean;\n}): Promise<FetchResponse> {\n  if (!backgroundSync) {\n    cacheSettings.backgroundSync = false;\n  }\n\n  return fetchFeaturesWithCache({\n    instance,\n    allowStale,\n    timeout,\n    skipCache,\n  });\n}\n\n// Subscribe a GrowthBook instance to feature changes\nfunction subscribe(instance: GrowthBook | GrowthBookClient): void {\n  const key = getKey(instance);\n  const subs = subscribedInstances.get(key) || new Set();\n  subs.add(instance);\n  subscribedInstances.set(key, subs);\n}\nexport function unsubscribe(instance: GrowthBook | GrowthBookClient): void {\n  subscribedInstances.forEach((s) => s.delete(instance));\n}\n\nexport function onHidden() {\n  streams.forEach((channel) => {\n    if (!channel) return;\n    channel.state = \"idle\";\n    disableChannel(channel);\n  });\n}\n\nexport function onVisible() {\n  streams.forEach((channel) => {\n    if (!channel) return;\n    if (channel.state !== \"idle\") return;\n    enableChannel(channel);\n  });\n}\n\n// Private functions\n\nasync function updatePersistentCache() {\n  try {\n    if (!polyfills.localStorage) return;\n    await polyfills.localStorage.setItem(\n      cacheSettings.cacheKey,\n      JSON.stringify(Array.from(cache.entries())),\n    );\n  } catch (e) {\n    // Ignore localStorage errors\n  }\n}\n\n// SWR wrapper for fetching features. May indirectly or directly start SSE streaming.\nasync function fetchFeaturesWithCache({\n  instance,\n  allowStale,\n  timeout,\n  skipCache,\n}: {\n  instance: GrowthBook | GrowthBookClient;\n  allowStale?: boolean;\n  timeout?: number;\n  skipCache?: boolean;\n}): Promise<FetchResponse> {\n  const key = getKey(instance);\n  const cacheKey = getCacheKey(instance);\n  const now = new Date();\n\n  const minStaleAt = new Date(\n    now.getTime() - cacheSettings.maxAge + cacheSettings.staleTTL,\n  );\n\n  await initializeCache();\n  const existing =\n    !cacheSettings.disableCache && !skipCache ? cache.get(cacheKey) : undefined;\n  if (\n    existing &&\n    (allowStale || existing.staleAt > now) &&\n    existing.staleAt > minStaleAt\n  ) {\n    // Restore from cache whether SSE is supported\n    if (existing.sse) supportsSSE.add(key);\n\n    // Reload features in the background if stale\n    if (existing.staleAt < now) {\n      fetchFeatures(instance);\n    }\n    // Otherwise, if we don't need to refresh now, start a background sync\n    else {\n      startAutoRefresh(instance);\n    }\n    return { data: existing.data, success: true, source: \"cache\" };\n  } else {\n    const res = await promiseTimeout(fetchFeatures(instance), timeout);\n    return (\n      res || {\n        data: null,\n        success: false,\n        source: \"timeout\",\n        error: new Error(\"Timeout\"),\n      }\n    );\n  }\n}\n\nfunction getKey(instance: GrowthBook | GrowthBookClient): string {\n  const [apiHost, clientKey] = instance.getApiInfo();\n  return `${apiHost}||${clientKey}`;\n}\n\nfunction getCacheKey(instance: GrowthBook | GrowthBookClient): string {\n  const baseKey = getKey(instance);\n  if (!(\"isRemoteEval\" in instance) || !instance.isRemoteEval()) return baseKey;\n\n  const attributes = instance.getAttributes();\n  const cacheKeyAttributes =\n    instance.getCacheKeyAttributes() || Object.keys(instance.getAttributes());\n  const ca: Attributes = {};\n  cacheKeyAttributes.forEach((key) => {\n    ca[key] = attributes[key];\n  });\n\n  const fv = instance.getForcedVariations();\n  const url = instance.getUrl();\n\n  return `${baseKey}||${JSON.stringify({\n    ca,\n    fv,\n    url,\n  })}`;\n}\n\n// Populate cache from localStorage (if available)\nasync function initializeCache(): Promise<void> {\n  if (cacheInitialized) return;\n  cacheInitialized = true;\n  try {\n    if (polyfills.localStorage) {\n      const value = await polyfills.localStorage.getItem(\n        cacheSettings.cacheKey,\n      );\n      if (!cacheSettings.disableCache && value) {\n        const parsed: [string, CacheEntry][] = JSON.parse(value);\n        if (parsed && Array.isArray(parsed)) {\n          parsed.forEach(([key, data]) => {\n            cache.set(key, {\n              ...data,\n              staleAt: new Date(data.staleAt),\n            });\n          });\n        }\n        cleanupCache();\n      }\n    }\n  } catch (e) {\n    // Ignore localStorage errors\n  }\n  if (!cacheSettings.disableIdleStreams) {\n    const cleanupFn = helpers.startIdleListener();\n    if (cleanupFn) {\n      helpers.stopIdleListener = cleanupFn;\n    }\n  }\n}\n\n// Enforce the maxEntries limit\nfunction cleanupCache() {\n  const entriesWithTimestamps = Array.from(cache.entries())\n    .map(([key, value]) => ({\n      key,\n      staleAt: value.staleAt.getTime(),\n    }))\n    .sort((a, b) => a.staleAt - b.staleAt);\n\n  const entriesToRemoveCount = Math.min(\n    Math.max(0, cache.size - cacheSettings.maxEntries),\n    cache.size,\n  );\n\n  for (let i = 0; i < entriesToRemoveCount; i++) {\n    cache.delete(entriesWithTimestamps[i].key);\n  }\n}\n\n// Called whenever new features are fetched from the API\nfunction onNewFeatureData(\n  key: string,\n  cacheKey: string,\n  data: FeatureApiResponse,\n): void {\n  // If contents haven't changed, ignore the update, extend the stale TTL\n  const version = data.dateUpdated || \"\";\n  const staleAt = new Date(Date.now() + cacheSettings.staleTTL);\n  const existing = !cacheSettings.disableCache\n    ? cache.get(cacheKey)\n    : undefined;\n  if (existing && version && existing.version === version) {\n    existing.staleAt = staleAt;\n    updatePersistentCache();\n    return;\n  }\n\n  if (!cacheSettings.disableCache) {\n    // Update in-memory cache\n    cache.set(cacheKey, {\n      data,\n      version,\n      staleAt,\n      sse: supportsSSE.has(key),\n    });\n    cleanupCache();\n  }\n  // Update local storage (don't await this, just update asynchronously)\n  updatePersistentCache();\n\n  // Update features for all subscribed GrowthBook instances\n  const instances = subscribedInstances.get(key);\n  instances && instances.forEach((instance) => refreshInstance(instance, data));\n}\n\nasync function refreshInstance(\n  instance: GrowthBook | GrowthBookClient,\n  data: FeatureApiResponse | null,\n): Promise<void> {\n  await instance.setPayload(data || instance.getPayload());\n}\n\n// Fetch the features payload from helper function or from in-mem injected payload\nasync function fetchFeatures(\n  instance: GrowthBook | GrowthBookClient,\n): Promise<FetchResponse> {\n  const { apiHost, apiRequestHeaders } = instance.getApiHosts();\n  const clientKey = instance.getClientKey();\n  const remoteEval = \"isRemoteEval\" in instance && instance.isRemoteEval();\n  const key = getKey(instance);\n  const cacheKey = getCacheKey(instance);\n\n  let promise = activeFetches.get(cacheKey);\n  if (!promise) {\n    const fetcher: Promise<Response> = remoteEval\n      ? helpers.fetchRemoteEvalCall({\n          host: apiHost,\n          clientKey,\n          payload: {\n            attributes: instance.getAttributes(),\n            forcedVariations: instance.getForcedVariations(),\n            forcedFeatures: Array.from(instance.getForcedFeatures().entries()),\n            url: instance.getUrl(),\n          },\n          headers: apiRequestHeaders,\n        })\n      : helpers.fetchFeaturesCall({\n          host: apiHost,\n          clientKey,\n          headers: apiRequestHeaders,\n        });\n\n    // TODO: auto-retry if status code indicates a temporary error\n    promise = fetcher\n      .then((res) => {\n        if (!res.ok) {\n          throw new Error(`HTTP error: ${res.status}`);\n        }\n        if (res.headers.get(\"x-sse-support\") === \"enabled\") {\n          supportsSSE.add(key);\n        }\n        return res.json();\n      })\n      .then((data: FeatureApiResponse) => {\n        onNewFeatureData(key, cacheKey, data);\n        startAutoRefresh(instance);\n        activeFetches.delete(cacheKey);\n        return { data, success: true, source: \"network\" as const };\n      })\n      .catch((e) => {\n        process.env.NODE_ENV !== \"production\" &&\n          instance.log(\"Error fetching features\", {\n            apiHost,\n            clientKey,\n            error: e ? e.message : null,\n          });\n        activeFetches.delete(cacheKey);\n\n        return {\n          data: null,\n          source: \"error\" as const,\n          success: false,\n          error: e,\n        };\n      });\n    activeFetches.set(cacheKey, promise);\n  }\n  return promise;\n}\n\n// Start SSE streaming, listens to feature payload changes and triggers a refresh or re-fetch\nfunction startAutoRefresh(\n  instance: GrowthBook | GrowthBookClient,\n  forceSSE: boolean = false,\n): void {\n  const key = getKey(instance);\n  const cacheKey = getCacheKey(instance);\n  const { streamingHost, streamingHostRequestHeaders } = instance.getApiHosts();\n  const clientKey = instance.getClientKey();\n\n  if (forceSSE) {\n    supportsSSE.add(key);\n  }\n\n  if (\n    cacheSettings.backgroundSync &&\n    supportsSSE.has(key) &&\n    polyfills.EventSource\n  ) {\n    if (streams.has(key)) return;\n    const channel: ScopedChannel = {\n      src: null,\n      host: streamingHost,\n      clientKey,\n      headers: streamingHostRequestHeaders,\n      cb: (event: MessageEvent<string>) => {\n        try {\n          if (event.type === \"features-updated\") {\n            const instances = subscribedInstances.get(key);\n            instances &&\n              instances.forEach((instance) => {\n                fetchFeatures(instance);\n              });\n          } else if (event.type === \"features\") {\n            const json: FeatureApiResponse = JSON.parse(event.data);\n            onNewFeatureData(key, cacheKey, json);\n          }\n          // Reset error count on success\n          channel.errors = 0;\n        } catch (e) {\n          process.env.NODE_ENV !== \"production\" &&\n            instance.log(\"SSE Error\", {\n              streamingHost,\n              clientKey,\n              error: e ? (e as Error).message : null,\n            });\n          onSSEError(channel);\n        }\n      },\n      errors: 0,\n      state: \"active\",\n    };\n    streams.set(key, channel);\n    enableChannel(channel);\n  }\n}\n\nfunction onSSEError(channel: ScopedChannel) {\n  if (channel.state === \"idle\") return;\n  channel.errors++;\n  if (channel.errors > 3 || (channel.src && channel.src.readyState === 2)) {\n    // exponential backoff after 4 errors, with jitter\n    const delay =\n      Math.pow(3, channel.errors - 3) * (1000 + Math.random() * 1000);\n    disableChannel(channel);\n    setTimeout(\n      () => {\n        if ([\"idle\", \"active\"].includes(channel.state)) return;\n        enableChannel(channel);\n      },\n      Math.min(delay, 300000),\n    ); // 5 minutes max\n  }\n}\n\nfunction disableChannel(channel: ScopedChannel) {\n  if (!channel.src) return;\n  channel.src.onopen = null;\n  channel.src.onerror = null;\n  channel.src.close();\n  channel.src = null;\n  if (channel.state === \"active\") {\n    channel.state = \"disabled\";\n  }\n}\n\nfunction enableChannel(channel: ScopedChannel) {\n  channel.src = helpers.eventSourceCall({\n    host: channel.host,\n    clientKey: channel.clientKey,\n    headers: channel.headers,\n  }) as EventSource;\n  channel.state = \"active\";\n  channel.src.addEventListener(\"features\", channel.cb);\n  channel.src.addEventListener(\"features-updated\", channel.cb);\n  channel.src.onerror = () => onSSEError(channel);\n  channel.src.onopen = () => {\n    channel.errors = 0;\n  };\n}\n\nfunction destroyChannel(channel: ScopedChannel, key: string) {\n  disableChannel(channel);\n  streams.delete(key);\n}\n\nexport function clearAutoRefresh() {\n  // Clear list of which keys are auto-updated\n  supportsSSE.clear();\n\n  // Stop listening for any SSE events\n  streams.forEach(destroyChannel);\n\n  // Remove all references to GrowthBook instances\n  subscribedInstances.clear();\n\n  // Run the idle stream cleanup function\n  helpers.stopIdleListener();\n}\n\nexport function startStreaming(\n  instance: GrowthBook | GrowthBookClient,\n  options: InitOptions | InitSyncOptions,\n) {\n  if (options.streaming) {\n    if (!instance.getClientKey()) {\n      throw new Error(\"Must specify clientKey to enable streaming\");\n    }\n    if (options.payload) {\n      startAutoRefresh(instance, true);\n    }\n    subscribe(instance);\n  }\n}\n"],"mappings":"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","ignoreList":[]}