@cedvict/http-guardian 0.0.1-next.8 → 0.0.1-next.9

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/compose.ts","../src/internal/url.ts","../src/internal/authGuard.ts","../src/internal/headersPolyfill.ts","../src/internal/stableStringify.ts","../src/cache/key.ts","../src/cache/inFlight.ts","../src/notify/defaults.ts","../src/client/errors.ts","../src/client/httpClient.ts","../src/auth/authConfig.ts","../src/guards/retryGuard.ts","../src/guards/cookieSafeRefreshGuard.ts","../src/guards/unauthorizedGuard.ts","../src/guards/instrumentGuard.ts","../src/cache/memoryCache.ts","../src/parsing/shapeParser.ts","../src/parsing/schemaAdapter.ts","../src/parsing/presets.ts","../src/presets/presetBuilder.ts","../src/aliases.ts"],"names":["errors","msg","normalizePath","REFRESH_FLAG","RETRY_FLAG","noAuth"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Guard } from \"../guards/types.js\";\nimport type { RequestContext } from \"./context.js\";\n\n/**\n * Koa-like middleware composition with correct TypeScript typing.\n */\nexport function composeGuards(\n guards: Guard[],\n terminal: (ctx: RequestContext) => Promise<Response>\n): (ctx: RequestContext) => Promise<Response> {\n if (!guards.length) return terminal;\n return (ctx: RequestContext) => dispatch(0, ctx);\n\n function dispatch(i: number, c: RequestContext): Promise<Response> {\n const guard = guards[i];\n if (!guard) return terminal(c);\n\n return Promise.resolve(\n guard(c, (nextCtx) => dispatch(i + 1, (nextCtx ?? c) as RequestContext))\n );\n }\n}\n","export function joinUrl(baseUrl: string, path: string): string {\n if (!baseUrl) return path;\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) return path;\n const b = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const p = path.startsWith(\"/\") ? path : `/${path}`;\n return `${b}${p}`;\n}\n\nexport function withQuery(url: string, query?: Record<string, string | number | boolean | null | undefined>): string {\n if (!query) return url;\n const u = new URL(url);\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n u.searchParams.set(k, String(v));\n }\n return u.toString();\n}\n","import type { Guard } from \"../guards/types.js\";\nimport type { AuthConfig } from \"../auth/authConfig.js\";\n\nfunction sanitizeHeaderValue(v: string): string | null {\n // Prevent header injection via CRLF\n if (/[\\r\\n]/.test(v)) return null;\n return v;\n}\n\nfunction base64Encode(input: string): string {\n // Browser\n if (typeof (globalThis as any).btoa === \"function\") return (globalThis as any).btoa(input);\n\n // Node\n const B: any = (globalThis as any).Buffer;\n if (typeof B?.from === \"function\") return B.from(input, \"utf8\").toString(\"base64\");\n\n // Fallback (very rare)\n throw new Error(\"No base64 encoder available in this runtime\");\n}\n\nfunction isUnsafeMethod(m: string): boolean {\n const u = m.toUpperCase();\n return u !== \"GET\" && u !== \"HEAD\" && u !== \"OPTIONS\";\n}\n\nfunction sameOrigin(url: string, baseOrigin: string): boolean {\n if (!baseOrigin) return true; // can't determine => don't block\n try {\n return new URL(url).origin === baseOrigin;\n } catch {\n // relative URLs are treated as same-origin to base\n return true;\n }\n}\n\nfunction isAllowedOrigin(\n url: string,\n baseOrigin: string,\n allowed?: string[] | ((url: string) => boolean)\n): boolean {\n // Default: lock headers to same-origin of baseUrl.\n if (!allowed) return sameOrigin(url, baseOrigin);\n if (typeof allowed === \"function\") return !!allowed(url);\n try {\n const origin = new URL(url).origin;\n return allowed.includes(origin);\n } catch {\n return true;\n }\n}\n\nexport function authGuard(auth: AuthConfig): Guard {\n return async (ctx, next) => {\n // per-request override\n if (ctx.noAuth) return next(ctx);\n if (auth.mode === \"none\") return next(ctx);\n\n if (auth.mode === \"bearer\") {\n const token = await auth.getToken();\n if (token) {\n if (!isAllowedOrigin(ctx.url, ctx.baseOrigin, auth.allowedOrigins)) {\n return next(ctx);\n }\n const headerName = auth.headerName ?? \"Authorization\";\n const prefix = auth.prefix ?? \"Bearer\";\n const safe = sanitizeHeaderValue(`${prefix} ${token}`);\n if (safe) ctx.headers.set(headerName, safe);\n }\n return next(ctx);\n }\n\n if (auth.mode === \"basic\") {\n const cred = await auth.getCredentials();\n if (cred) {\n if (!isAllowedOrigin(ctx.url, ctx.baseOrigin, auth.allowedOrigins)) {\n return next(ctx);\n }\n const headerName = auth.headerName ?? \"Authorization\";\n const prefix = auth.prefix ?? \"Basic\";\n const raw = typeof cred === \"string\" ? cred : `${cred.username}:${cred.password}`;\n const safe = sanitizeHeaderValue(`${prefix} ${base64Encode(raw)}`);\n if (safe) ctx.headers.set(headerName, safe);\n }\n return next(ctx);\n }\n\n if (auth.mode === \"apiKey\") {\n const key = await auth.getKey();\n if (key) {\n if (!isAllowedOrigin(ctx.url, ctx.baseOrigin, auth.allowedOrigins)) {\n return next(ctx);\n }\n const headerName = auth.headerName ?? \"X-API-Key\";\n const prefix = auth.prefix ?? \"\";\n const value = prefix ? `${prefix} ${key}` : key;\n const safe = sanitizeHeaderValue(value);\n if (safe) ctx.headers.set(headerName, safe);\n }\n return next(ctx);\n }\n\n // cookie mode\n ctx.credentials = auth.credentials ?? \"include\";\n\n // CSRF header usually only needed for unsafe methods, otherwise it can trigger preflights.\n if (auth.csrf && isUnsafeMethod(ctx.method)) {\n const csrf = await auth.csrf.getToken();\n if (csrf) ctx.headers.set(auth.csrf.headerName, csrf);\n }\n\n return next(ctx);\n };\n}\n","/**\n * Minimal Headers polyfill (enough for http-guardian guards + client internals).\n *\n * Why: Node < 18 doesn't expose global Headers/Request/Response by default.\n * We only need a mutable header bag during guard pipeline; when calling fetch we\n * convert to a plain object so any fetch implementation (browser, edge, node)\n * can consume it.\n */\n\nexport type HeadersInitLike =\n | Headers\n | Record<string, string>\n | Array<[string, string]>\n | Iterable<[string, string]>;\n\nfunction norm(name: string): string {\n return String(name).toLowerCase();\n}\n\nexport class HeadersPolyfill {\n private map = new Map<string, { name: string; value: string }>();\n\n constructor(init?: HeadersInitLike) {\n if (!init) return;\n\n // Native Headers-like\n if (typeof (init as any).forEach === \"function\" && typeof (init as any).get === \"function\") {\n (init as any).forEach((v: string, k: string) => this.set(k, v));\n return;\n }\n\n // Array / iterable\n if (Symbol.iterator in Object(init)) {\n for (const [k, v] of init as any) this.append(k, v);\n return;\n }\n\n // Record\n for (const [k, v] of Object.entries(init as Record<string, string>)) {\n this.set(k, String(v));\n }\n }\n\n get(name: string): string | null {\n const hit = this.map.get(norm(name));\n return hit ? hit.value : null;\n }\n\n has(name: string): boolean {\n return this.map.has(norm(name));\n }\n\n set(name: string, value: string): void {\n this.map.set(norm(name), { name, value: String(value) });\n }\n\n append(name: string, value: string): void {\n const key = norm(name);\n const prev = this.map.get(key);\n if (!prev) {\n this.map.set(key, { name, value: String(value) });\n return;\n }\n this.map.set(key, { name: prev.name, value: `${prev.value}, ${String(value)}` });\n }\n\n delete(name: string): void {\n this.map.delete(norm(name));\n }\n\n forEach(cb: (value: string, key: string) => void): void {\n for (const { name, value } of this.map.values()) cb(value, name);\n }\n\n entries(): IterableIterator<[string, string]> {\n const it = this.map.values();\n return {\n [Symbol.iterator]() {\n return this;\n },\n next(): IteratorResult<[string, string]> {\n const n = it.next();\n if (n.done) return { done: true, value: undefined as any };\n return { done: false, value: [n.value.name, n.value.value] };\n },\n } as any;\n }\n\n /** Convert to HeadersInit that any fetch can consume. */\n toObject(): Record<string, string> {\n const out: Record<string, string> = {};\n for (const { name, value } of this.map.values()) out[name] = value;\n return out;\n }\n}\n\nexport function createHeaders(init?: HeadersInitLike): Headers | HeadersPolyfill {\n if (typeof (globalThis as any).Headers === \"function\") {\n return new (globalThis as any).Headers(init as any);\n }\n return new HeadersPolyfill(init);\n}\n\nexport function toFetchHeaders(headers: Headers | HeadersPolyfill): HeadersInit {\n if (typeof (globalThis as any).Headers === \"function\" && headers instanceof (globalThis as any).Headers) {\n return headers as any;\n }\n return (headers as HeadersPolyfill).toObject();\n}\n","export function stableStringify(value: unknown): string {\n return JSON.stringify(sortValue(value));\n}\n\nfunction sortValue(v: any): any {\n if (v === null || typeof v !== \"object\") return v;\n if (Array.isArray(v)) return v.map(sortValue);\n\n const proto = Object.getPrototypeOf(v);\n if (proto !== Object.prototype && proto !== null) return v;\n\n const out: Record<string, any> = {};\n for (const key of Object.keys(v).sort()) out[key] = sortValue(v[key]);\n return out;\n}\n","import { stableStringify } from \"../internal/stableStringify.js\";\nimport type { HeadersPolyfill } from \"../internal/headersPolyfill.js\";\n\nexport function makeCacheKey(parts: {\n method: string;\n url: string;\n // Multi-platform: headers may be a real Fetch Headers or our lightweight polyfill.\n // We only rely on `.get()` here.\n headers?: Headers | HeadersPolyfill;\n body?: unknown;\n idempotencyKey?: string;\n keyOverride?: string;\n}): string {\n if (parts.keyOverride) return parts.keyOverride;\n\n const headerObj: Record<string, string> = {};\n if (parts.headers) {\n const accept = parts.headers.get(\"accept\");\n const contentType = parts.headers.get(\"content-type\");\n if (accept) headerObj[\"accept\"] = accept;\n if (contentType) headerObj[\"content-type\"] = contentType;\n }\n\n return stableStringify({\n m: parts.method,\n u: parts.url,\n h: headerObj,\n b: parts.body ?? null,\n i: parts.idempotencyKey ?? null,\n });\n}\n","/**\n * In-flight request de-duplication.\n */\nexport class InFlight {\n private readonly map = new Map<string, Promise<unknown>>();\n\n get(key: string) {\n return this.map.get(key);\n }\n\n set(key: string, p: Promise<unknown>) {\n this.map.set(key, p);\n p.finally(() => {\n if (this.map.get(key) === p) this.map.delete(key);\n }).catch(() => {});\n }\n\n clear() {\n this.map.clear();\n }\n}\n","import type { Notifier, NotifyEvent } from \"./types.js\";\n\nexport const consoleNotifier: Notifier = {\n notify: (e: NotifyEvent) => {\n console[e.level === \"error\" ? \"error\" : \"warn\"](`[${e.type}] ${e.title}: ${e.message}`, e);\n },\n};\n\nexport const alertNotifier: Notifier = {\n notify: (e: NotifyEvent) => {\n if (typeof window !== \"undefined\" && typeof window.alert === \"function\") window.alert(`${e.title}\\n\\n${e.message}`);\n },\n};\n\n/**\n * Returns an HTML string you can inject in your own UI layer (Tailwind classes).\n * Note: this package does not manipulate the DOM by itself.\n */\nexport function tailwindAlertRenderer(event: NotifyEvent): string {\n const base = \"rounded-lg border p-4 shadow-sm\";\n const color =\n event.level === \"warning\"\n ? \"border-amber-200 bg-amber-50 text-amber-900\"\n : \"border-red-200 bg-red-50 text-red-900\";\n\n const title = escapeHtml(event.title);\n const msg = escapeHtml(event.message);\n\n return `<div class=\"${base} ${color}\"><div class=\"font-semibold\">${title}</div><div class=\"mt-1 text-sm\">${msg}</div></div>`;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"']/g, (c) => ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[c]!));\n}\n","export type AppError = {\n message: string;\n code?: string;\n field?: string;\n details?: unknown;\n};\n\nexport class NetworkError extends Error {\n name = \"NetworkError\";\n constructor(message: string, public readonly cause?: unknown) {\n super(message);\n }\n}\n\nexport class TimeoutError extends Error {\n name = \"TimeoutError\";\n constructor(message = \"Request timed out\") {\n super(message);\n }\n}\n\nexport class RedirectError extends Error {\n name = \"RedirectError\";\n constructor(message: string, public readonly fromUrl: string, public readonly toUrl?: string) {\n super(message);\n }\n}\n\nexport class ParseError extends Error {\n name = \"ParseError\";\n constructor(message: string, public readonly raw?: unknown, public readonly cause?: unknown) {\n super(message);\n }\n}\n\n\nexport const ILLEGAL_INVOCATION_HINT = `Detected a browser fetch invocation error (\"Illegal invocation\"). This usually happens when passing a detached reference to window.fetch. Fix by configuring the client with fetch: (input, init) => window.fetch(input, init) or fetch: window.fetch.bind(window).`;\n","import type { HttpClientOptions, RequestOptions, ClientResult, HttpMethod } from \"./types.js\";\nimport { composeGuards } from \"../internal/compose.js\";\nimport { joinUrl, withQuery } from \"../internal/url.js\";\nimport type { RequestContext } from \"../internal/context.js\";\nimport { authGuard } from \"../internal/authGuard.js\";\nimport { createHeaders, toFetchHeaders } from \"../internal/headersPolyfill.js\";\nimport type { HeadersPolyfill } from \"../internal/headersPolyfill.js\";\nimport { makeCacheKey } from \"../cache/key.js\";\nimport { InFlight } from \"../cache/inFlight.js\";\nimport { consoleNotifier } from \"../notify/defaults.js\";\nimport {\n NetworkError,\n TimeoutError,\n RedirectError,\n ParseError,\n type AppError,\n ILLEGAL_INVOCATION_HINT\n} from \"./errors.js\";\n\nfunction isIllegalInvocation(err: unknown): boolean {\n const msg = String((err as any)?.message ?? err);\n return /Illegal invocation/i.test(msg);\n}\n\nfunction normalizeFetch(f: typeof globalThis.fetch): typeof globalThis.fetch {\n const bound = (f as any).bind ? (f as any).bind(globalThis) : f;\n return ((input: any, init?: any) => bound(input, init)) as typeof globalThis.fetch;\n}\n\n// -----------------------------------------------------------------------------\n// Default fetch (multi-platform)\n// -----------------------------------------------------------------------------\n// Browser/Edge/Node>=18: globalThis.fetch exists.\n// If your environment doesn't provide fetch, pass one via `createHttpClient({ fetch })`.\nfunction getDefaultFetch(): typeof globalThis.fetch {\n if (typeof globalThis.fetch === \"function\") return globalThis.fetch;\n throw new Error(\n \"No global fetch detected. Provide a fetch implementation via createHttpClient({ fetch }) or run in an environment that supports fetch (Node >= 18 / modern browsers).\"\n );\n}\n\nconst REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\nexport function createHttpClient(options: HttpClientOptions) {\n // --- Plugin layer (config-time only) ---\n // Plugins mutate a draft options object before the client is instantiated.\n const draft: HttpClientOptions = { ...options };\n if (draft.plugins?.length) {\n const seen = new Set<string>();\n for (const p of draft.plugins) {\n if (!p || !p.name || typeof p.apply !== \"function\") continue;\n if (seen.has(p.name)) continue;\n seen.add(p.name);\n p.apply(draft);\n }\n }\n\n // Important: some tests (and real apps) monkey-patch `globalThis.fetch` after\n // the client is created. When no custom fetch is provided, we therefore\n // resolve/bind the current global fetch lazily.\n const resolvedFetch: typeof globalThis.fetch = (() => {\n if (draft.fetch) return normalizeFetch(draft.fetch);\n\n // Cache a bound wrapper for the *current* global fetch reference.\n let lastRef: typeof globalThis.fetch | null = null;\n let lastBound: typeof globalThis.fetch | null = null;\n\n return ((input: any, init?: any) => {\n const cur = getDefaultFetch();\n if (cur !== lastRef || !lastBound) {\n lastRef = cur;\n lastBound = normalizeFetch(cur);\n }\n return (lastBound as any)(input, init);\n }) as typeof globalThis.fetch;\n })();\n const cache = draft.cache;\n const inFlight = new InFlight();\n\n const defaultNotifier = draft.notifier ?? consoleNotifier;\n const shouldNotify = draft.defaults?.shouldNotify ?? ((r) => !r.ok);\n\n const baseGuards = [authGuard(draft.auth), ...(draft.guards ?? [])];\n\n async function terminal(ctx: RequestContext): Promise<Response> {\n const controller = ctx.timeoutMs ? new AbortController() : undefined;\n const timeout = ctx.timeoutMs ? setTimeout(() => controller?.abort(new TimeoutError()), ctx.timeoutMs) : undefined;\n\n try {\n const init: RequestInit = {\n method: ctx.method,\n headers: toFetchHeaders(ctx.headers as any),\n ...(ctx.body !== undefined ? { body: ctx.body } : {}),\n ...(ctx.signal\n ? { signal: controller ? anySignal([ctx.signal, controller.signal]) : ctx.signal }\n : (controller ? { signal: controller.signal } : {})),\n ...(ctx.credentials !== undefined ? { credentials: ctx.credentials } : {}),\n ...(ctx.redirect !== undefined ? { redirect: ctx.redirect } : {}),\n };\n\n try {\n return await ctx._fetch(ctx.url, init);\n } catch (err) {\n // Browser-only gotcha: calling a detached reference to `window.fetch`\n // can throw \"Illegal invocation\". If that happens, fallback to global fetch.\n if (isIllegalInvocation(err) && typeof globalThis.fetch === \"function\") {\n return await globalThis.fetch(ctx.url, init);\n }\n throw err;\n }\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n }\n\n const pipeline = composeGuards(baseGuards, terminal);\n\n async function request<T>(method: HttpMethod, path: string, ro?: RequestOptions<T>): Promise<ClientResult<T>> {\n const requestUrl = withQuery(joinUrl(draft.baseUrl, path), ro?.query);\n\n // Do not assume global Headers exists (Node < 18).\n const headers = createHeaders();\n if (draft.defaults?.headers) for (const [k, v] of Object.entries(draft.defaults.headers)) (headers as any).set(k, v);\n if (ro?.headers) for (const [k, v] of Object.entries(ro.headers)) if (v !== undefined) (headers as any).set(k, v);\n\n let body: BodyInit | undefined;\n let bodyForKey: unknown = undefined;\n\n if (ro?.json !== undefined) {\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"application/json\");\n body = JSON.stringify(ro.json);\n bodyForKey = ro.json;\n } else if (ro?.body !== undefined) {\n body = ro.body;\n bodyForKey = \"[body]\";\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"application/json\");\n } else {\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"application/json\");\n }\n\n const timeoutMs = ro?.timeoutMs ?? draft.defaults?.timeoutMs;\n const notifier = ro?.notifier ?? defaultNotifier;\n const emit = (event: any) => {\n const redact = (notifier as any).redact as undefined | ((e: any) => any);\n // Notifier is expected to be an object with a .notify(event) method.\n const n = (notifier as any).notify?.bind(notifier) ?? defaultNotifier.notify.bind(defaultNotifier);\n return n(redact ? redact(event) : event);\n };\n\n const cacheOpts = ro?.cache;\n const wantsCache = method === \"GET\" && !!cache && !!cacheOpts;\n const dedupe = cacheOpts?.dedupe ?? true;\n\n const canDedupeWrite = method !== \"GET\" && !!ro?.idempotencyKey;\n const inflightKey =\n (wantsCache || canDedupeWrite) && dedupe\n ? makeCacheKey({\n method,\n url: requestUrl,\n headers,\n ...(method === \"GET\" ? {} : { body: bodyForKey }),\n ...(ro?.idempotencyKey !== undefined ? { idempotencyKey: ro.idempotencyKey } : {}),\n ...(cacheOpts?.key !== undefined ? { keyOverride: cacheOpts.key } : {})\n })\n : undefined;\n\n if (inflightKey) {\n const existing = inFlight.get(inflightKey);\n if (existing) {\n try {\n const stored = await existing;\n return asClientResult<T>(stored, requestUrl, draft, ro, notifier, shouldNotify, emit);\n } catch {\n // ignore and proceed\n }\n }\n }\n\n const promise = (async () => {\n if (wantsCache) {\n const key = inflightKey!;\n const cached = cache!.get(key);\n const policy = cacheOpts?.policy ?? \"cacheFirst\";\n\n if (cached) {\n if (policy === \"networkOnly\") {\n // ignore\n } else if (policy === \"staleWhileRevalidate\") {\n void refreshInBackground(key);\n return { kind: \"cache-hit\", url: requestUrl, status: 200, headers: new Headers(), raw: cached.value };\n } else if (policy === \"cacheOnly\" || policy === \"cacheFirst\") {\n return { kind: \"cache-hit\", url: requestUrl, status: 200, headers: new Headers(), raw: cached.value };\n }\n } else if (policy === \"cacheOnly\") {\n return { kind: \"cache-miss\", url: requestUrl, status: 0, headers: new Headers(), raw: null };\n }\n }\n\n const res = await fetchWithRedirects({\n opts: draft,\n resolvedFetch,\n pipeline,\n method,\n url: requestUrl,\n headers,\n ...(body !== undefined ? { body } : {}),\n ...(ro?.signal ? { signal: ro.signal } : {}),\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(ro?.noAuth ? { noAuth: true } : {}),\n });\n\n const raw = await decodeResponse(res);\n const envelope = { kind: \"network\", url: res.url || requestUrl, status: res.status, headers: res.headers, raw };\n\n if (wantsCache && cacheOpts && res.ok) {\n const key = inflightKey!;\n cache!.set(key, {\n expiresAt: Date.now() + cacheOpts.ttlMs,\n value: raw,\n ...(cacheOpts.tags ? { tags: cacheOpts.tags } : {}),\n });\n }\n\n return envelope;\n\n async function refreshInBackground(key: string) {\n try {\n const res2 = await fetchWithRedirects({\n opts: draft,\n resolvedFetch,\n pipeline,\n method,\n url: requestUrl,\n headers,\n ...(body !== undefined ? { body } : {}),\n ...(ro?.signal ? { signal: ro.signal } : {}),\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(ro?.noAuth ? { noAuth: true } : {}),\n });\n if (!res2.ok) return;\n const raw2 = await decodeResponse(res2);\n cache!.set(key, {\n expiresAt: Date.now() + cacheOpts!.ttlMs,\n value: raw2,\n ...(cacheOpts!.tags ? { tags: cacheOpts!.tags } : {}),\n });\n } catch {\n // ignore\n }\n }\n })();\n\n if (inflightKey) inFlight.set(inflightKey, promise);\n\n try {\n const stored = await promise;\n return asClientResult<T>(stored, requestUrl, draft, ro, notifier, shouldNotify, emit);\n } catch (e) {\n const err = e instanceof TimeoutError\n ? e\n : new NetworkError(\n isIllegalInvocation(e) ? `Network request failed. ${ILLEGAL_INVOCATION_HINT}` : \"Network request failed\",\n e\n );\n if (shouldNotify({ ok: false, status: 0 })) emit({ type: \"network-error\", level: \"error\", title: \"Network error\", message: err.message, url: requestUrl });\n return { ok: false, status: 0, headers: new Headers(), errors: [{ message: err.message, details: e }], raw: null, url: requestUrl };\n }\n }\n\n return {\n get: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"GET\", path, ro),\n post: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"POST\", path, ro),\n put: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"PUT\", path, ro),\n patch: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"PATCH\", path, ro),\n delete: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"DELETE\", path, ro),\n cache: { invalidateByTag: (tag: string) => cache?.invalidateByTag(tag) ?? 0, clear: () => cache?.clear() },\n };\n}\n\nasync function fetchWithRedirects(args: {\n opts: HttpClientOptions;\n resolvedFetch: typeof globalThis.fetch;\n pipeline: (ctx: RequestContext) => Promise<Response>;\n method: HttpMethod;\n url: string;\n headers: Headers | HeadersPolyfill;\n body?: BodyInit;\n signal?: AbortSignal;\n timeoutMs?: number;\n noAuth?: boolean;\n}): Promise<Response> {\n const policy = args.opts.redirects ?? { mode: \"follow\" as const, maxHops: 5 };\n const maxHops = policy.maxHops ?? 5;\n\n if (policy.mode === \"follow\") return args.pipeline(makeCtx(args, \"follow\"));\n if (policy.mode === \"error\") return args.pipeline(makeCtx(args, \"error\"));\n\n let currentUrl = args.url;\n let method: HttpMethod = args.method;\n let body = args.body;\n\n for (let hop = 0; hop <= maxHops; hop++) {\n const res = await args.pipeline(\n makeCtx({\n ...args,\n url: currentUrl,\n method,\n ...(body !== undefined ? { body } : {}),\n }, \"manual\")\n );\n if (!REDIRECT_STATUSES.has(res.status)) return res;\n\n const loc = res.headers.get(\"location\");\n if (!loc) {\n // Multi-platform robustness:\n // Some runtimes may hide Location when using redirect:'manual'.\n // In that case we cannot follow manually. Best-effort fallback:\n // retry the request in 'follow' mode and return the final response.\n // (This sacrifices strict maxHops enforcement but avoids a false failure.)\n return args.pipeline(\n makeCtx(\n {\n ...args,\n url: currentUrl,\n method,\n ...(body !== undefined ? { body } : {}),\n },\n \"follow\"\n )\n );\n }\n const nextUrl = new URL(loc, currentUrl).toString();\n\n const decision = policy.onRedirect?.({ fromUrl: currentUrl, toUrl: nextUrl, status: res.status, hop, method });\n if (decision?.action === \"deny\") throw new RedirectError(decision.reason ?? \"Redirect denied by policy\", currentUrl, nextUrl);\n const finalUrl = decision?.action === \"modify\" ? decision.url : nextUrl;\n\n // Security: avoid leaking bearer auth to a different origin on redirects (manual mode).\n stripAuthOnCrossOriginRedirect(args.opts, args.url, finalUrl, args.headers);\n\n if (res.status === 303) { method = \"GET\"; body = undefined; }\n else if ((res.status === 301 || res.status === 302) && method !== \"GET\") { method = \"GET\"; body = undefined; }\n\n currentUrl = finalUrl;\n if (hop === maxHops) throw new RedirectError(`Too many redirects (>${maxHops})`, args.url, currentUrl);\n }\n\n return args.pipeline(makeCtx(args, \"manual\"));\n}\n\nfunction stripAuthOnCrossOriginRedirect(opts: HttpClientOptions, initialUrl: string, toUrl: string, headers: Headers | HeadersPolyfill) {\n try {\n const initialOrigin = new URL(initialUrl).origin;\n const toOrigin = new URL(toUrl).origin;\n if (initialOrigin === toOrigin) return;\n\n // Bearer: configurable behaviour (default true)\n if (opts.auth.mode === \"bearer\") {\n const headerName = opts.auth.headerName ?? \"Authorization\";\n headers.delete(headerName);\n return;\n }\n\n // Basic / ApiKey: always strip on cross-origin redirect\n if (opts.auth.mode === \"basic\") {\n const headerName = opts.auth.headerName ?? \"Authorization\";\n headers.delete(headerName);\n return;\n }\n\n if (opts.auth.mode === \"apiKey\") {\n const headerName = opts.auth.headerName ?? \"X-API-Key\";\n headers.delete(headerName);\n return;\n }\n } catch {\n // ignore\n }\n}\n\nfunction makeCtx(\n args: {\n opts: HttpClientOptions;\n resolvedFetch: typeof globalThis.fetch;\n method: HttpMethod;\n url: string;\n headers: Headers | HeadersPolyfill;\n body?: BodyInit;\n signal?: AbortSignal;\n timeoutMs?: number;\n noAuth?: boolean;\n },\n redirect: RequestRedirect\n): RequestContext {\n const baseOrigin = (() => {\n try {\n return new URL(args.opts.baseUrl).origin;\n } catch {\n // baseUrl may be relative in some environments; fallback to empty origin.\n return \"\";\n }\n })();\n return {\n baseUrl: args.opts.baseUrl,\n baseOrigin,\n method: args.method,\n url: args.url,\n headers: args.headers,\n\n ...(args.body !== undefined ? { body: args.body } : {}),\n ...(args.signal ? { signal: args.signal } : {}),\n ...(args.timeoutMs !== undefined ? { timeoutMs: args.timeoutMs } : {}),\n ...(args.noAuth ? { noAuth: true } : {}),\n\n attempt: 0,\n auth: args.opts.auth,\n redirect,\n _fetch: args.resolvedFetch,\n };\n}\n\n\nasync function decodeResponse(res: Response): Promise<unknown> {\n if (res.status === 204) return null;\n const ct = res.headers.get(\"content-type\") ?? \"\";\n if (ct.includes(\"application/json\")) {\n try { return await res.json(); }\n catch (e) { throw new ParseError(\"Failed to parse JSON response\", undefined, e); }\n }\n try { return await res.text(); }\n catch (e) { throw new ParseError(\"Failed to read response body\", undefined, e); }\n}\n\nfunction asClientResult<T>(\n envelope: any,\n requestUrl: string,\n opts: HttpClientOptions,\n ro: RequestOptions<T> | undefined,\n notifier: import(\"../notify/types.js\").Notifier,\n shouldNotify: (r: { ok: boolean; status: number }) => boolean,\n emit: (event: any) => void\n): ClientResult<T> {\n if (envelope?.kind === \"cache-miss\") {\n const errors: AppError[] = [{ message: \"Cache miss\" }];\n if (shouldNotify({ ok: false, status: 0 })) emit({ type: \"http-error\", level: \"warning\", title: \"Cache\", message: \"Cache miss\", status: 0, errors, url: requestUrl });\n return { ok: false, status: 0, headers: new Headers(), errors, raw: envelope.raw, url: requestUrl };\n }\n\n const status = envelope.status ?? 0;\n const raw = envelope.raw;\n const resHeaders: Headers = envelope.headers ?? new Headers();\n const finalUrl = envelope.url ?? requestUrl;\n\n const okByParser = opts.parser.isSuccess(raw, status);\n\n if (okByParser && status >= 200 && status < 400) {\n const dataRaw = opts.parser.getData(raw);\n try {\n const data = ro?.dataSchema ? ro.dataSchema.parse(dataRaw) : (dataRaw as T);\n return { ok: true, status, headers: resHeaders, data, raw, url: finalUrl };\n } catch (e) {\n const msg = e instanceof Error ? e.message : \"Schema parse failed\";\n if (shouldNotify({ ok: false, status })) emit({ type: \"parse-error\", level: \"error\", title: \"Parse error\", message: msg, url: finalUrl });\n return { ok: false, status, headers: resHeaders, errors: [{ message: msg, details: e }], raw, url: finalUrl };\n }\n }\n\n const errors = opts.parser.getErrors(raw, status);\n const msg = errors[0]?.message ?? (status ? `HTTP ${status}` : \"Request failed\");\n if (shouldNotify({ ok: false, status })) emit({ type: \"http-error\", level: status >= 500 ? \"error\" : \"warning\", title: \"Request failed\", message: msg, status, errors, url: finalUrl });\n return { ok: false, status, headers: resHeaders, errors, raw, url: finalUrl };\n}\n\nfunction anySignal(signals: Array<AbortSignal | undefined>): AbortSignal {\n const valid = signals.filter(Boolean) as AbortSignal[];\n\n // Prefer the native implementation when available (Node 20+, some browsers).\n // It is more efficient and does not leak listeners.\n const any = (AbortSignal as any).any as undefined | ((signals: AbortSignal[]) => AbortSignal);\n if (any) {\n try {\n return any(valid);\n } catch {\n // fallthrough to manual polyfill\n }\n }\n\n const controller = new AbortController();\n const onAbort = () => controller.abort();\n for (const s of valid) {\n if (s.aborted) controller.abort();\n s.addEventListener(\"abort\", onAbort, { once: true });\n }\n return controller.signal;\n}\n","export type BearerAuthConfig = {\n mode: \"bearer\";\n getToken: () => string | null | Promise<string | null>;\n headerName?: string;\n prefix?: string;\n\n /**\n * Security hardening: only attach auth headers if request origin is allowed.\n * If omitted: only same-origin as the client's baseUrl is allowed.\n */\n allowedOrigins?: string[] | ((url: string) => boolean);\n};\n\nexport type CookieAuthConfig = {\n mode: \"cookie\";\n /**\n * Sets RequestInit.credentials for every request.\n * Use \"include\" for cross-site cookies.\n */\n credentials?: RequestCredentials;\n /**\n * Optional CSRF support for cookie-based sessions.\n * If provided, a header will be injected on non-GET requests.\n */\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n};\n\nexport type BasicAuthConfig = {\n mode: \"basic\";\n /**\n * Return either { username, password } or a pre-encoded \"user:pass\" string.\n * Return null to skip auth.\n */\n getCredentials: () =>\n | { username: string; password: string }\n | string\n | null\n | Promise<{ username: string; password: string } | string | null>;\n headerName?: string; // default: \"Authorization\"\n prefix?: string; // default: \"Basic\"\n\n /**\n * Security hardening: only attach auth headers if request origin is allowed.\n * If omitted: only same-origin as the client's baseUrl is allowed.\n */\n allowedOrigins?: string[] | ((url: string) => boolean);\n};\n\nexport type ApiKeyAuthConfig = {\n mode: \"apiKey\";\n getKey: () => string | null | Promise<string | null>;\n /**\n * Header to use for API key auth (default: \"X-API-Key\").\n * You can also set to \"Authorization\" and use prefix.\n */\n headerName?: string;\n prefix?: string; // default: \"\" (no prefix)\n\n /**\n * Security hardening: only attach API key header if request origin is allowed.\n * If omitted: only same-origin as the client's baseUrl is allowed.\n */\n allowedOrigins?: string[] | ((url: string) => boolean);\n};\n\nexport type NoneAuthConfig = { mode: \"none\" };\n\nexport type AuthConfig =\n | BearerAuthConfig\n | CookieAuthConfig\n | BasicAuthConfig\n | ApiKeyAuthConfig\n | NoneAuthConfig;\n\nexport function bearerAuth(\n getToken: () => string | null | Promise<string | null>,\n opts?: { headerName?: string; prefix?: string; allowedOrigins?: BearerAuthConfig[\"allowedOrigins\"] }\n): BearerAuthConfig {\n return {\n mode: \"bearer\",\n getToken,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\n ...(opts?.allowedOrigins !== undefined ? { allowedOrigins: opts.allowedOrigins } : {}),\n };\n}\n\nexport function cookieAuth(opts?: {\n credentials?: RequestCredentials;\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n}): CookieAuthConfig {\n return {\n mode: \"cookie\",\n ...(opts?.credentials !== undefined ? { credentials: opts.credentials } : {}),\n ...(opts?.csrf !== undefined ? { csrf: opts.csrf } : {}),\n };\n}\n\nexport function basicAuth(\n getCredentials: BasicAuthConfig[\"getCredentials\"],\n opts?: { headerName?: string; prefix?: string; allowedOrigins?: BasicAuthConfig[\"allowedOrigins\"] }\n): BasicAuthConfig {\n return {\n mode: \"basic\",\n getCredentials,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\n ...(opts?.allowedOrigins !== undefined ? { allowedOrigins: opts.allowedOrigins } : {}),\n };\n}\n\nexport function apiKeyAuth(\n getKey: () => string | null | Promise<string | null>,\n opts?: { headerName?: string; prefix?: string; allowedOrigins?: ApiKeyAuthConfig[\"allowedOrigins\"] }\n): ApiKeyAuthConfig {\n return {\n mode: \"apiKey\",\n getKey,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\n ...(opts?.allowedOrigins !== undefined ? { allowedOrigins: opts.allowedOrigins } : {}),\n };\n}\n\nexport function noAuth(): NoneAuthConfig {\n return { mode: \"none\" };\n}\n","import type { Guard } from \"./types.js\";\n\n/**\n * Simple retry guard for transient HTTP statuses.\n * Note: this doesn't retry network errors thrown by fetch itself (those are handled by the client wrapper).\n */\nexport function retryGuard(opts?: { retries?: number; retryOn?: number[]; baseDelayMs?: number; maxDelayMs?: number }): Guard {\n const retries = opts?.retries ?? 0;\n const retryOn = new Set(opts?.retryOn ?? [502, 503, 504]);\n const baseDelay = opts?.baseDelayMs ?? 150;\n const maxDelay = opts?.maxDelayMs ?? 1500;\n\n return async (ctx, next) => {\n let last: Response | undefined;\n for (let attempt = 0; attempt <= retries; attempt++) {\n ctx.attempt = attempt;\n last = await next(ctx);\n if (!retryOn.has(last.status)) return last;\n if (attempt === retries) return last;\n const delay = Math.min(maxDelay, baseDelay * 2 ** attempt);\n await new Promise((r) => setTimeout(r, delay));\n }\n return last!;\n };\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\nimport { joinUrl } from \"../internal/url.js\";\n\ntype RefreshDecision =\n | { ok: true }\n | { ok: false; reason?: string; status?: number };\n\nexport type CookieSafeRefreshGuardOptions = {\n /**\n * Endpoint refresh (absolu ou relatif)\n * ex: \"/auth/refresh\" ou \"https://api.example.com/auth/refresh\"\n */\n refreshPath: string;\n\n /** Méthode refresh (souvent POST) */\n refreshMethod?: \"POST\" | \"GET\";\n\n /** Statuts qui déclenchent refresh. Default: [401, 419] */\n triggerStatuses?: number[];\n\n /** Nombre max de replays de la requête originale. Default: 1 */\n maxRetry?: number;\n\n /**\n * Exclure certains paths (pathname) de la logique refresh.\n * Ex: [\"/auth/refresh\", \"/health\"]\n */\n excludePaths?: string[];\n\n /**\n * Si refresh renvoie 429 Too Many Requests,\n * on stoppe les refresh jusqu’à une date (cooldown).\n * Default: true\n */\n honorRetryAfter?: boolean;\n\n /** Décider si on refresh selon ctx + status */\n shouldRefresh?: (ctx: RequestContext, status: number) => boolean;\n\n /** Hook: appelé quand refresh échoue (utile pour redirect login) */\n onRefreshFailed?: (info: { status?: number; url: string; reason?: string }) => void;\n\n /** Hook: appelé quand refresh réussit */\n onRefreshSuccess?: (info: { url: string }) => void;\n};\n\nconst REFRESH_FLAG = \"__hg_is_refresh__\";\nconst RETRY_FLAG = \"__hg_refresh_retry__\";\n\nfunction isReplayableBody(body: unknown): boolean {\n // On évite de rejouer les streams (ReadableStream) et trucs one-shot.\n if (body == null) return true;\n if (typeof body === \"string\") return true;\n if (typeof Blob !== \"undefined\" && body instanceof Blob) return true;\n if (typeof FormData !== \"undefined\" && body instanceof FormData) return true;\n if (typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams) return true;\n if (typeof ArrayBuffer !== \"undefined\" && body instanceof ArrayBuffer) return true;\n if (typeof Uint8Array !== \"undefined\" && body instanceof Uint8Array) return true;\n return false;\n}\n\nfunction normalizePath(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n const q = url.indexOf(\"?\");\n const h = url.indexOf(\"#\");\n const cut = Math.min(q === -1 ? url.length : q, h === -1 ? url.length : h);\n return url.slice(0, cut);\n }\n}\n\nfunction parseRetryAfterMs(headers: Headers): number | null {\n const ra = headers.get(\"retry-after\");\n if (!ra) return null;\n\n const seconds = Number(ra);\n if (!Number.isNaN(seconds) && seconds >= 0) return seconds * 1000;\n\n const date = Date.parse(ra);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n\n return null;\n}\n\nfunction isAbsoluteUrl(u: string): boolean {\n try {\n // new URL() accepte seulement les URLs absolues (ou base).\n // Ici on veut détecter le cas absolu.\n void new URL(u);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function cookieSafeRefreshGuard(opts: CookieSafeRefreshGuardOptions): Guard {\n const trigger = new Set(opts.triggerStatuses ?? [401, 419]);\n const maxRetry = opts.maxRetry ?? 1;\n const honorRetryAfter = opts.honorRetryAfter ?? true;\n\n // single-flight refresh\n let refreshPromise: Promise<RefreshDecision> | null = null;\n\n // cooldown si 429\n let refreshCooldownUntil = 0;\n\n return async (ctx, next) => {\n const anyCtx = ctx as any;\n\n // anti-boucle: si c’est déjà une requête refresh\n if (anyCtx[REFRESH_FLAG]) return next(ctx);\n\n // skip explicite\n const path = normalizePath(ctx.url);\n if (opts.excludePaths?.includes(path)) return next(ctx);\n\n // Si noAuth = true, ne pas déclencher refresh\n if (ctx.noAuth) return next(ctx);\n\n // Exclure l’endpoint refresh lui-même\n const refreshPathNorm = normalizePath(resolveRefreshUrl(ctx, opts.refreshPath));\n if (path === refreshPathNorm) return next(ctx);\n\n // cooldown (429)\n if (honorRetryAfter && refreshCooldownUntil > Date.now()) {\n return next(ctx);\n }\n\n const res = await next(ctx);\n if (!trigger.has(res.status)) return res;\n\n if (opts.shouldRefresh && !opts.shouldRefresh(ctx, res.status)) return res;\n\n const alreadyRetried = Number(anyCtx[RETRY_FLAG] ?? 0);\n if (alreadyRetried >= maxRetry) return res;\n\n if (!isReplayableBody((ctx as any).body)) return res;\n\n const decision = await (refreshPromise ??= doRefresh(ctx, next).finally(() => {\n refreshPromise = null;\n }));\n\n if (!decision.ok) {\n // With `exactOptionalPropertyTypes: true`, avoid passing explicit `undefined`.\n opts.onRefreshFailed?.({\n url: ctx.url,\n ...(decision.reason !== undefined ? { reason: decision.reason } : {}),\n ...(decision.status !== undefined ? { status: decision.status } : {}),\n });\n return res;\n }\n\n opts.onRefreshSuccess?.({ url: ctx.url });\n\n const retryCtx: RequestContext = Object.assign({}, ctx, { attempt: ctx.attempt + 1 }) as RequestContext;\n (retryCtx as any)[RETRY_FLAG] = alreadyRetried + 1;\n\n // Guards are composed downstream-only. When we replay from here, we bypass\n // upstream guards (like authGuard), so we must ensure cookie credentials/CSRF\n // are still applied.\n await applyCookieAuth(retryCtx);\n return next(retryCtx);\n };\n\n async function doRefresh(originalCtx: RequestContext, next: (ctx: RequestContext) => Promise<Response>): Promise<RefreshDecision> {\n if (honorRetryAfter && refreshCooldownUntil > Date.now()) {\n return { ok: false, reason: \"Refresh cooldown active\" };\n }\n\n const refreshUrl = resolveRefreshUrl(originalCtx, opts.refreshPath);\n\n const refreshCtx: RequestContext = {\n ...originalCtx,\n url: refreshUrl,\n method: opts.refreshMethod ?? \"POST\",\n // Un refresh n’a en général pas besoin du body original\n ...(Object.prototype.hasOwnProperty.call(originalCtx, \"body\") ? { body: undefined } : {}),\n attempt: 0,\n } as RequestContext;\n\n (refreshCtx as any)[REFRESH_FLAG] = true;\n // On ne veut pas que les guards app-supplied détectent un replay comme une requête originale\n (refreshCtx as any)[RETRY_FLAG] = 0;\n\n // Same rationale as replay: refresh must carry cookie credentials/CSRF even\n // though authGuard is upstream.\n await applyCookieAuth(refreshCtx);\n\n try {\n const res = await next(refreshCtx);\n\n if (res.status === 429 && honorRetryAfter) {\n const ms = parseRetryAfterMs(res.headers);\n refreshCooldownUntil = Date.now() + (ms ?? 30_000);\n return { ok: false, reason: \"Refresh rate-limited (429)\", status: 429 };\n }\n\n if (!res.ok) {\n return { ok: false, reason: `Refresh failed (HTTP ${res.status})`, status: res.status };\n }\n\n return { ok: true };\n } catch (e) {\n return { ok: false, reason: e instanceof Error ? e.message : \"Refresh exception\" };\n }\n }\n\n function resolveRefreshUrl(ctx: RequestContext, refreshPath: string): string {\n // absolu => tel quel\n if (isAbsoluteUrl(refreshPath)) return refreshPath;\n\n // baseUrl is always set by createHttpClient; resolve relative refreshPath against it.\n return joinUrl(ctx.baseUrl, refreshPath);\n }\n\n async function applyCookieAuth(ctx: RequestContext): Promise<void> {\n if (ctx.noAuth) return;\n const auth = ctx.auth;\n if (!auth || auth.mode !== \"cookie\") return;\n\n if (ctx.credentials === undefined) {\n ctx.credentials = auth.credentials ?? \"include\";\n }\n\n if (auth.csrf) {\n const hn = auth.csrf.headerName;\n if (!ctx.headers.has(hn)) {\n const t = await auth.csrf.getToken();\n if (t != null && String(t) !== \"\") ctx.headers.set(hn, String(t));\n }\n }\n }\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\n\nfunction normalizePath(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n const q = url.indexOf(\"?\");\n const h = url.indexOf(\"#\");\n const cut = Math.min(q === -1 ? url.length : q, h === -1 ? url.length : h);\n return url.slice(0, cut);\n }\n}\n\nexport type UnauthorizedGuardOptions = {\n onUnauthorized: (ctx: { url: string; status: number }) => void;\n statuses?: number[];\n ignoreNoAuth?: boolean;\n once?: boolean;\n cooldownMs?: number;\n shouldHandle?: (ctx: RequestContext, status: number) => boolean;\n excludePaths?: string[];\n};\n\n/**\n * Centralizes “unauthorized” handling (redirect/logout) with anti-spam.\n */\nexport function unauthorizedGuard(opts: UnauthorizedGuardOptions): Guard {\n const statuses = opts.statuses ?? [401, 419];\n const ignoreNoAuth = opts.ignoreNoAuth ?? true;\n const once = opts.once ?? true;\n const cooldownMs = opts.cooldownMs ?? 250;\n\n let locked = false;\n let cooldownUntil = 0;\n\n return async (ctx: RequestContext, next) => {\n let res: Response;\n\n try {\n res = await next(ctx);\n } catch (e) {\n // Network/CORS errors: do not redirect/logout (avoids infinite loops).\n throw e;\n }\n\n if (ignoreNoAuth && ctx.noAuth) return res;\n\n const path = normalizePath(ctx.url);\n if (opts.excludePaths?.includes(path)) return res;\n\n if (!statuses.includes(res.status)) return res;\n\n if (opts.shouldHandle && !opts.shouldHandle(ctx, res.status)) return res;\n\n const now = Date.now();\n if (now < cooldownUntil) return res;\n\n if (once) {\n if (locked) return res;\n locked = true;\n }\n\n try {\n opts.onUnauthorized({ url: ctx.url, status: res.status });\n } finally {\n cooldownUntil = Date.now() + cooldownMs;\n if (once) setTimeout(() => (locked = false), cooldownMs);\n }\n\n return res;\n };\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\nimport type { HeadersPolyfill } from \"../internal/headersPolyfill.js\";\n\n// Flags utilisés par cookieSafeRefreshGuard (si tu veux les voir dans les logs).\n// Si ta lib les expose pas, tu peux les laisser: on lit juste des props \"best-effort\".\nconst REFRESH_FLAG = \"__hg_is_refresh__\";\nconst RETRY_FLAG = \"__hg_refresh_retry__\";\n\ntype InstrumentOptions = {\n // nom logique du guard (ex: \"cookieSafeRefreshGuard\", \"unauthorizedGuard\", etc.)\n name: string;\n\n // log function (par défaut console.log)\n log?: (line: string, data?: any) => void;\n\n // filtre: log uniquement certaines URLs\n include?: RegExp;\n\n // filtre: ignorer certaines URLs\n exclude?: RegExp;\n\n // log init (method/headers/credentials)\n logInit?: boolean;\n\n // log stack (utile pour comprendre qui déclenche un nouveau /auth/me côté app)\n // ⚠️ bruyant, à utiliser ponctuellement\n stack?: boolean;\n};\n\nfunction safeUrl(u: string): string {\n try {\n const url = new URL(u);\n // masque query si tu veux\n return url.toString();\n } catch {\n return u;\n }\n}\n\nfunction nowMs(): number {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\n\nfunction headersToObject(h?: Headers | HeadersPolyfill): Record<string, string> {\n if (!h) return {};\n const out: Record<string, string> = {};\n try {\n h.forEach((v, k) => {\n const key = String(k).toLowerCase();\n if (\n key === \"authorization\" ||\n key === \"cookie\" ||\n key === \"set-cookie\" ||\n key === \"x-api-key\" ||\n key === \"proxy-authorization\"\n ) {\n out[k] = \"[REDACTED]\";\n } else {\n out[k] = v;\n }\n });\n } catch {\n // ignore\n }\n return out;\n}\n\nlet __hg_req_seq = 0;\n\nexport function instrumentGuard(opts: InstrumentOptions, guard: Guard): Guard {\n const log = opts.log ?? ((line, data) => (data !== undefined ? console.log(line, data) : console.log(line)));\n\n return async (ctx: RequestContext, next: (ctx: RequestContext) => Promise<Response>) => {\n const id = ++__hg_req_seq;\n const t0 = nowMs();\n\n const url = safeUrl(ctx.url);\n const method = (ctx.method ?? \"GET\") as string;\n\n if (opts.include && !opts.include.test(url)) {\n return guard(ctx, next);\n }\n if (opts.exclude && opts.exclude.test(url)) {\n return guard(ctx, next);\n }\n\n const anyCtx = ctx as any;\n const attempt = ctx.attempt ?? 0;\n const isRefresh = Boolean(anyCtx[REFRESH_FLAG]);\n const retryCount = Number(anyCtx[RETRY_FLAG] ?? 0);\n const noAuth = Boolean(ctx.noAuth);\n\n const baseLine = `[HG][#${id}][${opts.name}]`;\n\n log(`${baseLine} ▶ start`, {\n method,\n url,\n attempt,\n retryCount,\n isRefresh,\n noAuth,\n baseUrl: ctx.baseUrl,\n ...(opts.logInit\n ? {\n credentials: (ctx as any).credentials,\n redirect: (ctx as any).redirect,\n headers: headersToObject(ctx.headers),\n }\n : {}),\n ...(opts.stack ? { stack: new Error().stack } : {}),\n });\n\n try {\n const res = await guard(ctx, next);\n const dt = Math.round(nowMs() - t0);\n\n log(`${baseLine} ◀ end (${dt}ms)`, {\n status: res.status,\n ok: res.ok,\n url: (res as any).url || url,\n redirected: (res as any).redirected,\n location: res.headers?.get?.(\"location\") ?? null,\n retryAfter: res.headers?.get?.(\"retry-after\") ?? null,\n });\n\n return res;\n } catch (e) {\n const dt = Math.round(nowMs() - t0);\n log(`${baseLine} ✖ throw (${dt}ms)`, {\n error: e instanceof Error ? { name: e.name, message: e.message, stack: e.stack } : e,\n });\n throw e;\n }\n };\n}\n","import type { CacheEntry, CacheStore } from \"./types.js\";\n\n/**\n * Options for {@link memoryCache}.\n */\nexport type MemoryCacheOptions = {\n /**\n * Maximum number of entries kept in memory (LRU-ish).\n * Default: 1000\n */\n maxEntries?: number;\n};\n\n/**\n * Simple in-memory LRU-ish cache with tag invalidation.\n */\nexport function memoryCache(opts?: MemoryCacheOptions): CacheStore {\n const max = opts?.maxEntries ?? 1000;\n const map = new Map<string, CacheEntry>();\n const tagIndex = new Map<string, Set<string>>();\n\n function touch(key: string) {\n const v = map.get(key);\n if (!v) return;\n map.delete(key);\n map.set(key, v);\n }\n\n function deindexTags(key: string, entry?: CacheEntry) {\n const tags = entry?.tags;\n if (!tags?.length) return;\n for (const t of tags) {\n const set = tagIndex.get(t);\n if (!set) continue;\n set.delete(key);\n if (set.size === 0) tagIndex.delete(t);\n }\n }\n\n function indexTags(key: string, tags?: string[]) {\n if (!tags?.length) return;\n for (const t of tags) {\n let set = tagIndex.get(t);\n if (!set) {\n set = new Set();\n tagIndex.set(t, set);\n }\n set.add(key);\n }\n }\n\n function del(key: string) {\n const prev = map.get(key);\n if (prev) deindexTags(key, prev);\n map.delete(key);\n }\n\n function ensureLimit() {\n while (map.size > max) {\n const firstKey = map.keys().next().value as string | undefined;\n if (!firstKey) break;\n del(firstKey);\n }\n }\n\n return {\n get(key) {\n const entry = map.get(key);\n if (!entry) return undefined;\n if (Date.now() > entry.expiresAt) {\n del(key);\n return undefined;\n }\n touch(key);\n return entry;\n },\n set(key, entry) {\n const prev = map.get(key);\n if (prev) deindexTags(key, prev);\n map.set(key, entry);\n indexTags(key, entry.tags);\n ensureLimit();\n },\n delete: del,\n invalidateByTag(tag) {\n const set = tagIndex.get(tag);\n if (!set) return 0;\n const keys = Array.from(set);\n let n = 0;\n for (const k of keys) {\n if (map.has(k)) {\n del(k);\n n++;\n }\n }\n return n;\n },\n clear() {\n map.clear();\n tagIndex.clear();\n },\n };\n}\n","import type { AppError } from \"../client/errors.js\";\n\nexport type ShapeParser = {\n isSuccess: (raw: unknown, status: number) => boolean;\n getData: (raw: unknown) => unknown;\n getErrors: (raw: unknown, status: number) => AppError[];\n};\n\nexport function createShapeParser(p: ShapeParser): ShapeParser {\n return p;\n}\n","export type Schema<T> = { parse: (input: unknown) => T };\n\nexport function schema<T>(impl: Schema<T>): Schema<T> {\n return impl;\n}\n\n/**\n * Optional helper to wrap a zod-like schema without adding a dependency.\n */\nexport function fromZod<T>(zodSchema: {\n parse?: (i: unknown) => T;\n safeParse?: (i: unknown) => { success: true; data: T } | { success: false; error: unknown };\n}): Schema<T> {\n if (typeof zodSchema.parse === \"function\") return { parse: (i) => zodSchema.parse!(i) };\n if (typeof zodSchema.safeParse === \"function\") {\n return {\n parse: (i) => {\n const r = zodSchema.safeParse!(i) as any;\n if (r && r.success) return r.data;\n throw new Error(\"Schema validation failed\");\n },\n };\n }\n throw new Error(\"Unsupported zod-like schema: expected parse or safeParse\");\n}\n","import type { AppError } from \"../client/errors.js\";\nimport { createShapeParser, type ShapeParser } from \"./shapeParser.js\";\n\nexport function createApiParserRestClassic(opts?: {\n successField?: string;\n dataField?: string;\n errorField?: string;\n messageField?: string;\n}): ShapeParser {\n const successField = opts?.successField ?? \"success\";\n const dataField = opts?.dataField ?? \"data\";\n const errorField = opts?.errorField ?? \"error\";\n const messageField = opts?.messageField ?? \"message\";\n\n return createShapeParser({\n isSuccess: (raw, status) => {\n if (raw && typeof raw === \"object\" && successField in (raw as any)) return Boolean((raw as any)[successField]);\n return status >= 200 && status < 400;\n },\n getData: (raw) => (raw && typeof raw === \"object\" && dataField in (raw as any)) ? (raw as any)[dataField] : raw,\n getErrors: (raw, status) => {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n const r: any = raw;\n const err = r[errorField] ?? r[messageField] ?? r[\"errors\"];\n if (!err) return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n\n if (typeof err === \"string\") return [{ message: err }];\n if (Array.isArray(err)) return err.map((e) => ({ message: String(e) }));\n\n if (typeof err === \"object\") {\n if (typeof err.message === \"string\") return [{ message: err.message, ...(err.code ? { code: String(err.code) } : {}), details: err }];\n return [{ message: String(r[messageField] ?? \"Request failed\"), details: err }];\n }\n return [{ message: String(err) }];\n },\n });\n}\n\nexport function createApiParserLaravel(opts?: { dataField?: string }): ShapeParser {\n const dataField = opts?.dataField ?? \"data\";\n return createShapeParser({\n isSuccess: (_raw, status) => status >= 200 && status < 400,\n getData: (raw) => (raw && typeof raw === \"object\" && dataField in (raw as any)) ? (raw as any)[dataField] : raw,\n getErrors: (raw, status) => laravelErrors(raw, status),\n });\n}\n\nfunction laravelErrors(raw: unknown, status: number): AppError[] {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n const r: any = raw;\n\n if (r.errors && typeof r.errors === \"object\") {\n const out: AppError[] = [];\n for (const [field, msgs] of Object.entries(r.errors)) {\n if (Array.isArray(msgs)) for (const m of msgs) out.push({ field, message: String(m) });\n else out.push({ field, message: String(msgs) });\n }\n if (out.length) return out;\n }\n\n const msg = typeof r.message === \"string\" ? r.message : (status ? `HTTP ${status}` : \"Request failed\");\n return [{ message: msg, details: r }];\n}\n\nexport function createApiParserNest(): ShapeParser {\n return createShapeParser({\n isSuccess: (_raw, status) => status >= 200 && status < 400,\n getData: (raw) => raw,\n getErrors: (raw, status) => nestErrors(raw, status),\n });\n}\n\nfunction nestErrors(raw: unknown, status: number): AppError[] {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n const r: any = raw;\n const msg = r.message;\n\n if (Array.isArray(msg)) return msg.map((m: any) => ({ message: String(m), details: r }));\n if (typeof msg === \"string\") return [{ message: msg, ...(r.error ? { code: String(r.error) } : {}), details: r }];\n\n return [{ message: status ? `HTTP ${status}` : \"Request failed\", details: r }];\n}\n\nexport function createApiParserGraphQL(opts?: { allowPartialData?: boolean }): ShapeParser {\n const allowPartial = opts?.allowPartialData ?? false;\n\n return createShapeParser({\n isSuccess: (raw, status) => {\n if (status < 200 || status >= 400) return false;\n if (!raw || typeof raw !== \"object\") return false;\n const r: any = raw;\n const hasErrors = Array.isArray(r.errors) && r.errors.length > 0;\n if (hasErrors && !allowPartial) return false;\n return \"data\" in r;\n },\n getData: (raw) => (raw && typeof raw === \"object\") ? (raw as any).data : raw,\n getErrors: (raw, status) => {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"GraphQL request failed\" }];\n const r: any = raw;\n const errs = Array.isArray(r.errors) ? r.errors : [];\n if (!errs.length) return status >= 400 ? [{ message: `HTTP ${status}` }] : [{ message: \"GraphQL request failed\" }];\n return errs.map((e: any) => ({\n message: typeof e?.message === \"string\" ? e.message : \"GraphQL error\",\n code: e?.extensions?.code ? String(e.extensions.code) : undefined,\n details: e,\n }));\n },\n });\n}\n","import type { HttpClientOptions } from \"../client/types.js\";\nimport { createHttpClient } from \"../client/httpClient.js\";\nimport type { ShapeParser } from \"../parsing/shapeParser.js\";\nimport { createApiParserRestClassic } from \"../parsing/presets.js\";\nimport type { AuthConfig } from \"../auth/authConfig.js\";\nimport { bearerAuth, cookieAuth, noAuth, basicAuth, apiKeyAuth } from \"../auth/authConfig.js\";\nimport type { Guard } from \"../guards/types.js\";\nimport { cookieSafeRefreshGuard, type CookieSafeRefreshGuardOptions } from \"../guards/cookieSafeRefreshGuard.js\";\nimport { unauthorizedGuard, type UnauthorizedGuardOptions } from \"../guards/unauthorizedGuard.js\";\nimport { memoryCache, type MemoryCacheOptions } from \"../cache/memoryCache.js\";\nimport type { Notifier } from \"../notify/types.js\";\nimport { consoleNotifier } from \"../notify/defaults.js\";\n\n/**\n * Option B: preset builder\n * - defaults to a \"classic REST envelope\" parser\n * - defaults to noAuth()\n * - provides convenience methods for common auth modes & cookie refresh\n *\n * If you need full control, call createHttpClient directly.\n */\nexport type PresetBuilder = ReturnType<typeof createPresetBuilder>;\n\nexport function createPresetBuilder(init?: {\n baseUrl?: string;\n parser?: ShapeParser;\n auth?: AuthConfig;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n}) {\n const state: HttpClientOptions = {\n baseUrl: init?.baseUrl ?? \"\",\n parser: init?.parser ?? createApiParserRestClassic(),\n auth: init?.auth ?? noAuth(),\n ...(init?.fetch ? { fetch: init.fetch } : {}),\n ...(init?.notifier ? { notifier: init.notifier } : { notifier: consoleNotifier }),\n guards: [],\n };\n\n function ensureBaseUrl() {\n if (!state.baseUrl) throw new Error(\"presetBuilder: baseUrl is required\");\n }\n\n const api = {\n /** Set / override baseUrl */\n baseUrl(baseUrl: string) {\n state.baseUrl = baseUrl;\n return api;\n },\n\n /** Set / override parser */\n parser(parser: ShapeParser) {\n state.parser = parser;\n return api;\n },\n\n /** Set / override fetch */\n fetch(fetchImpl: typeof globalThis.fetch) {\n state.fetch = fetchImpl;\n return api;\n },\n\n /** Set / override notifier */\n notifier(notifier: Notifier) {\n state.notifier = notifier;\n return api;\n },\n\n /** Add guard(s) (preserves order) */\n guards(...guards: Guard[]) {\n state.guards = [...(state.guards ?? []), ...guards];\n return api;\n },\n\n /** Enable in-memory cache */\n memoryCache(opts?: MemoryCacheOptions) {\n state.cache = memoryCache(opts);\n return api;\n },\n\n /** Low-level cache assignment */\n cache(cache: HttpClientOptions[\"cache\"]) {\n // With `exactOptionalPropertyTypes: true`, assigning `undefined` to an\n // optional prop is not allowed. We omit the property instead.\n if (cache === undefined) {\n delete (state as any).cache;\n } else {\n state.cache = cache;\n }\n return api;\n },\n\n /** Default headers / timeouts / notify policy */\n defaults(defaults: HttpClientOptions[\"defaults\"]) {\n state.defaults = { ...(state.defaults ?? {}), ...(defaults ?? {}) };\n return api;\n },\n\n /** Redirect policy */\n redirects(redirects: HttpClientOptions[\"redirects\"]) {\n if (redirects === undefined) {\n delete (state as any).redirects;\n } else {\n state.redirects = redirects;\n }\n return api;\n },\n\n /** Auth presets */\n auth(auth: AuthConfig) {\n state.auth = auth;\n return api;\n },\n bearer(getToken: Parameters<typeof bearerAuth>[0], opts?: Parameters<typeof bearerAuth>[1]) {\n state.auth = bearerAuth(getToken, opts);\n return api;\n },\n cookie(opts?: Parameters<typeof cookieAuth>[0]) {\n state.auth = cookieAuth(opts);\n return api;\n },\n basic(getCred: Parameters<typeof basicAuth>[0], opts?: Parameters<typeof basicAuth>[1]) {\n state.auth = basicAuth(getCred, opts);\n return api;\n },\n apiKey(getKey: Parameters<typeof apiKeyAuth>[0], opts?: Parameters<typeof apiKeyAuth>[1]) {\n state.auth = apiKeyAuth(getKey, opts);\n return api;\n },\n none() {\n state.auth = noAuth();\n return api;\n },\n\n /**\n * Cookie refresh guard preset (only meaningful for cookie auth).\n * You can still add it manually via `.guards(...)`.\n */\n cookieRefresh(opts: CookieSafeRefreshGuardOptions) {\n state.guards = [...(state.guards ?? []), cookieSafeRefreshGuard(opts)];\n return api;\n },\n\n /** Unauthorized handler preset (redirect/logout). */\n unauthorized(opts: UnauthorizedGuardOptions) {\n state.guards = [...(state.guards ?? []), unauthorizedGuard(opts)];\n return api;\n },\n\n /** Returns the final HttpClientOptions */\n options(): HttpClientOptions {\n ensureBaseUrl();\n return { ...state, guards: [...(state.guards ?? [])] };\n },\n\n /** Creates the http client */\n create() {\n ensureBaseUrl();\n return createHttpClient(api.options());\n },\n };\n\n return api;\n}\n\n/**\n * Option A (aliases): minimal-instantiation helpers.\n * They are thin wrappers around the preset builder.\n */\nexport function createSimpleClient(opts: {\n baseUrl: string;\n /** Defaults to classic REST envelope parser */\n parser?: ShapeParser;\n /** Defaults to noAuth */\n auth?: AuthConfig;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n}) {\n return createPresetBuilder(opts).create();\n}\n\nexport function createBearerClient(opts: {\n baseUrl: string;\n getToken: () => string | null | Promise<string | null>;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n headerName?: string;\n prefix?: string;\n}) {\n const bearerOpts = {\n ...(opts.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts.prefix !== undefined ? { prefix: opts.prefix } : {}),\n };\n\n return createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n })\n .bearer(opts.getToken, Object.keys(bearerOpts).length ? bearerOpts : undefined)\n .create();\n}\n\nexport function createCookieClient(opts: {\n baseUrl: string;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n credentials?: RequestCredentials;\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n refresh?: CookieSafeRefreshGuardOptions | null;\n}) {\n const b = createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n }).cookie({\n ...(opts.credentials !== undefined ? { credentials: opts.credentials } : {}),\n ...(opts.csrf !== undefined ? { csrf: opts.csrf } : {}),\n });\n\n if (opts.refresh) b.cookieRefresh(opts.refresh);\n return b.create();\n}\n\nexport function createBasicClient(opts: {\n baseUrl: string;\n getCredentials: () =>\n | { username: string; password: string }\n | string\n | null\n | Promise<{ username: string; password: string } | string | null>;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n headerName?: string;\n prefix?: string;\n}) {\n const basicOpts = {\n ...(opts.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts.prefix !== undefined ? { prefix: opts.prefix } : {}),\n };\n\n return createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n })\n .basic(opts.getCredentials, Object.keys(basicOpts).length ? basicOpts : undefined)\n .create();\n}\n\nexport function createApiKeyClient(opts: {\n baseUrl: string;\n getKey: () => string | null | Promise<string | null>;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n headerName?: string;\n prefix?: string;\n}) {\n const apiKeyOpts = {\n ...(opts.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts.prefix !== undefined ? { prefix: opts.prefix } : {}),\n };\n\n return createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n })\n .apiKey(opts.getKey, Object.keys(apiKeyOpts).length ? apiKeyOpts : undefined)\n .create();\n}\n","import type { HttpClientOptions } from \"./client/types.js\";\nimport { createHttpClient } from \"./client/httpClient.js\";\nimport type { ShapeParser } from \"./parsing/shapeParser.js\";\nimport { createApiParserRestClassic } from \"./parsing/presets.js\";\nimport type { AuthConfig } from \"./auth/authConfig.js\";\nimport { noAuth } from \"./auth/authConfig.js\";\nimport type { Notifier } from \"./notify/types.js\";\nimport { consoleNotifier } from \"./notify/defaults.js\";\n\n/**\n * Alias A: minimal, safe defaults.\n *\n * Goal: `createHttpClient` stays максимально configurable,\n * while `createClient` offers a “works out of the box” path.\n */\nexport type CreateClientOptions = {\n baseUrl: string;\n /** Default: createApiParserRestClassic() */\n parser?: ShapeParser;\n /** Default: noAuth() */\n auth?: AuthConfig;\n fetch?: HttpClientOptions[\"fetch\"];\n notifier?: Notifier;\n defaults?: HttpClientOptions[\"defaults\"];\n cache?: HttpClientOptions[\"cache\"];\n redirects?: HttpClientOptions[\"redirects\"];\n guards?: HttpClientOptions[\"guards\"];\n};\n\nexport function createClient(opts: CreateClientOptions) {\n const parser = opts.parser ?? createApiParserRestClassic();\n const auth = opts.auth ?? noAuth();\n const notifier = opts.notifier ?? consoleNotifier;\n\n // exactOptionalPropertyTypes=true => never pass explicit undefined.\n const cfg: HttpClientOptions = {\n baseUrl: opts.baseUrl,\n parser,\n auth,\n notifier,\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.defaults ? { defaults: opts.defaults } : {}),\n ...(opts.cache ? { cache: opts.cache } : {}),\n ...(opts.redirects ? { redirects: opts.redirects } : {}),\n ...(opts.guards ? { guards: opts.guards } : {}),\n };\n\n return createHttpClient(cfg);\n}\n"]}
1
+ {"version":3,"sources":["../src/internal/compose.ts","../src/internal/url.ts","../src/internal/authGuard.ts","../src/internal/headersPolyfill.ts","../src/internal/stableStringify.ts","../src/cache/key.ts","../src/cache/inFlight.ts","../src/notify/defaults.ts","../src/client/errors.ts","../src/client/httpClient.ts","../src/auth/authConfig.ts","../src/guards/retryGuard.ts","../src/guards/cookieSafeRefreshGuard.ts","../src/guards/bearerRefreshGuard.ts","../src/guards/csrfGuard.ts","../src/guards/correlationIdGuard.ts","../src/guards/idempotencyGuard.ts","../src/guards/unauthorizedGuard.ts","../src/guards/instrumentGuard.ts","../src/cache/memoryCache.ts","../src/parsing/shapeParser.ts","../src/parsing/schemaAdapter.ts","../src/parsing/presets.ts","../src/parsing/apiParserStructured.ts","../src/presets/presetBuilder.ts","../src/aliases.ts"],"names":["errors","msg","REFRESH_FLAG","RETRY_FLAG","isReplayableBody","res","DEFAULT_METHODS","defaultGenerator","normalizePath","noAuth"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Guard } from \"../guards/types.js\";\nimport type { RequestContext } from \"./context.js\";\n\n/**\n * Koa-like middleware composition with correct TypeScript typing.\n */\nexport function composeGuards(\n guards: Guard[],\n terminal: (ctx: RequestContext) => Promise<Response>\n): (ctx: RequestContext) => Promise<Response> {\n if (!guards.length) return terminal;\n return (ctx: RequestContext) => dispatch(0, ctx);\n\n function dispatch(i: number, c: RequestContext): Promise<Response> {\n const guard = guards[i];\n if (!guard) return terminal(c);\n\n return Promise.resolve(\n guard(c, (nextCtx) => dispatch(i + 1, (nextCtx ?? c) as RequestContext))\n );\n }\n}\n","export function joinUrl(baseUrl: string, path: string): string {\n if (!baseUrl) return path;\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) return path;\n const b = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const p = path.startsWith(\"/\") ? path : `/${path}`;\n return `${b}${p}`;\n}\n\nexport function withQuery(url: string, query?: Record<string, string | number | boolean | null | undefined>): string {\n if (!query) return url;\n const u = new URL(url);\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n u.searchParams.set(k, String(v));\n }\n return u.toString();\n}\n","import type { Guard } from \"../guards/types.js\";\nimport type { AuthConfig } from \"../auth/authConfig.js\";\n\nfunction sanitizeHeaderValue(v: string): string | null {\n // Prevent header injection via CRLF\n if (/[\\r\\n]/.test(v)) return null;\n return v;\n}\n\nfunction base64Encode(input: string): string {\n // Browser\n if (typeof (globalThis as any).btoa === \"function\") return (globalThis as any).btoa(input);\n\n // Node\n const B: any = (globalThis as any).Buffer;\n if (typeof B?.from === \"function\") return B.from(input, \"utf8\").toString(\"base64\");\n\n // Fallback (very rare)\n throw new Error(\"No base64 encoder available in this runtime\");\n}\n\nfunction isUnsafeMethod(m: string): boolean {\n const u = m.toUpperCase();\n return u !== \"GET\" && u !== \"HEAD\" && u !== \"OPTIONS\";\n}\n\nfunction sameOrigin(url: string, baseOrigin: string): boolean {\n if (!baseOrigin) return true; // can't determine => don't block\n try {\n return new URL(url).origin === baseOrigin;\n } catch {\n // relative URLs are treated as same-origin to base\n return true;\n }\n}\n\nfunction isAllowedOrigin(\n url: string,\n baseOrigin: string,\n allowed?: string[] | ((url: string) => boolean)\n): boolean {\n // Default: lock headers to same-origin of baseUrl.\n if (!allowed) return sameOrigin(url, baseOrigin);\n if (typeof allowed === \"function\") return !!allowed(url);\n try {\n const origin = new URL(url).origin;\n return allowed.includes(origin);\n } catch {\n return true;\n }\n}\n\nexport function authGuard(auth: AuthConfig): Guard {\n return async (ctx, next) => {\n // per-request override\n if (ctx.noAuth) return next(ctx);\n if (auth.mode === \"none\") return next(ctx);\n\n if (auth.mode === \"bearer\") {\n const token = await auth.getToken();\n if (token) {\n if (!isAllowedOrigin(ctx.url, ctx.baseOrigin, auth.allowedOrigins)) {\n return next(ctx);\n }\n const headerName = auth.headerName ?? \"Authorization\";\n const prefix = auth.prefix ?? \"Bearer\";\n const safe = sanitizeHeaderValue(`${prefix} ${token}`);\n if (safe) ctx.headers.set(headerName, safe);\n }\n return next(ctx);\n }\n\n if (auth.mode === \"basic\") {\n const cred = await auth.getCredentials();\n if (cred) {\n if (!isAllowedOrigin(ctx.url, ctx.baseOrigin, auth.allowedOrigins)) {\n return next(ctx);\n }\n const headerName = auth.headerName ?? \"Authorization\";\n const prefix = auth.prefix ?? \"Basic\";\n const raw = typeof cred === \"string\" ? cred : `${cred.username}:${cred.password}`;\n const safe = sanitizeHeaderValue(`${prefix} ${base64Encode(raw)}`);\n if (safe) ctx.headers.set(headerName, safe);\n }\n return next(ctx);\n }\n\n if (auth.mode === \"apiKey\") {\n const key = await auth.getKey();\n if (key) {\n if (!isAllowedOrigin(ctx.url, ctx.baseOrigin, auth.allowedOrigins)) {\n return next(ctx);\n }\n const headerName = auth.headerName ?? \"X-API-Key\";\n const prefix = auth.prefix ?? \"\";\n const value = prefix ? `${prefix} ${key}` : key;\n const safe = sanitizeHeaderValue(value);\n if (safe) ctx.headers.set(headerName, safe);\n }\n return next(ctx);\n }\n\n // cookie mode\n ctx.credentials = auth.credentials ?? \"include\";\n\n // CSRF header usually only needed for unsafe methods, otherwise it can trigger preflights.\n if (auth.csrf && isUnsafeMethod(ctx.method)) {\n const csrf = await auth.csrf.getToken();\n if (csrf) ctx.headers.set(auth.csrf.headerName, csrf);\n }\n\n return next(ctx);\n };\n}\n","/**\n * Minimal Headers polyfill (enough for http-guardian guards + client internals).\n *\n * Why: Node < 18 doesn't expose global Headers/Request/Response by default.\n * We only need a mutable header bag during guard pipeline; when calling fetch we\n * convert to a plain object so any fetch implementation (browser, edge, node)\n * can consume it.\n */\n\nexport type HeadersInitLike =\n | Headers\n | Record<string, string>\n | Array<[string, string]>\n | Iterable<[string, string]>;\n\nfunction norm(name: string): string {\n return String(name).toLowerCase();\n}\n\nexport class HeadersPolyfill {\n private map = new Map<string, { name: string; value: string }>();\n\n constructor(init?: HeadersInitLike) {\n if (!init) return;\n\n // Native Headers-like\n if (typeof (init as any).forEach === \"function\" && typeof (init as any).get === \"function\") {\n (init as any).forEach((v: string, k: string) => this.set(k, v));\n return;\n }\n\n // Array / iterable\n if (Symbol.iterator in Object(init)) {\n for (const [k, v] of init as any) this.append(k, v);\n return;\n }\n\n // Record\n for (const [k, v] of Object.entries(init as Record<string, string>)) {\n this.set(k, String(v));\n }\n }\n\n get(name: string): string | null {\n const hit = this.map.get(norm(name));\n return hit ? hit.value : null;\n }\n\n has(name: string): boolean {\n return this.map.has(norm(name));\n }\n\n set(name: string, value: string): void {\n this.map.set(norm(name), { name, value: String(value) });\n }\n\n append(name: string, value: string): void {\n const key = norm(name);\n const prev = this.map.get(key);\n if (!prev) {\n this.map.set(key, { name, value: String(value) });\n return;\n }\n this.map.set(key, { name: prev.name, value: `${prev.value}, ${String(value)}` });\n }\n\n delete(name: string): void {\n this.map.delete(norm(name));\n }\n\n forEach(cb: (value: string, key: string) => void): void {\n for (const { name, value } of this.map.values()) cb(value, name);\n }\n\n entries(): IterableIterator<[string, string]> {\n const it = this.map.values();\n return {\n [Symbol.iterator]() {\n return this;\n },\n next(): IteratorResult<[string, string]> {\n const n = it.next();\n if (n.done) return { done: true, value: undefined as any };\n return { done: false, value: [n.value.name, n.value.value] };\n },\n } as any;\n }\n\n /** Convert to HeadersInit that any fetch can consume. */\n toObject(): Record<string, string> {\n const out: Record<string, string> = {};\n for (const { name, value } of this.map.values()) out[name] = value;\n return out;\n }\n}\n\nexport function createHeaders(init?: HeadersInitLike): Headers | HeadersPolyfill {\n if (typeof (globalThis as any).Headers === \"function\") {\n return new (globalThis as any).Headers(init as any);\n }\n return new HeadersPolyfill(init);\n}\n\nexport function toFetchHeaders(headers: Headers | HeadersPolyfill): HeadersInit {\n if (typeof (globalThis as any).Headers === \"function\" && headers instanceof (globalThis as any).Headers) {\n return headers as any;\n }\n return (headers as HeadersPolyfill).toObject();\n}\n","export function stableStringify(value: unknown): string {\n return JSON.stringify(sortValue(value));\n}\n\nfunction sortValue(v: any): any {\n if (v === null || typeof v !== \"object\") return v;\n if (Array.isArray(v)) return v.map(sortValue);\n\n const proto = Object.getPrototypeOf(v);\n if (proto !== Object.prototype && proto !== null) return v;\n\n const out: Record<string, any> = {};\n for (const key of Object.keys(v).sort()) out[key] = sortValue(v[key]);\n return out;\n}\n","import { stableStringify } from \"../internal/stableStringify.js\";\nimport type { HeadersPolyfill } from \"../internal/headersPolyfill.js\";\n\nexport function makeCacheKey(parts: {\n method: string;\n url: string;\n // Multi-platform: headers may be a real Fetch Headers or our lightweight polyfill.\n // We only rely on `.get()` here.\n headers?: Headers | HeadersPolyfill;\n body?: unknown;\n idempotencyKey?: string;\n keyOverride?: string;\n}): string {\n if (parts.keyOverride) return parts.keyOverride;\n\n const headerObj: Record<string, string> = {};\n if (parts.headers) {\n const accept = parts.headers.get(\"accept\");\n const contentType = parts.headers.get(\"content-type\");\n if (accept) headerObj[\"accept\"] = accept;\n if (contentType) headerObj[\"content-type\"] = contentType;\n }\n\n return stableStringify({\n m: parts.method,\n u: parts.url,\n h: headerObj,\n b: parts.body ?? null,\n i: parts.idempotencyKey ?? null,\n });\n}\n","/**\n * In-flight request de-duplication.\n */\nexport class InFlight {\n private readonly map = new Map<string, Promise<unknown>>();\n\n get(key: string) {\n return this.map.get(key);\n }\n\n set(key: string, p: Promise<unknown>) {\n this.map.set(key, p);\n p.finally(() => {\n if (this.map.get(key) === p) this.map.delete(key);\n }).catch(() => {});\n }\n\n clear() {\n this.map.clear();\n }\n}\n","import type { Notifier, NotifyEvent } from \"./types.js\";\n\nexport const consoleNotifier: Notifier = {\n notify: (e: NotifyEvent) => {\n console[e.level === \"error\" ? \"error\" : \"warn\"](`[${e.type}] ${e.title}: ${e.message}`, e);\n },\n};\n\nexport const alertNotifier: Notifier = {\n notify: (e: NotifyEvent) => {\n if (typeof window !== \"undefined\" && typeof window.alert === \"function\") window.alert(`${e.title}\\n\\n${e.message}`);\n },\n};\n\n/**\n * Returns an HTML string you can inject in your own UI layer (Tailwind classes).\n * Note: this package does not manipulate the DOM by itself.\n */\nexport function tailwindAlertRenderer(event: NotifyEvent): string {\n const base = \"rounded-lg border p-4 shadow-sm\";\n const color =\n event.level === \"warning\"\n ? \"border-amber-200 bg-amber-50 text-amber-900\"\n : \"border-red-200 bg-red-50 text-red-900\";\n\n const title = escapeHtml(event.title);\n const msg = escapeHtml(event.message);\n\n return `<div class=\"${base} ${color}\"><div class=\"font-semibold\">${title}</div><div class=\"mt-1 text-sm\">${msg}</div></div>`;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"']/g, (c) => ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[c]!));\n}\n","export type AppError = {\n message: string;\n code?: string;\n field?: string;\n details?: unknown;\n};\n\nexport class NetworkError extends Error {\n name = \"NetworkError\";\n constructor(message: string, public readonly cause?: unknown) {\n super(message);\n }\n}\n\nexport class TimeoutError extends Error {\n name = \"TimeoutError\";\n constructor(message = \"Request timed out\") {\n super(message);\n }\n}\n\nexport class RedirectError extends Error {\n name = \"RedirectError\";\n constructor(message: string, public readonly fromUrl: string, public readonly toUrl?: string) {\n super(message);\n }\n}\n\nexport class ParseError extends Error {\n name = \"ParseError\";\n constructor(message: string, public readonly raw?: unknown, public readonly cause?: unknown) {\n super(message);\n }\n}\n\n\nexport const ILLEGAL_INVOCATION_HINT = `Detected a browser fetch invocation error (\"Illegal invocation\"). This usually happens when passing a detached reference to window.fetch. Fix by configuring the client with fetch: (input, init) => window.fetch(input, init) or fetch: window.fetch.bind(window).`;\n","import type { HttpClientOptions, RequestOptions, ClientResult, HttpMethod } from \"./types.js\";\nimport { composeGuards } from \"../internal/compose.js\";\nimport { joinUrl, withQuery } from \"../internal/url.js\";\nimport type { RequestContext } from \"../internal/context.js\";\nimport { authGuard } from \"../internal/authGuard.js\";\nimport { createHeaders, toFetchHeaders } from \"../internal/headersPolyfill.js\";\nimport type { HeadersPolyfill } from \"../internal/headersPolyfill.js\";\nimport { makeCacheKey } from \"../cache/key.js\";\nimport { InFlight } from \"../cache/inFlight.js\";\nimport { consoleNotifier } from \"../notify/defaults.js\";\nimport {\n NetworkError,\n TimeoutError,\n RedirectError,\n ParseError,\n type AppError,\n ILLEGAL_INVOCATION_HINT\n} from \"./errors.js\";\n\nfunction isIllegalInvocation(err: unknown): boolean {\n const msg = String((err as any)?.message ?? err);\n return /Illegal invocation/i.test(msg);\n}\n\nfunction normalizeFetch(f: typeof globalThis.fetch): typeof globalThis.fetch {\n const bound = (f as any).bind ? (f as any).bind(globalThis) : f;\n return ((input: any, init?: any) => bound(input, init)) as typeof globalThis.fetch;\n}\n\n// -----------------------------------------------------------------------------\n// Default fetch (multi-platform)\n// -----------------------------------------------------------------------------\n// Browser/Edge/Node>=18: globalThis.fetch exists.\n// If your environment doesn't provide fetch, pass one via `createHttpClient({ fetch })`.\nfunction getDefaultFetch(): typeof globalThis.fetch {\n if (typeof globalThis.fetch === \"function\") return globalThis.fetch;\n throw new Error(\n \"No global fetch detected. Provide a fetch implementation via createHttpClient({ fetch }) or run in an environment that supports fetch (Node >= 18 / modern browsers).\"\n );\n}\n\nconst REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\nexport function createHttpClient(options: HttpClientOptions) {\n // --- Plugin layer (config-time only) ---\n // Plugins mutate a draft options object before the client is instantiated.\n const draft: HttpClientOptions = { ...options };\n if (draft.plugins?.length) {\n const seen = new Set<string>();\n for (const p of draft.plugins) {\n if (!p || !p.name || typeof p.apply !== \"function\") continue;\n if (seen.has(p.name)) continue;\n seen.add(p.name);\n p.apply(draft);\n }\n }\n\n // Important: some tests (and real apps) monkey-patch `globalThis.fetch` after\n // the client is created. When no custom fetch is provided, we therefore\n // resolve/bind the current global fetch lazily.\n const resolvedFetch: typeof globalThis.fetch = (() => {\n if (draft.fetch) return normalizeFetch(draft.fetch);\n\n // Cache a bound wrapper for the *current* global fetch reference.\n let lastRef: typeof globalThis.fetch | null = null;\n let lastBound: typeof globalThis.fetch | null = null;\n\n return ((input: any, init?: any) => {\n const cur = getDefaultFetch();\n if (cur !== lastRef || !lastBound) {\n lastRef = cur;\n lastBound = normalizeFetch(cur);\n }\n return (lastBound as any)(input, init);\n }) as typeof globalThis.fetch;\n })();\n const cache = draft.cache;\n const inFlight = new InFlight();\n\n const defaultNotifier = draft.notifier ?? consoleNotifier;\n const shouldNotify = draft.defaults?.shouldNotify ?? ((r) => !r.ok);\n\n const baseGuards = [authGuard(draft.auth), ...(draft.guards ?? [])];\n\n async function terminal(ctx: RequestContext): Promise<Response> {\n const controller = ctx.timeoutMs ? new AbortController() : undefined;\n const timeout = ctx.timeoutMs ? setTimeout(() => controller?.abort(new TimeoutError()), ctx.timeoutMs) : undefined;\n\n try {\n const init: RequestInit = {\n method: ctx.method,\n headers: toFetchHeaders(ctx.headers as any),\n ...(ctx.body !== undefined ? { body: ctx.body } : {}),\n ...(ctx.signal\n ? { signal: controller ? anySignal([ctx.signal, controller.signal]) : ctx.signal }\n : (controller ? { signal: controller.signal } : {})),\n ...(ctx.credentials !== undefined ? { credentials: ctx.credentials } : {}),\n ...(ctx.redirect !== undefined ? { redirect: ctx.redirect } : {}),\n };\n\n try {\n return await ctx._fetch(ctx.url, init);\n } catch (err) {\n // Browser-only gotcha: calling a detached reference to `window.fetch`\n // can throw \"Illegal invocation\". If that happens, fallback to global fetch.\n if (isIllegalInvocation(err) && typeof globalThis.fetch === \"function\") {\n return await globalThis.fetch(ctx.url, init);\n }\n throw err;\n }\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n }\n\n const pipeline = composeGuards(baseGuards, terminal);\n\n async function request<T>(method: HttpMethod, path: string, ro?: RequestOptions<T>): Promise<ClientResult<T>> {\n const requestUrl = withQuery(joinUrl(draft.baseUrl, path), ro?.query);\n\n // Do not assume global Headers exists (Node < 18).\n const headers = createHeaders();\n if (draft.defaults?.headers) for (const [k, v] of Object.entries(draft.defaults.headers)) (headers as any).set(k, v);\n if (ro?.headers) for (const [k, v] of Object.entries(ro.headers)) if (v !== undefined) (headers as any).set(k, v);\n\n let body: BodyInit | undefined;\n let bodyForKey: unknown = undefined;\n\n if (ro?.json !== undefined) {\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"application/json\");\n body = JSON.stringify(ro.json);\n bodyForKey = ro.json;\n } else if (ro?.body !== undefined) {\n body = ro.body;\n bodyForKey = \"[body]\";\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"application/json\");\n } else {\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"application/json\");\n }\n\n const timeoutMs = ro?.timeoutMs ?? draft.defaults?.timeoutMs;\n const notifier = ro?.notifier ?? defaultNotifier;\n const emit = (event: any) => {\n const redact = (notifier as any).redact as undefined | ((e: any) => any);\n // Notifier is expected to be an object with a .notify(event) method.\n const n = (notifier as any).notify?.bind(notifier) ?? defaultNotifier.notify.bind(defaultNotifier);\n return n(redact ? redact(event) : event);\n };\n\n const cacheOpts = ro?.cache;\n const wantsCache = method === \"GET\" && !!cache && !!cacheOpts;\n const dedupe = cacheOpts?.dedupe ?? true;\n\n const canDedupeWrite = method !== \"GET\" && !!ro?.idempotencyKey;\n const inflightKey =\n (wantsCache || canDedupeWrite) && dedupe\n ? makeCacheKey({\n method,\n url: requestUrl,\n headers,\n ...(method === \"GET\" ? {} : { body: bodyForKey }),\n ...(ro?.idempotencyKey !== undefined ? { idempotencyKey: ro.idempotencyKey } : {}),\n ...(cacheOpts?.key !== undefined ? { keyOverride: cacheOpts.key } : {})\n })\n : undefined;\n\n if (inflightKey) {\n const existing = inFlight.get(inflightKey);\n if (existing) {\n try {\n const stored = await existing;\n return asClientResult<T>(stored, requestUrl, draft, ro, notifier, shouldNotify, emit);\n } catch {\n // ignore and proceed\n }\n }\n }\n\n const promise = (async () => {\n if (wantsCache) {\n const key = inflightKey!;\n const cached = cache!.get(key);\n const policy = cacheOpts?.policy ?? \"cacheFirst\";\n\n if (cached) {\n if (policy === \"networkOnly\") {\n // ignore\n } else if (policy === \"staleWhileRevalidate\") {\n void refreshInBackground(key);\n return { kind: \"cache-hit\", url: requestUrl, status: 200, headers: new Headers(), raw: cached.value };\n } else if (policy === \"cacheOnly\" || policy === \"cacheFirst\") {\n return { kind: \"cache-hit\", url: requestUrl, status: 200, headers: new Headers(), raw: cached.value };\n }\n } else if (policy === \"cacheOnly\") {\n return { kind: \"cache-miss\", url: requestUrl, status: 0, headers: new Headers(), raw: null };\n }\n }\n\n const res = await fetchWithRedirects({\n opts: draft,\n resolvedFetch,\n pipeline,\n method,\n url: requestUrl,\n headers,\n ...(body !== undefined ? { body } : {}),\n ...(ro?.signal ? { signal: ro.signal } : {}),\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(ro?.noAuth ? { noAuth: true } : {}),\n });\n\n const raw = await decodeResponse(res);\n const envelope = { kind: \"network\", url: res.url || requestUrl, status: res.status, headers: res.headers, raw };\n\n if (wantsCache && cacheOpts && res.ok) {\n const key = inflightKey!;\n cache!.set(key, {\n expiresAt: Date.now() + cacheOpts.ttlMs,\n value: raw,\n ...(cacheOpts.tags ? { tags: cacheOpts.tags } : {}),\n });\n }\n\n return envelope;\n\n async function refreshInBackground(key: string) {\n try {\n const res2 = await fetchWithRedirects({\n opts: draft,\n resolvedFetch,\n pipeline,\n method,\n url: requestUrl,\n headers,\n ...(body !== undefined ? { body } : {}),\n ...(ro?.signal ? { signal: ro.signal } : {}),\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(ro?.noAuth ? { noAuth: true } : {}),\n });\n if (!res2.ok) return;\n const raw2 = await decodeResponse(res2);\n cache!.set(key, {\n expiresAt: Date.now() + cacheOpts!.ttlMs,\n value: raw2,\n ...(cacheOpts!.tags ? { tags: cacheOpts!.tags } : {}),\n });\n } catch {\n // ignore\n }\n }\n })();\n\n if (inflightKey) inFlight.set(inflightKey, promise);\n\n try {\n const stored = await promise;\n return asClientResult<T>(stored, requestUrl, draft, ro, notifier, shouldNotify, emit);\n } catch (e) {\n const err = e instanceof TimeoutError\n ? e\n : new NetworkError(\n isIllegalInvocation(e) ? `Network request failed. ${ILLEGAL_INVOCATION_HINT}` : \"Network request failed\",\n e\n );\n if (shouldNotify({ ok: false, status: 0 })) emit({ type: \"network-error\", level: \"error\", title: \"Network error\", message: err.message, url: requestUrl });\n return { ok: false, status: 0, headers: new Headers(), errors: [{ message: err.message, details: e }], raw: null, url: requestUrl };\n }\n }\n\n return {\n get: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"GET\", path, ro),\n post: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"POST\", path, ro),\n put: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"PUT\", path, ro),\n patch: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"PATCH\", path, ro),\n delete: <T>(path: string, ro?: RequestOptions<T>) => request<T>(\"DELETE\", path, ro),\n cache: { invalidateByTag: (tag: string) => cache?.invalidateByTag(tag) ?? 0, clear: () => cache?.clear() },\n };\n}\n\nasync function fetchWithRedirects(args: {\n opts: HttpClientOptions;\n resolvedFetch: typeof globalThis.fetch;\n pipeline: (ctx: RequestContext) => Promise<Response>;\n method: HttpMethod;\n url: string;\n headers: Headers | HeadersPolyfill;\n body?: BodyInit;\n signal?: AbortSignal;\n timeoutMs?: number;\n noAuth?: boolean;\n}): Promise<Response> {\n const policy = args.opts.redirects ?? { mode: \"follow\" as const, maxHops: 5 };\n const maxHops = policy.maxHops ?? 5;\n\n if (policy.mode === \"follow\") return args.pipeline(makeCtx(args, \"follow\"));\n if (policy.mode === \"error\") return args.pipeline(makeCtx(args, \"error\"));\n\n let currentUrl = args.url;\n let method: HttpMethod = args.method;\n let body = args.body;\n\n for (let hop = 0; hop <= maxHops; hop++) {\n const res = await args.pipeline(\n makeCtx({\n ...args,\n url: currentUrl,\n method,\n ...(body !== undefined ? { body } : {}),\n }, \"manual\")\n );\n if (!REDIRECT_STATUSES.has(res.status)) return res;\n\n const loc = res.headers.get(\"location\");\n if (!loc) {\n // Multi-platform robustness:\n // Some runtimes may hide Location when using redirect:'manual'.\n // In that case we cannot follow manually. Best-effort fallback:\n // retry the request in 'follow' mode and return the final response.\n // (This sacrifices strict maxHops enforcement but avoids a false failure.)\n return args.pipeline(\n makeCtx(\n {\n ...args,\n url: currentUrl,\n method,\n ...(body !== undefined ? { body } : {}),\n },\n \"follow\"\n )\n );\n }\n const nextUrl = new URL(loc, currentUrl).toString();\n\n const decision = policy.onRedirect?.({ fromUrl: currentUrl, toUrl: nextUrl, status: res.status, hop, method });\n if (decision?.action === \"deny\") throw new RedirectError(decision.reason ?? \"Redirect denied by policy\", currentUrl, nextUrl);\n const finalUrl = decision?.action === \"modify\" ? decision.url : nextUrl;\n\n // Security: avoid leaking bearer auth to a different origin on redirects (manual mode).\n stripAuthOnCrossOriginRedirect(args.opts, args.url, finalUrl, args.headers);\n\n if (res.status === 303) { method = \"GET\"; body = undefined; }\n else if ((res.status === 301 || res.status === 302) && method !== \"GET\") { method = \"GET\"; body = undefined; }\n\n currentUrl = finalUrl;\n if (hop === maxHops) throw new RedirectError(`Too many redirects (>${maxHops})`, args.url, currentUrl);\n }\n\n return args.pipeline(makeCtx(args, \"manual\"));\n}\n\nfunction stripAuthOnCrossOriginRedirect(opts: HttpClientOptions, initialUrl: string, toUrl: string, headers: Headers | HeadersPolyfill) {\n try {\n const initialOrigin = new URL(initialUrl).origin;\n const toOrigin = new URL(toUrl).origin;\n if (initialOrigin === toOrigin) return;\n\n // Bearer: configurable behaviour (default true)\n if (opts.auth.mode === \"bearer\") {\n const headerName = opts.auth.headerName ?? \"Authorization\";\n headers.delete(headerName);\n return;\n }\n\n // Basic / ApiKey: always strip on cross-origin redirect\n if (opts.auth.mode === \"basic\") {\n const headerName = opts.auth.headerName ?? \"Authorization\";\n headers.delete(headerName);\n return;\n }\n\n if (opts.auth.mode === \"apiKey\") {\n const headerName = opts.auth.headerName ?? \"X-API-Key\";\n headers.delete(headerName);\n return;\n }\n } catch {\n // ignore\n }\n}\n\nfunction makeCtx(\n args: {\n opts: HttpClientOptions;\n resolvedFetch: typeof globalThis.fetch;\n method: HttpMethod;\n url: string;\n headers: Headers | HeadersPolyfill;\n body?: BodyInit;\n signal?: AbortSignal;\n timeoutMs?: number;\n noAuth?: boolean;\n },\n redirect: RequestRedirect\n): RequestContext {\n const baseOrigin = (() => {\n try {\n return new URL(args.opts.baseUrl).origin;\n } catch {\n // baseUrl may be relative in some environments; fallback to empty origin.\n return \"\";\n }\n })();\n return {\n baseUrl: args.opts.baseUrl,\n baseOrigin,\n method: args.method,\n url: args.url,\n headers: args.headers,\n\n ...(args.body !== undefined ? { body: args.body } : {}),\n ...(args.signal ? { signal: args.signal } : {}),\n ...(args.timeoutMs !== undefined ? { timeoutMs: args.timeoutMs } : {}),\n ...(args.noAuth ? { noAuth: true } : {}),\n\n attempt: 0,\n auth: args.opts.auth,\n redirect,\n _fetch: args.resolvedFetch,\n };\n}\n\n\nasync function decodeResponse(res: Response): Promise<unknown> {\n if (res.status === 204) return null;\n const ct = res.headers.get(\"content-type\") ?? \"\";\n if (ct.includes(\"application/json\")) {\n try { return await res.json(); }\n catch (e) { throw new ParseError(\"Failed to parse JSON response\", undefined, e); }\n }\n try { return await res.text(); }\n catch (e) { throw new ParseError(\"Failed to read response body\", undefined, e); }\n}\n\nfunction asClientResult<T>(\n envelope: any,\n requestUrl: string,\n opts: HttpClientOptions,\n ro: RequestOptions<T> | undefined,\n notifier: import(\"../notify/types.js\").Notifier,\n shouldNotify: (r: { ok: boolean; status: number }) => boolean,\n emit: (event: any) => void\n): ClientResult<T> {\n if (envelope?.kind === \"cache-miss\") {\n const errors: AppError[] = [{ message: \"Cache miss\" }];\n if (shouldNotify({ ok: false, status: 0 })) emit({ type: \"http-error\", level: \"warning\", title: \"Cache\", message: \"Cache miss\", status: 0, errors, url: requestUrl });\n return { ok: false, status: 0, headers: new Headers(), errors, raw: envelope.raw, url: requestUrl };\n }\n\n const status = envelope.status ?? 0;\n const raw = envelope.raw;\n const resHeaders: Headers = envelope.headers ?? new Headers();\n const finalUrl = envelope.url ?? requestUrl;\n\n const okByParser = opts.parser.isSuccess(raw, status);\n\n if (okByParser && status >= 200 && status < 400) {\n const dataRaw = opts.parser.getData(raw);\n try {\n const data = ro?.dataSchema ? ro.dataSchema.parse(dataRaw) : (dataRaw as T);\n return { ok: true, status, headers: resHeaders, data, raw, url: finalUrl };\n } catch (e) {\n const msg = e instanceof Error ? e.message : \"Schema parse failed\";\n if (shouldNotify({ ok: false, status })) emit({ type: \"parse-error\", level: \"error\", title: \"Parse error\", message: msg, url: finalUrl });\n return { ok: false, status, headers: resHeaders, errors: [{ message: msg, details: e }], raw, url: finalUrl };\n }\n }\n\n const errors = opts.parser.getErrors(raw, status);\n const msg = errors[0]?.message ?? (status ? `HTTP ${status}` : \"Request failed\");\n if (shouldNotify({ ok: false, status })) emit({ type: \"http-error\", level: status >= 500 ? \"error\" : \"warning\", title: \"Request failed\", message: msg, status, errors, url: finalUrl });\n return { ok: false, status, headers: resHeaders, errors, raw, url: finalUrl };\n}\n\nfunction anySignal(signals: Array<AbortSignal | undefined>): AbortSignal {\n const valid = signals.filter(Boolean) as AbortSignal[];\n\n // Prefer the native implementation when available (Node 20+, some browsers).\n // It is more efficient and does not leak listeners.\n const any = (AbortSignal as any).any as undefined | ((signals: AbortSignal[]) => AbortSignal);\n if (any) {\n try {\n return any(valid);\n } catch {\n // fallthrough to manual polyfill\n }\n }\n\n const controller = new AbortController();\n const onAbort = () => controller.abort();\n for (const s of valid) {\n if (s.aborted) controller.abort();\n s.addEventListener(\"abort\", onAbort, { once: true });\n }\n return controller.signal;\n}\n","export type BearerAuthConfig = {\n mode: \"bearer\";\n getToken: () => string | null | Promise<string | null>;\n headerName?: string;\n prefix?: string;\n\n /**\n * Security hardening: only attach auth headers if request origin is allowed.\n * If omitted: only same-origin as the client's baseUrl is allowed.\n */\n allowedOrigins?: string[] | ((url: string) => boolean);\n};\n\nexport type CookieAuthConfig = {\n mode: \"cookie\";\n /**\n * Sets RequestInit.credentials for every request.\n * Use \"include\" for cross-site cookies.\n */\n credentials?: RequestCredentials;\n /**\n * Optional CSRF support for cookie-based sessions.\n * If provided, a header will be injected on non-GET requests.\n */\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n};\n\nexport type BasicAuthConfig = {\n mode: \"basic\";\n /**\n * Return either { username, password } or a pre-encoded \"user:pass\" string.\n * Return null to skip auth.\n */\n getCredentials: () =>\n | { username: string; password: string }\n | string\n | null\n | Promise<{ username: string; password: string } | string | null>;\n headerName?: string; // default: \"Authorization\"\n prefix?: string; // default: \"Basic\"\n\n /**\n * Security hardening: only attach auth headers if request origin is allowed.\n * If omitted: only same-origin as the client's baseUrl is allowed.\n */\n allowedOrigins?: string[] | ((url: string) => boolean);\n};\n\nexport type ApiKeyAuthConfig = {\n mode: \"apiKey\";\n getKey: () => string | null | Promise<string | null>;\n /**\n * Header to use for API key auth (default: \"X-API-Key\").\n * You can also set to \"Authorization\" and use prefix.\n */\n headerName?: string;\n prefix?: string; // default: \"\" (no prefix)\n\n /**\n * Security hardening: only attach API key header if request origin is allowed.\n * If omitted: only same-origin as the client's baseUrl is allowed.\n */\n allowedOrigins?: string[] | ((url: string) => boolean);\n};\n\nexport type NoneAuthConfig = { mode: \"none\" };\n\nexport type AuthConfig =\n | BearerAuthConfig\n | CookieAuthConfig\n | BasicAuthConfig\n | ApiKeyAuthConfig\n | NoneAuthConfig;\n\nexport function bearerAuth(\n getToken: () => string | null | Promise<string | null>,\n opts?: { headerName?: string; prefix?: string; allowedOrigins?: BearerAuthConfig[\"allowedOrigins\"] }\n): BearerAuthConfig {\n return {\n mode: \"bearer\",\n getToken,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\n ...(opts?.allowedOrigins !== undefined ? { allowedOrigins: opts.allowedOrigins } : {}),\n };\n}\n\nexport function cookieAuth(opts?: {\n credentials?: RequestCredentials;\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n}): CookieAuthConfig {\n return {\n mode: \"cookie\",\n ...(opts?.credentials !== undefined ? { credentials: opts.credentials } : {}),\n ...(opts?.csrf !== undefined ? { csrf: opts.csrf } : {}),\n };\n}\n\nexport function basicAuth(\n getCredentials: BasicAuthConfig[\"getCredentials\"],\n opts?: { headerName?: string; prefix?: string; allowedOrigins?: BasicAuthConfig[\"allowedOrigins\"] }\n): BasicAuthConfig {\n return {\n mode: \"basic\",\n getCredentials,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\n ...(opts?.allowedOrigins !== undefined ? { allowedOrigins: opts.allowedOrigins } : {}),\n };\n}\n\nexport function apiKeyAuth(\n getKey: () => string | null | Promise<string | null>,\n opts?: { headerName?: string; prefix?: string; allowedOrigins?: ApiKeyAuthConfig[\"allowedOrigins\"] }\n): ApiKeyAuthConfig {\n return {\n mode: \"apiKey\",\n getKey,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\n ...(opts?.allowedOrigins !== undefined ? { allowedOrigins: opts.allowedOrigins } : {}),\n };\n}\n\nexport function noAuth(): NoneAuthConfig {\n return { mode: \"none\" };\n}\n","import type { Guard } from \"./types.js\";\n\n/**\n * Simple retry guard for transient HTTP statuses.\n * Note: this doesn't retry network errors thrown by fetch itself (those are handled by the client wrapper).\n */\nexport function retryGuard(opts?: { retries?: number; retryOn?: number[]; baseDelayMs?: number; maxDelayMs?: number }): Guard {\n const retries = opts?.retries ?? 0;\n const retryOn = new Set(opts?.retryOn ?? [502, 503, 504]);\n const baseDelay = opts?.baseDelayMs ?? 150;\n const maxDelay = opts?.maxDelayMs ?? 1500;\n\n return async (ctx, next) => {\n let last: Response | undefined;\n for (let attempt = 0; attempt <= retries; attempt++) {\n ctx.attempt = attempt;\n last = await next(ctx);\n if (!retryOn.has(last.status)) return last;\n if (attempt === retries) return last;\n const delay = Math.min(maxDelay, baseDelay * 2 ** attempt);\n await new Promise((r) => setTimeout(r, delay));\n }\n return last!;\n };\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\nimport { joinUrl } from \"../internal/url.js\";\n\ntype RefreshDecision =\n | { ok: true }\n | { ok: false; reason?: string; status?: number };\n\nexport type CookieSafeRefreshGuardOptions = {\n /**\n * Endpoint refresh (absolu ou relatif)\n * ex: \"/auth/refresh\" ou \"https://api.example.com/auth/refresh\"\n */\n refreshPath: string;\n\n /** Méthode refresh (souvent POST) */\n refreshMethod?: \"POST\" | \"GET\";\n\n /** Statuts qui déclenchent refresh. Default: [401, 419] */\n triggerStatuses?: number[];\n\n /** Nombre max de replays de la requête originale. Default: 1 */\n maxRetry?: number;\n\n /**\n * Exclure certains paths (pathname) de la logique refresh.\n * Ex: [\"/auth/refresh\", \"/health\"]\n */\n excludePaths?: string[];\n\n /**\n * Si refresh renvoie 429 Too Many Requests,\n * on stoppe les refresh jusqu’à une date (cooldown).\n * Default: true\n */\n honorRetryAfter?: boolean;\n\n /** Décider si on refresh selon ctx + status */\n shouldRefresh?: (ctx: RequestContext, status: number) => boolean;\n\n /** Hook: appelé quand refresh échoue (utile pour redirect login) */\n onRefreshFailed?: (info: { status?: number; url: string; reason?: string }) => void;\n\n /** Hook: appelé quand refresh réussit */\n onRefreshSuccess?: (info: { url: string }) => void;\n};\n\nconst REFRESH_FLAG = \"__hg_is_refresh__\";\nconst RETRY_FLAG = \"__hg_refresh_retry__\";\n\nfunction isReplayableBody(body: unknown): boolean {\n // On évite de rejouer les streams (ReadableStream) et trucs one-shot.\n if (body == null) return true;\n if (typeof body === \"string\") return true;\n if (typeof Blob !== \"undefined\" && body instanceof Blob) return true;\n if (typeof FormData !== \"undefined\" && body instanceof FormData) return true;\n if (typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams) return true;\n if (typeof ArrayBuffer !== \"undefined\" && body instanceof ArrayBuffer) return true;\n if (typeof Uint8Array !== \"undefined\" && body instanceof Uint8Array) return true;\n return false;\n}\n\nfunction normalizePath(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n const q = url.indexOf(\"?\");\n const h = url.indexOf(\"#\");\n const cut = Math.min(q === -1 ? url.length : q, h === -1 ? url.length : h);\n return url.slice(0, cut);\n }\n}\n\nfunction parseRetryAfterMs(headers: Headers): number | null {\n const ra = headers.get(\"retry-after\");\n if (!ra) return null;\n\n const seconds = Number(ra);\n if (!Number.isNaN(seconds) && seconds >= 0) return seconds * 1000;\n\n const date = Date.parse(ra);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n\n return null;\n}\n\nfunction isAbsoluteUrl(u: string): boolean {\n try {\n // new URL() accepte seulement les URLs absolues (ou base).\n // Ici on veut détecter le cas absolu.\n void new URL(u);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function cookieSafeRefreshGuard(opts: CookieSafeRefreshGuardOptions): Guard {\n const trigger = new Set(opts.triggerStatuses ?? [401, 419]);\n const maxRetry = opts.maxRetry ?? 1;\n const honorRetryAfter = opts.honorRetryAfter ?? true;\n\n // single-flight refresh\n let refreshPromise: Promise<RefreshDecision> | null = null;\n\n // cooldown si 429\n let refreshCooldownUntil = 0;\n\n return async (ctx, next) => {\n const anyCtx = ctx as any;\n\n // anti-boucle: si c’est déjà une requête refresh\n if (anyCtx[REFRESH_FLAG]) return next(ctx);\n\n // skip explicite\n const path = normalizePath(ctx.url);\n if (opts.excludePaths?.includes(path)) return next(ctx);\n\n // Si noAuth = true, ne pas déclencher refresh\n if (ctx.noAuth) return next(ctx);\n\n // Exclure l’endpoint refresh lui-même\n const refreshPathNorm = normalizePath(resolveRefreshUrl(ctx, opts.refreshPath));\n if (path === refreshPathNorm) return next(ctx);\n\n // cooldown (429)\n if (honorRetryAfter && refreshCooldownUntil > Date.now()) {\n return next(ctx);\n }\n\n const res = await next(ctx);\n if (!trigger.has(res.status)) return res;\n\n if (opts.shouldRefresh && !opts.shouldRefresh(ctx, res.status)) return res;\n\n const alreadyRetried = Number(anyCtx[RETRY_FLAG] ?? 0);\n if (alreadyRetried >= maxRetry) return res;\n\n if (!isReplayableBody((ctx as any).body)) return res;\n\n const decision = await (refreshPromise ??= doRefresh(ctx, next).finally(() => {\n refreshPromise = null;\n }));\n\n if (!decision.ok) {\n // With `exactOptionalPropertyTypes: true`, avoid passing explicit `undefined`.\n opts.onRefreshFailed?.({\n url: ctx.url,\n ...(decision.reason !== undefined ? { reason: decision.reason } : {}),\n ...(decision.status !== undefined ? { status: decision.status } : {}),\n });\n return res;\n }\n\n opts.onRefreshSuccess?.({ url: ctx.url });\n\n const retryCtx: RequestContext = Object.assign({}, ctx, { attempt: ctx.attempt + 1 }) as RequestContext;\n (retryCtx as any)[RETRY_FLAG] = alreadyRetried + 1;\n\n // Guards are composed downstream-only. When we replay from here, we bypass\n // upstream guards (like authGuard), so we must ensure cookie credentials/CSRF\n // are still applied.\n await applyCookieAuth(retryCtx);\n return next(retryCtx);\n };\n\n async function doRefresh(originalCtx: RequestContext, next: (ctx: RequestContext) => Promise<Response>): Promise<RefreshDecision> {\n if (honorRetryAfter && refreshCooldownUntil > Date.now()) {\n return { ok: false, reason: \"Refresh cooldown active\" };\n }\n\n const refreshUrl = resolveRefreshUrl(originalCtx, opts.refreshPath);\n\n const refreshCtx: RequestContext = {\n ...originalCtx,\n url: refreshUrl,\n method: opts.refreshMethod ?? \"POST\",\n // Un refresh n’a en général pas besoin du body original\n ...(Object.prototype.hasOwnProperty.call(originalCtx, \"body\") ? { body: undefined } : {}),\n attempt: 0,\n } as RequestContext;\n\n (refreshCtx as any)[REFRESH_FLAG] = true;\n // On ne veut pas que les guards app-supplied détectent un replay comme une requête originale\n (refreshCtx as any)[RETRY_FLAG] = 0;\n\n // Same rationale as replay: refresh must carry cookie credentials/CSRF even\n // though authGuard is upstream.\n await applyCookieAuth(refreshCtx);\n\n try {\n const res = await next(refreshCtx);\n\n if (res.status === 429 && honorRetryAfter) {\n const ms = parseRetryAfterMs(res.headers);\n refreshCooldownUntil = Date.now() + (ms ?? 30_000);\n return { ok: false, reason: \"Refresh rate-limited (429)\", status: 429 };\n }\n\n if (!res.ok) {\n return { ok: false, reason: `Refresh failed (HTTP ${res.status})`, status: res.status };\n }\n\n return { ok: true };\n } catch (e) {\n return { ok: false, reason: e instanceof Error ? e.message : \"Refresh exception\" };\n }\n }\n\n function resolveRefreshUrl(ctx: RequestContext, refreshPath: string): string {\n // absolu => tel quel\n if (isAbsoluteUrl(refreshPath)) return refreshPath;\n\n // baseUrl is always set by createHttpClient; resolve relative refreshPath against it.\n return joinUrl(ctx.baseUrl, refreshPath);\n }\n\n async function applyCookieAuth(ctx: RequestContext): Promise<void> {\n if (ctx.noAuth) return;\n const auth = ctx.auth;\n if (!auth || auth.mode !== \"cookie\") return;\n\n if (ctx.credentials === undefined) {\n ctx.credentials = auth.credentials ?? \"include\";\n }\n\n if (auth.csrf) {\n const hn = auth.csrf.headerName;\n if (!ctx.headers.has(hn)) {\n const t = await auth.csrf.getToken();\n if (t != null && String(t) !== \"\") ctx.headers.set(hn, String(t));\n }\n }\n }\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\nimport type { BearerAuthConfig } from \"../auth/authConfig.js\";\n\nexport type BearerRefreshTokens = {\n accessToken: string;\n refreshToken?: string;\n};\n\nexport type BearerRefreshGuardOptions = {\n /** Appelé sur 401 pour obtenir un nouveau token. */\n refreshFn: () => Promise<BearerRefreshTokens>;\n\n /** Appelé si le refresh échoue (logout, redirect login, etc.). */\n onAuthFailed?: (error: unknown) => void | Promise<void>;\n\n /**\n * Hook optionnel : appelé avec le résultat de refreshFn() **avant** que les\n * requêtes en queue ne soient rejouées. Permet à l'application de persister\n * le nouveau token (localStorage, signal, etc.) de façon atomique.\n *\n * Si non fourni, le guard se contente de laisser `auth.getToken` retourner\n * la nouvelle valeur (l'application doit donc l'avoir mise à jour ailleurs,\n * typiquement dans `refreshFn` lui-même).\n */\n onTokenRefreshed?: (tokens: BearerRefreshTokens) => void | Promise<void>;\n\n /**\n * Ne pas tenter de refresh si la requête originale matche ce predicate.\n * Ex: ne pas refresh sur `/auth/login`, `/auth/refresh`.\n */\n skipRefreshFor?: (ctx: RequestContext) => boolean;\n\n /** Statuts qui déclenchent un refresh (défaut: [401]). */\n triggerStatuses?: number[];\n\n /** Délai max d'attente d'une requête en queue (défaut: 30_000 ms). */\n queueTimeoutMs?: number;\n};\n\nconst REFRESH_FLAG = \"__hg_bearer_refresh_in_flight__\";\nconst RETRY_FLAG = \"__hg_bearer_refresh_retry__\";\n\nfunction isReplayableBody(body: unknown): boolean {\n if (body == null) return true;\n if (typeof body === \"string\") return true;\n if (typeof Blob !== \"undefined\" && body instanceof Blob) return true;\n if (typeof FormData !== \"undefined\" && body instanceof FormData) return true;\n if (typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams) return true;\n if (typeof ArrayBuffer !== \"undefined\" && body instanceof ArrayBuffer) return true;\n if (typeof Uint8Array !== \"undefined\" && body instanceof Uint8Array) return true;\n return false;\n}\n\n/**\n * Guard de refresh JWT Bearer avec queue / single-flight.\n *\n * Sur 401, un seul `refreshFn()` est invoqué ; toutes les autres requêtes 401\n * reçues pendant ce refresh attendent dans une queue partagée :\n * - si refresh OK → toutes sont rejouées avec le nouveau token (header\n * `Authorization` ré-injecté via `auth.getToken()`).\n * - si refresh KO → toutes sont rejetées et `onAuthFailed(error)` est appelé\n * une seule fois.\n *\n * Anti-boucle : un retry n'engendre jamais un nouveau refresh.\n */\nexport function bearerRefreshGuard(opts: BearerRefreshGuardOptions): Guard {\n const trigger = new Set(opts.triggerStatuses ?? [401]);\n const queueTimeoutMs = opts.queueTimeoutMs ?? 30_000;\n\n // single-flight refresh\n let refreshPromise: Promise<BearerRefreshTokens> | null = null;\n\n return async (ctx, next) => {\n const anyCtx = ctx as Record<string, unknown>;\n\n if (ctx.noAuth) return next(ctx);\n if (ctx.auth.mode !== \"bearer\") return next(ctx);\n\n if (opts.skipRefreshFor?.(ctx)) return next(ctx);\n\n // Anti-boucle : un retry ne re-déclenche pas un refresh.\n if (anyCtx[RETRY_FLAG]) return next(ctx);\n if (anyCtx[REFRESH_FLAG]) return next(ctx);\n\n const res = await next(ctx);\n if (!trigger.has(res.status)) return res;\n\n if (!isReplayableBody(ctx.body)) return res;\n\n // Démarre (ou rejoint) le refresh en cours.\n try {\n await withTimeout(\n (refreshPromise ??= runRefresh(opts).finally(() => {\n refreshPromise = null;\n })),\n queueTimeoutMs,\n );\n } catch {\n // Si refresh échoue OU timeout queue : on retourne le 401 d'origine.\n // `onAuthFailed` est appelé une seule fois (par l'initiateur du refresh).\n return res;\n }\n\n const retryCtx = cloneCtxForReplay(ctx);\n (retryCtx as Record<string, unknown>)[RETRY_FLAG] = true;\n\n // Ré-injecter le nouveau Authorization header avant de rejouer (les guards\n // upstream ne sont plus traversés sur ce next()).\n await applyBearerAuth(retryCtx, ctx.auth as BearerAuthConfig);\n\n return next(retryCtx);\n };\n\n async function runRefresh(o: BearerRefreshGuardOptions): Promise<BearerRefreshTokens> {\n try {\n const tokens = await o.refreshFn();\n if (o.onTokenRefreshed) await o.onTokenRefreshed(tokens);\n return tokens;\n } catch (e) {\n if (o.onAuthFailed) {\n try {\n await o.onAuthFailed(e);\n } catch {\n /* ne jamais throw depuis un guard */\n }\n }\n throw e;\n }\n }\n}\n\nfunction cloneCtxForReplay(ctx: RequestContext): RequestContext {\n // attempt + 1, headers reused (mutated by applyBearerAuth)\n return Object.assign({}, ctx, { attempt: ctx.attempt + 1 }) as RequestContext;\n}\n\nasync function applyBearerAuth(ctx: RequestContext, auth: BearerAuthConfig): Promise<void> {\n const headerName = auth.headerName ?? \"Authorization\";\n const prefix = auth.prefix ?? \"Bearer\";\n const token = await auth.getToken();\n if (token == null || token === \"\") {\n ctx.headers.delete(headerName);\n return;\n }\n ctx.headers.set(headerName, prefix ? `${prefix} ${token}` : String(token));\n}\n\nfunction withTimeout<T>(p: Promise<T>, ms: number): Promise<T> {\n if (!Number.isFinite(ms) || ms <= 0) return p;\n return new Promise<T>((resolve, reject) => {\n const t = setTimeout(() => reject(new Error(`bearerRefreshGuard: queue timeout after ${ms}ms`)), ms);\n p.then(\n (v) => {\n clearTimeout(t);\n resolve(v);\n },\n (e) => {\n clearTimeout(t);\n reject(e);\n },\n );\n });\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\n\nexport type CsrfGuardOptions = {\n /** Lit `document.cookie` (browser only). Ex: 'csrf_token'. */\n tokenFromCookie?: string;\n /** Source custom (storage, signal, observable, etc.). */\n tokenFromStorage?: () => string | null | Promise<string | null>;\n /**\n * Lit le token depuis un header de réponse précédent (mémorisé en interne).\n * Ex: header 'X-CSRF-Token' renvoyé par /auth/login.\n */\n tokenFromHeader?: string;\n\n /** Header HTTP à injecter (défaut: 'X-CSRF-Token'). */\n headerName?: string;\n\n /** Méthodes mutantes (défaut: ['POST', 'PUT', 'PATCH', 'DELETE']). */\n applyTo?: string[];\n};\n\nconst DEFAULT_METHODS = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n\n/**\n * Lit un cookie côté browser. Retourne null hors browser (SSR-safe).\n */\nfunction readCookie(name: string): string | null {\n if (typeof document === \"undefined\") return null;\n const cookieStr = (document as { cookie?: string }).cookie;\n if (typeof cookieStr !== \"string\" || cookieStr.length === 0) return null;\n const target = encodeURIComponent(name);\n const parts = cookieStr.split(\";\");\n for (const part of parts) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const k = part.slice(0, eq).trim();\n if (k === name || k === target) {\n return decodeURIComponent(part.slice(eq + 1).trim());\n }\n }\n return null;\n}\n\n/**\n * Guard d'injection de header CSRF sur méthodes mutantes.\n *\n * SSR-safety : si `tokenFromCookie` est utilisé hors browser, le guard skippe\n * silencieusement (pas de header injecté). Combiner avec `tokenFromStorage`\n * pour fournir un fallback côté serveur.\n */\nexport function csrfGuard(opts: CsrfGuardOptions = {}): Guard {\n const headerName = opts.headerName ?? \"X-CSRF-Token\";\n const methods = new Set((opts.applyTo ?? DEFAULT_METHODS).map((m) => m.toUpperCase()));\n\n // Mémorise le dernier token vu en réponse (si tokenFromHeader configuré).\n let cachedHeaderToken: string | null = null;\n\n return async (ctx, next) => {\n if (!methods.has(ctx.method)) return next(ctx);\n if (ctx.headers.has(headerName)) {\n const res = await next(ctx);\n maybeReadResponseHeader(res);\n return res;\n }\n\n const token = await resolveToken(ctx);\n if (token != null && token !== \"\") {\n ctx.headers.set(headerName, token);\n }\n\n const res = await next(ctx);\n maybeReadResponseHeader(res);\n return res;\n };\n\n async function resolveToken(_ctx: RequestContext): Promise<string | null> {\n if (opts.tokenFromCookie) {\n const t = readCookie(opts.tokenFromCookie);\n if (t != null && t !== \"\") return t;\n }\n if (opts.tokenFromHeader && cachedHeaderToken != null) {\n return cachedHeaderToken;\n }\n if (opts.tokenFromStorage) {\n try {\n const t = await opts.tokenFromStorage();\n if (t != null && t !== \"\") return t;\n } catch {\n return null;\n }\n }\n return null;\n }\n\n function maybeReadResponseHeader(res: Response): void {\n if (!opts.tokenFromHeader) return;\n try {\n const v = res.headers?.get?.(opts.tokenFromHeader);\n if (v != null && v !== \"\") cachedHeaderToken = v;\n } catch {\n /* ignore */\n }\n }\n}\n","import type { Guard } from \"./types.js\";\n\nexport type CorrelationIdGuardOptions = {\n /** Header pour l'ID corrélation (défaut: 'X-Correlation-Id'). */\n headerName?: string;\n\n /** Générateur d'ID (défaut: crypto.randomUUID si dispo, sinon fallback). */\n generator?: () => string;\n\n /** Si présent en réponse, copier dans `ctx.meta.correlationId`. */\n readResponseHeader?: boolean;\n};\n\nconst CORRELATION_FLAG = \"__hg_correlation_id__\";\n\nfunction defaultGenerator(): string {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c && typeof c.randomUUID === \"function\") {\n try {\n return c.randomUUID();\n } catch {\n /* ignore */\n }\n }\n // Fallback zero-deps : ts + 64 bits aléatoires (pas un vrai UUID v4 mais\n // suffisamment unique pour de la corrélation logs).\n const ts = Date.now().toString(36);\n const r1 = Math.floor(Math.random() * 0xffffffff).toString(36);\n const r2 = Math.floor(Math.random() * 0xffffffff).toString(36);\n return `${ts}-${r1}${r2}`;\n}\n\n/**\n * Guard qui injecte un header `X-Correlation-Id` (UUID par défaut) sur chaque\n * requête, et lit le header de réponse pour le copier dans `ctx.meta.correlationId`.\n *\n * L'ID est **stable entre retries** : un ID est généré une seule fois par\n * requête originale (mémorisé sur le ctx), pour préserver la traçabilité.\n */\nexport function correlationIdGuard(opts: CorrelationIdGuardOptions = {}): Guard {\n const headerName = opts.headerName ?? \"X-Correlation-Id\";\n const generator = opts.generator ?? defaultGenerator;\n const readResponseHeader = opts.readResponseHeader ?? true;\n\n return async (ctx, next) => {\n const anyCtx = ctx as Record<string, unknown>;\n\n // Stable entre attempts : si déjà attaché au ctx, on réutilise.\n let id = (anyCtx[CORRELATION_FLAG] as string | undefined) ?? undefined;\n if (id == null) {\n const existing = ctx.headers.get(headerName);\n id = existing != null && existing !== \"\" ? existing : generator();\n anyCtx[CORRELATION_FLAG] = id;\n }\n\n if (!ctx.headers.has(headerName)) {\n ctx.headers.set(headerName, id);\n }\n\n // Propage dans meta.correlationId pour les plugins downstream.\n if (!ctx.meta) ctx.meta = {};\n if (!ctx.meta.correlationId) ctx.meta.correlationId = id;\n\n const res = await next(ctx);\n\n if (readResponseHeader) {\n try {\n const v = res.headers?.get?.(headerName);\n if (v != null && v !== \"\") {\n if (!ctx.meta) ctx.meta = {};\n ctx.meta.correlationId = v;\n }\n } catch {\n /* ignore */\n }\n }\n\n return res;\n };\n}\n","import type { Guard } from \"./types.js\";\n\nexport type IdempotencyGuardOptions = {\n /** Header (défaut: 'X-Idempotency-Key'). */\n headerName?: string;\n\n /** Méthodes ciblées (défaut: ['POST', 'PUT', 'PATCH']). */\n applyTo?: string[];\n\n /** Générateur (défaut: crypto.randomUUID si dispo, sinon fallback). */\n generator?: () => string;\n\n /**\n * Si l'utilisateur fournit déjà une key (via `RequestOptions.idempotencyKey`,\n * via `ctx.idempotencyKey`, via `ctx.meta.idempotencyKey` ou directement\n * via header), la respecter (défaut: true).\n */\n respectExisting?: boolean;\n};\n\nconst DEFAULT_METHODS = [\"POST\", \"PUT\", \"PATCH\"];\nconst IDEMPOTENCY_FLAG = \"__hg_idempotency_key__\";\n\nfunction defaultGenerator(): string {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c && typeof c.randomUUID === \"function\") {\n try {\n return c.randomUUID();\n } catch {\n /* ignore */\n }\n }\n const ts = Date.now().toString(36);\n const r1 = Math.floor(Math.random() * 0xffffffff).toString(36);\n const r2 = Math.floor(Math.random() * 0xffffffff).toString(36);\n return `${ts}-${r1}${r2}`;\n}\n\n/**\n * Guard qui injecte un header `X-Idempotency-Key` (UUID par défaut) sur les\n * méthodes mutantes (POST/PUT/PATCH).\n *\n * **Stable entre retries** : la clé est générée une seule fois par requête\n * originale (mémorisée sur le ctx) ; rejouer la même requête utilise donc la\n * même clé — sinon l'idempotence côté serveur est cassée.\n */\nexport function idempotencyGuard(opts: IdempotencyGuardOptions = {}): Guard {\n const headerName = opts.headerName ?? \"X-Idempotency-Key\";\n const methods = new Set((opts.applyTo ?? DEFAULT_METHODS).map((m) => m.toUpperCase()));\n const generator = opts.generator ?? defaultGenerator;\n const respectExisting = opts.respectExisting ?? true;\n\n return async (ctx, next) => {\n if (!methods.has(ctx.method)) return next(ctx);\n\n const anyCtx = ctx as Record<string, unknown>;\n\n // 1. déjà mémorisé sur ce ctx (retry) → réutiliser\n let key = (anyCtx[IDEMPOTENCY_FLAG] as string | undefined) ?? undefined;\n\n // 2. respecter la clé fournie par l'app\n if (key == null && respectExisting) {\n const fromHeader = ctx.headers.get(headerName);\n if (fromHeader != null && fromHeader !== \"\") {\n key = fromHeader;\n } else if (ctx.idempotencyKey != null && ctx.idempotencyKey !== \"\") {\n key = ctx.idempotencyKey;\n } else if (ctx.meta?.idempotencyKey != null && ctx.meta.idempotencyKey !== \"\") {\n key = ctx.meta.idempotencyKey;\n }\n }\n\n // 3. fallback : générer\n if (key == null) key = generator();\n\n anyCtx[IDEMPOTENCY_FLAG] = key;\n if (!ctx.headers.has(headerName)) ctx.headers.set(headerName, key);\n\n if (!ctx.meta) ctx.meta = {};\n if (!ctx.meta.idempotencyKey) ctx.meta.idempotencyKey = key;\n\n return next(ctx);\n };\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\n\nfunction normalizePath(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n const q = url.indexOf(\"?\");\n const h = url.indexOf(\"#\");\n const cut = Math.min(q === -1 ? url.length : q, h === -1 ? url.length : h);\n return url.slice(0, cut);\n }\n}\n\nexport type UnauthorizedGuardOptions = {\n onUnauthorized: (ctx: { url: string; status: number }) => void;\n statuses?: number[];\n ignoreNoAuth?: boolean;\n once?: boolean;\n cooldownMs?: number;\n shouldHandle?: (ctx: RequestContext, status: number) => boolean;\n excludePaths?: string[];\n};\n\n/**\n * Centralizes “unauthorized” handling (redirect/logout) with anti-spam.\n */\nexport function unauthorizedGuard(opts: UnauthorizedGuardOptions): Guard {\n const statuses = opts.statuses ?? [401, 419];\n const ignoreNoAuth = opts.ignoreNoAuth ?? true;\n const once = opts.once ?? true;\n const cooldownMs = opts.cooldownMs ?? 250;\n\n let locked = false;\n let cooldownUntil = 0;\n\n return async (ctx: RequestContext, next) => {\n let res: Response;\n\n try {\n res = await next(ctx);\n } catch (e) {\n // Network/CORS errors: do not redirect/logout (avoids infinite loops).\n throw e;\n }\n\n if (ignoreNoAuth && ctx.noAuth) return res;\n\n const path = normalizePath(ctx.url);\n if (opts.excludePaths?.includes(path)) return res;\n\n if (!statuses.includes(res.status)) return res;\n\n if (opts.shouldHandle && !opts.shouldHandle(ctx, res.status)) return res;\n\n const now = Date.now();\n if (now < cooldownUntil) return res;\n\n if (once) {\n if (locked) return res;\n locked = true;\n }\n\n try {\n opts.onUnauthorized({ url: ctx.url, status: res.status });\n } finally {\n cooldownUntil = Date.now() + cooldownMs;\n if (once) setTimeout(() => (locked = false), cooldownMs);\n }\n\n return res;\n };\n}\n","import type { Guard } from \"./types.js\";\nimport type { RequestContext } from \"../internal/context.js\";\nimport type { HeadersPolyfill } from \"../internal/headersPolyfill.js\";\n\n// Flags utilisés par cookieSafeRefreshGuard (si tu veux les voir dans les logs).\n// Si ta lib les expose pas, tu peux les laisser: on lit juste des props \"best-effort\".\nconst REFRESH_FLAG = \"__hg_is_refresh__\";\nconst RETRY_FLAG = \"__hg_refresh_retry__\";\n\ntype InstrumentOptions = {\n // nom logique du guard (ex: \"cookieSafeRefreshGuard\", \"unauthorizedGuard\", etc.)\n name: string;\n\n // log function (par défaut console.log)\n log?: (line: string, data?: any) => void;\n\n // filtre: log uniquement certaines URLs\n include?: RegExp;\n\n // filtre: ignorer certaines URLs\n exclude?: RegExp;\n\n // log init (method/headers/credentials)\n logInit?: boolean;\n\n // log stack (utile pour comprendre qui déclenche un nouveau /auth/me côté app)\n // ⚠️ bruyant, à utiliser ponctuellement\n stack?: boolean;\n};\n\nfunction safeUrl(u: string): string {\n try {\n const url = new URL(u);\n // masque query si tu veux\n return url.toString();\n } catch {\n return u;\n }\n}\n\nfunction nowMs(): number {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\n\nfunction headersToObject(h?: Headers | HeadersPolyfill): Record<string, string> {\n if (!h) return {};\n const out: Record<string, string> = {};\n try {\n h.forEach((v, k) => {\n const key = String(k).toLowerCase();\n if (\n key === \"authorization\" ||\n key === \"cookie\" ||\n key === \"set-cookie\" ||\n key === \"x-api-key\" ||\n key === \"proxy-authorization\"\n ) {\n out[k] = \"[REDACTED]\";\n } else {\n out[k] = v;\n }\n });\n } catch {\n // ignore\n }\n return out;\n}\n\nlet __hg_req_seq = 0;\n\nexport function instrumentGuard(opts: InstrumentOptions, guard: Guard): Guard {\n const log = opts.log ?? ((line, data) => (data !== undefined ? console.log(line, data) : console.log(line)));\n\n return async (ctx: RequestContext, next: (ctx: RequestContext) => Promise<Response>) => {\n const id = ++__hg_req_seq;\n const t0 = nowMs();\n\n const url = safeUrl(ctx.url);\n const method = (ctx.method ?? \"GET\") as string;\n\n if (opts.include && !opts.include.test(url)) {\n return guard(ctx, next);\n }\n if (opts.exclude && opts.exclude.test(url)) {\n return guard(ctx, next);\n }\n\n const anyCtx = ctx as any;\n const attempt = ctx.attempt ?? 0;\n const isRefresh = Boolean(anyCtx[REFRESH_FLAG]);\n const retryCount = Number(anyCtx[RETRY_FLAG] ?? 0);\n const noAuth = Boolean(ctx.noAuth);\n\n const baseLine = `[HG][#${id}][${opts.name}]`;\n\n log(`${baseLine} ▶ start`, {\n method,\n url,\n attempt,\n retryCount,\n isRefresh,\n noAuth,\n baseUrl: ctx.baseUrl,\n ...(opts.logInit\n ? {\n credentials: (ctx as any).credentials,\n redirect: (ctx as any).redirect,\n headers: headersToObject(ctx.headers),\n }\n : {}),\n ...(opts.stack ? { stack: new Error().stack } : {}),\n });\n\n try {\n const res = await guard(ctx, next);\n const dt = Math.round(nowMs() - t0);\n\n log(`${baseLine} ◀ end (${dt}ms)`, {\n status: res.status,\n ok: res.ok,\n url: (res as any).url || url,\n redirected: (res as any).redirected,\n location: res.headers?.get?.(\"location\") ?? null,\n retryAfter: res.headers?.get?.(\"retry-after\") ?? null,\n });\n\n return res;\n } catch (e) {\n const dt = Math.round(nowMs() - t0);\n log(`${baseLine} ✖ throw (${dt}ms)`, {\n error: e instanceof Error ? { name: e.name, message: e.message, stack: e.stack } : e,\n });\n throw e;\n }\n };\n}\n","import type { CacheEntry, CacheStore } from \"./types.js\";\n\n/**\n * Options for {@link memoryCache}.\n */\nexport type MemoryCacheOptions = {\n /**\n * Maximum number of entries kept in memory (LRU-ish).\n * Default: 1000\n */\n maxEntries?: number;\n};\n\n/**\n * Simple in-memory LRU-ish cache with tag invalidation.\n */\nexport function memoryCache(opts?: MemoryCacheOptions): CacheStore {\n const max = opts?.maxEntries ?? 1000;\n const map = new Map<string, CacheEntry>();\n const tagIndex = new Map<string, Set<string>>();\n\n function touch(key: string) {\n const v = map.get(key);\n if (!v) return;\n map.delete(key);\n map.set(key, v);\n }\n\n function deindexTags(key: string, entry?: CacheEntry) {\n const tags = entry?.tags;\n if (!tags?.length) return;\n for (const t of tags) {\n const set = tagIndex.get(t);\n if (!set) continue;\n set.delete(key);\n if (set.size === 0) tagIndex.delete(t);\n }\n }\n\n function indexTags(key: string, tags?: string[]) {\n if (!tags?.length) return;\n for (const t of tags) {\n let set = tagIndex.get(t);\n if (!set) {\n set = new Set();\n tagIndex.set(t, set);\n }\n set.add(key);\n }\n }\n\n function del(key: string) {\n const prev = map.get(key);\n if (prev) deindexTags(key, prev);\n map.delete(key);\n }\n\n function ensureLimit() {\n while (map.size > max) {\n const firstKey = map.keys().next().value as string | undefined;\n if (!firstKey) break;\n del(firstKey);\n }\n }\n\n return {\n get(key) {\n const entry = map.get(key);\n if (!entry) return undefined;\n if (Date.now() > entry.expiresAt) {\n del(key);\n return undefined;\n }\n touch(key);\n return entry;\n },\n set(key, entry) {\n const prev = map.get(key);\n if (prev) deindexTags(key, prev);\n map.set(key, entry);\n indexTags(key, entry.tags);\n ensureLimit();\n },\n delete: del,\n invalidateByTag(tag) {\n const set = tagIndex.get(tag);\n if (!set) return 0;\n const keys = Array.from(set);\n let n = 0;\n for (const k of keys) {\n if (map.has(k)) {\n del(k);\n n++;\n }\n }\n return n;\n },\n clear() {\n map.clear();\n tagIndex.clear();\n },\n };\n}\n","import type { AppError } from \"../client/errors.js\";\n\nexport type ShapeParser = {\n isSuccess: (raw: unknown, status: number) => boolean;\n getData: (raw: unknown) => unknown;\n getErrors: (raw: unknown, status: number) => AppError[];\n};\n\nexport function createShapeParser(p: ShapeParser): ShapeParser {\n return p;\n}\n","export type Schema<T> = { parse: (input: unknown) => T };\n\nexport function schema<T>(impl: Schema<T>): Schema<T> {\n return impl;\n}\n\n/**\n * Optional helper to wrap a zod-like schema without adding a dependency.\n */\nexport function fromZod<T>(zodSchema: {\n parse?: (i: unknown) => T;\n safeParse?: (i: unknown) => { success: true; data: T } | { success: false; error: unknown };\n}): Schema<T> {\n if (typeof zodSchema.parse === \"function\") return { parse: (i) => zodSchema.parse!(i) };\n if (typeof zodSchema.safeParse === \"function\") {\n return {\n parse: (i) => {\n const r = zodSchema.safeParse!(i) as any;\n if (r && r.success) return r.data;\n throw new Error(\"Schema validation failed\");\n },\n };\n }\n throw new Error(\"Unsupported zod-like schema: expected parse or safeParse\");\n}\n","import type { AppError } from \"../client/errors.js\";\nimport { createShapeParser, type ShapeParser } from \"./shapeParser.js\";\n\nexport function createApiParserRestClassic(opts?: {\n successField?: string;\n dataField?: string;\n errorField?: string;\n messageField?: string;\n}): ShapeParser {\n const successField = opts?.successField ?? \"success\";\n const dataField = opts?.dataField ?? \"data\";\n const errorField = opts?.errorField ?? \"error\";\n const messageField = opts?.messageField ?? \"message\";\n\n return createShapeParser({\n isSuccess: (raw, status) => {\n if (raw && typeof raw === \"object\" && successField in (raw as any)) return Boolean((raw as any)[successField]);\n return status >= 200 && status < 400;\n },\n getData: (raw) => (raw && typeof raw === \"object\" && dataField in (raw as any)) ? (raw as any)[dataField] : raw,\n getErrors: (raw, status) => {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n const r: any = raw;\n const err = r[errorField] ?? r[messageField] ?? r[\"errors\"];\n if (!err) return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n\n if (typeof err === \"string\") return [{ message: err }];\n if (Array.isArray(err)) return err.map((e) => ({ message: String(e) }));\n\n if (typeof err === \"object\") {\n if (typeof err.message === \"string\") return [{ message: err.message, ...(err.code ? { code: String(err.code) } : {}), details: err }];\n return [{ message: String(r[messageField] ?? \"Request failed\"), details: err }];\n }\n return [{ message: String(err) }];\n },\n });\n}\n\nexport function createApiParserLaravel(opts?: { dataField?: string }): ShapeParser {\n const dataField = opts?.dataField ?? \"data\";\n return createShapeParser({\n isSuccess: (_raw, status) => status >= 200 && status < 400,\n getData: (raw) => (raw && typeof raw === \"object\" && dataField in (raw as any)) ? (raw as any)[dataField] : raw,\n getErrors: (raw, status) => laravelErrors(raw, status),\n });\n}\n\nfunction laravelErrors(raw: unknown, status: number): AppError[] {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n const r: any = raw;\n\n if (r.errors && typeof r.errors === \"object\") {\n const out: AppError[] = [];\n for (const [field, msgs] of Object.entries(r.errors)) {\n if (Array.isArray(msgs)) for (const m of msgs) out.push({ field, message: String(m) });\n else out.push({ field, message: String(msgs) });\n }\n if (out.length) return out;\n }\n\n const msg = typeof r.message === \"string\" ? r.message : (status ? `HTTP ${status}` : \"Request failed\");\n return [{ message: msg, details: r }];\n}\n\nexport function createApiParserNest(): ShapeParser {\n return createShapeParser({\n isSuccess: (_raw, status) => status >= 200 && status < 400,\n getData: (raw) => raw,\n getErrors: (raw, status) => nestErrors(raw, status),\n });\n}\n\nfunction nestErrors(raw: unknown, status: number): AppError[] {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"Request failed\" }];\n const r: any = raw;\n const msg = r.message;\n\n if (Array.isArray(msg)) return msg.map((m: any) => ({ message: String(m), details: r }));\n if (typeof msg === \"string\") return [{ message: msg, ...(r.error ? { code: String(r.error) } : {}), details: r }];\n\n return [{ message: status ? `HTTP ${status}` : \"Request failed\", details: r }];\n}\n\nexport function createApiParserGraphQL(opts?: { allowPartialData?: boolean }): ShapeParser {\n const allowPartial = opts?.allowPartialData ?? false;\n\n return createShapeParser({\n isSuccess: (raw, status) => {\n if (status < 200 || status >= 400) return false;\n if (!raw || typeof raw !== \"object\") return false;\n const r: any = raw;\n const hasErrors = Array.isArray(r.errors) && r.errors.length > 0;\n if (hasErrors && !allowPartial) return false;\n return \"data\" in r;\n },\n getData: (raw) => (raw && typeof raw === \"object\") ? (raw as any).data : raw,\n getErrors: (raw, status) => {\n if (!raw || typeof raw !== \"object\") return status ? [{ message: `HTTP ${status}` }] : [{ message: \"GraphQL request failed\" }];\n const r: any = raw;\n const errs = Array.isArray(r.errors) ? r.errors : [];\n if (!errs.length) return status >= 400 ? [{ message: `HTTP ${status}` }] : [{ message: \"GraphQL request failed\" }];\n return errs.map((e: any) => ({\n message: typeof e?.message === \"string\" ? e.message : \"GraphQL error\",\n code: e?.extensions?.code ? String(e.extensions.code) : undefined,\n details: e,\n }));\n },\n });\n}\n","import type { AppError } from \"../client/errors.js\";\nimport type { ShapeParser } from \"./shapeParser.js\";\nimport { createShapeParser } from \"./shapeParser.js\";\n\n/**\n * Parser pour une enveloppe HTTP \"structurée\" : succès / erreurs typées avec\n * `issues[]`, `i18n`, et `meta { traceId, spanId, timestamp }`.\n *\n * Cette forme est typique des backends qui exposent un protocole d'erreur\n * uniforme (FastAPI, NestJS custom, etc.) avec :\n * - une distinction `success: boolean`\n * - une liste d'issues structurées (code, message, category, severity,\n * retryable, i18n)\n * - un bloc meta de tracing (traceId, spanId)\n *\n * @example\n * // Succès\n * { \"success\": true, \"data\": { ... }, \"meta\": { \"traceId\": \"...\", \"timestamp\": \"...\" } }\n *\n * @example\n * // Erreur\n * {\n * \"success\": false,\n * \"code\": \"AUTH_OTP_INVALID\",\n * \"message\": \"Auth otp invalid\",\n * \"issues\": [\n * {\n * \"code\": \"AUTH_OTP_INVALID\",\n * \"message\": \"...\",\n * \"category\": \"auth\",\n * \"severity\": \"error\",\n * \"retryable\": false,\n * \"i18n\": { \"key\": \"auth.otp_invalid\", \"params\": {}, \"locale\": null }\n * }\n * ],\n * \"i18n\": { \"key\": \"...\", \"params\": {}, \"locale\": null },\n * \"meta\": { \"traceId\": \"...\", \"spanId\": \"...\", \"timestamp\": \"...\" }\n * }\n */\nexport type StructuredI18n = {\n key?: string;\n params?: Record<string, unknown>;\n locale?: string | null;\n};\n\nexport type StructuredIssue = {\n code?: string;\n message?: string;\n category?: string;\n severity?: string;\n retryable?: boolean;\n i18n?: StructuredI18n;\n field?: string;\n};\n\nexport type StructuredEnvelopeMeta = {\n traceId?: string;\n spanId?: string;\n timestamp?: string;\n [k: string]: unknown;\n};\n\nexport type StructuredSuccessEnvelope<T = unknown> = {\n success: true;\n data: T;\n meta?: StructuredEnvelopeMeta;\n};\n\nexport type StructuredErrorEnvelope = {\n success: false;\n code?: string;\n message?: string;\n issues?: StructuredIssue[];\n i18n?: StructuredI18n;\n meta?: StructuredEnvelopeMeta;\n};\n\nexport type StructuredEnvelope<T = unknown> =\n | StructuredSuccessEnvelope<T>\n | StructuredErrorEnvelope;\n\nexport type ApiParserStructuredOptions = {\n /** Garde l'enveloppe `meta` accessible via `AppError.details.envelope`. */\n exposeMeta?: boolean;\n /**\n * Pour les erreurs avec `retryable: false`, marquer la requête comme\n * non-retryable (via `details.retryable`). Le retry plugin peut consulter\n * ce flag via un `isRetryableRequest` custom — voir docs.\n */\n honorRetryableHint?: boolean;\n};\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === \"object\" && !Array.isArray(v);\n}\n\nfunction pickString(o: Record<string, unknown>, key: string): string | undefined {\n const v = o[key];\n return typeof v === \"string\" ? v : undefined;\n}\n\n/**\n * Parser pour une enveloppe structurée à `issues[]` + `i18n` + `meta` de tracing.\n *\n * - Succès : `data = envelope.data`\n * - Erreur : chaque `issue` est mappée en `AppError`, avec en `details` les\n * informations riches (code, category, severity, retryable, i18n, traceId,\n * spanId, timestamp, enveloppe brute si `exposeMeta=true`).\n *\n * Le `traceId` / `spanId` de l'enveloppe se retrouvent dans :\n * - `errors[0].details.traceId` / `.spanId` (côté erreur)\n * - `errors[0].details.envelope.meta` (enveloppe brute, si `exposeMeta`)\n */\nexport function createApiParserStructured(opts: ApiParserStructuredOptions = {}): ShapeParser {\n const exposeMeta = opts.exposeMeta ?? true;\n const honorRetryableHint = opts.honorRetryableHint ?? true;\n\n return createShapeParser({\n isSuccess: (raw, status) => {\n if (isRecord(raw) && \"success\" in raw) return raw[\"success\"] === true;\n return status >= 200 && status < 400;\n },\n getData: (raw) => {\n if (isRecord(raw) && raw[\"success\"] === true && \"data\" in raw) {\n return (raw as StructuredSuccessEnvelope)[\"data\"];\n }\n return raw;\n },\n getErrors: (raw, status): AppError[] => {\n if (!isRecord(raw)) {\n return [{ message: status ? `HTTP ${status}` : \"Request failed\" }];\n }\n\n const env = raw as StructuredErrorEnvelope & Record<string, unknown>;\n const meta = isRecord(env[\"meta\"]) ? (env[\"meta\"] as StructuredEnvelopeMeta) : undefined;\n const traceId = meta?.traceId;\n const spanId = meta?.spanId;\n\n const issues = Array.isArray(env[\"issues\"]) ? (env[\"issues\"] as StructuredIssue[]) : [];\n const topMessage = pickString(env, \"message\");\n const topCode = pickString(env, \"code\");\n const topI18n = isRecord(env[\"i18n\"]) ? (env[\"i18n\"] as StructuredI18n) : undefined;\n\n const baseDetails = (extra: Record<string, unknown> = {}) => ({\n ...(traceId !== undefined ? { traceId } : {}),\n ...(spanId !== undefined ? { spanId } : {}),\n ...(exposeMeta ? { envelope: env } : {}),\n ...extra,\n });\n\n if (issues.length > 0) {\n return issues.map((iss): AppError => {\n const message = iss.message ?? topMessage ?? (status ? `HTTP ${status}` : \"Request failed\");\n const code = iss.code ?? topCode;\n const issueDetails = baseDetails({\n ...(iss.category !== undefined ? { category: iss.category } : {}),\n ...(iss.severity !== undefined ? { severity: iss.severity } : {}),\n ...(honorRetryableHint && iss.retryable !== undefined ? { retryable: iss.retryable } : {}),\n ...(iss.i18n !== undefined ? { i18n: iss.i18n } : topI18n !== undefined ? { i18n: topI18n } : {}),\n });\n return {\n message,\n ...(code !== undefined ? { code } : {}),\n ...(iss.field !== undefined ? { field: iss.field } : {}),\n details: issueDetails,\n };\n });\n }\n\n // Pas d'issues : on retourne une erreur top-level.\n const details = baseDetails({\n ...(topI18n !== undefined ? { i18n: topI18n } : {}),\n });\n return [\n {\n message: topMessage ?? (status ? `HTTP ${status}` : \"Request failed\"),\n ...(topCode !== undefined ? { code: topCode } : {}),\n details,\n },\n ];\n },\n });\n}\n","import type { HttpClientOptions } from \"../client/types.js\";\nimport { createHttpClient } from \"../client/httpClient.js\";\nimport type { ShapeParser } from \"../parsing/shapeParser.js\";\nimport { createApiParserRestClassic } from \"../parsing/presets.js\";\nimport type { AuthConfig } from \"../auth/authConfig.js\";\nimport { bearerAuth, cookieAuth, noAuth, basicAuth, apiKeyAuth } from \"../auth/authConfig.js\";\nimport type { Guard } from \"../guards/types.js\";\nimport { cookieSafeRefreshGuard, type CookieSafeRefreshGuardOptions } from \"../guards/cookieSafeRefreshGuard.js\";\nimport { unauthorizedGuard, type UnauthorizedGuardOptions } from \"../guards/unauthorizedGuard.js\";\nimport { memoryCache, type MemoryCacheOptions } from \"../cache/memoryCache.js\";\nimport type { Notifier } from \"../notify/types.js\";\nimport { consoleNotifier } from \"../notify/defaults.js\";\n\n/**\n * Option B: preset builder\n * - defaults to a \"classic REST envelope\" parser\n * - defaults to noAuth()\n * - provides convenience methods for common auth modes & cookie refresh\n *\n * If you need full control, call createHttpClient directly.\n */\nexport type PresetBuilder = ReturnType<typeof createPresetBuilder>;\n\nexport function createPresetBuilder(init?: {\n baseUrl?: string;\n parser?: ShapeParser;\n auth?: AuthConfig;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n}) {\n const state: HttpClientOptions = {\n baseUrl: init?.baseUrl ?? \"\",\n parser: init?.parser ?? createApiParserRestClassic(),\n auth: init?.auth ?? noAuth(),\n ...(init?.fetch ? { fetch: init.fetch } : {}),\n ...(init?.notifier ? { notifier: init.notifier } : { notifier: consoleNotifier }),\n guards: [],\n };\n\n function ensureBaseUrl() {\n if (!state.baseUrl) throw new Error(\"presetBuilder: baseUrl is required\");\n }\n\n const api = {\n /** Set / override baseUrl */\n baseUrl(baseUrl: string) {\n state.baseUrl = baseUrl;\n return api;\n },\n\n /** Set / override parser */\n parser(parser: ShapeParser) {\n state.parser = parser;\n return api;\n },\n\n /** Set / override fetch */\n fetch(fetchImpl: typeof globalThis.fetch) {\n state.fetch = fetchImpl;\n return api;\n },\n\n /** Set / override notifier */\n notifier(notifier: Notifier) {\n state.notifier = notifier;\n return api;\n },\n\n /** Add guard(s) (preserves order) */\n guards(...guards: Guard[]) {\n state.guards = [...(state.guards ?? []), ...guards];\n return api;\n },\n\n /** Enable in-memory cache */\n memoryCache(opts?: MemoryCacheOptions) {\n state.cache = memoryCache(opts);\n return api;\n },\n\n /** Low-level cache assignment */\n cache(cache: HttpClientOptions[\"cache\"]) {\n // With `exactOptionalPropertyTypes: true`, assigning `undefined` to an\n // optional prop is not allowed. We omit the property instead.\n if (cache === undefined) {\n delete (state as any).cache;\n } else {\n state.cache = cache;\n }\n return api;\n },\n\n /** Default headers / timeouts / notify policy */\n defaults(defaults: HttpClientOptions[\"defaults\"]) {\n state.defaults = { ...(state.defaults ?? {}), ...(defaults ?? {}) };\n return api;\n },\n\n /** Redirect policy */\n redirects(redirects: HttpClientOptions[\"redirects\"]) {\n if (redirects === undefined) {\n delete (state as any).redirects;\n } else {\n state.redirects = redirects;\n }\n return api;\n },\n\n /** Auth presets */\n auth(auth: AuthConfig) {\n state.auth = auth;\n return api;\n },\n bearer(getToken: Parameters<typeof bearerAuth>[0], opts?: Parameters<typeof bearerAuth>[1]) {\n state.auth = bearerAuth(getToken, opts);\n return api;\n },\n cookie(opts?: Parameters<typeof cookieAuth>[0]) {\n state.auth = cookieAuth(opts);\n return api;\n },\n basic(getCred: Parameters<typeof basicAuth>[0], opts?: Parameters<typeof basicAuth>[1]) {\n state.auth = basicAuth(getCred, opts);\n return api;\n },\n apiKey(getKey: Parameters<typeof apiKeyAuth>[0], opts?: Parameters<typeof apiKeyAuth>[1]) {\n state.auth = apiKeyAuth(getKey, opts);\n return api;\n },\n none() {\n state.auth = noAuth();\n return api;\n },\n\n /**\n * Cookie refresh guard preset (only meaningful for cookie auth).\n * You can still add it manually via `.guards(...)`.\n */\n cookieRefresh(opts: CookieSafeRefreshGuardOptions) {\n state.guards = [...(state.guards ?? []), cookieSafeRefreshGuard(opts)];\n return api;\n },\n\n /** Unauthorized handler preset (redirect/logout). */\n unauthorized(opts: UnauthorizedGuardOptions) {\n state.guards = [...(state.guards ?? []), unauthorizedGuard(opts)];\n return api;\n },\n\n /** Returns the final HttpClientOptions */\n options(): HttpClientOptions {\n ensureBaseUrl();\n return { ...state, guards: [...(state.guards ?? [])] };\n },\n\n /** Creates the http client */\n create() {\n ensureBaseUrl();\n return createHttpClient(api.options());\n },\n };\n\n return api;\n}\n\n/**\n * Option A (aliases): minimal-instantiation helpers.\n * They are thin wrappers around the preset builder.\n */\nexport function createSimpleClient(opts: {\n baseUrl: string;\n /** Defaults to classic REST envelope parser */\n parser?: ShapeParser;\n /** Defaults to noAuth */\n auth?: AuthConfig;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n}) {\n return createPresetBuilder(opts).create();\n}\n\nexport function createBearerClient(opts: {\n baseUrl: string;\n getToken: () => string | null | Promise<string | null>;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n headerName?: string;\n prefix?: string;\n}) {\n const bearerOpts = {\n ...(opts.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts.prefix !== undefined ? { prefix: opts.prefix } : {}),\n };\n\n return createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n })\n .bearer(opts.getToken, Object.keys(bearerOpts).length ? bearerOpts : undefined)\n .create();\n}\n\nexport function createCookieClient(opts: {\n baseUrl: string;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n credentials?: RequestCredentials;\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n refresh?: CookieSafeRefreshGuardOptions | null;\n}) {\n const b = createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n }).cookie({\n ...(opts.credentials !== undefined ? { credentials: opts.credentials } : {}),\n ...(opts.csrf !== undefined ? { csrf: opts.csrf } : {}),\n });\n\n if (opts.refresh) b.cookieRefresh(opts.refresh);\n return b.create();\n}\n\nexport function createBasicClient(opts: {\n baseUrl: string;\n getCredentials: () =>\n | { username: string; password: string }\n | string\n | null\n | Promise<{ username: string; password: string } | string | null>;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n headerName?: string;\n prefix?: string;\n}) {\n const basicOpts = {\n ...(opts.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts.prefix !== undefined ? { prefix: opts.prefix } : {}),\n };\n\n return createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n })\n .basic(opts.getCredentials, Object.keys(basicOpts).length ? basicOpts : undefined)\n .create();\n}\n\nexport function createApiKeyClient(opts: {\n baseUrl: string;\n getKey: () => string | null | Promise<string | null>;\n parser?: ShapeParser;\n fetch?: typeof globalThis.fetch;\n notifier?: Notifier;\n headerName?: string;\n prefix?: string;\n}) {\n const apiKeyOpts = {\n ...(opts.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts.prefix !== undefined ? { prefix: opts.prefix } : {}),\n };\n\n return createPresetBuilder({\n baseUrl: opts.baseUrl,\n ...(opts.parser ? { parser: opts.parser } : {}),\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.notifier ? { notifier: opts.notifier } : {}),\n })\n .apiKey(opts.getKey, Object.keys(apiKeyOpts).length ? apiKeyOpts : undefined)\n .create();\n}\n","import type { HttpClientOptions } from \"./client/types.js\";\nimport { createHttpClient } from \"./client/httpClient.js\";\nimport type { ShapeParser } from \"./parsing/shapeParser.js\";\nimport { createApiParserRestClassic } from \"./parsing/presets.js\";\nimport type { AuthConfig } from \"./auth/authConfig.js\";\nimport { noAuth } from \"./auth/authConfig.js\";\nimport type { Notifier } from \"./notify/types.js\";\nimport { consoleNotifier } from \"./notify/defaults.js\";\n\n/**\n * Alias A: minimal, safe defaults.\n *\n * Goal: `createHttpClient` stays максимально configurable,\n * while `createClient` offers a “works out of the box” path.\n */\nexport type CreateClientOptions = {\n baseUrl: string;\n /** Default: createApiParserRestClassic() */\n parser?: ShapeParser;\n /** Default: noAuth() */\n auth?: AuthConfig;\n fetch?: HttpClientOptions[\"fetch\"];\n notifier?: Notifier;\n defaults?: HttpClientOptions[\"defaults\"];\n cache?: HttpClientOptions[\"cache\"];\n redirects?: HttpClientOptions[\"redirects\"];\n guards?: HttpClientOptions[\"guards\"];\n};\n\nexport function createClient(opts: CreateClientOptions) {\n const parser = opts.parser ?? createApiParserRestClassic();\n const auth = opts.auth ?? noAuth();\n const notifier = opts.notifier ?? consoleNotifier;\n\n // exactOptionalPropertyTypes=true => never pass explicit undefined.\n const cfg: HttpClientOptions = {\n baseUrl: opts.baseUrl,\n parser,\n auth,\n notifier,\n ...(opts.fetch ? { fetch: opts.fetch } : {}),\n ...(opts.defaults ? { defaults: opts.defaults } : {}),\n ...(opts.cache ? { cache: opts.cache } : {}),\n ...(opts.redirects ? { redirects: opts.redirects } : {}),\n ...(opts.guards ? { guards: opts.guards } : {}),\n };\n\n return createHttpClient(cfg);\n}\n"]}