@cedvict/http-guardian 0.0.1-next.4 → 0.0.1-next.5

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.
package/dist/index.d.ts CHANGED
@@ -1,30 +1,33 @@
1
- type AuthConfig = {
1
+ type BearerAuthConfig = {
2
2
  mode: "bearer";
3
3
  getToken: () => string | null | Promise<string | null>;
4
4
  headerName?: string;
5
5
  prefix?: string;
6
- } | {
6
+ };
7
+ type CookieAuthConfig = {
7
8
  mode: "cookie";
8
9
  credentials?: RequestCredentials;
9
10
  csrf?: {
10
11
  headerName: string;
11
12
  getToken: () => string | null | Promise<string | null>;
12
13
  };
13
- } | {
14
+ };
15
+ type NoneAuthConfig = {
14
16
  mode: "none";
15
17
  };
18
+ type AuthConfig = BearerAuthConfig | CookieAuthConfig | NoneAuthConfig;
16
19
  declare function bearerAuth(getToken: () => string | null | Promise<string | null>, opts?: {
17
20
  headerName?: string;
18
21
  prefix?: string;
19
- }): AuthConfig;
22
+ }): BearerAuthConfig;
20
23
  declare function cookieAuth(opts?: {
21
24
  credentials?: RequestCredentials;
22
25
  csrf?: {
23
26
  headerName: string;
24
27
  getToken: () => string | null | Promise<string | null>;
25
28
  };
26
- }): AuthConfig;
27
- declare function noAuth(): AuthConfig;
29
+ }): CookieAuthConfig;
30
+ declare function noAuth(): NoneAuthConfig;
28
31
 
29
32
  type AppError = {
30
33
  message: string;
@@ -264,4 +267,4 @@ declare const alertNotifier: Notifier;
264
267
  */
265
268
  declare function tailwindAlertRenderer(event: NotifyEvent): string;
266
269
 
267
- export { type AppError, type AuthConfig, type CacheEntry, type CacheOptions, type CacheStore, type ClientResult, type Guard, type HttpClientOptions, type HttpMethod, ILLEGAL_INVOCATION_HINT, NetworkError, type Notifier, type NotifyEvent, ParseError, RedirectError, type RedirectMode, type RedirectPolicy, type RequestContext, type RequestOptions, type Schema, type ShapeParser, TimeoutError, alertNotifier, bearerAuth, consoleNotifier, cookieAuth, createApiParserGraphQL, createApiParserLaravel, createApiParserNest, createApiParserRestClassic, createHttpClient, createShapeParser, fromZod, memoryCache, noAuth, retryGuard, schema, tailwindAlertRenderer };
270
+ export { type AppError, type AuthConfig, type BearerAuthConfig, type CacheEntry, type CacheOptions, type CacheStore, type ClientResult, type CookieAuthConfig, type Guard, type HttpClientOptions, type HttpMethod, ILLEGAL_INVOCATION_HINT, NetworkError, type NoneAuthConfig, type Notifier, type NotifyEvent, ParseError, RedirectError, type RedirectMode, type RedirectPolicy, type RequestContext, type RequestOptions, type Schema, type ShapeParser, TimeoutError, alertNotifier, bearerAuth, consoleNotifier, cookieAuth, createApiParserGraphQL, createApiParserLaravel, createApiParserNest, createApiParserRestClassic, createHttpClient, createShapeParser, fromZod, memoryCache, noAuth, retryGuard, schema, tailwindAlertRenderer };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/compose.ts","../src/internal/url.ts","../src/internal/authGuard.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/cache/memoryCache.ts","../src/parsing/shapeParser.ts","../src/parsing/schemaAdapter.ts","../src/parsing/presets.ts"],"names":["errors","msg"],"mappings":"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","file":"index.js","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 return (ctx: RequestContext) => {\n let idx = -1;\n\n const dispatch = (i: number, c: RequestContext): Promise<Response> => {\n if (i <= idx) return Promise.reject(new Error(\"composeGuards: next() called multiple times\"));\n idx = i;\n const guard = guards[i];\n if (!guard) return terminal(c);\n return guard(c, (nextCtx) => dispatch(i + 1, nextCtx));\n };\n\n return dispatch(0, ctx);\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\nexport function authGuard(auth: AuthConfig): Guard {\n return async (ctx, next) => {\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 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 ctx.credentials = auth.credentials ?? \"include\";\n if (auth.csrf) {\n const csrf = await auth.csrf.getToken();\n if (csrf) ctx.headers.set(auth.csrf.headerName, csrf);\n }\n return next(ctx);\n };\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\";\n\nexport function makeCacheKey(parts: {\n method: string;\n url: string;\n headers?: Headers;\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 { 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\nconst REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\nexport function createHttpClient(opts: HttpClientOptions) {\n const resolvedFetch: typeof globalThis.fetch = opts.fetch\n ? normalizeFetch(opts.fetch)\n : ((input: any, init?: any) => globalThis.fetch(input, init)) as typeof globalThis.fetch;\n const cache = opts.cache;\n const inFlight = new InFlight();\n\n const defaultNotifier = opts.notifier ?? consoleNotifier;\n const shouldNotify = opts.defaults?.shouldNotify ?? ((r) => !r.ok);\n\n const baseGuards = [authGuard(opts.auth), ...(opts.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: ctx.headers,\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\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(opts.baseUrl, path), ro?.query);\n\n const headers = new Headers();\n if (opts.defaults?.headers) for (const [k, v] of Object.entries(opts.defaults.headers)) headers.set(k, v);\n if (ro?.headers) for (const [k, v] of Object.entries(ro.headers)) if (v !== undefined) headers.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 ?? opts.defaults?.timeoutMs;\n const notifier = ro?.notifier ?? defaultNotifier;\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({ method, url: requestUrl, headers, ...(method === \"GET\" ? {} : { body: bodyForKey }), ...(ro?.idempotencyKey !== undefined ? { idempotencyKey: ro.idempotencyKey } : {}), ...(cacheOpts?.key !== undefined ? { keyOverride: cacheOpts.key } : {}) })\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, opts, ro, notifier, shouldNotify);\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,\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, { expiresAt: Date.now() + cacheOpts.ttlMs, value: raw, ...(cacheOpts.tags ? { tags: cacheOpts.tags } : {}) });\n }\n\n return envelope;\n\n async function refreshInBackground(key: string) {\n try {\n const res2 = await fetchWithRedirects({\n opts,\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, { expiresAt: Date.now() + cacheOpts!.ttlMs, value: raw2, ...(cacheOpts!.tags ? { tags: cacheOpts!.tags } : {}) });\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, opts, ro, notifier, shouldNotify);\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 })) notifier.notify({ 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;\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) throw new RedirectError(\"Redirect without Location header\", currentUrl);\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) {\n try {\n if (opts.auth.mode !== \"bearer\") return;\n const initialOrigin = new URL(initialUrl).origin;\n const toOrigin = new URL(toUrl).origin;\n if (initialOrigin !== toOrigin) {\n const headerName = opts.auth.headerName ?? \"Authorization\";\n headers.delete(headerName);\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;\n body?: BodyInit;\n signal?: AbortSignal;\n timeoutMs?: number;\n noAuth?: boolean;\n },\n redirect: RequestRedirect\n): RequestContext {\n return {\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): ClientResult<T> {\n if (envelope?.kind === \"cache-miss\") {\n const errors: AppError[] = [{ message: \"Cache miss\" }];\n if (shouldNotify({ ok: false, status: 0 })) notifier.notify({ 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 })) notifier.notify({ 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 })) notifier.notify({ 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 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 AuthConfig =\n | {\n mode: \"bearer\";\n getToken: () => string | null | Promise<string | null>;\n headerName?: string;\n prefix?: string;\n }\n | {\n mode: \"cookie\";\n credentials?: RequestCredentials;\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n }\n | { mode: \"none\" };\n\nexport function bearerAuth(\n getToken: () => string | null | Promise<string | null>,\n opts?: { headerName?: string; prefix?: string }\n): AuthConfig {\n return {\n mode: \"bearer\",\n getToken,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\n };\n}\n\nexport function cookieAuth(opts?: {\n credentials?: RequestCredentials;\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n}): AuthConfig {\n return {\n mode: \"cookie\",\n ...(opts?.credentials !== undefined ? { credentials: opts.credentials } : {}),\n ...(opts?.csrf !== undefined ? { csrf: opts.csrf } : {}),\n };\n}\n\nexport function noAuth(): AuthConfig {\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 { CacheEntry, CacheStore } from \"./types.js\";\n\n/**\n * Simple in-memory LRU-ish cache with tag invalidation.\n */\nexport function memoryCache(opts?: { maxEntries?: number }): 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"]}
1
+ {"version":3,"sources":["../src/internal/compose.ts","../src/internal/url.ts","../src/internal/authGuard.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/cache/memoryCache.ts","../src/parsing/shapeParser.ts","../src/parsing/schemaAdapter.ts","../src/parsing/presets.ts"],"names":["errors","msg"],"mappings":"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","file":"index.js","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 return (ctx: RequestContext) => {\n let idx = -1;\n\n const dispatch = (i: number, c: RequestContext): Promise<Response> => {\n if (i <= idx) return Promise.reject(new Error(\"composeGuards: next() called multiple times\"));\n idx = i;\n const guard = guards[i];\n if (!guard) return terminal(c);\n return guard(c, (nextCtx) => dispatch(i + 1, nextCtx));\n };\n\n return dispatch(0, ctx);\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\nexport function authGuard(auth: AuthConfig): Guard {\n return async (ctx, next) => {\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 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 ctx.credentials = auth.credentials ?? \"include\";\n if (auth.csrf) {\n const csrf = await auth.csrf.getToken();\n if (csrf) ctx.headers.set(auth.csrf.headerName, csrf);\n }\n return next(ctx);\n };\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\";\n\nexport function makeCacheKey(parts: {\n method: string;\n url: string;\n headers?: Headers;\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 { 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\nconst REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\nexport function createHttpClient(opts: HttpClientOptions) {\n const resolvedFetch: typeof globalThis.fetch = opts.fetch\n ? normalizeFetch(opts.fetch)\n : ((input: any, init?: any) => globalThis.fetch(input, init)) as typeof globalThis.fetch;\n const cache = opts.cache;\n const inFlight = new InFlight();\n\n const defaultNotifier = opts.notifier ?? consoleNotifier;\n const shouldNotify = opts.defaults?.shouldNotify ?? ((r) => !r.ok);\n\n const baseGuards = [authGuard(opts.auth), ...(opts.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: ctx.headers,\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\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(opts.baseUrl, path), ro?.query);\n\n const headers = new Headers();\n if (opts.defaults?.headers) for (const [k, v] of Object.entries(opts.defaults.headers)) headers.set(k, v);\n if (ro?.headers) for (const [k, v] of Object.entries(ro.headers)) if (v !== undefined) headers.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 ?? opts.defaults?.timeoutMs;\n const notifier = ro?.notifier ?? defaultNotifier;\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({ method, url: requestUrl, headers, ...(method === \"GET\" ? {} : { body: bodyForKey }), ...(ro?.idempotencyKey !== undefined ? { idempotencyKey: ro.idempotencyKey } : {}), ...(cacheOpts?.key !== undefined ? { keyOverride: cacheOpts.key } : {}) })\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, opts, ro, notifier, shouldNotify);\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,\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, { expiresAt: Date.now() + cacheOpts.ttlMs, value: raw, ...(cacheOpts.tags ? { tags: cacheOpts.tags } : {}) });\n }\n\n return envelope;\n\n async function refreshInBackground(key: string) {\n try {\n const res2 = await fetchWithRedirects({\n opts,\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, { expiresAt: Date.now() + cacheOpts!.ttlMs, value: raw2, ...(cacheOpts!.tags ? { tags: cacheOpts!.tags } : {}) });\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, opts, ro, notifier, shouldNotify);\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 })) notifier.notify({ 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;\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) throw new RedirectError(\"Redirect without Location header\", currentUrl);\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) {\n try {\n if (opts.auth.mode !== \"bearer\") return;\n const initialOrigin = new URL(initialUrl).origin;\n const toOrigin = new URL(toUrl).origin;\n if (initialOrigin !== toOrigin) {\n const headerName = opts.auth.headerName ?? \"Authorization\";\n headers.delete(headerName);\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;\n body?: BodyInit;\n signal?: AbortSignal;\n timeoutMs?: number;\n noAuth?: boolean;\n },\n redirect: RequestRedirect\n): RequestContext {\n return {\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): ClientResult<T> {\n if (envelope?.kind === \"cache-miss\") {\n const errors: AppError[] = [{ message: \"Cache miss\" }];\n if (shouldNotify({ ok: false, status: 0 })) notifier.notify({ 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 })) notifier.notify({ 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 })) notifier.notify({ 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 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\nexport type CookieAuthConfig = {\n mode: \"cookie\";\n credentials?: RequestCredentials;\n csrf?: { headerName: string; getToken: () => string | null | Promise<string | null> };\n};\n\nexport type NoneAuthConfig = { mode: \"none\" };\n\nexport type AuthConfig = BearerAuthConfig | CookieAuthConfig | NoneAuthConfig;\n\nexport function bearerAuth(\n getToken: () => string | null | Promise<string | null>,\n opts?: { headerName?: string; prefix?: string }\n): BearerAuthConfig {\n return {\n mode: \"bearer\",\n getToken,\n ...(opts?.headerName !== undefined ? { headerName: opts.headerName } : {}),\n ...(opts?.prefix !== undefined ? { prefix: opts.prefix } : {}),\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 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 { CacheEntry, CacheStore } from \"./types.js\";\n\n/**\n * Simple in-memory LRU-ish cache with tag invalidation.\n */\nexport function memoryCache(opts?: { maxEntries?: number }): 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cedvict/http-guardian",
3
- "version": "0.0.1-next.4",
3
+ "version": "0.0.1-next.5",
4
4
  "description": "Configurable HTTP client for TypeScript: auth (bearer/cookie), guards, cache+dedupe, dynamic envelope parsing presets, notifications, redirect handling.",
5
5
  "type": "module",
6
6
  "exports": {