{"version":3,"file":"retry.cjs","sources":["../../../../src/auth/retry.ts"],"sourcesContent":["import { sleep } from \"./utils\";\n\nexport function isRetryableError(error: unknown): boolean {\n  if (error instanceof Error) {\n    const match = error.message.match(/API error \\((\\d+)\\)/);\n    if (match) {\n      const status = parseInt(match[1], 10);\n      return status >= 500;\n    }\n    // Network errors (no status code) are retryable\n    return true;\n  }\n  return true;\n}\n\nexport async function retryWithBackoff<T>(\n  fn: () => Promise<T>,\n  maxRetries = 3,\n  delayMs = 2000\n): Promise<T> {\n  let lastError: Error | null = null;\n\n  for (let i = 0; i < maxRetries; i++) {\n    try {\n      return await fn();\n    } catch (error) {\n      lastError = error instanceof Error ? error : new Error(String(error));\n      if (!isRetryableError(error)) {\n        throw lastError;\n      }\n      if (i < maxRetries - 1) {\n        await sleep(delayMs);\n      }\n    }\n  }\n\n  throw lastError;\n}\n"],"names":["sleep"],"mappings":";;;;AAEM,SAAU,gBAAgB,CAAC,KAAc,EAAA;AAC7C,IAAA,IAAI,KAAK,YAAY,KAAK,EAAE;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC;QACxD,IAAI,KAAK,EAAE;YACT,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACrC,OAAO,MAAM,IAAI,GAAG;QACtB;;AAEA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,IAAI;AACb;AAEO,eAAe,gBAAgB,CACpC,EAAoB,EACpB,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,IAAI,EAAA;IAEd,IAAI,SAAS,GAAiB,IAAI;AAElC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,IAAI;YACF,OAAO,MAAM,EAAE,EAAE;QACnB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,SAAS,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;AAC5B,gBAAA,MAAM,SAAS;YACjB;AACA,YAAA,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE;AACtB,gBAAA,MAAMA,WAAK,CAAC,OAAO,CAAC;YACtB;QACF;IACF;AAEA,IAAA,MAAM,SAAS;AACjB;;;;;"}