UNPKG

@aptos-labs/aptos-client

Version:

Client package for accessing the Aptos network API.

125 lines 4.12 kB
/** * Build a `URL` from a base string and optional query parameters. * `bigint` values are stringified automatically via `String()`. * @internal */ export function buildUrl(base, params) { const url = new URL(base); if (params) { for (const [key, value] of Object.entries(params)) { if (value !== undefined) { // String(value) correctly handles bigint: String(12345n) === "12345" url.searchParams.append(key, String(value)); } } } return url; } /** * Serialize a request body to a `BodyInit`-compatible value. * * - `null` / `undefined` → `undefined` (no body sent) * - `Uint8Array` → passed through (valid `ArrayBufferView`/`BodyInit`) * - Anything else → `JSON.stringify` * * @internal */ export function serializeBody(body) { if (body == null) return undefined; if (body instanceof Uint8Array) { // Uint8Array is a valid BodyInit at runtime (ArrayBufferView), cast for TS compatibility return body; } return JSON.stringify(body); } /** * Set the `content-type` header to `application/json` when the body is * a non-binary, non-null value and no content-type has been set. * @internal */ export function applyJsonContentType(body, headers) { if (body != null && !(body instanceof Uint8Array) && !headers.has("content-type")) { headers.set("content-type", "application/json"); } } /** * Parse a response body as JSON, returning the raw text when parsing fails. * * Returning raw text (instead of throwing) preserves backward compatibility * with v2, where `got` returned error responses as normal `AptosClientResponse` * objects. This lets the caller (e.g., the TS SDK) inspect the status code and * handle the error however it chooses. * * @internal */ // biome-ignore lint/suspicious/noExplicitAny: JSON.parse returns unknown shape; caller provides Res generic export async function parseJsonSafely(res) { if (res.status === 204 || res.status === 205) { return null; } const text = await res.text(); if (text.length === 0) { return null; } try { return JSON.parse(text); } catch { return text; } } /** * Merge cookies from a {@link CookieJarLike} into the request headers. * @internal */ export function applyCookiesToHeaders(headers, url, jar) { const cookies = jar.getCookies(url); if (cookies.length > 0) { const jarCookies = cookies.map((c) => `${c.name}=${c.value}`).join("; "); const existing = headers.get("cookie"); headers.set("cookie", existing ? `${existing}; ${jarCookies}` : jarCookies); } } /** * Store any `Set-Cookie` headers from the response in the cookie jar. * * Includes a defensive check for `Headers.getSetCookie()` availability, * since it may be absent in some React Native environments. * @internal */ export function storeResponseCookies(url, headers, jar) { if (typeof headers.getSetCookie !== "function") return; for (const cookie of headers.getSetCookie()) { jar.setCookie(url, cookie); } } /** * Convert a `Headers` instance to a plain `Record<string, string | string[]>`. * * This preserves backward compatibility with aptos-client v2, which * returned Node's `IncomingHttpHeaders` (a plain object) from the `got` * library. Consumers (e.g., the TS SDK) access headers via bracket * notation (`response.headers["x-aptos-cursor"]`), which only works on * plain objects — not on `Headers` instances. * * Multi-value `set-cookie` headers are returned as `string[]` to match * Node's `IncomingHttpHeaders` shape and avoid losing cookie boundaries. * * @internal */ export function headersToRecord(headers) { const result = {}; headers.forEach((value, key) => { result[key] = value; }); if (typeof headers.getSetCookie === "function") { const cookies = headers.getSetCookie(); if (cookies.length > 0) { result["set-cookie"] = cookies; } } return result; } //# sourceMappingURL=shared.js.map