authula 0.6.3 → 0.7.1
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/README.md +2 -2
- package/dist/{custom-fetch-ZBY99AZW.js → custom-fetch-Ce6_l1Qb.js} +6 -2
- package/dist/custom-fetch-Ce6_l1Qb.js.map +1 -0
- package/dist/{index-DHUQcsNV.d.ts → index-BdPCSdtc.d.ts} +5 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.js +8 -12
- package/dist/plugins/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/custom-fetch-ZBY99AZW.js.map +0 -1
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"custom-fetch-ZBY99AZW.js","names":[],"sources":["../src/mutators/custom-fetch.ts"],"sourcesContent":["import { parseSetCookie } from \"cookie\";\nimport { toCamelCaseKeys, toSnakeCaseKeys } from \"es-toolkit\";\n\nimport type { FetchContext, CookieStore } from \"../types\";\n\nexport class ApiError extends Error {\n status: number;\n data: any;\n headers: Headers;\n\n constructor(message: string, status: number, data: any, headers: Headers) {\n super(message || `Request failed with status ${status}`);\n this.name = \"ApiError\";\n this.status = status;\n this.data = data;\n this.headers = headers;\n }\n}\n\nfunction prependBase(url: string, base: string): string {\n if (!base) {\n return url;\n }\n if (/^https?:\\/\\//.test(url)) {\n return url.replace(/^https?:\\/\\/[^/]+/, base);\n }\n return `${base}${url.startsWith(\"/\") ? url : `/${url}`}`;\n}\n\nfunction convertRequestBodyToSnakeCase(\n body: BodyInit | null | undefined,\n): BodyInit | null | undefined {\n if (typeof body !== \"string\") {\n return body;\n }\n try {\n const parsed = JSON.parse(body);\n return parsed !== null && typeof parsed === \"object\"\n ? JSON.stringify(toSnakeCaseKeys(parsed))\n : body;\n } catch {\n return body;\n }\n}\n\nasync function parseJsonBody(res: Response): Promise<any> {\n if ([204, 205, 304].includes(res.status)) {\n return null;\n }\n const text = await res.text();\n return text ? JSON.parse(text) : null;\n}\n\nconst KNOWN_COOKIE_ATTRS = new Set([\n \"path\",\n \"domain\",\n \"expires\",\n \"maxAge\",\n \"httpOnly\",\n \"secure\",\n \"sameSite\",\n]);\n\nfunction parseSetCookieToStore(raw: string, store: CookieStore): void {\n let parsed: Record<string, any>;\n try {\n parsed = parseSetCookie(raw) as Record<string, any>;\n } catch {\n return;\n }\n if (!parsed) {\n return;\n }\n\n const { name, value, ...attrs } = parsed;\n const normalized: Record<string, any> = {};\n for (const [k, v] of Object.entries(attrs)) {\n const lower = k.toLowerCase();\n if (KNOWN_COOKIE_ATTRS.has(k)) {\n normalized[k] = v;\n } else if (lower === \"maxage\") normalized[\"maxAge\"] = v;\n else if (lower === \"httponly\") normalized[\"httpOnly\"] = v;\n else if (lower === \"samesite\") normalized[\"sameSite\"] = v;\n }\n\n try {\n store.set(name, value, normalized);\n } catch {\n // store may be immutable during SSR render\n }\n}\n\nexport async function customFetch<T>(\n url: string,\n options?: RequestInit & {\n method?: string;\n baseUrl?: string;\n cookies?: () => CookieStore | Promise<CookieStore>;\n onBeforeFetch?: (ctx: FetchContext) => Promise<void>;\n onAfterFetch?: (\n ctx: FetchContext,\n res: Response,\n ) => Promise<\"retry\" | void>;\n },\n): Promise<T> {\n const resolvedUrl = prependBase(url, options?.baseUrl ?? \"\");\n\n const headers = new Headers(options?.headers || {});\n\n let cookieStore: CookieStore | null = null;\n if (options?.cookies) {\n try {\n cookieStore = await options.cookies();\n const all = cookieStore.getAll();\n if (all.length > 0 && !headers.has(\"cookie\")) {\n headers.set(\n \"cookie\",\n all.map((c) => `${c.name}=${c.value}`).join(\"; \"),\n );\n }\n } catch {\n cookieStore = null;\n }\n }\n\n const ctx: FetchContext = {\n url: resolvedUrl,\n init: {\n method: options?.method ?? \"GET\",\n headers,\n body: convertRequestBodyToSnakeCase(options?.body),\n credentials: \"include\",\n signal: options?.signal ?? null,\n },\n meta: {},\n };\n\n if (options?.onBeforeFetch) {\n await options.onBeforeFetch(ctx);\n }\n\n let res = await fetch(ctx.url, ctx.init);\n\n if (options?.onAfterFetch) {\n const action = await options.onAfterFetch(ctx, res);\n if (action === \"retry\" && !ctx.meta.retry) {\n ctx.meta.retry = true;\n res = await fetch(ctx.url, ctx.init);\n }\n }\n\n if (cookieStore) {\n const values: string[] =\n typeof res.headers.getSetCookie === \"function\"\n ? res.headers.getSetCookie()\n : (res.headers.get(\"set-cookie\")?.split(\", \") ?? []);\n for (const raw of values) {\n parseSetCookieToStore(raw, cookieStore);\n }\n }\n\n const data = await parseJsonBody(res);\n\n if (!res.ok) {\n const message =\n typeof data === \"object\" && data !== null && \"message\" in data\n ? String(data.message)\n : \"\";\n throw new ApiError(message, res.status, data, res.headers);\n }\n\n return toCamelCaseKeys(data) as T;\n}\n"],"mappings":"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"}
|