@varlock/hashicorp-vault-plugin 0.0.0 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/errors/HTTPError.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/errors/NonError.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/errors/ForceRetryError.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/core/constants.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/body.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/is.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/merge.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/normalize.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/errors/TimeoutError.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/timeout.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/delay.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/options.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/utils/type-guards.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/core/Ky.ts","../../../../node_modules/.bun/ky@1.14.3/node_modules/ky/source/index.ts","../src/plugin.ts"],"names":["retry","ky","join","homedir","readFile"],"mappings":"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","file":"plugin.cjs","sourcesContent":["import type {NormalizedOptions} from '../types/options.js';\nimport type {KyRequest} from '../types/request.js';\nimport type {KyResponse} from '../types/response.js';\n\nexport class HTTPError<T = unknown> extends Error {\n\tpublic response: KyResponse<T>;\n\tpublic request: KyRequest;\n\tpublic options: NormalizedOptions;\n\n\tconstructor(response: Response, request: Request, options: NormalizedOptions) {\n\t\tconst code = (response.status || response.status === 0) ? response.status : '';\n\t\tconst title = response.statusText ?? '';\n\t\tconst status = `${code} ${title}`.trim();\n\t\tconst reason = status ? `status code ${status}` : 'an unknown error';\n\n\t\tsuper(`Request failed with ${reason}: ${request.method} ${request.url}`);\n\n\t\tthis.name = 'HTTPError';\n\t\tthis.response = response;\n\t\tthis.request = request;\n\t\tthis.options = options;\n\t}\n}\n","/**\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\toverride name = 'NonError';\n\treadonly value: unknown;\n\n\tconstructor(value: unknown) {\n\t\tlet message = 'Non-error value was thrown';\n\n\t\t// Intentionally minimal as this error is just an edge-case.\n\t\ttry {\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tmessage = value;\n\t\t\t} else if (value && typeof value === 'object' && 'message' in value && typeof value.message === 'string') {\n\t\t\t\tmessage = value.message;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Use default message if accessing properties throws\n\t\t}\n\n\t\tsuper(message);\n\n\t\tthis.value = value;\n\t}\n}\n","import type {ForceRetryOptions} from '../core/constants.js';\nimport {NonError} from './NonError.js';\n\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\toverride name = 'ForceRetryError' as const;\n\tcustomDelay: number | undefined;\n\tcode: string | undefined;\n\tcustomRequest: Request | undefined;\n\n\tconstructor(options?: ForceRetryOptions) {\n\t\t// Runtime protection: wrap non-Error causes in NonError\n\t\t// TypeScript type is Error for guidance, but JS users can pass anything\n\t\tconst cause = options?.cause\n\t\t\t? (options.cause instanceof Error ? options.cause : new NonError(options.cause))\n\t\t\t: undefined;\n\n\t\tsuper(\n\t\t\toptions?.code ? `Forced retry: ${options.code}` : 'Forced retry',\n\t\t\tcause ? {cause} : undefined,\n\t\t);\n\n\t\tthis.customDelay = options?.delay;\n\t\tthis.code = options?.code;\n\t\tthis.customRequest = options?.request;\n\t}\n}\n","import type {Expect, Equal} from '@type-challenges/utils';\nimport {type KyOptionsRegistry, type RequestHttpMethod} from '../types/options.js';\n\nexport const supportsRequestStreams = (() => {\n\tlet duplexAccessed = false;\n\tlet hasContentType = false;\n\tconst supportsReadableStream = typeof globalThis.ReadableStream === 'function';\n\tconst supportsRequest = typeof globalThis.Request === 'function';\n\n\tif (supportsReadableStream && supportsRequest) {\n\t\ttry {\n\t\t\thasContentType = new globalThis.Request('https://empty.invalid', {\n\t\t\t\tbody: new globalThis.ReadableStream(),\n\t\t\t\tmethod: 'POST',\n\t\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\t\tget duplex() {\n\t\t\t\t\tduplexAccessed = true;\n\t\t\t\t\treturn 'half';\n\t\t\t\t},\n\t\t\t}).headers.has('Content-Type');\n\t\t} catch (error) {\n\t\t\t// QQBrowser on iOS throws \"unsupported BodyInit type\" error (see issue #581)\n\t\t\tif (error instanceof Error && error.message === 'unsupported BodyInit type') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn duplexAccessed && !hasContentType;\n})();\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';\n\nexport const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'] as const;\n\nconst validate = <T extends Array<true>>() => undefined as unknown as T;\nvalidate<[\n\tExpect<Equal<typeof requestMethods[number], RequestHttpMethod>>,\n]>();\n\nexport const responseTypes = {\n\tjson: 'application/json',\n\ttext: 'text/*',\n\tformData: 'multipart/form-data',\n\tarrayBuffer: '*/*',\n\tblob: '*/*',\n\t// Supported in modern Fetch implementations (for example, browsers and recent Node.js/undici).\n\t// We still feature-check at runtime before exposing the shortcut.\n\tbytes: '*/*',\n} as const;\n\n// The maximum value of a 32bit int (see issue #117)\nexport const maxSafeTimeout = 2_147_483_647;\n\n// Size in bytes of a typical form boundary, used to help estimate upload size\nexport const usualFormBoundarySize = new TextEncoder().encode('------WebKitFormBoundaryaxpyiPgbbPti10Rw').length;\n\nexport const stop = Symbol('stop');\n\n/**\nOptions for forcing a retry via `ky.retry()`.\n*/\nexport type ForceRetryOptions = {\n\t/**\n\tCustom delay in milliseconds before retrying.\n\n\tIf not provided, uses the default retry delay calculation based on `retry.delay` configuration.\n\n\t**Note:** Custom delays bypass jitter and `backoffLimit`. This is intentional, as custom delays often come from server responses (e.g., `Retry-After` headers) and should be respected exactly as specified.\n\t*/\n\tdelay?: number;\n\n\t/**\n\tError code for the retry.\n\n\tThis machine-readable identifier will be included in the error message passed to `beforeRetry` hooks, allowing you to distinguish between different types of forced retries.\n\n\t@example\n\t```\n\treturn ky.retry({code: 'RATE_LIMIT'});\n\t// Resulting error message: 'Forced retry: RATE_LIMIT'\n\t```\n\t*/\n\tcode?: string;\n\n\t/**\n\tOriginal error that caused the retry.\n\n\tThis allows you to preserve the error chain when forcing a retry based on caught exceptions. The error will be set as the `cause` of the `ForceRetryError`, enabling proper error chain traversal.\n\n\t@example\n\t```\n\ttry {\n\t\tconst data = await response.clone().json();\n\t\tvalidateBusinessLogic(data);\n\t} catch (error) {\n\t\treturn ky.retry({\n\t\t\tcode: 'VALIDATION_FAILED',\n\t\t\tcause: error // Preserves original error in chain\n\t\t});\n\t}\n\t```\n\t*/\n\tcause?: Error;\n\n\t/**\n\tCustom request to use for the retry.\n\n\tThis allows you to modify or completely replace the request during a forced retry. The custom request becomes the starting point for the retry - `beforeRetry` hooks can still further modify it if needed.\n\n\t**Note:** The custom request's `signal` will be replaced with Ky's managed signal to handle timeouts and user-provided abort signals correctly. If the original request body has been consumed, you must provide a new body or clone the request before consuming.\n\n\t@example\n\t```\n\t// Fallback to a different endpoint\n\treturn ky.retry({\n\t\trequest: new Request('https://backup-api.com/endpoint', {\n\t\t\tmethod: request.method,\n\t\t\theaders: request.headers,\n\t\t}),\n\t\tcode: 'BACKUP_ENDPOINT'\n\t});\n\n\t// Retry with refreshed authentication token\n\tconst data = await response.clone().json();\n\treturn ky.retry({\n\t\trequest: new Request(request, {\n\t\t\theaders: {\n\t\t\t\t...Object.fromEntries(request.headers),\n\t\t\t\t'Authorization': `Bearer ${data.newToken}`\n\t\t\t}\n\t\t}),\n\t\tcode: 'TOKEN_REFRESHED'\n\t});\n\t```\n\t*/\n\trequest?: Request;\n};\n\n/**\nMarker returned by ky.retry() to signal a forced retry from afterResponse hooks.\n*/\nexport class RetryMarker {\n\tconstructor(public options?: ForceRetryOptions) {}\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\thooks: {\n\t\tafterResponse: [\n\t\t\tasync (request, options, response) => {\n\t\t\t\t// Retry based on response body content\n\t\t\t\tif (response.status === 200) {\n\t\t\t\t\tconst data = await response.clone().json();\n\n\t\t\t\t\t// Simple retry with default delay\n\t\t\t\t\tif (data.error?.code === 'TEMPORARY_ERROR') {\n\t\t\t\t\t\treturn ky.retry();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with custom delay from API response\n\t\t\t\t\tif (data.error?.code === 'RATE_LIMIT') {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\tdelay: data.error.retryAfter * 1000,\n\t\t\t\t\t\t\tcode: 'RATE_LIMIT'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with a modified request (e.g., fallback endpoint)\n\t\t\t\t\tif (data.error?.code === 'FALLBACK_TO_BACKUP') {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\trequest: new Request('https://backup-api.com/endpoint', {\n\t\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\t\theaders: request.headers,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcode: 'BACKUP_ENDPOINT'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with refreshed authentication\n\t\t\t\t\tif (data.error?.code === 'TOKEN_REFRESH' && data.newToken) {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\trequest: new Request(request, {\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t...Object.fromEntries(request.headers),\n\t\t\t\t\t\t\t\t\t'Authorization': `Bearer ${data.newToken}`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcode: 'TOKEN_REFRESHED'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with cause to preserve error chain\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvalidateResponse(data);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\tcode: 'VALIDATION_FAILED',\n\t\t\t\t\t\t\tcause: error\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tbeforeRetry: [\n\t\t\t({error, retryCount}) => {\n\t\t\t\t// Observable in beforeRetry hooks\n\t\t\t\tif (isForceRetryError(error)) {\n\t\t\t\t\tconsole.log(`Forced retry #${retryCount}: ${error.message}`);\n\t\t\t\t\t// Example output: \"Forced retry #1: Forced retry: RATE_LIMIT\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n});\n\nconst response = await api.get('https://example.com/api');\n```\n*/\nexport const retry = (options?: ForceRetryOptions) => new RetryMarker(options);\n\nexport const kyOptionKeys: KyOptionsRegistry = {\n\tjson: true,\n\tparseJson: true,\n\tstringifyJson: true,\n\tsearchParams: true,\n\tprefixUrl: true,\n\tretry: true,\n\ttimeout: true,\n\thooks: true,\n\tthrowHttpErrors: true,\n\tonDownloadProgress: true,\n\tonUploadProgress: true,\n\tfetch: true,\n\tcontext: true,\n};\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\tnext: true, // Next.js cache revalidation (revalidate, tags)\n} as const;\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\tmethod: true,\n\theaders: true,\n\tbody: true,\n\tmode: true,\n\tcredentials: true,\n\tcache: true,\n\tredirect: true,\n\treferrer: true,\n\treferrerPolicy: true,\n\tintegrity: true,\n\tkeepalive: true,\n\tsignal: true,\n\twindow: true,\n\tduplex: true,\n} as const;\n","import type {Options} from '../types/options.js';\nimport {usualFormBoundarySize} from '../core/constants.js';\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const getBodySize = (body?: BodyInit | null): number => {\n\tif (!body) {\n\t\treturn 0;\n\t}\n\n\tif (body instanceof FormData) {\n\t\t// This is an approximation, as FormData size calculation is not straightforward\n\t\tlet size = 0;\n\n\t\tfor (const [key, value] of body) {\n\t\t\tsize += usualFormBoundarySize;\n\t\t\tsize += new TextEncoder().encode(`Content-Disposition: form-data; name=\"${key}\"`).length;\n\t\t\tsize += typeof value === 'string'\n\t\t\t\t? new TextEncoder().encode(value).length\n\t\t\t\t: value.size;\n\t\t}\n\n\t\treturn size;\n\t}\n\n\tif (body instanceof Blob) {\n\t\treturn body.size;\n\t}\n\n\tif (body instanceof ArrayBuffer) {\n\t\treturn body.byteLength;\n\t}\n\n\tif (typeof body === 'string') {\n\t\treturn new TextEncoder().encode(body).length;\n\t}\n\n\tif (body instanceof URLSearchParams) {\n\t\treturn new TextEncoder().encode(body.toString()).length;\n\t}\n\n\tif ('byteLength' in body) {\n\t\treturn (body).byteLength;\n\t}\n\n\tif (typeof body === 'object' && body !== null) {\n\t\ttry {\n\t\t\tconst jsonString = JSON.stringify(body);\n\t\t\treturn new TextEncoder().encode(jsonString).length;\n\t\t} catch {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\treturn 0; // Default case, unable to determine size\n};\n\nconst withProgress = (stream: ReadableStream<Uint8Array>, totalBytes: number, onProgress: Options['onDownloadProgress'] | Options['onUploadProgress']): ReadableStream<Uint8Array> => {\n\tlet previousChunk: Uint8Array | undefined;\n\tlet transferredBytes = 0;\n\n\treturn stream.pipeThrough(new TransformStream<Uint8Array, Uint8Array>({\n\t\ttransform(currentChunk, controller) {\n\t\t\tcontroller.enqueue(currentChunk);\n\n\t\t\tif (previousChunk) {\n\t\t\t\ttransferredBytes += previousChunk.byteLength;\n\n\t\t\t\tlet percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n\t\t\t\t// Avoid reporting 100% progress before the stream is actually finished (in case totalBytes is inaccurate)\n\t\t\t\tif (percent >= 1) {\n\t\t\t\t\t// Epsilon is used here to get as close as possible to 100% without reaching it.\n\t\t\t\t\t// If we were to use 0.99 here, percent could potentially go backwards.\n\t\t\t\t\tpercent = 1 - Number.EPSILON;\n\t\t\t\t}\n\n\t\t\t\tonProgress?.({percent, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes}, previousChunk);\n\t\t\t}\n\n\t\t\tpreviousChunk = currentChunk;\n\t\t},\n\t\tflush() {\n\t\t\tif (previousChunk) {\n\t\t\t\ttransferredBytes += previousChunk.byteLength;\n\t\t\t\tonProgress?.({percent: 1, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes}, previousChunk);\n\t\t\t}\n\t\t},\n\t}));\n};\n\nexport const streamResponse = (response: Response, onDownloadProgress: Options['onDownloadProgress']) => {\n\tif (!response.body) {\n\t\treturn response;\n\t}\n\n\tif (response.status === 204) {\n\t\treturn new Response(\n\t\t\tnull,\n\t\t\t{\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders: response.headers,\n\t\t\t},\n\t\t);\n\t}\n\n\tconst totalBytes = Math.max(0, Number(response.headers.get('content-length')) || 0);\n\n\treturn new Response(\n\t\twithProgress(response.body, totalBytes, onDownloadProgress),\n\t\t{\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t\theaders: response.headers,\n\t\t},\n\t);\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const streamRequest = (request: Request, onUploadProgress: Options['onUploadProgress'], originalBody?: BodyInit | null) => {\n\tif (!request.body) {\n\t\treturn request;\n\t}\n\n\t// Use original body for size calculation since request.body is already a stream\n\tconst totalBytes = getBodySize(originalBody ?? request.body);\n\n\treturn new Request(request, {\n\t\t// @ts-expect-error - Types are outdated.\n\t\tduplex: 'half',\n\t\tbody: withProgress(request.body, totalBytes, onUploadProgress),\n\t});\n};\n","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isObject = (value: unknown): value is object => value !== null && typeof value === 'object';\n","import type {KyHeadersInit, Options} from '../types/options.js';\nimport type {Hooks} from '../types/hooks.js';\nimport {supportsAbortSignal} from '../core/constants.js';\nimport {isObject} from './is.js';\n\nexport const validateAndMerge = (...sources: Array<Partial<Options> | undefined>): Partial<Options> => {\n\tfor (const source of sources) {\n\t\tif ((!isObject(source) || Array.isArray(source)) && source !== undefined) {\n\t\t\tthrow new TypeError('The `options` argument must be an object');\n\t\t}\n\t}\n\n\treturn deepMerge({}, ...sources);\n};\n\nexport const mergeHeaders = (source1: KyHeadersInit = {}, source2: KyHeadersInit = {}) => {\n\tconst result = new globalThis.Headers(source1 as RequestInit['headers']);\n\tconst isHeadersInstance = source2 instanceof globalThis.Headers;\n\tconst source = new globalThis.Headers(source2 as RequestInit['headers']);\n\n\tfor (const [key, value] of source.entries()) {\n\t\tif ((isHeadersInstance && value === 'undefined') || value === undefined) {\n\t\t\tresult.delete(key);\n\t\t} else {\n\t\t\tresult.set(key, value);\n\t\t}\n\t}\n\n\treturn result;\n};\n\nfunction newHookValue<K extends keyof Hooks>(original: Hooks, incoming: Hooks, property: K): Required<Hooks>[K] {\n\treturn (Object.hasOwn(incoming, property) && incoming[property] === undefined)\n\t\t? []\n\t\t: deepMerge<Required<Hooks>[K]>(original[property] ?? [], incoming[property] ?? []);\n}\n\nexport const mergeHooks = (original: Hooks = {}, incoming: Hooks = {}): Required<Hooks> => (\n\t{\n\t\tbeforeRequest: newHookValue(original, incoming, 'beforeRequest'),\n\t\tbeforeRetry: newHookValue(original, incoming, 'beforeRetry'),\n\t\tafterResponse: newHookValue(original, incoming, 'afterResponse'),\n\t\tbeforeError: newHookValue(original, incoming, 'beforeError'),\n\t}\n);\n\nconst appendSearchParameters = (target: any, source: any): URLSearchParams => {\n\tconst result = new URLSearchParams();\n\n\tfor (const input of [target, source]) {\n\t\tif (input === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (input instanceof URLSearchParams) {\n\t\t\tfor (const [key, value] of input.entries()) {\n\t\t\t\tresult.append(key, value);\n\t\t\t}\n\t\t} else if (Array.isArray(input)) {\n\t\t\tfor (const pair of input) {\n\t\t\t\tif (!Array.isArray(pair) || pair.length !== 2) {\n\t\t\t\t\tthrow new TypeError('Array search parameters must be provided in [[key, value], ...] format');\n\t\t\t\t}\n\n\t\t\t\tresult.append(String(pair[0]), String(pair[1]));\n\t\t\t}\n\t\t} else if (isObject(input)) {\n\t\t\tfor (const [key, value] of Object.entries(input)) {\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\tresult.append(key, String(value));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// String\n\t\t\tconst parameters = new URLSearchParams(input);\n\t\t\tfor (const [key, value] of parameters.entries()) {\n\t\t\t\tresult.append(key, value);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n};\n\n// TODO: Make this strongly-typed (no `any`).\nexport const deepMerge = <T>(...sources: Array<Partial<T> | undefined>): T => {\n\tlet returnValue: any = {};\n\tlet headers = {};\n\tlet hooks = {};\n\tlet searchParameters: any;\n\tconst signals: AbortSignal[] = [];\n\n\tfor (const source of sources) {\n\t\tif (Array.isArray(source)) {\n\t\t\tif (!Array.isArray(returnValue)) {\n\t\t\t\treturnValue = [];\n\t\t\t}\n\n\t\t\treturnValue = [...returnValue, ...source];\n\t\t} else if (isObject(source)) {\n\t\t\tfor (let [key, value] of Object.entries(source)) {\n\t\t\t\t// Special handling for AbortSignal instances\n\t\t\t\tif (key === 'signal' && value instanceof globalThis.AbortSignal) {\n\t\t\t\t\tsignals.push(value);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Special handling for context - shallow merge only\n\t\t\t\tif (key === 'context') {\n\t\t\t\t\tif (value !== undefined && value !== null && (!isObject(value) || Array.isArray(value))) {\n\t\t\t\t\t\tthrow new TypeError('The `context` option must be an object');\n\t\t\t\t\t}\n\n\t\t\t\t\t// Shallow merge: always create a new object to prevent mutation bugs\n\t\t\t\t\treturnValue = {\n\t\t\t\t\t\t...returnValue,\n\t\t\t\t\t\tcontext: (value === undefined || value === null)\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {...returnValue.context, ...value},\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Special handling for searchParams\n\t\t\t\tif (key === 'searchParams') {\n\t\t\t\t\tif (value === undefined || value === null) {\n\t\t\t\t\t\t// Explicit undefined or null removes searchParams\n\t\t\t\t\t\tsearchParameters = undefined;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// First source: keep as-is to preserve type (string/object/URLSearchParams)\n\t\t\t\t\t\t// Subsequent sources: merge and convert to URLSearchParams\n\t\t\t\t\t\tsearchParameters = searchParameters === undefined ? value : appendSearchParameters(searchParameters, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (isObject(value) && key in returnValue) {\n\t\t\t\t\tvalue = deepMerge(returnValue[key], value);\n\t\t\t\t}\n\n\t\t\t\treturnValue = {...returnValue, [key]: value};\n\t\t\t}\n\n\t\t\tif (isObject((source as any).hooks)) {\n\t\t\t\thooks = mergeHooks(hooks, (source as any).hooks);\n\t\t\t\treturnValue.hooks = hooks;\n\t\t\t}\n\n\t\t\tif (isObject((source as any).headers)) {\n\t\t\t\theaders = mergeHeaders(headers, (source as any).headers);\n\t\t\t\treturnValue.headers = headers;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (searchParameters !== undefined) {\n\t\treturnValue.searchParams = searchParameters;\n\t}\n\n\tif (signals.length > 0) {\n\t\tif (signals.length === 1) {\n\t\t\treturnValue.signal = signals[0];\n\t\t} else if (supportsAbortSignal) {\n\t\t\treturnValue.signal = AbortSignal.any(signals);\n\t\t} else {\n\t\t\t// When AbortSignal.any is not available, use the last signal\n\t\t\t// This maintains the previous behavior before signal merging was added\n\t\t\t// This can be remove when the `supportsAbortSignal` check is removed.`\n\t\t\treturnValue.signal = signals.at(-1);\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n","import {requestMethods} from '../core/constants.js';\nimport type {RetryOptions} from '../types/retry.js';\nimport type {HttpMethod, RequestHttpMethod} from '../types/options.js';\n\nexport const normalizeRequestMethod = (input: string): string =>\n\trequestMethods.includes(input as RequestHttpMethod) ? input.toUpperCase() : input;\n\nconst retryMethods: HttpMethod[] = ['get', 'put', 'head', 'delete', 'options', 'trace'];\n\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\n\nconst retryAfterStatusCodes = [413, 429, 503];\n\ntype InternalRetryOptions = Required<Omit<RetryOptions, 'shouldRetry'>> & Pick<RetryOptions, 'shouldRetry'>;\n\nconst defaultRetryOptions: InternalRetryOptions = {\n\tlimit: 2,\n\tmethods: retryMethods,\n\tstatusCodes: retryStatusCodes,\n\tafterStatusCodes: retryAfterStatusCodes,\n\tmaxRetryAfter: Number.POSITIVE_INFINITY,\n\tbackoffLimit: Number.POSITIVE_INFINITY,\n\tdelay: attemptCount => 0.3 * (2 ** (attemptCount - 1)) * 1000,\n\tjitter: undefined,\n\tretryOnTimeout: false,\n};\n\nexport const normalizeRetryOptions = (retry: number | RetryOptions = {}): InternalRetryOptions => {\n\tif (typeof retry === 'number') {\n\t\treturn {\n\t\t\t...defaultRetryOptions,\n\t\t\tlimit: retry,\n\t\t};\n\t}\n\n\tif (retry.methods && !Array.isArray(retry.methods)) {\n\t\tthrow new Error('retry.methods must be an array');\n\t}\n\n\tretry.methods &&= retry.methods.map(method => method.toLowerCase());\n\n\tif (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n\t\tthrow new Error('retry.statusCodes must be an array');\n\t}\n\n\tconst normalizedRetry = Object.fromEntries(\n\t\tObject.entries(retry).filter(([, value]) => value !== undefined),\n\t) as RetryOptions;\n\n\treturn {\n\t\t...defaultRetryOptions,\n\t\t...normalizedRetry,\n\t};\n};\n","import type {KyRequest} from '../types/request.js';\n\nexport class TimeoutError extends Error {\n\tpublic request: KyRequest;\n\n\tconstructor(request: Request) {\n\t\tsuper(`Request timed out: ${request.method} ${request.url}`);\n\t\tthis.name = 'TimeoutError';\n\t\tthis.request = request;\n\t}\n}\n","import {TimeoutError} from '../errors/TimeoutError.js';\n\nexport type TimeoutOptions = {\n\ttimeout: number;\n\tfetch: typeof fetch;\n};\n\n// `Promise.race()` workaround (#91)\nexport default async function timeout(\n\trequest: Request,\n\tinit: RequestInit,\n\tabortController: AbortController | undefined,\n\toptions: TimeoutOptions,\n): Promise<Response> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tif (abortController) {\n\t\t\t\tabortController.abort();\n\t\t\t}\n\n\t\t\treject(new TimeoutError(request));\n\t\t}, options.timeout);\n\n\t\tvoid options\n\t\t\t.fetch(request, init)\n\t\t\t.then(resolve)\n\t\t\t.catch(reject)\n\t\t\t.then(() => {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t});\n\t});\n}\n","// https://github.com/sindresorhus/delay/tree/ab98ae8dfcb38e1593286c94d934e70d14a4e111\n\nimport {type InternalOptions} from '../types/options.js';\n\nexport type DelayOptions = {\n\tsignal?: InternalOptions['signal'];\n};\n\nexport default async function delay(\n\tms: number,\n\t{signal}: DelayOptions,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal) {\n\t\t\tsignal.throwIfAborted();\n\t\t\tsignal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tfunction abortHandler() {\n\t\t\tclearTimeout(timeoutId);\n\t\t\treject(signal!.reason as Error);\n\t\t}\n\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tsignal?.removeEventListener('abort', abortHandler);\n\t\t\tresolve();\n\t\t}, ms);\n\t});\n}\n","import {kyOptionKeys, requestOptionsRegistry, vendorSpecificOptions} from '../core/constants.js';\nimport type {SearchParamsOption} from '../types/options.js';\n\nexport const findUnknownOptions = (\n\trequest: Request,\n\toptions: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst unknownOptions: Record<string, unknown> = {};\n\n\tfor (const key in options) {\n\t\t// Skip inherited properties\n\t\tif (!Object.hasOwn(options, key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// An option is passed to fetch() if:\n\t\t// 1. It's not a standard RequestInit option (not in requestOptionsRegistry)\n\t\t// 2. It's not a ky-specific option (not in kyOptionKeys)\n\t\t// 3. Either:\n\t\t// a. It's not on the Request object, OR\n\t\t// b. It's a vendor-specific option that should always be passed (in vendorSpecificOptions)\n\t\tif (!(key in requestOptionsRegistry) && !(key in kyOptionKeys) && (!(key in request) || key in vendorSpecificOptions)) {\n\t\t\tunknownOptions[key] = options[key];\n\t\t}\n\t}\n\n\treturn unknownOptions;\n};\n\nexport const hasSearchParameters = (search: SearchParamsOption): boolean => {\n\tif (search === undefined) {\n\t\treturn false;\n\t}\n\n\t// The `typeof array` still gives \"object\", so we need different checking for array.\n\tif (Array.isArray(search)) {\n\t\treturn search.length > 0;\n\t}\n\n\tif (search instanceof URLSearchParams) {\n\t\treturn search.size > 0;\n\t}\n\n\t// Record\n\tif (typeof search === 'object') {\n\t\treturn Object.keys(search).length > 0;\n\t}\n\n\tif (typeof search === 'string') {\n\t\treturn search.trim().length > 0;\n\t}\n\n\treturn Boolean(search);\n};\n","import {HTTPError} from '../errors/HTTPError.js';\nimport {TimeoutError} from '../errors/TimeoutError.js';\nimport {ForceRetryError} from '../errors/ForceRetryError.js';\n\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\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isKyError(error)) {\n\t\t// Handle Ky-specific errors\n\t\tconsole.log('Ky error occurred:', error.message);\n\t} else {\n\t\t// Handle other errors\n\t\tconsole.log('Unknown error:', error);\n\t}\n}\n```\n*/\nexport function isKyError(error: unknown): error is HTTPError | TimeoutError | ForceRetryError {\n\treturn isHTTPError(error) || isTimeoutError(error) || isForceRetryError(error);\n}\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\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isHTTPError(error)) {\n\t\tconsole.log('HTTP error status:', error.response.status);\n\t}\n}\n```\n*/\nexport function isHTTPError<T = unknown>(error: unknown): error is HTTPError<T> {\n\treturn error instanceof HTTPError || ((error as any)?.name === HTTPError.name);\n}\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\tconst response = await ky.get('/api/data', { timeout: 1000 });\n} catch (error) {\n\tif (isTimeoutError(error)) {\n\t\tconsole.log('Request timed out:', error.request.url);\n\t}\n}\n```\n*/\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n\treturn error instanceof TimeoutError || ((error as any)?.name === TimeoutError.name);\n}\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\thooks: {\n\t\tbeforeRetry: [\n\t\t\t({error, retryCount}) => {\n\t\t\t\tif (isForceRetryError(error)) {\n\t\t\t\t\tconsole.log(`Forced retry #${retryCount}: ${error.code}`);\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n});\n```\n*/\nexport function isForceRetryError(error: unknown): error is ForceRetryError {\n\treturn error instanceof ForceRetryError || ((error as any)?.name === ForceRetryError.name);\n}\n","import {HTTPError} from '../errors/HTTPError.js';\nimport {NonError} from '../errors/NonError.js';\nimport {ForceRetryError} from '../errors/ForceRetryError.js';\nimport type {\n\tInput,\n\tInternalOptions,\n\tNormalizedOptions,\n\tOptions,\n\tSearchParamsInit,\n\tSearchParamsOption,\n} from '../types/options.js';\nimport {type ResponsePromise} from '../types/ResponsePromise.js';\nimport {streamRequest, streamResponse} from '../utils/body.js';\nimport {mergeHeaders, mergeHooks} from '../utils/merge.js';\nimport {normalizeRequestMethod, normalizeRetryOptions} from '../utils/normalize.js';\nimport timeout, {type TimeoutOptions} from '../utils/timeout.js';\nimport delay from '../utils/delay.js';\nimport {type ObjectEntries} from '../utils/types.js';\nimport {findUnknownOptions, hasSearchParameters} from '../utils/options.js';\nimport {isHTTPError, isTimeoutError} from '../utils/type-guards.js';\nimport {\n\tmaxSafeTimeout,\n\tresponseTypes,\n\tstop,\n\tRetryMarker,\n\tsupportsAbortController,\n\tsupportsAbortSignal,\n\tsupportsFormData,\n\tsupportsResponseStreams,\n\tsupportsRequestStreams,\n} from './constants.js';\n\nexport class Ky {\n\tstatic create(input: Input, options: Options): ResponsePromise {\n\t\tconst ky = new Ky(input, options);\n\n\t\tconst function_ = async (): Promise<Response> => {\n\t\t\tif (typeof ky.#options.timeout === 'number' && ky.#options.timeout > maxSafeTimeout) {\n\t\t\t\tthrow new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n\t\t\t}\n\n\t\t\t// Delay the fetch so that body method shortcuts can set the Accept header\n\t\t\tawait Promise.resolve();\n\t\t\t// Before using ky.request, _fetch clones it and saves the clone for future retries to use.\n\t\t\t// If retry is not needed, close the cloned request's ReadableStream for memory safety.\n\t\t\tlet response = await ky.#fetch();\n\n\t\t\tfor (const hook of ky.#options.hooks.afterResponse) {\n\t\t\t\t// Clone the response before passing to hook so we can cancel it if needed\n\t\t\t\tconst clonedResponse = ky.#decorateResponse(response.clone());\n\n\t\t\t\tlet modifiedResponse;\n\t\t\t\ttry {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tmodifiedResponse = await hook(\n\t\t\t\t\t\tky.request,\n\t\t\t\t\t\tky.#getNormalizedOptions(),\n\t\t\t\t\t\tclonedResponse,\n\t\t\t\t\t\t{retryCount: ky.#retryCount},\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// Cancel both responses to prevent memory leaks when hook throws\n\t\t\t\t\tky.#cancelResponseBody(clonedResponse);\n\t\t\t\t\tky.#cancelResponseBody(response);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (modifiedResponse instanceof RetryMarker) {\n\t\t\t\t\t// Cancel both the cloned response passed to the hook and the current response to prevent resource leaks (especially important in Deno/Bun).\n\t\t\t\t\t// Do not await cancellation since hooks can clone the response, leaving extra tee branches that keep cancel promises pending per the Streams spec.\n\t\t\t\t\tky.#cancelResponseBody(clonedResponse);\n\t\t\t\t\tky.#cancelResponseBody(response);\n\t\t\t\t\tthrow new ForceRetryError(modifiedResponse.options);\n\t\t\t\t}\n\n\t\t\t\t// Determine which response to use going forward\n\t\t\t\tconst nextResponse = modifiedResponse instanceof globalThis.Response ? modifiedResponse : response;\n\n\t\t\t\t// Cancel any response bodies we won't use to prevent memory leaks.\n\t\t\t\t// Uses fire-and-forget since hooks may have cloned the response, creating tee branches that block cancellation.\n\t\t\t\tif (clonedResponse !== nextResponse) {\n\t\t\t\t\tky.#cancelResponseBody(clonedResponse);\n\t\t\t\t}\n\n\t\t\t\tif (response !== nextResponse) {\n\t\t\t\t\tky.#cancelResponseBody(response);\n\t\t\t\t}\n\n\t\t\t\tresponse = nextResponse;\n\t\t\t}\n\n\t\t\tky.#decorateResponse(response);\n\n\t\t\tif (!response.ok && (\n\t\t\t\ttypeof ky.#options.throwHttpErrors === 'function'\n\t\t\t\t\t? ky.#options.throwHttpErrors(response.status)\n\t\t\t\t\t: ky.#options.throwHttpErrors\n\t\t\t)) {\n\t\t\t\tlet error = new HTTPError(response, ky.request, ky.#getNormalizedOptions());\n\n\t\t\t\tfor (const hook of ky.#options.hooks.beforeError) {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\terror = await hook(error, {retryCount: ky.#retryCount});\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// If `onDownloadProgress` is passed, it uses the stream API internally\n\t\t\tif (ky.#options.onDownloadProgress) {\n\t\t\t\tif (typeof ky.#options.onDownloadProgress !== 'function') {\n\t\t\t\t\tthrow new TypeError('The `onDownloadProgress` option must be a function');\n\t\t\t\t}\n\n\t\t\t\tif (!supportsResponseStreams) {\n\t\t\t\t\tthrow new Error('Streams are not supported in your environment. `ReadableStream` is missing.');\n\t\t\t\t}\n\n\t\t\t\tconst progressResponse = response.clone();\n\t\t\t\tky.#cancelResponseBody(response);\n\t\t\t\treturn streamResponse(progressResponse, ky.#options.onDownloadProgress);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t};\n\n\t\t// Always wrap in #retry to catch forced retries from afterResponse hooks\n\t\t// Method retriability is checked in #calculateRetryDelay for non-forced retries\n\t\tconst result = ky.#retry(function_)\n\t\t\t.finally(() => {\n\t\t\t\tconst originalRequest = ky.#originalRequest;\n\n\t\t\t\t// Ignore cancellation errors from already-locked or already-consumed streams.\n\t\t\t\tky.#cancelBody(originalRequest?.body ?? undefined);\n\t\t\t\tky.#cancelBody(ky.request.body ?? undefined);\n\t\t\t}) as ResponsePromise;\n\n\t\tfor (const [type, mimeType] of Object.entries(responseTypes) as ObjectEntries<typeof responseTypes>) {\n\t\t\t// Only expose `.bytes()` when the environment implements it.\n\t\t\tif (\n\t\t\t\ttype === 'bytes'\n\t\t\t\t&& typeof (globalThis.Response?.prototype as unknown as {bytes?: unknown})?.bytes !== 'function'\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult[type] = async () => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\t\tky.request.headers.set('accept', ky.request.headers.get('accept') || mimeType);\n\n\t\t\t\tconst response = await result;\n\n\t\t\t\tif (type === 'json') {\n\t\t\t\t\tif (response.status === 204) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\tif (text === '') {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options.parseJson) {\n\t\t\t\t\t\treturn options.parseJson(text);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn JSON.parse(text);\n\t\t\t\t}\n\n\t\t\t\treturn response[type]();\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\tstatic #normalizeSearchParams(searchParams: SearchParamsOption): SearchParamsOption {\n\t\t// Filter out undefined values from plain objects\n\t\tif (searchParams && typeof searchParams === 'object' && !Array.isArray(searchParams) && !(searchParams instanceof URLSearchParams)) {\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries(searchParams).filter(([, value]) => value !== undefined),\n\t\t\t);\n\t\t}\n\n\t\treturn searchParams;\n\t}\n\n\tpublic request: Request;\n\t#abortController?: AbortController;\n\t#retryCount = 0;\n\t// eslint-disable-next-line @typescript-eslint/prefer-readonly -- False positive: #input is reassigned on line 202\n\t#input: Input;\n\treadonly #options: InternalOptions;\n\t#originalRequest?: Request;\n\treadonly #userProvidedAbortSignal?: AbortSignal;\n\t#cachedNormalizedOptions: NormalizedOptions | undefined;\n\n\t// eslint-disable-next-line complexity\n\tconstructor(input: Input, options: Options = {}) {\n\t\tthis.#input = input;\n\n\t\tthis.#options = {\n\t\t\t...options,\n\t\t\theaders: mergeHeaders((this.#input as Request).headers, options.headers),\n\t\t\thooks: mergeHooks(\n\t\t\t\t{\n\t\t\t\t\tbeforeRequest: [],\n\t\t\t\t\tbeforeRetry: [],\n\t\t\t\t\tbeforeError: [],\n\t\t\t\t\tafterResponse: [],\n\t\t\t\t},\n\t\t\t\toptions.hooks,\n\t\t\t),\n\t\t\tmethod: normalizeRequestMethod(options.method ?? (this.#input as Request).method ?? 'GET'),\n\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\tprefixUrl: String(options.prefixUrl || ''),\n\t\t\tretry: normalizeRetryOptions(options.retry),\n\t\t\tthrowHttpErrors: options.throwHttpErrors ?? true,\n\t\t\ttimeout: options.timeout ?? 10_000,\n\t\t\tfetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n\t\t\tcontext: options.context ?? {},\n\t\t};\n\n\t\tif (typeof this.#input !== 'string' && !(this.#input instanceof URL || this.#input instanceof globalThis.Request)) {\n\t\t\tthrow new TypeError('`input` must be a string, URL, or Request');\n\t\t}\n\n\t\tif (this.#options.prefixUrl && typeof this.#input === 'string') {\n\t\t\tif (this.#input.startsWith('/')) {\n\t\t\t\tthrow new Error('`input` must not begin with a slash when using `prefixUrl`');\n\t\t\t}\n\n\t\t\tif (!this.#options.prefixUrl.endsWith('/')) {\n\t\t\t\tthis.#options.prefixUrl += '/';\n\t\t\t}\n\n\t\t\tthis.#input = this.#options.prefixUrl + this.#input;\n\t\t}\n\n\t\tif (supportsAbortController && supportsAbortSignal) {\n\t\t\tthis.#userProvidedAbortSignal = this.#options.signal ?? (this.#input as Request).signal;\n\t\t\tthis.#abortController = new globalThis.AbortController();\n\t\t\tthis.#options.signal = this.#userProvidedAbortSignal ? AbortSignal.any([this.#userProvidedAbortSignal, this.#abortController.signal]) : this.#abortController.signal;\n\t\t}\n\n\t\tif (supportsRequestStreams) {\n\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\tthis.#options.duplex = 'half';\n\t\t}\n\n\t\tif (this.#options.json !== undefined) {\n\t\t\tthis.#options.body = this.#options.stringifyJson?.(this.#options.json) ?? JSON.stringify(this.#options.json);\n\t\t\tthis.#options.headers.set('content-type', this.#options.headers.get('content-type') ?? 'application/json');\n\t\t}\n\n\t\t// To provide correct form boundary, Content-Type header should be deleted when creating Request from another Request with FormData/URLSearchParams body\n\t\t// Only delete if user didn't explicitly provide a custom content-type\n\t\tconst userProvidedContentType = options.headers && new globalThis.Headers(options.headers as HeadersInit).has('content-type');\n\t\tif (\n\t\t\tthis.#input instanceof globalThis.Request\n\t\t\t&& ((supportsFormData && this.#options.body instanceof globalThis.FormData) || this.#options.body instanceof URLSearchParams)\n\t\t\t&& !userProvidedContentType\n\t\t) {\n\t\t\tthis.#options.headers.delete('content-type');\n\t\t}\n\n\t\tthis.request = new globalThis.Request(this.#input, this.#options);\n\n\t\tif (hasSearchParameters(this.#options.searchParams)) {\n\t\t\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\t\t\tconst textSearchParams = typeof this.#options.searchParams === 'string'\n\t\t\t\t? this.#options.searchParams.replace(/^\\?/, '')\n\t\t\t\t: new URLSearchParams(Ky.#normalizeSearchParams(this.#options.searchParams) as unknown as SearchParamsInit).toString();\n\t\t\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\t\t\tconst searchParams = '?' + textSearchParams;\n\t\t\tconst url = this.request.url.replace(/(?:\\?.*?)?(?=#|$)/, searchParams);\n\n\t\t\t// Recreate request with the updated URL. We already have all options in this.#options, including duplex.\n\t\t\tthis.request = new globalThis.Request(url, this.#options as RequestInit);\n\t\t}\n\n\t\t// If `onUploadProgress` is passed, it uses the stream API internally\n\t\tif (this.#options.onUploadProgress) {\n\t\t\tif (typeof this.#options.onUploadProgress !== 'function') {\n\t\t\t\tthrow new TypeError('The `onUploadProgress` option must be a function');\n\t\t\t}\n\n\t\t\tif (!supportsRequestStreams) {\n\t\t\t\tthrow new Error('Request streams are not supported in your environment. The `duplex` option for `Request` is not available.');\n\t\t\t}\n\n\t\t\tthis.request = this.#wrapRequestWithUploadProgress(this.request, this.#options.body ?? undefined);\n\t\t}\n\t}\n\n\t#calculateDelay(): number {\n\t\tconst retryDelay = this.#options.retry.delay(this.#retryCount);\n\n\t\tlet jitteredDelay = retryDelay;\n\t\tif (this.#options.retry.jitter === true) {\n\t\t\tjitteredDelay = Math.random() * retryDelay;\n\t\t} else if (typeof this.#options.retry.jitter === 'function') {\n\t\t\tjitteredDelay = this.#options.retry.jitter(retryDelay);\n\n\t\t\tif (!Number.isFinite(jitteredDelay) || jitteredDelay < 0) {\n\t\t\t\tjitteredDelay = retryDelay;\n\t\t\t}\n\t\t}\n\n\t\t// Handle undefined backoffLimit by treating it as no limit (Infinity)\n\t\tconst backoffLimit = this.#options.retry.backoffLimit ?? Number.POSITIVE_INFINITY;\n\t\treturn Math.min(backoffLimit, jitteredDelay);\n\t}\n\n\tasync #calculateRetryDelay(error: unknown) {\n\t\tthis.#retryCount++;\n\n\t\tif (this.#retryCount > this.#options.retry.limit) {\n\t\t\tthrow error;\n\t\t}\n\n\t\t// Wrap non-Error throws to ensure consistent error handling\n\t\tconst errorObject = error instanceof Error ? error : new NonError(error);\n\n\t\t// Handle forced retry from afterResponse hook - skip method check and shouldRetry\n\t\tif (errorObject instanceof ForceRetryError) {\n\t\t\treturn errorObject.customDelay ?? this.#calculateDelay();\n\t\t}\n\n\t\t// Check if method is retriable for non-forced retries\n\t\tif (!this.#options.retry.methods.includes(this.request.method.toLowerCase())) {\n\t\t\tthrow error;\n\t\t}\n\n\t\t// User-provided shouldRetry function takes precedence over all other checks\n\t\tif (this.#options.retry.shouldRetry !== undefined) {\n\t\t\tconst result = await this.#options.retry.shouldRetry({error: errorObject, retryCount: this.#retryCount});\n\n\t\t\t// Strict boolean checking - only exact true/false are handled specially\n\t\t\tif (result === false) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (result === true) {\n\t\t\t\t// Force retry - skip all other validation and return delay\n\t\t\t\treturn this.#calculateDelay();\n\t\t\t}\n\n\t\t\t// If undefined or any other value, fall through to default behavior\n\t\t}\n\n\t\t// Default timeout behavior\n\t\tif (isTimeoutError(error) && !this.#options.retry.retryOnTimeout) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (isHTTPError(error)) {\n\t\t\tif (!this.#options.retry.statusCodes.includes(error.response.status)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst retryAfter = error.response.headers.get('Retry-After')\n\t\t\t\t?? error.response.headers.get('RateLimit-Reset')\n\t\t\t\t?? error.response.headers.get('X-RateLimit-Retry-After') // Symfony-based services\n\t\t\t\t?? error.response.headers.get('X-RateLimit-Reset') // GitHub\n\t\t\t\t?? error.response.headers.get('X-Rate-Limit-Reset'); // Twitter\n\t\t\tif (retryAfter && this.#options.retry.afterStatusCodes.includes(error.response.status)) {\n\t\t\t\tlet after = Number(retryAfter) * 1000;\n\t\t\t\tif (Number.isNaN(after)) {\n\t\t\t\t\tafter = Date.parse(retryAfter) - Date.now();\n\t\t\t\t} else if (after >= Date.parse('2024-01-01')) {\n\t\t\t\t\t// A large number is treated as a timestamp (fixed threshold protects against clock skew)\n\t\t\t\t\tafter -= Date.now();\n\t\t\t\t}\n\n\t\t\t\tconst max = this.#options.retry.maxRetryAfter ?? after;\n\t\t\t\t// Don't apply jitter when server provides explicit retry timing\n\t\t\t\treturn after < max ? after : max;\n\t\t\t}\n\n\t\t\tif (error.response.status === 413) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn this.#calculateDelay();\n\t}\n\n\t#decorateResponse(response: Response): Response {\n\t\tif (this.#options.parseJson) {\n\t\t\tresponse.json = async () => this.#options.parseJson!(await response.text());\n\t\t}\n\n\t\treturn response;\n\t}\n\n\t#cancelBody(body: ReadableStream | undefined): void {\n\t\tif (!body) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore cancellation failures from already-locked or already-consumed streams.\n\t\tvoid body.cancel().catch(() => undefined);\n\t}\n\n\t#cancelResponseBody(response: Response): void {\n\t\t// Ignore cancellation failures from already-locked or already-consumed streams.\n\t\tthis.#cancelBody(response.body ?? undefined);\n\t}\n\n\tasync #retry<T extends (...arguments_: any) => Promise<any>>(function_: T): Promise<ReturnType<T> | Response | void> {\n\t\ttry {\n\t\t\treturn await function_();\n\t\t} catch (error) {\n\t\t\tconst ms = Math.min(await this.#calculateRetryDelay(error), maxSafeTimeout);\n\t\t\tif (this.#retryCount < 1) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// Only use user-provided signal for delay, not our internal abortController\n\t\t\tawait delay(ms, this.#userProvidedAbortSignal ? {signal: this.#userProvidedAbortSignal} : {});\n\n\t\t\t// Apply custom request from forced retry before beforeRetry hooks\n\t\t\t// Ensure the custom request has the correct managed signal for timeouts and user aborts\n\t\t\tif (error instanceof ForceRetryError && error.customRequest) {\n\t\t\t\tconst managedRequest = this.#options.signal\n\t\t\t\t\t? new globalThis.Request(error.customRequest, {signal: this.#options.signal})\n\t\t\t\t\t: new globalThis.Request(error.customRequest);\n\n\t\t\t\tthis.#assignRequest(managedRequest);\n\t\t\t}\n\n\t\t\tfor (const hook of this.#options.hooks.beforeRetry) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tconst hookResult = await hook({\n\t\t\t\t\trequest: this.request,\n\t\t\t\t\toptions: this.#getNormalizedOptions(),\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tretryCount: this.#retryCount,\n\t\t\t\t});\n\n\t\t\t\tif (hookResult instanceof globalThis.Request) {\n\t\t\t\t\tthis.#assignRequest(hookResult);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// If a Response is returned, use it and skip the retry\n\t\t\t\tif (hookResult instanceof globalThis.Response) {\n\t\t\t\t\treturn hookResult;\n\t\t\t\t}\n\n\t\t\t\t// If `stop` is returned from the hook, the retry process is stopped\n\t\t\t\tif (hookResult === stop) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.#retry(function_);\n\t\t}\n\t}\n\n\tasync #fetch(): Promise<Response> {\n\t\t// Reset abortController if it was aborted (happens on timeout retry)\n\t\tif (this.#abortController?.signal.aborted) {\n\t\t\tthis.#abortController = new globalThis.AbortController();\n\t\t\tthis.#options.signal = this.#userProvidedAbortSignal ? AbortSignal.any([this.#userProvidedAbortSignal, this.#abortController.signal]) : this.#abortController.signal;\n\t\t\t// Recreate request with new signal\n\t\t\tthis.request = new globalThis.Request(this.request, {signal: this.#options.signal});\n\t\t}\n\n\t\tfor (const hook of this.#options.hooks.beforeRequest) {\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst result = await hook(\n\t\t\t\tthis.request,\n\t\t\t\tthis.#getNormalizedOptions(),\n\t\t\t\t{retryCount: this.#retryCount},\n\t\t\t);\n\n\t\t\tif (result instanceof Response) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (result instanceof globalThis.Request) {\n\t\t\t\tthis.#assignRequest(result);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst nonRequestOptions = findUnknownOptions(this.request, this.#options);\n\n\t\t// Cloning is done here to prepare in advance for retries\n\t\tthis.#originalRequest = this.request;\n\t\tthis.request = this.#originalRequest.clone();\n\n\t\tif (this.#options.timeout === false) {\n\t\t\treturn this.#options.fetch(this.#originalRequest, nonRequestOptions);\n\t\t}\n\n\t\treturn timeout(this.#originalRequest, nonRequestOptions, this.#abortController, this.#options as TimeoutOptions);\n\t}\n\n\t#getNormalizedOptions(): NormalizedOptions {\n\t\tif (!this.#cachedNormalizedOptions) {\n\t\t\tconst {hooks, ...normalizedOptions} = this.#options;\n\t\t\tthis.#cachedNormalizedOptions = Object.freeze(normalizedOptions) as NormalizedOptions;\n\t\t}\n\n\t\treturn this.#cachedNormalizedOptions;\n\t}\n\n\t#assignRequest(request: Request): void {\n\t\tthis.#cachedNormalizedOptions = undefined;\n\t\tthis.request = this.#wrapRequestWithUploadProgress(request);\n\t}\n\n\t#wrapRequestWithUploadProgress(request: Request, originalBody?: BodyInit): Request {\n\t\tif (!this.#options.onUploadProgress || !request.body) {\n\t\t\treturn request;\n\t\t}\n\n\t\treturn streamRequest(request, this.#options.onUploadProgress, originalBody ?? this.#options.body ?? undefined);\n\t}\n}\n","/*! MIT License © Sindre Sorhus */\n\nimport {Ky} from './core/Ky.js';\nimport {requestMethods, stop, retry} from './core/constants.js';\nimport type {KyInstance} from './types/ky.js';\nimport type {Input, Options} from './types/options.js';\nimport {validateAndMerge} from './utils/merge.js';\nimport {type Mutable} from './utils/types.js';\n\nconst createInstance = (defaults?: Partial<Options>): KyInstance => {\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\tconst ky: Partial<Mutable<KyInstance>> = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options));\n\n\tfor (const method of requestMethods) {\n\t\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\t\tky[method] = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options, {method}));\n\t}\n\n\tky.create = (newDefaults?: Partial<Options>) => createInstance(validateAndMerge(newDefaults));\n\tky.extend = (newDefaults?: Partial<Options> | ((parentDefaults: Partial<Options>) => Partial<Options>)) => {\n\t\tif (typeof newDefaults === 'function') {\n\t\t\tnewDefaults = newDefaults(defaults ?? {});\n\t\t}\n\n\t\treturn createInstance(validateAndMerge(defaults, newDefaults));\n\t};\n\n\tky.stop = stop;\n\tky.retry = retry;\n\n\treturn ky as KyInstance;\n};\n\nconst ky = createInstance();\n\nexport default ky;\n\nexport type {KyInstance} from './types/ky.js';\n\nexport type {\n\tInput,\n\tOptions,\n\tNormalizedOptions,\n\tRetryOptions,\n\tShouldRetryState,\n\tSearchParamsOption,\n\tProgress,\n} from './types/options.js';\n\nexport type {\n\tHooks,\n\tBeforeRequestHook,\n\tBeforeRequestState,\n\tBeforeRetryHook,\n\tBeforeRetryState,\n\tBeforeErrorHook,\n\tBeforeErrorState,\n\tAfterResponseHook,\n\tAfterResponseState,\n} from './types/hooks.js';\n\nexport type {ResponsePromise} from './types/ResponsePromise.js';\nexport type {KyRequest} from './types/request.js';\nexport type {KyResponse} from './types/response.js';\nexport {HTTPError} from './errors/HTTPError.js';\nexport {TimeoutError} from './errors/TimeoutError.js';\nexport {ForceRetryError} from './errors/ForceRetryError.js';\nexport {\n\tisKyError,\n\tisHTTPError,\n\tisTimeoutError,\n\tisForceRetryError,\n} from './utils/type-guards.js';\n\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","import { Resolver } from 'varlock/plugin-lib';\nimport ky from 'ky';\nimport { readFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\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);\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. 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 cachedToken?: CachedToken;\n private secretCache = new Map<string, Promise<Record<string, any>>>();\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 ) {\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 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 'namespace:',\n this.namespace,\n 'defaultPath:',\n this.defaultPath,\n 'pathPrefix:',\n this.pathPrefix,\n );\n }\n\n private 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 // 2. AppRole auth\n if (this.roleId && this.secretId) {\n return this.loginWithAppRole();\n }\n\n // 3. 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 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 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 private 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 async getSecret(secretPath: string, jsonKey?: string): Promise<string> {\n const secretData = await this.fetchSecretData(secretPath);\n\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\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 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 };\n },\n async execute({\n id,\n urlResolver,\n namespaceResolver,\n tokenResolver,\n roleIdResolver,\n secretIdResolver,\n defaultPathResolver,\n pathPrefixResolver,\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 pluginInstances[id].setAuth(url, namespace, token, roleId, secretId, defaultPath, pathPrefix);\n },\n});\n\nplugin.registerDataType({\n name: 'vaultToken',\n sensitive: 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 return await selectedInstance.getSecret(fullPath, jsonKey);\n },\n});\n"]}
@@ -0,0 +1,2 @@
1
+
2
+ export { }
package/package.json CHANGED
@@ -1,13 +1,57 @@
1
1
  {
2
2
  "name": "@varlock/hashicorp-vault-plugin",
3
- "description": "Varlock plugin to load data from HashiCorp Vault / OpenBao",
4
- "version": "0.0.0",
3
+ "description": "Varlock plugin to load secrets from HashiCorp Vault (KV v2 secrets engine) / OpenBao",
4
+ "version": "0.0.2",
5
+ "type": "module",
6
+ "homepage": "https://varlock.dev/plugins/hashicorp-vault/",
7
+ "bugs": "https://github.com/dmno-dev/varlock/issues",
5
8
  "repository": {
6
9
  "type": "git",
7
10
  "url": "https://github.com/dmno-dev/varlock.git",
8
- "directory": "packages/plugins/hcp-vault"
11
+ "directory": "packages/plugins/hashicorp-vault"
9
12
  },
10
- "files": [],
13
+ "main": "dist/index.js",
14
+ "types": "dist/index.d.ts",
15
+ "exports": {
16
+ "./plugin": "./dist/plugin.js"
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "scripts": {
22
+ "dev": "tsup --watch",
23
+ "build": "tsup",
24
+ "test": "vitest"
25
+ },
26
+ "keywords": [
27
+ "varlock",
28
+ "plugin",
29
+ "varlock-plugin",
30
+ "hashicorp",
31
+ "vault",
32
+ "secrets",
33
+ "kv",
34
+ "env",
35
+ ".env",
36
+ "dotenv",
37
+ "environment variables",
38
+ "env vars",
39
+ "config"
40
+ ],
11
41
  "author": "dmno-dev",
12
- "license": "MIT"
13
- }
42
+ "license": "MIT",
43
+ "engines": {
44
+ "node": ">=22"
45
+ },
46
+ "peerDependencies": {
47
+ "varlock": "^0.6.1"
48
+ },
49
+ "devDependencies": {
50
+ "@env-spec/utils": "^0.0.0",
51
+ "@types/node": "25.3.2",
52
+ "ky": "^1.14.3",
53
+ "tsup": "^8.5.1",
54
+ "varlock": "^0.6.1",
55
+ "vitest": "^4.0.18"
56
+ }
57
+ }