{"version":3,"sources":["../src/config.ts"],"sourcesContent":["/**\n * Workers-config client for resolving queue URLs from the workers-config API Lambda.\n */\n\nexport interface WorkersConfig {\n  version: string;\n  stage: string;\n  region: string;\n  workers: Record<\n    string,\n    {\n      queueUrl: string;\n      region: string;\n    }\n  >;\n}\n\nlet cachedConfig: WorkersConfig | null = null;\nlet cacheExpiry: number = 0;\nconst CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\n/**\n * Fetches the workers configuration from the workers-config API.\n * Results are cached for 5 minutes to reduce API calls.\n *\n * @param apiUrl - The URL of the workers-config API endpoint\n * @param apiKey - Optional API key for authentication (sent as x-workers-config-key header)\n * @returns The workers configuration mapping worker IDs to queue URLs\n */\nexport async function getWorkersConfig(\n  apiUrl: string,\n  apiKey?: string\n): Promise<WorkersConfig> {\n  const now = Date.now();\n\n  // Return cached config if still valid\n  if (cachedConfig && now < cacheExpiry) {\n    return cachedConfig;\n  }\n\n  const headers: Record<string, string> = {\n    'Content-Type': 'application/json',\n  };\n\n  if (apiKey) {\n    headers['x-workers-config-key'] = apiKey;\n  }\n\n  const response = await fetch(apiUrl, {\n    method: 'GET',\n    headers,\n  });\n\n  if (!response.ok) {\n    throw new Error(\n      `Failed to fetch workers config: ${response.status} ${response.statusText}`\n    );\n  }\n\n  const config = (await response.json()) as WorkersConfig;\n  cachedConfig = config;\n  cacheExpiry = now + CACHE_TTL_MS;\n\n  return config;\n}\n\n/**\n * Resolves the queue URL for a specific worker ID.\n * Throws an error if the worker ID is not found in the configuration.\n *\n * @param workerId - The ID of the worker\n * @param apiUrl - The URL of the workers-config API endpoint\n * @param apiKey - Optional API key for authentication\n * @returns The queue URL for the worker\n */\nexport async function resolveQueueUrl(\n  workerId: string,\n  apiUrl: string,\n  apiKey?: string\n): Promise<string> {\n  const config = await getWorkersConfig(apiUrl, apiKey);\n  const worker = config.workers[workerId];\n\n  if (!worker) {\n    throw new Error(\n      `Worker \"${workerId}\" not found in workers config. Available workers: ${Object.keys(config.workers).join(', ')}`\n    );\n  }\n\n  return worker.queueUrl;\n}\n\n/**\n * Clears the cached workers configuration.\n * Useful for testing or when you need to force a refresh.\n */\nexport function clearWorkersConfigCache(): void {\n  cachedConfig = null;\n  cacheExpiry = 0;\n}\n"],"mappings":";AAiBA,IAAI,eAAqC;AACzC,IAAI,cAAsB;AAC1B,IAAM,eAAe,IAAI,KAAK;AAU9B,eAAsB,iBACpB,QACA,QACwB;AACxB,QAAM,MAAM,KAAK,IAAI;AAGrB,MAAI,gBAAgB,MAAM,aAAa;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,UAAkC;AAAA,IACtC,gBAAgB;AAAA,EAClB;AAEA,MAAI,QAAQ;AACV,YAAQ,sBAAsB,IAAI;AAAA,EACpC;AAEA,QAAM,WAAW,MAAM,MAAM,QAAQ;AAAA,IACnC,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,mCAAmC,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,SAAU,MAAM,SAAS,KAAK;AACpC,iBAAe;AACf,gBAAc,MAAM;AAEpB,SAAO;AACT;AAWA,eAAsB,gBACpB,UACA,QACA,QACiB;AACjB,QAAM,SAAS,MAAM,iBAAiB,QAAQ,MAAM;AACpD,QAAM,SAAS,OAAO,QAAQ,QAAQ;AAEtC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI;AAAA,MACR,WAAW,QAAQ,qDAAqD,OAAO,KAAK,OAAO,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,IAChH;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;AAMO,SAAS,0BAAgC;AAC9C,iBAAe;AACf,gBAAc;AAChB;","names":[]}