{"version":3,"file":"plugin.cjs","names":["#options","#fetch","#decorateResponse","#getNormalizedOptions","#retryCount","#cancelResponseBody","#retry","#originalRequest","#cancelBody","#normalizeSearchParams","#input","#userProvidedAbortSignal","#abortController","#wrapRequestWithUploadProgress","#calculateRetryDelay","#calculateDelay","#assignRequest","#cachedNormalizedOptions","plugin","createHash","join","homedir","readFile","resolveCacheTtl"],"sources":["../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/errors/HTTPError.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/errors/NonError.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/errors/ForceRetryError.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/core/constants.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/body.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/is.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/merge.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/normalize.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/errors/TimeoutError.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/timeout.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/delay.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/options.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/utils/type-guards.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/core/Ky.js","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/distribution/index.js","../../../utils/src/oidc-tokens.ts","../src/plugin.ts"],"sourcesContent":["export class HTTPError extends Error {\n    response;\n    request;\n    options;\n    constructor(response, request, options) {\n        const code = (response.status || response.status === 0) ? response.status : '';\n        const title = response.statusText ?? '';\n        const status = `${code} ${title}`.trim();\n        const reason = status ? `status code ${status}` : 'an unknown error';\n        super(`Request failed with ${reason}: ${request.method} ${request.url}`);\n        this.name = 'HTTPError';\n        this.response = response;\n        this.request = request;\n        this.options = options;\n    }\n}\n//# sourceMappingURL=HTTPError.js.map","/**\nWrapper for non-Error values that were thrown.\n\nIn JavaScript, any value can be thrown (not just Error instances). This class wraps such values to ensure consistent error handling.\n*/\nexport class NonError extends Error {\n    name = 'NonError';\n    value;\n    constructor(value) {\n        let message = 'Non-error value was thrown';\n        // Intentionally minimal as this error is just an edge-case.\n        try {\n            if (typeof value === 'string') {\n                message = value;\n            }\n            else if (value && typeof value === 'object' && 'message' in value && typeof value.message === 'string') {\n                message = value.message;\n            }\n        }\n        catch {\n            // Use default message if accessing properties throws\n        }\n        super(message);\n        this.value = value;\n    }\n}\n//# sourceMappingURL=NonError.js.map","import { NonError } from './NonError.js';\n/**\nInternal error used to signal a forced retry from afterResponse hooks.\nThis is thrown when a user returns ky.retry() from an afterResponse hook.\n*/\nexport class ForceRetryError extends Error {\n    name = 'ForceRetryError';\n    customDelay;\n    code;\n    customRequest;\n    constructor(options) {\n        // Runtime protection: wrap non-Error causes in NonError\n        // TypeScript type is Error for guidance, but JS users can pass anything\n        const cause = options?.cause\n            ? (options.cause instanceof Error ? options.cause : new NonError(options.cause))\n            : undefined;\n        super(options?.code ? `Forced retry: ${options.code}` : 'Forced retry', cause ? { cause } : undefined);\n        this.customDelay = options?.delay;\n        this.code = options?.code;\n        this.customRequest = options?.request;\n    }\n}\n//# sourceMappingURL=ForceRetryError.js.map","export const supportsRequestStreams = (() => {\n    let duplexAccessed = false;\n    let hasContentType = false;\n    const supportsReadableStream = typeof globalThis.ReadableStream === 'function';\n    const supportsRequest = typeof globalThis.Request === 'function';\n    if (supportsReadableStream && supportsRequest) {\n        try {\n            hasContentType = new globalThis.Request('https://empty.invalid', {\n                body: new globalThis.ReadableStream(),\n                method: 'POST',\n                // @ts-expect-error - Types are outdated.\n                get duplex() {\n                    duplexAccessed = true;\n                    return 'half';\n                },\n            }).headers.has('Content-Type');\n        }\n        catch (error) {\n            // QQBrowser on iOS throws \"unsupported BodyInit type\" error (see issue #581)\n            if (error instanceof Error && error.message === 'unsupported BodyInit type') {\n                return false;\n            }\n            throw error;\n        }\n    }\n    return duplexAccessed && !hasContentType;\n})();\nexport const supportsAbortController = typeof globalThis.AbortController === 'function';\nexport const supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === 'function';\nexport const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';\nexport const supportsFormData = typeof globalThis.FormData === 'function';\nexport const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'];\nconst validate = () => undefined;\nvalidate();\nexport const responseTypes = {\n    json: 'application/json',\n    text: 'text/*',\n    formData: 'multipart/form-data',\n    arrayBuffer: '*/*',\n    blob: '*/*',\n    // Supported in modern Fetch implementations (for example, browsers and recent Node.js/undici).\n    // We still feature-check at runtime before exposing the shortcut.\n    bytes: '*/*',\n};\n// The maximum value of a 32bit int (see issue #117)\nexport const maxSafeTimeout = 2_147_483_647;\n// Size in bytes of a typical form boundary, used to help estimate upload size\nexport const usualFormBoundarySize = new TextEncoder().encode('------WebKitFormBoundaryaxpyiPgbbPti10Rw').length;\nexport const stop = Symbol('stop');\n/**\nMarker returned by ky.retry() to signal a forced retry from afterResponse hooks.\n*/\nexport class RetryMarker {\n    options;\n    constructor(options) {\n        this.options = options;\n    }\n}\n/**\nForce a retry from an `afterResponse` hook.\n\nThis allows you to retry a request based on the response content, even if the response has a successful status code. The retry will respect the `retry.limit` option and skip the `shouldRetry` check. The forced retry is observable in `beforeRetry` hooks, where the error will be a `ForceRetryError`.\n\n@param options - Optional configuration for the retry.\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n    hooks: {\n        afterResponse: [\n            async (request, options, response) => {\n                // Retry based on response body content\n                if (response.status === 200) {\n                    const data = await response.clone().json();\n\n                    // Simple retry with default delay\n                    if (data.error?.code === 'TEMPORARY_ERROR') {\n                        return ky.retry();\n                    }\n\n                    // Retry with custom delay from API response\n                    if (data.error?.code === 'RATE_LIMIT') {\n                        return ky.retry({\n                            delay: data.error.retryAfter * 1000,\n                            code: 'RATE_LIMIT'\n                        });\n                    }\n\n                    // Retry with a modified request (e.g., fallback endpoint)\n                    if (data.error?.code === 'FALLBACK_TO_BACKUP') {\n                        return ky.retry({\n                            request: new Request('https://backup-api.com/endpoint', {\n                                method: request.method,\n                                headers: request.headers,\n                            }),\n                            code: 'BACKUP_ENDPOINT'\n                        });\n                    }\n\n                    // Retry with refreshed authentication\n                    if (data.error?.code === 'TOKEN_REFRESH' && data.newToken) {\n                        return ky.retry({\n                            request: new Request(request, {\n                                headers: {\n                                    ...Object.fromEntries(request.headers),\n                                    'Authorization': `Bearer ${data.newToken}`\n                                }\n                            }),\n                            code: 'TOKEN_REFRESHED'\n                        });\n                    }\n\n                    // Retry with cause to preserve error chain\n                    try {\n                        validateResponse(data);\n                    } catch (error) {\n                        return ky.retry({\n                            code: 'VALIDATION_FAILED',\n                            cause: error\n                        });\n                    }\n                }\n            }\n        ],\n        beforeRetry: [\n            ({error, retryCount}) => {\n                // Observable in beforeRetry hooks\n                if (isForceRetryError(error)) {\n                    console.log(`Forced retry #${retryCount}: ${error.message}`);\n                    // Example output: \"Forced retry #1: Forced retry: RATE_LIMIT\"\n                }\n            }\n        ]\n    }\n});\n\nconst response = await api.get('https://example.com/api');\n```\n*/\nexport const retry = (options) => new RetryMarker(options);\nexport const kyOptionKeys = {\n    json: true,\n    parseJson: true,\n    stringifyJson: true,\n    searchParams: true,\n    prefixUrl: true,\n    retry: true,\n    timeout: true,\n    hooks: true,\n    throwHttpErrors: true,\n    onDownloadProgress: true,\n    onUploadProgress: true,\n    fetch: true,\n    context: true,\n};\n// Vendor-specific fetch options that should always be passed to fetch()\n// even if they appear on the Request object due to vendor patching.\n// See: https://github.com/sindresorhus/ky/issues/541\nexport const vendorSpecificOptions = {\n    next: true, // Next.js cache revalidation (revalidate, tags)\n};\n// Standard RequestInit options that should NOT be passed separately to fetch()\n// because they're already applied to the Request object.\n// Note: `dispatcher` and `priority` are NOT included here - they're fetch-only\n// options that the Request constructor doesn't accept, so they need to be passed\n// separately to fetch().\nexport const requestOptionsRegistry = {\n    method: true,\n    headers: true,\n    body: true,\n    mode: true,\n    credentials: true,\n    cache: true,\n    redirect: true,\n    referrer: true,\n    referrerPolicy: true,\n    integrity: true,\n    keepalive: true,\n    signal: true,\n    window: true,\n    duplex: true,\n};\n//# sourceMappingURL=constants.js.map","import { usualFormBoundarySize } from '../core/constants.js';\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const getBodySize = (body) => {\n    if (!body) {\n        return 0;\n    }\n    if (body instanceof FormData) {\n        // This is an approximation, as FormData size calculation is not straightforward\n        let size = 0;\n        for (const [key, value] of body) {\n            size += usualFormBoundarySize;\n            size += new TextEncoder().encode(`Content-Disposition: form-data; name=\"${key}\"`).length;\n            size += typeof value === 'string'\n                ? new TextEncoder().encode(value).length\n                : value.size;\n        }\n        return size;\n    }\n    if (body instanceof Blob) {\n        return body.size;\n    }\n    if (body instanceof ArrayBuffer) {\n        return body.byteLength;\n    }\n    if (typeof body === 'string') {\n        return new TextEncoder().encode(body).length;\n    }\n    if (body instanceof URLSearchParams) {\n        return new TextEncoder().encode(body.toString()).length;\n    }\n    if ('byteLength' in body) {\n        return (body).byteLength;\n    }\n    if (typeof body === 'object' && body !== null) {\n        try {\n            const jsonString = JSON.stringify(body);\n            return new TextEncoder().encode(jsonString).length;\n        }\n        catch {\n            return 0;\n        }\n    }\n    return 0; // Default case, unable to determine size\n};\nconst withProgress = (stream, totalBytes, onProgress) => {\n    let previousChunk;\n    let transferredBytes = 0;\n    return stream.pipeThrough(new TransformStream({\n        transform(currentChunk, controller) {\n            controller.enqueue(currentChunk);\n            if (previousChunk) {\n                transferredBytes += previousChunk.byteLength;\n                let percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n                // Avoid reporting 100% progress before the stream is actually finished (in case totalBytes is inaccurate)\n                if (percent >= 1) {\n                    // Epsilon is used here to get as close as possible to 100% without reaching it.\n                    // If we were to use 0.99 here, percent could potentially go backwards.\n                    percent = 1 - Number.EPSILON;\n                }\n                onProgress?.({ percent, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes }, previousChunk);\n            }\n            previousChunk = currentChunk;\n        },\n        flush() {\n            if (previousChunk) {\n                transferredBytes += previousChunk.byteLength;\n                onProgress?.({ percent: 1, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes }, previousChunk);\n            }\n        },\n    }));\n};\nexport const streamResponse = (response, onDownloadProgress) => {\n    if (!response.body) {\n        return response;\n    }\n    if (response.status === 204) {\n        return new Response(null, {\n            status: response.status,\n            statusText: response.statusText,\n            headers: response.headers,\n        });\n    }\n    const totalBytes = Math.max(0, Number(response.headers.get('content-length')) || 0);\n    return new Response(withProgress(response.body, totalBytes, onDownloadProgress), {\n        status: response.status,\n        statusText: response.statusText,\n        headers: response.headers,\n    });\n};\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const streamRequest = (request, onUploadProgress, originalBody) => {\n    if (!request.body) {\n        return request;\n    }\n    // Use original body for size calculation since request.body is already a stream\n    const totalBytes = getBodySize(originalBody ?? request.body);\n    return new Request(request, {\n        // @ts-expect-error - Types are outdated.\n        duplex: 'half',\n        body: withProgress(request.body, totalBytes, onUploadProgress),\n    });\n};\n//# sourceMappingURL=body.js.map","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isObject = (value) => value !== null && typeof value === 'object';\n//# sourceMappingURL=is.js.map","import { supportsAbortSignal } from '../core/constants.js';\nimport { isObject } from './is.js';\nexport const validateAndMerge = (...sources) => {\n    for (const source of sources) {\n        if ((!isObject(source) || Array.isArray(source)) && source !== undefined) {\n            throw new TypeError('The `options` argument must be an object');\n        }\n    }\n    return deepMerge({}, ...sources);\n};\nexport const mergeHeaders = (source1 = {}, source2 = {}) => {\n    const result = new globalThis.Headers(source1);\n    const isHeadersInstance = source2 instanceof globalThis.Headers;\n    const source = new globalThis.Headers(source2);\n    for (const [key, value] of source.entries()) {\n        if ((isHeadersInstance && value === 'undefined') || value === undefined) {\n            result.delete(key);\n        }\n        else {\n            result.set(key, value);\n        }\n    }\n    return result;\n};\nfunction newHookValue(original, incoming, property) {\n    return (Object.hasOwn(incoming, property) && incoming[property] === undefined)\n        ? []\n        : deepMerge(original[property] ?? [], incoming[property] ?? []);\n}\nexport const mergeHooks = (original = {}, incoming = {}) => ({\n    beforeRequest: newHookValue(original, incoming, 'beforeRequest'),\n    beforeRetry: newHookValue(original, incoming, 'beforeRetry'),\n    afterResponse: newHookValue(original, incoming, 'afterResponse'),\n    beforeError: newHookValue(original, incoming, 'beforeError'),\n});\nconst appendSearchParameters = (target, source) => {\n    const result = new URLSearchParams();\n    for (const input of [target, source]) {\n        if (input === undefined) {\n            continue;\n        }\n        if (input instanceof URLSearchParams) {\n            for (const [key, value] of input.entries()) {\n                result.append(key, value);\n            }\n        }\n        else if (Array.isArray(input)) {\n            for (const pair of input) {\n                if (!Array.isArray(pair) || pair.length !== 2) {\n                    throw new TypeError('Array search parameters must be provided in [[key, value], ...] format');\n                }\n                result.append(String(pair[0]), String(pair[1]));\n            }\n        }\n        else if (isObject(input)) {\n            for (const [key, value] of Object.entries(input)) {\n                if (value !== undefined) {\n                    result.append(key, String(value));\n                }\n            }\n        }\n        else {\n            // String\n            const parameters = new URLSearchParams(input);\n            for (const [key, value] of parameters.entries()) {\n                result.append(key, value);\n            }\n        }\n    }\n    return result;\n};\n// TODO: Make this strongly-typed (no `any`).\nexport const deepMerge = (...sources) => {\n    let returnValue = {};\n    let headers = {};\n    let hooks = {};\n    let searchParameters;\n    const signals = [];\n    for (const source of sources) {\n        if (Array.isArray(source)) {\n            if (!Array.isArray(returnValue)) {\n                returnValue = [];\n            }\n            returnValue = [...returnValue, ...source];\n        }\n        else if (isObject(source)) {\n            for (let [key, value] of Object.entries(source)) {\n                // Special handling for AbortSignal instances\n                if (key === 'signal' && value instanceof globalThis.AbortSignal) {\n                    signals.push(value);\n                    continue;\n                }\n                // Special handling for context - shallow merge only\n                if (key === 'context') {\n                    if (value !== undefined && value !== null && (!isObject(value) || Array.isArray(value))) {\n                        throw new TypeError('The `context` option must be an object');\n                    }\n                    // Shallow merge: always create a new object to prevent mutation bugs\n                    returnValue = {\n                        ...returnValue,\n                        context: (value === undefined || value === null)\n                            ? {}\n                            : { ...returnValue.context, ...value },\n                    };\n                    continue;\n                }\n                // Special handling for searchParams\n                if (key === 'searchParams') {\n                    if (value === undefined || value === null) {\n                        // Explicit undefined or null removes searchParams\n                        searchParameters = undefined;\n                    }\n                    else {\n                        // First source: keep as-is to preserve type (string/object/URLSearchParams)\n                        // Subsequent sources: merge and convert to URLSearchParams\n                        searchParameters = searchParameters === undefined ? value : appendSearchParameters(searchParameters, value);\n                    }\n                    continue;\n                }\n                if (isObject(value) && key in returnValue) {\n                    value = deepMerge(returnValue[key], value);\n                }\n                returnValue = { ...returnValue, [key]: value };\n            }\n            if (isObject(source.hooks)) {\n                hooks = mergeHooks(hooks, source.hooks);\n                returnValue.hooks = hooks;\n            }\n            if (isObject(source.headers)) {\n                headers = mergeHeaders(headers, source.headers);\n                returnValue.headers = headers;\n            }\n        }\n    }\n    if (searchParameters !== undefined) {\n        returnValue.searchParams = searchParameters;\n    }\n    if (signals.length > 0) {\n        if (signals.length === 1) {\n            returnValue.signal = signals[0];\n        }\n        else if (supportsAbortSignal) {\n            returnValue.signal = AbortSignal.any(signals);\n        }\n        else {\n            // When AbortSignal.any is not available, use the last signal\n            // This maintains the previous behavior before signal merging was added\n            // This can be remove when the `supportsAbortSignal` check is removed.`\n            returnValue.signal = signals.at(-1);\n        }\n    }\n    return returnValue;\n};\n//# sourceMappingURL=merge.js.map","import { requestMethods } from '../core/constants.js';\nexport const normalizeRequestMethod = (input) => requestMethods.includes(input) ? input.toUpperCase() : input;\nconst retryMethods = ['get', 'put', 'head', 'delete', 'options', 'trace'];\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\nconst retryAfterStatusCodes = [413, 429, 503];\nconst defaultRetryOptions = {\n    limit: 2,\n    methods: retryMethods,\n    statusCodes: retryStatusCodes,\n    afterStatusCodes: retryAfterStatusCodes,\n    maxRetryAfter: Number.POSITIVE_INFINITY,\n    backoffLimit: Number.POSITIVE_INFINITY,\n    delay: attemptCount => 0.3 * (2 ** (attemptCount - 1)) * 1000,\n    jitter: undefined,\n    retryOnTimeout: false,\n};\nexport const normalizeRetryOptions = (retry = {}) => {\n    if (typeof retry === 'number') {\n        return {\n            ...defaultRetryOptions,\n            limit: retry,\n        };\n    }\n    if (retry.methods && !Array.isArray(retry.methods)) {\n        throw new Error('retry.methods must be an array');\n    }\n    retry.methods &&= retry.methods.map(method => method.toLowerCase());\n    if (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n        throw new Error('retry.statusCodes must be an array');\n    }\n    const normalizedRetry = Object.fromEntries(Object.entries(retry).filter(([, value]) => value !== undefined));\n    return {\n        ...defaultRetryOptions,\n        ...normalizedRetry,\n    };\n};\n//# sourceMappingURL=normalize.js.map","export class TimeoutError extends Error {\n    request;\n    constructor(request) {\n        super(`Request timed out: ${request.method} ${request.url}`);\n        this.name = 'TimeoutError';\n        this.request = request;\n    }\n}\n//# sourceMappingURL=TimeoutError.js.map","import { TimeoutError } from '../errors/TimeoutError.js';\n// `Promise.race()` workaround (#91)\nexport default async function timeout(request, init, abortController, options) {\n    return new Promise((resolve, reject) => {\n        const timeoutId = setTimeout(() => {\n            if (abortController) {\n                abortController.abort();\n            }\n            reject(new TimeoutError(request));\n        }, options.timeout);\n        void options\n            .fetch(request, init)\n            .then(resolve)\n            .catch(reject)\n            .then(() => {\n            clearTimeout(timeoutId);\n        });\n    });\n}\n//# sourceMappingURL=timeout.js.map","// https://github.com/sindresorhus/delay/tree/ab98ae8dfcb38e1593286c94d934e70d14a4e111\nexport default async function delay(ms, { signal }) {\n    return new Promise((resolve, reject) => {\n        if (signal) {\n            signal.throwIfAborted();\n            signal.addEventListener('abort', abortHandler, { once: true });\n        }\n        function abortHandler() {\n            clearTimeout(timeoutId);\n            reject(signal.reason);\n        }\n        const timeoutId = setTimeout(() => {\n            signal?.removeEventListener('abort', abortHandler);\n            resolve();\n        }, ms);\n    });\n}\n//# sourceMappingURL=delay.js.map","import { kyOptionKeys, requestOptionsRegistry, vendorSpecificOptions } from '../core/constants.js';\nexport const findUnknownOptions = (request, options) => {\n    const unknownOptions = {};\n    for (const key in options) {\n        // Skip inherited properties\n        if (!Object.hasOwn(options, key)) {\n            continue;\n        }\n        // An option is passed to fetch() if:\n        // 1. It's not a standard RequestInit option (not in requestOptionsRegistry)\n        // 2. It's not a ky-specific option (not in kyOptionKeys)\n        // 3. Either:\n        //    a. It's not on the Request object, OR\n        //    b. It's a vendor-specific option that should always be passed (in vendorSpecificOptions)\n        if (!(key in requestOptionsRegistry) && !(key in kyOptionKeys) && (!(key in request) || key in vendorSpecificOptions)) {\n            unknownOptions[key] = options[key];\n        }\n    }\n    return unknownOptions;\n};\nexport const hasSearchParameters = (search) => {\n    if (search === undefined) {\n        return false;\n    }\n    // The `typeof array` still gives \"object\", so we need different checking for array.\n    if (Array.isArray(search)) {\n        return search.length > 0;\n    }\n    if (search instanceof URLSearchParams) {\n        return search.size > 0;\n    }\n    // Record\n    if (typeof search === 'object') {\n        return Object.keys(search).length > 0;\n    }\n    if (typeof search === 'string') {\n        return search.trim().length > 0;\n    }\n    return Boolean(search);\n};\n//# sourceMappingURL=options.js.map","import { HTTPError } from '../errors/HTTPError.js';\nimport { TimeoutError } from '../errors/TimeoutError.js';\nimport { ForceRetryError } from '../errors/ForceRetryError.js';\n/**\nType guard to check if an error is a Ky error.\n\n@param error - The error to check\n@returns `true` if the error is a Ky error, `false` otherwise\n\n@example\n```\nimport ky, {isKyError} from 'ky';\ntry {\n    const response = await ky.get('/api/data');\n} catch (error) {\n    if (isKyError(error)) {\n        // Handle Ky-specific errors\n        console.log('Ky error occurred:', error.message);\n    } else {\n        // Handle other errors\n        console.log('Unknown error:', error);\n    }\n}\n```\n*/\nexport function isKyError(error) {\n    return isHTTPError(error) || isTimeoutError(error) || isForceRetryError(error);\n}\n/**\nType guard to check if an error is an HTTPError.\n\n@param error - The error to check\n@returns `true` if the error is an HTTPError, `false` otherwise\n\n@example\n```\nimport ky, {isHTTPError} from 'ky';\ntry {\n    const response = await ky.get('/api/data');\n} catch (error) {\n    if (isHTTPError(error)) {\n        console.log('HTTP error status:', error.response.status);\n    }\n}\n```\n*/\nexport function isHTTPError(error) {\n    return error instanceof HTTPError || (error?.name === HTTPError.name);\n}\n/**\nType guard to check if an error is a TimeoutError.\n\n@param error - The error to check\n@returns `true` if the error is a TimeoutError, `false` otherwise\n\n@example\n```\nimport ky, {isTimeoutError} from 'ky';\ntry {\n    const response = await ky.get('/api/data', { timeout: 1000 });\n} catch (error) {\n    if (isTimeoutError(error)) {\n        console.log('Request timed out:', error.request.url);\n    }\n}\n```\n*/\nexport function isTimeoutError(error) {\n    return error instanceof TimeoutError || (error?.name === TimeoutError.name);\n}\n/**\nType guard to check if an error is a ForceRetryError.\n\n@param error - The error to check\n@returns `true` if the error is a ForceRetryError, `false` otherwise\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n    hooks: {\n        beforeRetry: [\n            ({error, retryCount}) => {\n                if (isForceRetryError(error)) {\n                    console.log(`Forced retry #${retryCount}: ${error.code}`);\n                }\n            }\n        ]\n    }\n});\n```\n*/\nexport function isForceRetryError(error) {\n    return error instanceof ForceRetryError || (error?.name === ForceRetryError.name);\n}\n//# sourceMappingURL=type-guards.js.map","import { HTTPError } from '../errors/HTTPError.js';\nimport { NonError } from '../errors/NonError.js';\nimport { ForceRetryError } from '../errors/ForceRetryError.js';\nimport { streamRequest, streamResponse } from '../utils/body.js';\nimport { mergeHeaders, mergeHooks } from '../utils/merge.js';\nimport { normalizeRequestMethod, normalizeRetryOptions } from '../utils/normalize.js';\nimport timeout from '../utils/timeout.js';\nimport delay from '../utils/delay.js';\nimport { findUnknownOptions, hasSearchParameters } from '../utils/options.js';\nimport { isHTTPError, isTimeoutError } from '../utils/type-guards.js';\nimport { maxSafeTimeout, responseTypes, stop, RetryMarker, supportsAbortController, supportsAbortSignal, supportsFormData, supportsResponseStreams, supportsRequestStreams, } from './constants.js';\nexport class Ky {\n    static create(input, options) {\n        const ky = new Ky(input, options);\n        const function_ = async () => {\n            if (typeof ky.#options.timeout === 'number' && ky.#options.timeout > maxSafeTimeout) {\n                throw new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n            }\n            // Delay the fetch so that body method shortcuts can set the Accept header\n            await Promise.resolve();\n            // Before using ky.request, _fetch clones it and saves the clone for future retries to use.\n            // If retry is not needed, close the cloned request's ReadableStream for memory safety.\n            let response = await ky.#fetch();\n            for (const hook of ky.#options.hooks.afterResponse) {\n                // Clone the response before passing to hook so we can cancel it if needed\n                const clonedResponse = ky.#decorateResponse(response.clone());\n                let modifiedResponse;\n                try {\n                    // eslint-disable-next-line no-await-in-loop\n                    modifiedResponse = await hook(ky.request, ky.#getNormalizedOptions(), clonedResponse, { retryCount: ky.#retryCount });\n                }\n                catch (error) {\n                    // Cancel both responses to prevent memory leaks when hook throws\n                    ky.#cancelResponseBody(clonedResponse);\n                    ky.#cancelResponseBody(response);\n                    throw error;\n                }\n                if (modifiedResponse instanceof RetryMarker) {\n                    // Cancel both the cloned response passed to the hook and the current response to prevent resource leaks (especially important in Deno/Bun).\n                    // Do not await cancellation since hooks can clone the response, leaving extra tee branches that keep cancel promises pending per the Streams spec.\n                    ky.#cancelResponseBody(clonedResponse);\n                    ky.#cancelResponseBody(response);\n                    throw new ForceRetryError(modifiedResponse.options);\n                }\n                // Determine which response to use going forward\n                const nextResponse = modifiedResponse instanceof globalThis.Response ? modifiedResponse : response;\n                // Cancel any response bodies we won't use to prevent memory leaks.\n                // Uses fire-and-forget since hooks may have cloned the response, creating tee branches that block cancellation.\n                if (clonedResponse !== nextResponse) {\n                    ky.#cancelResponseBody(clonedResponse);\n                }\n                if (response !== nextResponse) {\n                    ky.#cancelResponseBody(response);\n                }\n                response = nextResponse;\n            }\n            ky.#decorateResponse(response);\n            if (!response.ok && (typeof ky.#options.throwHttpErrors === 'function'\n                ? ky.#options.throwHttpErrors(response.status)\n                : ky.#options.throwHttpErrors)) {\n                let error = new HTTPError(response, ky.request, ky.#getNormalizedOptions());\n                for (const hook of ky.#options.hooks.beforeError) {\n                    // eslint-disable-next-line no-await-in-loop\n                    error = await hook(error, { retryCount: ky.#retryCount });\n                }\n                throw error;\n            }\n            // If `onDownloadProgress` is passed, it uses the stream API internally\n            if (ky.#options.onDownloadProgress) {\n                if (typeof ky.#options.onDownloadProgress !== 'function') {\n                    throw new TypeError('The `onDownloadProgress` option must be a function');\n                }\n                if (!supportsResponseStreams) {\n                    throw new Error('Streams are not supported in your environment. `ReadableStream` is missing.');\n                }\n                const progressResponse = response.clone();\n                ky.#cancelResponseBody(response);\n                return streamResponse(progressResponse, ky.#options.onDownloadProgress);\n            }\n            return response;\n        };\n        // Always wrap in #retry to catch forced retries from afterResponse hooks\n        // Method retriability is checked in #calculateRetryDelay for non-forced retries\n        const result = ky.#retry(function_)\n            .finally(() => {\n            const originalRequest = ky.#originalRequest;\n            // Ignore cancellation errors from already-locked or already-consumed streams.\n            ky.#cancelBody(originalRequest?.body ?? undefined);\n            ky.#cancelBody(ky.request.body ?? undefined);\n        });\n        for (const [type, mimeType] of Object.entries(responseTypes)) {\n            // Only expose `.bytes()` when the environment implements it.\n            if (type === 'bytes'\n                && typeof globalThis.Response?.prototype?.bytes !== 'function') {\n                continue;\n            }\n            result[type] = async () => {\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                ky.request.headers.set('accept', ky.request.headers.get('accept') || mimeType);\n                const response = await result;\n                if (type === 'json') {\n                    if (response.status === 204) {\n                        return '';\n                    }\n                    const text = await response.text();\n                    if (text === '') {\n                        return '';\n                    }\n                    if (options.parseJson) {\n                        return options.parseJson(text);\n                    }\n                    return JSON.parse(text);\n                }\n                return response[type]();\n            };\n        }\n        return result;\n    }\n    // eslint-disable-next-line unicorn/prevent-abbreviations\n    static #normalizeSearchParams(searchParams) {\n        // Filter out undefined values from plain objects\n        if (searchParams && typeof searchParams === 'object' && !Array.isArray(searchParams) && !(searchParams instanceof URLSearchParams)) {\n            return Object.fromEntries(Object.entries(searchParams).filter(([, value]) => value !== undefined));\n        }\n        return searchParams;\n    }\n    request;\n    #abortController;\n    #retryCount = 0;\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly -- False positive: #input is reassigned on line 202\n    #input;\n    #options;\n    #originalRequest;\n    #userProvidedAbortSignal;\n    #cachedNormalizedOptions;\n    // eslint-disable-next-line complexity\n    constructor(input, options = {}) {\n        this.#input = input;\n        this.#options = {\n            ...options,\n            headers: mergeHeaders(this.#input.headers, options.headers),\n            hooks: mergeHooks({\n                beforeRequest: [],\n                beforeRetry: [],\n                beforeError: [],\n                afterResponse: [],\n            }, options.hooks),\n            method: normalizeRequestMethod(options.method ?? this.#input.method ?? 'GET'),\n            // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n            prefixUrl: String(options.prefixUrl || ''),\n            retry: normalizeRetryOptions(options.retry),\n            throwHttpErrors: options.throwHttpErrors ?? true,\n            timeout: options.timeout ?? 10_000,\n            fetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n            context: options.context ?? {},\n        };\n        if (typeof this.#input !== 'string' && !(this.#input instanceof URL || this.#input instanceof globalThis.Request)) {\n            throw new TypeError('`input` must be a string, URL, or Request');\n        }\n        if (this.#options.prefixUrl && typeof this.#input === 'string') {\n            if (this.#input.startsWith('/')) {\n                throw new Error('`input` must not begin with a slash when using `prefixUrl`');\n            }\n            if (!this.#options.prefixUrl.endsWith('/')) {\n                this.#options.prefixUrl += '/';\n            }\n            this.#input = this.#options.prefixUrl + this.#input;\n        }\n        if (supportsAbortController && supportsAbortSignal) {\n            this.#userProvidedAbortSignal = this.#options.signal ?? this.#input.signal;\n            this.#abortController = new globalThis.AbortController();\n            this.#options.signal = this.#userProvidedAbortSignal ? AbortSignal.any([this.#userProvidedAbortSignal, this.#abortController.signal]) : this.#abortController.signal;\n        }\n        if (supportsRequestStreams) {\n            // @ts-expect-error - Types are outdated.\n            this.#options.duplex = 'half';\n        }\n        if (this.#options.json !== undefined) {\n            this.#options.body = this.#options.stringifyJson?.(this.#options.json) ?? JSON.stringify(this.#options.json);\n            this.#options.headers.set('content-type', this.#options.headers.get('content-type') ?? 'application/json');\n        }\n        // To provide correct form boundary, Content-Type header should be deleted when creating Request from another Request with FormData/URLSearchParams body\n        // Only delete if user didn't explicitly provide a custom content-type\n        const userProvidedContentType = options.headers && new globalThis.Headers(options.headers).has('content-type');\n        if (this.#input instanceof globalThis.Request\n            && ((supportsFormData && this.#options.body instanceof globalThis.FormData) || this.#options.body instanceof URLSearchParams)\n            && !userProvidedContentType) {\n            this.#options.headers.delete('content-type');\n        }\n        this.request = new globalThis.Request(this.#input, this.#options);\n        if (hasSearchParameters(this.#options.searchParams)) {\n            // eslint-disable-next-line unicorn/prevent-abbreviations\n            const textSearchParams = typeof this.#options.searchParams === 'string'\n                ? this.#options.searchParams.replace(/^\\?/, '')\n                : new URLSearchParams(Ky.#normalizeSearchParams(this.#options.searchParams)).toString();\n            // eslint-disable-next-line unicorn/prevent-abbreviations\n            const searchParams = '?' + textSearchParams;\n            const url = this.request.url.replace(/(?:\\?.*?)?(?=#|$)/, searchParams);\n            // Recreate request with the updated URL. We already have all options in this.#options, including duplex.\n            this.request = new globalThis.Request(url, this.#options);\n        }\n        // If `onUploadProgress` is passed, it uses the stream API internally\n        if (this.#options.onUploadProgress) {\n            if (typeof this.#options.onUploadProgress !== 'function') {\n                throw new TypeError('The `onUploadProgress` option must be a function');\n            }\n            if (!supportsRequestStreams) {\n                throw new Error('Request streams are not supported in your environment. The `duplex` option for `Request` is not available.');\n            }\n            this.request = this.#wrapRequestWithUploadProgress(this.request, this.#options.body ?? undefined);\n        }\n    }\n    #calculateDelay() {\n        const retryDelay = this.#options.retry.delay(this.#retryCount);\n        let jitteredDelay = retryDelay;\n        if (this.#options.retry.jitter === true) {\n            jitteredDelay = Math.random() * retryDelay;\n        }\n        else if (typeof this.#options.retry.jitter === 'function') {\n            jitteredDelay = this.#options.retry.jitter(retryDelay);\n            if (!Number.isFinite(jitteredDelay) || jitteredDelay < 0) {\n                jitteredDelay = retryDelay;\n            }\n        }\n        // Handle undefined backoffLimit by treating it as no limit (Infinity)\n        const backoffLimit = this.#options.retry.backoffLimit ?? Number.POSITIVE_INFINITY;\n        return Math.min(backoffLimit, jitteredDelay);\n    }\n    async #calculateRetryDelay(error) {\n        this.#retryCount++;\n        if (this.#retryCount > this.#options.retry.limit) {\n            throw error;\n        }\n        // Wrap non-Error throws to ensure consistent error handling\n        const errorObject = error instanceof Error ? error : new NonError(error);\n        // Handle forced retry from afterResponse hook - skip method check and shouldRetry\n        if (errorObject instanceof ForceRetryError) {\n            return errorObject.customDelay ?? this.#calculateDelay();\n        }\n        // Check if method is retriable for non-forced retries\n        if (!this.#options.retry.methods.includes(this.request.method.toLowerCase())) {\n            throw error;\n        }\n        // User-provided shouldRetry function takes precedence over all other checks\n        if (this.#options.retry.shouldRetry !== undefined) {\n            const result = await this.#options.retry.shouldRetry({ error: errorObject, retryCount: this.#retryCount });\n            // Strict boolean checking - only exact true/false are handled specially\n            if (result === false) {\n                throw error;\n            }\n            if (result === true) {\n                // Force retry - skip all other validation and return delay\n                return this.#calculateDelay();\n            }\n            // If undefined or any other value, fall through to default behavior\n        }\n        // Default timeout behavior\n        if (isTimeoutError(error) && !this.#options.retry.retryOnTimeout) {\n            throw error;\n        }\n        if (isHTTPError(error)) {\n            if (!this.#options.retry.statusCodes.includes(error.response.status)) {\n                throw error;\n            }\n            const retryAfter = error.response.headers.get('Retry-After')\n                ?? error.response.headers.get('RateLimit-Reset')\n                ?? error.response.headers.get('X-RateLimit-Retry-After') // Symfony-based services\n                ?? error.response.headers.get('X-RateLimit-Reset') // GitHub\n                ?? error.response.headers.get('X-Rate-Limit-Reset'); // Twitter\n            if (retryAfter && this.#options.retry.afterStatusCodes.includes(error.response.status)) {\n                let after = Number(retryAfter) * 1000;\n                if (Number.isNaN(after)) {\n                    after = Date.parse(retryAfter) - Date.now();\n                }\n                else if (after >= Date.parse('2024-01-01')) {\n                    // A large number is treated as a timestamp (fixed threshold protects against clock skew)\n                    after -= Date.now();\n                }\n                const max = this.#options.retry.maxRetryAfter ?? after;\n                // Don't apply jitter when server provides explicit retry timing\n                return after < max ? after : max;\n            }\n            if (error.response.status === 413) {\n                throw error;\n            }\n        }\n        return this.#calculateDelay();\n    }\n    #decorateResponse(response) {\n        if (this.#options.parseJson) {\n            response.json = async () => this.#options.parseJson(await response.text());\n        }\n        return response;\n    }\n    #cancelBody(body) {\n        if (!body) {\n            return;\n        }\n        // Ignore cancellation failures from already-locked or already-consumed streams.\n        void body.cancel().catch(() => undefined);\n    }\n    #cancelResponseBody(response) {\n        // Ignore cancellation failures from already-locked or already-consumed streams.\n        this.#cancelBody(response.body ?? undefined);\n    }\n    async #retry(function_) {\n        try {\n            return await function_();\n        }\n        catch (error) {\n            const ms = Math.min(await this.#calculateRetryDelay(error), maxSafeTimeout);\n            if (this.#retryCount < 1) {\n                throw error;\n            }\n            // Only use user-provided signal for delay, not our internal abortController\n            await delay(ms, this.#userProvidedAbortSignal ? { signal: this.#userProvidedAbortSignal } : {});\n            // Apply custom request from forced retry before beforeRetry hooks\n            // Ensure the custom request has the correct managed signal for timeouts and user aborts\n            if (error instanceof ForceRetryError && error.customRequest) {\n                const managedRequest = this.#options.signal\n                    ? new globalThis.Request(error.customRequest, { signal: this.#options.signal })\n                    : new globalThis.Request(error.customRequest);\n                this.#assignRequest(managedRequest);\n            }\n            for (const hook of this.#options.hooks.beforeRetry) {\n                // eslint-disable-next-line no-await-in-loop\n                const hookResult = await hook({\n                    request: this.request,\n                    options: this.#getNormalizedOptions(),\n                    error: error,\n                    retryCount: this.#retryCount,\n                });\n                if (hookResult instanceof globalThis.Request) {\n                    this.#assignRequest(hookResult);\n                    break;\n                }\n                // If a Response is returned, use it and skip the retry\n                if (hookResult instanceof globalThis.Response) {\n                    return hookResult;\n                }\n                // If `stop` is returned from the hook, the retry process is stopped\n                if (hookResult === stop) {\n                    return;\n                }\n            }\n            return this.#retry(function_);\n        }\n    }\n    async #fetch() {\n        // Reset abortController if it was aborted (happens on timeout retry)\n        if (this.#abortController?.signal.aborted) {\n            this.#abortController = new globalThis.AbortController();\n            this.#options.signal = this.#userProvidedAbortSignal ? AbortSignal.any([this.#userProvidedAbortSignal, this.#abortController.signal]) : this.#abortController.signal;\n            // Recreate request with new signal\n            this.request = new globalThis.Request(this.request, { signal: this.#options.signal });\n        }\n        for (const hook of this.#options.hooks.beforeRequest) {\n            // eslint-disable-next-line no-await-in-loop\n            const result = await hook(this.request, this.#getNormalizedOptions(), { retryCount: this.#retryCount });\n            if (result instanceof Response) {\n                return result;\n            }\n            if (result instanceof globalThis.Request) {\n                this.#assignRequest(result);\n                break;\n            }\n        }\n        const nonRequestOptions = findUnknownOptions(this.request, this.#options);\n        // Cloning is done here to prepare in advance for retries\n        this.#originalRequest = this.request;\n        this.request = this.#originalRequest.clone();\n        if (this.#options.timeout === false) {\n            return this.#options.fetch(this.#originalRequest, nonRequestOptions);\n        }\n        return timeout(this.#originalRequest, nonRequestOptions, this.#abortController, this.#options);\n    }\n    #getNormalizedOptions() {\n        if (!this.#cachedNormalizedOptions) {\n            const { hooks, ...normalizedOptions } = this.#options;\n            this.#cachedNormalizedOptions = Object.freeze(normalizedOptions);\n        }\n        return this.#cachedNormalizedOptions;\n    }\n    #assignRequest(request) {\n        this.#cachedNormalizedOptions = undefined;\n        this.request = this.#wrapRequestWithUploadProgress(request);\n    }\n    #wrapRequestWithUploadProgress(request, originalBody) {\n        if (!this.#options.onUploadProgress || !request.body) {\n            return request;\n        }\n        return streamRequest(request, this.#options.onUploadProgress, originalBody ?? this.#options.body ?? undefined);\n    }\n}\n//# sourceMappingURL=Ky.js.map","/*! MIT License © Sindre Sorhus */\nimport { Ky } from './core/Ky.js';\nimport { requestMethods, stop, retry } from './core/constants.js';\nimport { validateAndMerge } from './utils/merge.js';\nconst createInstance = (defaults) => {\n    // eslint-disable-next-line @typescript-eslint/promise-function-async\n    const ky = (input, options) => Ky.create(input, validateAndMerge(defaults, options));\n    for (const method of requestMethods) {\n        // eslint-disable-next-line @typescript-eslint/promise-function-async\n        ky[method] = (input, options) => Ky.create(input, validateAndMerge(defaults, options, { method }));\n    }\n    ky.create = (newDefaults) => createInstance(validateAndMerge(newDefaults));\n    ky.extend = (newDefaults) => {\n        if (typeof newDefaults === 'function') {\n            newDefaults = newDefaults(defaults ?? {});\n        }\n        return createInstance(validateAndMerge(defaults, newDefaults));\n    };\n    ky.stop = stop;\n    ky.retry = retry;\n    return ky;\n};\nconst ky = createInstance();\nexport default ky;\nexport { HTTPError } from './errors/HTTPError.js';\nexport { TimeoutError } from './errors/TimeoutError.js';\nexport { ForceRetryError } from './errors/ForceRetryError.js';\nexport { isKyError, isHTTPError, isTimeoutError, isForceRetryError, } from './utils/type-guards.js';\n// Intentionally not exporting this for now as it's just an implementation detail and we don't want to commit to a certain API yet at least.\n// export {NonError} from './errors/NonError.js';\n//# sourceMappingURL=index.js.map","/**\n * Shared utility for acquiring OIDC tokens from deployment platforms.\n * Used by secret provider plugins to authenticate via workload identity federation.\n */\n\nexport type OidcPlatform = 'vercel' | 'github-actions' | 'fly' | 'gcp' | 'gitlab';\n\nexport interface OidcTokenResult {\n  token: string;\n  platform: OidcPlatform;\n}\n\n/**\n * Vercel exposes OIDC tokens via the `VERCEL_OIDC_TOKEN` env var during builds\n * and serverless function execution.\n */\nexport function getVercelOidcToken(): string | undefined {\n  if (!process.env.VERCEL) return undefined;\n  return process.env.VERCEL_OIDC_TOKEN || undefined;\n}\n\n/**\n * GitHub Actions provides OIDC tokens by POSTing to a request URL with a bearer token.\n * Requires `permissions: id-token: write` in the workflow.\n */\nexport async function getGitHubActionsOidcToken(\n  audience?: string,\n): Promise<string | undefined> {\n  if (!process.env.GITHUB_ACTIONS) return undefined;\n\n  const requestUrl = process.env.ACTIONS_ID_TOKEN_REQUEST_URL;\n  const requestToken = process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;\n  if (!requestUrl || !requestToken) return undefined;\n\n  try {\n    const url = new URL(requestUrl);\n    if (audience) {\n      url.searchParams.set('audience', audience);\n    }\n\n    const response = await fetch(url.toString(), {\n      headers: {\n        Authorization: `Bearer ${requestToken}`,\n        Accept: 'application/json; api-version=2.0',\n      },\n    });\n\n    if (!response.ok) return undefined;\n\n    const data = await response.json() as { value?: string };\n    return data.value || undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * GitLab CI exposes OIDC tokens via the `CI_JOB_JWT_V2` env var\n * (or `SIGSTORE_ID_TOKEN`).\n * Requires `id_tokens` configuration in .gitlab-ci.yml.\n */\nexport function getGitLabOidcToken(): string | undefined {\n  if (!process.env.GITLAB_CI) return undefined;\n  return process.env.CI_JOB_JWT_V2\n    || process.env.SIGSTORE_ID_TOKEN\n    || undefined;\n}\n\n/**\n * Fly.io provides OIDC tokens via an internal API endpoint.\n * Available to apps running on Fly Machines.\n */\nexport async function getFlyOidcToken(): Promise<string | undefined> {\n  if (!process.env.FLY_APP_NAME) return undefined;\n\n  try {\n    const response = await fetch(\n      'http://_api.internal:4280/v1/tokens/oidc',\n      {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({}),\n      },\n    );\n\n    if (!response.ok) return undefined;\n\n    const text = await response.text();\n    return text || undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * GCP Cloud Run / Cloud Functions expose identity tokens via the metadata\n * server. Requires that the service has a service account with appropriate\n * permissions.\n */\nexport async function getGcpOidcToken(\n  audience?: string,\n): Promise<string | undefined> {\n  try {\n    const url = new URL(\n      'http://metadata.google.internal/computeMetadata/v1'\n      + '/instance/service-accounts/default/identity',\n    );\n    if (audience) {\n      url.searchParams.set('audience', audience);\n    }\n\n    const response = await fetch(url.toString(), {\n      headers: { 'Metadata-Flavor': 'Google' },\n      signal: AbortSignal.timeout(2000),\n    });\n\n    if (!response.ok) return undefined;\n\n    const token = await response.text();\n    return token || undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Auto-detect the deployment platform and fetch its OIDC token.\n * Returns undefined if not running on a supported platform or token\n * is unavailable.\n */\nexport async function getOidcToken(\n  audience?: string,\n): Promise<OidcTokenResult | undefined> {\n  // Try each platform in order - first match wins\n  let token: string | undefined;\n\n  token = getVercelOidcToken();\n  if (token) return { token, platform: 'vercel' };\n\n  token = await getGitHubActionsOidcToken(audience);\n  if (token) return { token, platform: 'github-actions' };\n\n  token = getGitLabOidcToken();\n  if (token) return { token, platform: 'gitlab' };\n\n  token = await getFlyOidcToken();\n  if (token) return { token, platform: 'fly' };\n\n  token = await getGcpOidcToken(audience);\n  if (token) return { token, platform: 'gcp' };\n\n  return undefined;\n}\n","import {\n  type Resolver, type PluginCacheAccessor, plugin, resolveCacheTtl,\n} from 'varlock/plugin-lib';\nimport ky from 'ky';\nimport { createHash } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { getOidcToken } from '@env-spec/utils/oidc-tokens';\n\nconst { SchemaError, ResolutionError } = plugin.ERRORS;\n\nconst VAULT_ICON = 'simple-icons:vault';\n\nplugin.name = 'vault';\nconst { debug } = plugin;\ndebug('init - version =', plugin.version);\n// capture cache accessor while plugin proxy context is active\nlet pluginCache: PluginCacheAccessor | undefined;\ntry {\n  pluginCache = plugin.cache;\n} catch {\n  // cache unavailable in this runtime context\n}\nplugin.icon = VAULT_ICON;\nplugin.standardVars = {\n  initDecorator: '@initHcpVault',\n  params: {\n    url: { key: 'VAULT_ADDR' },\n    token: { key: 'VAULT_TOKEN', dataType: 'vaultToken' },\n    namespace: { key: 'VAULT_NAMESPACE' },\n  },\n};\n\nconst FIX_AUTH_TIP = [\n  'Verify your Vault credentials are configured correctly. Use one of the following options:',\n  '  1. Provide a token explicitly via @initHcpVault(token=$VAULT_TOKEN)',\n  '  2. Use AppRole auth via @initHcpVault(roleId=..., secretId=...)',\n  '  3. Use JWT/OIDC auth via @initHcpVault(jwtRole=...) for deployed environments',\n  '  4. Login via the vault CLI (vault login) - the ~/.vault-token file will be used automatically',\n].join('\\n');\n\ninterface CachedToken {\n  token: string;\n  expiresAt: number;\n}\n\nclass VaultPluginInstance {\n  private url?: string;\n  private namespace?: string;\n  private token?: string;\n  private roleId?: string;\n  private secretId?: string;\n  private defaultPath?: string;\n  private pathPrefix?: string;\n  private jwtRole?: string;\n  private jwtAuthPath?: string;\n  private oidcToken?: string;\n  private cachedToken?: CachedToken;\n  /** in-flight login promise so concurrent callers share one auth request */\n  private loginInFlight?: Promise<string>;\n  private secretCache = new Map<string, Promise<Record<string, any>>>();\n  /** optional cache TTL - when set, resolved values are cached */\n  cacheTtl?: string | number;\n\n  constructor(\n    readonly id: string,\n  ) {}\n\n  setAuth(\n    url?: any,\n    namespace?: any,\n    token?: any,\n    roleId?: any,\n    secretId?: any,\n    defaultPath?: any,\n    pathPrefix?: any,\n    jwtRole?: any,\n    jwtAuthPath?: any,\n    oidcToken?: any,\n  ) {\n    this.url = url ? String(url).replace(/\\/+$/, '') : undefined;\n    this.namespace = namespace ? String(namespace) : undefined;\n    this.token = token ? String(token) : undefined;\n    this.roleId = roleId ? String(roleId) : undefined;\n    this.secretId = secretId ? String(secretId) : undefined;\n    this.defaultPath = defaultPath ? String(defaultPath) : undefined;\n    this.pathPrefix = pathPrefix ? String(pathPrefix) : undefined;\n    this.jwtRole = jwtRole ? String(jwtRole) : undefined;\n    this.jwtAuthPath = jwtAuthPath ? String(jwtAuthPath) : 'jwt';\n    this.oidcToken = oidcToken ? String(oidcToken) : undefined;\n    debug(\n      'vault instance',\n      this.id,\n      'set auth - url:',\n      this.url,\n      'hasToken:',\n      !!this.token,\n      'hasRoleId:',\n      !!this.roleId,\n      'jwtRole:',\n      this.jwtRole,\n      'namespace:',\n      this.namespace,\n      'defaultPath:',\n      this.defaultPath,\n      'pathPrefix:',\n      this.pathPrefix,\n    );\n  }\n\n  private _cacheKeyIdentity?: string;\n  /** short hash identifying which Vault server/namespace is being read, used to namespace cache keys */\n  get cacheKeyIdentity() {\n    // the secret value at a path is determined by server + namespace\n    // (the token only affects authorization, not which value lives at the path)\n    this._cacheKeyIdentity ??= createHash('sha256')\n      .update(JSON.stringify([this.url, this.namespace]))\n      .digest('hex')\n      .slice(0, 12);\n    return this._cacheKeyIdentity;\n  }\n\n  async getVaultToken(): Promise<string> {\n    // Check cached token (with 30s buffer)\n    if (this.cachedToken && this.cachedToken.expiresAt > Date.now() + 30_000) {\n      debug('Using cached Vault token');\n      return this.cachedToken.token;\n    }\n\n    // 1. Explicit token\n    if (this.token) {\n      debug('Using explicitly provided Vault token');\n      return this.token;\n    }\n\n    // Share one in-flight AppRole/JWT login across concurrent callers\n    if (this.loginInFlight) {\n      debug('Awaiting in-flight Vault login');\n      return this.loginInFlight;\n    }\n\n    // 2. AppRole auth\n    if (this.roleId && this.secretId) {\n      this.loginInFlight = this.loginWithAppRole().finally(() => {\n        this.loginInFlight = undefined;\n      });\n      return this.loginInFlight;\n    }\n\n    // 3. JWT/OIDC auth\n    if (this.jwtRole) {\n      this.loginInFlight = this.loginWithJwt().finally(() => {\n        this.loginInFlight = undefined;\n      });\n      return this.loginInFlight;\n    }\n\n    // 4. Vault/OpenBao CLI token helper files\n    for (const tokenFile of ['.vault-token', '.bao-token']) {\n      try {\n        const tokenPath = join(homedir(), tokenFile);\n        const fileToken = (await readFile(tokenPath, 'utf-8')).trim();\n        if (fileToken) {\n          debug(`Using token from ~/${tokenFile}`);\n          return fileToken;\n        }\n      } catch {\n        debug(`Could not read ~/${tokenFile}`);\n      }\n    }\n\n    throw new SchemaError('No Vault authentication found', {\n      tip: FIX_AUTH_TIP,\n    });\n  }\n\n  private async loginWithJwt(): Promise<string> {\n    if (!this.url) throw new SchemaError('Vault URL is required for JWT auth');\n\n    // Get OIDC token - either explicit or auto-detected from platform\n    let jwt: string | undefined = this.oidcToken;\n    if (!jwt) {\n      const result = await getOidcToken();\n      jwt = result?.token;\n    }\n\n    if (!jwt) {\n      throw new SchemaError('JWT/OIDC auth configured but no token available', {\n        tip: [\n          'Ensure you are running in an environment that provides OIDC tokens:',\n          '  - Vercel (VERCEL_OIDC_TOKEN)',\n          '  - GitHub Actions (requires id-token: write permission)',\n          '  - Fly.io, GCP Cloud Run, GitLab CI',\n          'Or provide an explicit token via @initHcpVault(oidcToken=...)',\n        ].join('\\n'),\n      });\n    }\n\n    try {\n      const headers: Record<string, string> = {};\n      if (this.namespace) headers['X-Vault-Namespace'] = this.namespace;\n\n      const authPath = this.jwtAuthPath || 'jwt';\n      const response = await ky.post(`${this.url}/v1/auth/${authPath}/login`, {\n        json: { role: this.jwtRole, jwt },\n        headers,\n      }).json<{ auth: { client_token: string; lease_duration: number } }>();\n\n      const clientToken = response.auth.client_token;\n      const leaseDuration = response.auth.lease_duration;\n\n      this.cachedToken = {\n        token: clientToken,\n        expiresAt: Date.now() + (leaseDuration * 1000),\n      };\n\n      debug('Successfully authenticated with JWT/OIDC');\n      return clientToken;\n    } catch (err: any) {\n      let errorMessage = 'JWT/OIDC authentication failed';\n      let errorTip: string | undefined;\n\n      if (err.response) {\n        const status = err.response.status;\n        if (status === 400) {\n          errorMessage = 'JWT login failed - invalid token or role';\n          errorTip = [\n            'Verify your JWT auth configuration:',\n            '  - jwtRole: Must match a role configured in Vault\\'s JWT auth method',\n            '  - The JWT token must satisfy the role\\'s bound claims',\n            `  - Auth path: auth/${this.jwtAuthPath || 'jwt'}`,\n          ].join('\\n');\n        } else if (status === 403) {\n          errorMessage = 'JWT login denied - token does not meet role requirements';\n          errorTip = 'Check the bound_claims and bound_audiences on the Vault JWT role';\n        } else {\n          errorMessage = `JWT login failed (HTTP ${status})`;\n        }\n      } else if (err.message) {\n        errorMessage = `JWT login error: ${err.message}`;\n      }\n\n      throw new SchemaError(errorMessage, { tip: errorTip });\n    }\n  }\n\n  private async loginWithAppRole(): Promise<string> {\n    if (!this.url) throw new SchemaError('Vault URL is required for AppRole auth');\n\n    try {\n      const headers: Record<string, string> = {};\n      if (this.namespace) headers['X-Vault-Namespace'] = this.namespace;\n\n      const response = await ky.post(`${this.url}/v1/auth/approle/login`, {\n        json: { role_id: this.roleId, secret_id: this.secretId },\n        headers,\n      }).json<{ auth: { client_token: string; lease_duration: number } }>();\n\n      const clientToken = response.auth.client_token;\n      const leaseDuration = response.auth.lease_duration;\n\n      this.cachedToken = {\n        token: clientToken,\n        expiresAt: Date.now() + (leaseDuration * 1000),\n      };\n\n      debug('Successfully authenticated with AppRole');\n      return clientToken;\n    } catch (err: any) {\n      let errorMessage = 'AppRole authentication failed';\n      let errorTip: string | undefined;\n\n      if (err.response) {\n        const status = err.response.status;\n        if (status === 400) {\n          errorMessage = 'AppRole login failed - invalid role_id or secret_id';\n          errorTip = [\n            'Verify your AppRole credentials:',\n            '  - role_id: The UUID of the AppRole role',\n            '  - secret_id: A valid secret ID for the role',\n            'Generate a new secret_id: vault write -f auth/approle/role/<role>/secret-id',\n          ].join('\\n');\n        } else if (status === 403) {\n          errorMessage = 'AppRole login denied - insufficient permissions';\n          errorTip = 'Ensure the AppRole auth method is enabled and the role exists';\n        } else {\n          errorMessage = `AppRole login failed (HTTP ${status})`;\n        }\n      } else if (err.message) {\n        errorMessage = `AppRole login error: ${err.message}`;\n      }\n\n      throw new SchemaError(errorMessage, { tip: errorTip });\n    }\n  }\n\n  /** @internal telemetry: which auth method this instance is configured for (fixed enum, never raw values) */\n  get telemetryAuthMethod(): 'token' | 'approle' | 'jwt' | 'cli_file' {\n    if (this.token) return 'token';\n    if (this.roleId && this.secretId) return 'approle';\n    if (this.jwtRole) return 'jwt';\n    return 'cli_file';\n  }\n\n  /** @internal telemetry: whether a namespace is configured (HCP/enterprise vs OSS) — boolean only, never the namespace string */\n  get telemetryUsesNamespace() { return this.namespace != null; }\n\n  buildPath(explicitPath?: string): string {\n    let basePath: string;\n    if (explicitPath) {\n      basePath = explicitPath;\n    } else if (this.defaultPath) {\n      basePath = this.defaultPath;\n    } else {\n      throw new ResolutionError('No path specified and no defaultPath configured', {\n        tip: 'Either provide a path argument to vaultSecret() or set defaultPath in @initHcpVault()',\n      });\n    }\n\n    if (this.pathPrefix) {\n      const prefix = this.pathPrefix.replace(/\\/+$/, '');\n      const path = basePath.replace(/^\\/+/, '');\n      return `${prefix}/${path}`;\n    }\n    return basePath;\n  }\n\n  fetchSecretData(secretPath: string): Promise<Record<string, any>> {\n    // Deduplicate concurrent fetches for the same path\n    const cached = this.secretCache.get(secretPath);\n    if (cached) {\n      debug(`Using cached fetch for: ${secretPath}`);\n      return cached;\n    }\n\n    const promise = this._fetchSecretData(secretPath);\n    this.secretCache.set(secretPath, promise);\n    // Clear cache entry on failure so retries can try again\n    promise.catch(() => this.secretCache.delete(secretPath));\n    return promise;\n  }\n\n  private async _fetchSecretData(secretPath: string): Promise<Record<string, any>> {\n    if (!this.url) {\n      throw new SchemaError('Vault URL is required');\n    }\n\n    const token = await this.getVaultToken();\n\n    // Split path into mount and secret path for KV v2 API\n    // e.g., \"secret/apple/music\" -> mount=\"secret\", kvPath=\"apple/music\"\n    // API endpoint: GET /v1/{mount}/data/{kvPath}\n    const slashIdx = secretPath.indexOf('/');\n    let mount: string;\n    let kvPath: string;\n    if (slashIdx === -1) {\n      mount = secretPath;\n      kvPath = '';\n    } else {\n      mount = secretPath.substring(0, slashIdx);\n      kvPath = secretPath.substring(slashIdx + 1);\n    }\n\n    const apiUrl = kvPath\n      ? `${this.url}/v1/${mount}/data/${kvPath}`\n      : `${this.url}/v1/${mount}/data`;\n\n    const headers: Record<string, string> = { 'X-Vault-Token': token };\n    if (this.namespace) headers['X-Vault-Namespace'] = this.namespace;\n\n    try {\n      debug(`Fetching secret: ${secretPath}`);\n\n      const response = await ky.get(apiUrl, { headers })\n        .json<{ data: { data: Record<string, any>; metadata: any } }>();\n\n      const secretData = response.data?.data;\n      if (!secretData) {\n        throw new ResolutionError('Secret data is empty');\n      }\n\n      return secretData;\n    } catch (err: any) {\n      if (err instanceof ResolutionError) throw err;\n\n      let errorMessage = 'Failed to fetch secret';\n      let errorTip: string | undefined;\n\n      if (err.response) {\n        const status = err.response.status;\n\n        if (status === 404) {\n          errorMessage = `Secret at path \"${secretPath}\" not found`;\n          errorTip = [\n            'Verify the secret exists in Vault:',\n            `  vault kv get ${secretPath}`,\n            '',\n            'Common issues:',\n            '  - The mount point may be wrong (first path segment)',\n            '  - The secret path may not exist',\n            '  - KV v1 secrets use a different API format',\n          ].join('\\n');\n        } else if (status === 403) {\n          errorMessage = `Permission denied for path \"${secretPath}\"`;\n          errorTip = [\n            'Ensure your token has the correct policy. Required capability: read',\n            'Example policy:',\n            `  path \"${mount}/data/${kvPath || '*'}\" {`,\n            '    capabilities = [\"read\"]',\n            '  }',\n          ].join('\\n');\n        } else if (status === 401) {\n          errorMessage = 'Vault authentication failed';\n          errorTip = [\n            'Your token may be expired or invalid',\n            FIX_AUTH_TIP,\n          ].join('\\n');\n        } else if (status === 503) {\n          errorMessage = 'Vault server is sealed or unavailable';\n          errorTip = 'Check that the Vault server is running and unsealed';\n        } else {\n          try {\n            const errorBody = await err.response.json();\n            const errors = errorBody.errors?.join('; ') || '';\n            errorMessage = `Vault error (HTTP ${status}): ${errors || err.message}`;\n          } catch {\n            errorMessage = `Vault error (HTTP ${status})`;\n          }\n        }\n      } else if (err.message) {\n        errorMessage = `Network error: ${err.message}`;\n        errorTip = 'Verify the Vault URL is correct and the server is reachable';\n      }\n\n      throw new ResolutionError(errorMessage, {\n        tip: errorTip,\n      });\n    }\n  }\n\n  /** extract a value from fetched secret data - a specific key, the single value, or the full JSON blob */\n  extractValueFromSecretData(secretData: Record<string, any>, jsonKey?: string): string {\n    // If a JSON key is specified, extract it\n    if (jsonKey) {\n      if (!(jsonKey in secretData)) {\n        throw new ResolutionError(`Key \"${jsonKey}\" not found in secret`, {\n          tip: `Available keys: ${Object.keys(secretData).join(', ')}`,\n        });\n      }\n      return String(secretData[jsonKey]);\n    }\n\n    // No key specified: if single key, return its value; otherwise return JSON\n    const keys = Object.keys(secretData);\n    if (keys.length === 1) {\n      return String(secretData[keys[0]]);\n    }\n    return JSON.stringify(secretData);\n  }\n\n  async getSecret(secretPath: string, jsonKey?: string): Promise<string> {\n    const secretData = await this.fetchSecretData(secretPath);\n    return this.extractValueFromSecretData(secretData, jsonKey);\n  }\n}\n\nconst pluginInstances: Record<string, VaultPluginInstance> = {};\n\nplugin.registerRootDecorator({\n  name: 'initHcpVault',\n  description: 'Initialize a HashiCorp Vault plugin instance for vaultSecret() resolver',\n  isFunction: true,\n  async process(argsVal) {\n    const objArgs = argsVal.objArgs;\n    if (!objArgs) throw new SchemaError('Expected some args');\n\n    // Validate id is static\n    if (objArgs.id && !objArgs.id.isStatic) {\n      throw new SchemaError('Expected id to be static');\n    }\n    const id = String(objArgs?.id?.staticValue || '_default');\n    if (pluginInstances[id]) {\n      throw new SchemaError(`Instance with id \"${id}\" already initialized`);\n    }\n\n    // url is required\n    if (!objArgs.url) {\n      throw new SchemaError('url parameter is required', {\n        tip: 'Provide your Vault server URL: @initHcpVault(url=\"https://vault.example.com:8200\")',\n      });\n    }\n\n    pluginInstances[id] = new VaultPluginInstance(id);\n\n    return {\n      id,\n      cacheTtlResolver: objArgs.cacheTtl,\n      urlResolver: objArgs.url,\n      namespaceResolver: objArgs.namespace,\n      tokenResolver: objArgs.token,\n      roleIdResolver: objArgs.roleId,\n      secretIdResolver: objArgs.secretId,\n      defaultPathResolver: objArgs.defaultPath,\n      pathPrefixResolver: objArgs.pathPrefix,\n      jwtRoleResolver: objArgs.jwtRole,\n      jwtAuthPathResolver: objArgs.jwtAuthPath,\n      oidcTokenResolver: objArgs.oidcToken,\n    };\n  },\n  async execute({\n    id,\n    cacheTtlResolver,\n    urlResolver,\n    namespaceResolver,\n    tokenResolver,\n    roleIdResolver,\n    secretIdResolver,\n    defaultPathResolver,\n    pathPrefixResolver,\n    jwtRoleResolver,\n    jwtAuthPathResolver,\n    oidcTokenResolver,\n  }) {\n    const url = await urlResolver.resolve();\n    const namespace = await namespaceResolver?.resolve();\n    const token = await tokenResolver?.resolve();\n    const roleId = await roleIdResolver?.resolve();\n    const secretId = await secretIdResolver?.resolve();\n    const defaultPath = await defaultPathResolver?.resolve();\n    const pathPrefix = await pathPrefixResolver?.resolve();\n    const jwtRole = await jwtRoleResolver?.resolve();\n    const jwtAuthPath = await jwtAuthPathResolver?.resolve();\n    const oidcToken = await oidcTokenResolver?.resolve();\n    pluginInstances[id].setAuth(\n      url,\n      namespace,\n      token,\n      roleId,\n      secretId,\n      defaultPath,\n      pathPrefix,\n      jwtRole,\n      jwtAuthPath,\n      oidcToken,\n    );\n    const cacheTtl = await resolveCacheTtl(cacheTtlResolver);\n    if (cacheTtl !== undefined) {\n      pluginInstances[id].cacheTtl = cacheTtl;\n    }\n  },\n});\n\nplugin.registerDataType({\n  name: 'vaultToken',\n  sensitive: true,\n  internal: true,\n  typeDescription: 'HashiCorp Vault authentication token',\n  icon: VAULT_ICON,\n  docs: [\n    {\n      description: 'Vault Tokens',\n      url: 'https://developer.hashicorp.com/vault/docs/concepts/tokens',\n    },\n  ],\n});\n\nplugin.registerResolverFunction({\n  name: 'vaultSecret',\n  label: 'Fetch secret from HashiCorp Vault KV v2',\n  icon: VAULT_ICON,\n  argsSchema: {\n    type: 'mixed',\n    arrayMinLength: 0,\n    arrayMaxLength: 2,\n  },\n  process() {\n    let instanceId: string;\n    let secretRefResolver: Resolver | undefined;\n    let keyResolver: Resolver | undefined;\n    let returnJson = false;\n\n    // Check for named 'key' parameter\n    if (this.objArgs?.key) {\n      keyResolver = this.objArgs.key;\n    }\n\n    // Check for named 'raw' flag - returns full secret as JSON blob instead of extracting a key\n    if (this.objArgs?.raw) {\n      if (!this.objArgs.raw.isStatic || this.objArgs.raw.staticValue !== true) {\n        throw new SchemaError('Expected raw=true');\n      }\n      if (keyResolver) {\n        throw new SchemaError('Cannot use raw=true with key= parameter', {\n          tip: 'Remove the key= parameter, or remove raw=true',\n        });\n      }\n      returnJson = true;\n    }\n\n    // Get the item key for auto-inferring the JSON key\n    const parent = (this as any).parent;\n    const itemKey = parent?.key || '';\n\n    if (!this.arrArgs || this.arrArgs.length === 0) {\n      instanceId = '_default';\n    } else if (this.arrArgs.length === 1) {\n      instanceId = '_default';\n      secretRefResolver = this.arrArgs[0];\n    } else if (this.arrArgs.length === 2) {\n      if (!(this.arrArgs[0].isStatic)) {\n        throw new SchemaError('Expected instance id to be a static value');\n      } else {\n        instanceId = String(this.arrArgs[0].staticValue);\n      }\n      secretRefResolver = this.arrArgs[1];\n    } else {\n      throw new SchemaError('Expected 0, 1, or 2 args');\n    }\n\n    if (!Object.values(pluginInstances).length) {\n      throw new SchemaError('No Vault plugin instances found', {\n        tip: 'Initialize at least one Vault instance using the @initHcpVault() root decorator',\n      });\n    }\n\n    // Make sure instance id is valid\n    const selectedInstance = pluginInstances[instanceId];\n    if (!selectedInstance) {\n      if (instanceId === '_default') {\n        throw new SchemaError('Vault plugin instance (without id) not found', {\n          tip: [\n            'Either remove the `id` param from your @initHcpVault call',\n            'or use `vaultSecret(id, secretRef)` to select an instance by id.',\n            `Possible ids are: ${Object.keys(pluginInstances).join(', ')}`,\n          ].join('\\n'),\n        });\n      } else {\n        throw new SchemaError(`Vault plugin instance id \"${instanceId}\" not found`, {\n          tip: [`Valid ids are: ${Object.keys(pluginInstances).join(', ')}`].join('\\n'),\n        });\n      }\n    }\n\n    return {\n      instanceId, secretRefResolver, keyResolver, itemKey, returnJson,\n    };\n  },\n  async resolve({\n    instanceId, secretRefResolver, keyResolver, itemKey, returnJson,\n  }) {\n    const selectedInstance = pluginInstances[instanceId];\n\n    // Resolve the secret ref (path, possibly with #KEY syntax)\n    let secretRef: string | undefined;\n    if (secretRefResolver) {\n      const resolved = await secretRefResolver.resolve();\n      if (typeof resolved !== 'string') {\n        throw new SchemaError('Expected secret reference to resolve to a string');\n      }\n      secretRef = resolved;\n    }\n\n    // Parse for explicit JSON key using # syntax\n    // e.g., \"secret/path#KEY_NAME\" -> path=\"secret/path\", explicitKey=\"KEY_NAME\"\n    let secretPath: string;\n    let explicitKey: string | undefined;\n    if (secretRef) {\n      const hashIndex = secretRef.indexOf('#');\n      if (hashIndex !== -1) {\n        secretPath = secretRef.substring(0, hashIndex);\n        explicitKey = secretRef.substring(hashIndex + 1);\n      } else {\n        secretPath = secretRef;\n      }\n    } else {\n      // No path arg — will use defaultPath via buildPath\n      secretPath = '';\n    }\n\n    // Validate conflicting options\n    if (returnJson && explicitKey) {\n      throw new SchemaError('Cannot use raw=true with #KEY syntax', {\n        tip: 'Remove the #KEY from the path, or remove raw=true',\n      });\n    }\n\n    // Determine the JSON key to extract:\n    // 1. Named 'key' parameter takes highest precedence\n    // 2. Explicit #KEY in path\n    // 3. json=true skips key extraction entirely\n    // 4. Default: use the item key name\n    let jsonKey: string | undefined;\n    if (keyResolver) {\n      const keyValue = await keyResolver.resolve();\n      if (typeof keyValue !== 'string') {\n        throw new SchemaError('Expected key parameter to resolve to a string');\n      }\n      jsonKey = keyValue;\n    } else if (explicitKey) {\n      jsonKey = explicitKey;\n    } else if (!returnJson) {\n      jsonKey = itemKey || undefined;\n    }\n\n    // Build the full path using pathPrefix/defaultPath\n    const fullPath = selectedInstance.buildPath(secretPath || undefined);\n\n    // check cache if cacheTtl is configured and cache is available\n    if (selectedInstance.cacheTtl !== undefined && pluginCache) {\n      // store the full secret data object per path, then extract per lookup\n      // (avoids collisions between different #KEY lookups on the same path)\n      const cacheKey = `hcpVault:${instanceId}:${selectedInstance.cacheKeyIdentity}:${fullPath}`;\n      const secretData = await pluginCache.getOrSet(\n        cacheKey,\n        selectedInstance.cacheTtl,\n        async () => await selectedInstance.fetchSecretData(fullPath),\n      );\n      if (!secretData || typeof secretData !== 'object') {\n        throw new ResolutionError('Cached Vault secret payload has unexpected type (expected object)');\n      }\n      return selectedInstance.extractValueFromSecretData(secretData, jsonKey);\n    }\n\n    return await selectedInstance.getSecret(fullPath, jsonKey);\n  },\n});\n\nplugin.registerResolverFunction({\n  name: 'vaultToken',\n  label: 'HashiCorp Vault client token',\n  icon: VAULT_ICON,\n  impliesSensitive: true,\n  argsSchema: {\n    type: 'array',\n    arrayMaxLength: 1,\n  },\n  process() {\n    // Optional positional arg = instance id\n    let instanceId = '_default';\n    if (this.arrArgs?.length) {\n      if (!this.arrArgs[0].isStatic) {\n        throw new SchemaError('Expected instance id to be a static value');\n      }\n      instanceId = String(this.arrArgs[0].staticValue);\n    }\n\n    if (!Object.values(pluginInstances).length) {\n      throw new SchemaError('No Vault plugin instances found', {\n        tip: 'Initialize at least one Vault instance using the @initHcpVault() root decorator',\n      });\n    }\n\n    const selectedInstance = pluginInstances[instanceId];\n    if (!selectedInstance) {\n      if (instanceId === '_default') {\n        throw new SchemaError('Vault plugin instance (without id) not found', {\n          tip: [\n            'Either remove the `id` param from your @initHcpVault call',\n            'or use `vaultToken(id)` to select an instance by id',\n            `Possible ids are: ${Object.keys(pluginInstances).join(', ')}`,\n          ].join('\\n'),\n        });\n      } else {\n        throw new SchemaError(`Vault plugin instance id \"${instanceId}\" not found`, {\n          tip: [`Valid ids are: ${Object.keys(pluginInstances).join(', ')}`].join('\\n'),\n        });\n      }\n    }\n\n    return { instanceId };\n  },\n  async resolve({ instanceId }) {\n    return pluginInstances[instanceId].getVaultToken();\n  },\n});\n\n// Anonymous, non-sensitive usage signals. Strictly sanitized before send.\nplugin.registerTelemetryAttributes(() => {\n  const instances = Object.values(pluginInstances);\n  const authMethods = new Set(instances.map((i) => i.telemetryAuthMethod));\n  return {\n    // standard attributes\n    instance_count: instances.length,\n    cache_enabled: instances.some((i) => i.cacheTtl != null),\n    // custom attributes\n    auth_token: authMethods.has('token'),\n    auth_approle: authMethods.has('approle'),\n    auth_jwt: authMethods.has('jwt'),\n    auth_cli_file: authMethods.has('cli_file'),\n    uses_namespace: instances.some((i) => i.telemetryUsesNamespace),\n  };\n});\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],"mappings":"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"}