@nifrajs/client 2.8.2 → 2.9.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/dist/client.d.ts.map +1 -1
- package/dist/client.js +92 -38
- package/dist/client.js.map +1 -1
- package/package.json +2 -2
- package/src/client.ts +127 -43
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NIFRA_BINARY_HEADER } from "@nifrajs/core/binary";
|
|
2
2
|
import { NIFRA_BACKEND_MOUNT, } from "@nifrajs/core/mount";
|
|
3
|
-
import { createTransportCodecRegistry, decodeTransportResponse, plainJsonCodec, readBoundedBytes, } from "@nifrajs/core/transport-codec";
|
|
3
|
+
import { assertTransportTextBounded, createTransportCodecRegistry, decodeTransportResponse, decodeTransportText, defaultTransportCodecs, plainJsonCodec, readBoundedBytes, } from "@nifrajs/core/transport-codec";
|
|
4
4
|
import { ResponseContractViolation, withResponseValidation } from "./validate-responses.js";
|
|
5
5
|
import { NO_SOCKET, openWebSocket } from "./ws.js";
|
|
6
6
|
const HTTP_VERBS = new Set([
|
|
@@ -13,8 +13,16 @@ const HTTP_VERBS = new Set([
|
|
|
13
13
|
"options",
|
|
14
14
|
]);
|
|
15
15
|
const BODY_VERBS = new Set(["post", "put", "patch"]);
|
|
16
|
-
|
|
17
|
-
const
|
|
16
|
+
/** Marks a fetcher whose responses are same-process objects (see {@link inProcessClient}). */
|
|
17
|
+
const LOCAL_FETCH = Symbol("nifra.local-fetch");
|
|
18
|
+
const DEFAULT_RETRY_STATUS_SET = new Set([502, 503, 504]);
|
|
19
|
+
const DEFAULT_IDEMPOTENT_SET = new Set([
|
|
20
|
+
"GET",
|
|
21
|
+
"HEAD",
|
|
22
|
+
"OPTIONS",
|
|
23
|
+
"PUT",
|
|
24
|
+
"DELETE",
|
|
25
|
+
]);
|
|
18
26
|
function defaultBackoff(attempt) {
|
|
19
27
|
return Math.min(300 * 2 ** (attempt - 1), 3000) + Math.random() * 100;
|
|
20
28
|
}
|
|
@@ -25,16 +33,18 @@ function delay(ms) {
|
|
|
25
33
|
}
|
|
26
34
|
/** Combine a per-call signal with a timeout into one signal; also returns the timeout signal so the
|
|
27
35
|
* caller can tell a timeout abort from a caller abort. */
|
|
36
|
+
const NO_SIGNAL = {};
|
|
28
37
|
function buildSignal(userSignal, timeoutMs) {
|
|
29
38
|
const timeout = timeoutMs !== undefined && typeof AbortSignal.timeout === "function"
|
|
30
39
|
? AbortSignal.timeout(timeoutMs)
|
|
31
40
|
: undefined;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return {};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
if (timeout === undefined) {
|
|
42
|
+
// The no-signal, no-timeout call is the overwhelming default; it shares one frozen-shape result.
|
|
43
|
+
return userSignal === undefined ? NO_SIGNAL : { signal: userSignal, timeout };
|
|
44
|
+
}
|
|
45
|
+
if (userSignal === undefined)
|
|
46
|
+
return { signal: timeout, timeout };
|
|
47
|
+
const signal = typeof AbortSignal.any === "function" ? AbortSignal.any([userSignal, timeout]) : userSignal;
|
|
38
48
|
return { signal, timeout };
|
|
39
49
|
}
|
|
40
50
|
export function client(arg1, arg2, arg3) {
|
|
@@ -62,6 +72,7 @@ export function inProcessClient(app, options) {
|
|
|
62
72
|
// is the platform-aware auto-mount path.
|
|
63
73
|
const direct = (url, init) => Promise.resolve(app.fetch(new Request(url, init)));
|
|
64
74
|
const bridge = options?.validateResponses === true ? withResponseValidation(app, direct) : direct;
|
|
75
|
+
bridge[LOCAL_FETCH] = true;
|
|
65
76
|
const mount = (request, platform) => Promise.resolve(app.fetch(request, platform));
|
|
66
77
|
// NO_SOCKET marks the options so a typed `.ws()` call fails with a real explanation - an
|
|
67
78
|
// in-process app has no socket to upgrade - instead of dialing ws://nifra.internal into the void.
|
|
@@ -96,32 +107,24 @@ export function inProcessClient(app, options) {
|
|
|
96
107
|
* ```
|
|
97
108
|
*/
|
|
98
109
|
export const testClient = inProcessClient;
|
|
99
|
-
function createProxy(base, path, options) {
|
|
110
|
+
function createProxy(base, path, options, cacheable = true) {
|
|
100
111
|
const target = () => { };
|
|
112
|
+
// Every get-trap result is a pure function of (base, path, key, options), so a STATIC node
|
|
113
|
+
// memoizes them - `api.users` stops allocating a fresh Proxy (or verb closure) per lookup. A node
|
|
114
|
+
// below a param call (the apply trap) is created fresh per call, so caching on it would only add
|
|
115
|
+
// a Map nobody reads twice; those nodes (and their children) skip the cache entirely.
|
|
116
|
+
const children = cacheable ? new Map() : undefined;
|
|
101
117
|
return new Proxy(target, {
|
|
102
118
|
get(_target, key) {
|
|
103
119
|
// `then` guard: keep an un-awaited node proxy from looking like a thenable.
|
|
104
120
|
if (typeof key !== "string" || key === "then")
|
|
105
121
|
return undefined;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if (key === "subscribe") {
|
|
113
|
-
return (onEvent, subscribeOptions) => subscribeSse(base, path, onEvent, subscribeOptions, options);
|
|
114
|
-
}
|
|
115
|
-
// Typed WebSocket handle for `app.ws()` routes - `ws` is a reserved proxy key like `subscribe`.
|
|
116
|
-
if (key === "ws") {
|
|
117
|
-
return (wsOptions) => openWebSocket(base, path, {
|
|
118
|
-
headers: options.headers,
|
|
119
|
-
...wsOptions,
|
|
120
|
-
...(options.transport === undefined ? {} : { transport: options.transport }),
|
|
121
|
-
}, NO_SOCKET in options);
|
|
122
|
-
}
|
|
123
|
-
// `index` addresses the root path "/" and adds no segment.
|
|
124
|
-
return createProxy(base, key === "index" ? path : `${path}/${key}`, options);
|
|
122
|
+
const cached = children?.get(key);
|
|
123
|
+
if (cached !== undefined)
|
|
124
|
+
return cached;
|
|
125
|
+
const value = resolveSegment(base, path, key, options, cacheable);
|
|
126
|
+
children?.set(key, value);
|
|
127
|
+
return value;
|
|
125
128
|
},
|
|
126
129
|
apply(_target, _thisArg, args) {
|
|
127
130
|
// A param call (`api.users({ id })`): append the single value, encoded - encoding "/"
|
|
@@ -135,11 +138,33 @@ function createProxy(base, path, options) {
|
|
|
135
138
|
? Object.values(first)[0]
|
|
136
139
|
: first;
|
|
137
140
|
if (value === undefined || value === null)
|
|
138
|
-
return createProxy(base, path, options);
|
|
139
|
-
return createProxy(base, `${path}/${encodeURIComponent(String(value))}`, options);
|
|
141
|
+
return createProxy(base, path, options, false);
|
|
142
|
+
return createProxy(base, `${path}/${encodeURIComponent(String(value))}`, options, false);
|
|
140
143
|
},
|
|
141
144
|
});
|
|
142
145
|
}
|
|
146
|
+
/** Resolve one get-trap key on a proxy node - the (memoizable) body of the `get` trap above. */
|
|
147
|
+
function resolveSegment(base, path, key, options, cacheable) {
|
|
148
|
+
if (HTTP_VERBS.has(key.toLowerCase())) {
|
|
149
|
+
return (...args) => execute(base, path, key.toLowerCase(), args, options);
|
|
150
|
+
}
|
|
151
|
+
// Typed SSE subscription for `app.sse()` routes. Like `fetch` on the in-process client,
|
|
152
|
+
// `subscribe` is a reserved proxy key - a literal `/subscribe` path segment is unreachable
|
|
153
|
+
// through the typed proxy (no nifra app defines one reached this way).
|
|
154
|
+
if (key === "subscribe") {
|
|
155
|
+
return (onEvent, subscribeOptions) => subscribeSse(base, path, onEvent, subscribeOptions, options);
|
|
156
|
+
}
|
|
157
|
+
// Typed WebSocket handle for `app.ws()` routes - `ws` is a reserved proxy key like `subscribe`.
|
|
158
|
+
if (key === "ws") {
|
|
159
|
+
return (wsOptions) => openWebSocket(base, path, {
|
|
160
|
+
headers: options.headers,
|
|
161
|
+
...wsOptions,
|
|
162
|
+
...(options.transport === undefined ? {} : { transport: options.transport }),
|
|
163
|
+
}, NO_SOCKET in options);
|
|
164
|
+
}
|
|
165
|
+
// `index` addresses the root path "/" and adds no segment.
|
|
166
|
+
return createProxy(base, key === "index" ? path : `${path}/${key}`, options, cacheable);
|
|
167
|
+
}
|
|
143
168
|
async function execute(base, path, verb, args, options) {
|
|
144
169
|
const isBodyVerb = BODY_VERBS.has(verb);
|
|
145
170
|
const body = isBodyVerb ? args[0] : undefined;
|
|
@@ -168,11 +193,14 @@ async function execute(base, path, verb, args, options) {
|
|
|
168
193
|
init.signal = signal;
|
|
169
194
|
// Safe retry: only when configured, only for idempotent methods + transient statuses, so a retry
|
|
170
195
|
// can never duplicate a side effect (a POST is never retried unless the app opts its method in).
|
|
196
|
+
// The default sets are shared module singletons; per-call Sets are built only for a custom policy.
|
|
171
197
|
const retry = options.retry;
|
|
172
198
|
const maxRetries = retry === undefined ? 0 : (retry.attempts ?? 2);
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
199
|
+
const methodRetryable = maxRetries > 0 &&
|
|
200
|
+
(retry?.methods === undefined
|
|
201
|
+
? DEFAULT_IDEMPOTENT_SET.has(method)
|
|
202
|
+
: retry.methods.some((m) => m.toUpperCase() === method));
|
|
203
|
+
const retryStatuses = methodRetryable && retry?.on !== undefined ? new Set(retry.on) : DEFAULT_RETRY_STATUS_SET;
|
|
176
204
|
const backoff = retry?.backoff ?? defaultBackoff;
|
|
177
205
|
const doFetch = options.fetch ?? fetch;
|
|
178
206
|
let response;
|
|
@@ -402,13 +430,21 @@ function buildQuery(query) {
|
|
|
402
430
|
}
|
|
403
431
|
return params.toString();
|
|
404
432
|
}
|
|
433
|
+
// A registry is immutable once built, so a custom codec's registry is built once per client and
|
|
434
|
+
// reused - constructing one per response paid Map building and validation on every parse.
|
|
435
|
+
const CUSTOM_REGISTRIES = new WeakMap();
|
|
405
436
|
function transportRegistry(options) {
|
|
406
437
|
if (options.transport?.registry !== undefined)
|
|
407
438
|
return options.transport.registry;
|
|
408
439
|
const codec = options.transport?.codec;
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
440
|
+
if (codec === undefined || codec === plainJsonCodec)
|
|
441
|
+
return defaultTransportCodecs;
|
|
442
|
+
let registry = CUSTOM_REGISTRIES.get(codec);
|
|
443
|
+
if (registry === undefined) {
|
|
444
|
+
registry = createTransportCodecRegistry([plainJsonCodec, codec]);
|
|
445
|
+
CUSTOM_REGISTRIES.set(codec, registry);
|
|
446
|
+
}
|
|
447
|
+
return registry;
|
|
412
448
|
}
|
|
413
449
|
/**
|
|
414
450
|
* Media types whose bytes are text, beyond the `text/*` tree.
|
|
@@ -452,6 +488,9 @@ function isPayloadTooLarge(cause) {
|
|
|
452
488
|
cause.name === "TransportCodecError" &&
|
|
453
489
|
cause.message.includes("exceeds maxBytes"));
|
|
454
490
|
}
|
|
491
|
+
// Shared lenient decoder for the streamed textual path (whole-buffer decode is stateless; building
|
|
492
|
+
// a TextDecoder per response cost ~115ns).
|
|
493
|
+
const LENIENT_UTF8 = new TextDecoder();
|
|
455
494
|
async function parseBody(response, options) {
|
|
456
495
|
if (response.status === 204)
|
|
457
496
|
return undefined;
|
|
@@ -465,8 +504,16 @@ async function parseBody(response, options) {
|
|
|
465
504
|
// the transport path, so an app that set it there keeps the number it chose.
|
|
466
505
|
const decodedBytes = options.transport?.maxBytes ?? options.maxDecodedBytes;
|
|
467
506
|
const bound = decodedBytes === undefined ? {} : { maxBytes: decodedBytes };
|
|
507
|
+
// In-process responses (the marked fetcher) hold their body as same-process memory the app
|
|
508
|
+
// already allocated, so the streaming byte-cap reader protects nothing there - the native read
|
|
509
|
+
// is ~23x cheaper and the SAME cap is enforced on the result (identical error). A network
|
|
510
|
+
// fetcher is never marked and keeps the bounded-while-streaming read.
|
|
511
|
+
const local = options.fetch?.[LOCAL_FETCH] === true;
|
|
468
512
|
if (contentType.startsWith("application/json") ||
|
|
469
513
|
contentType.startsWith("application/vnd.nifra.")) {
|
|
514
|
+
if (local) {
|
|
515
|
+
return decodeTransportText(await response.text(), response.headers.get("content-type"), transportRegistry(options), bound);
|
|
516
|
+
}
|
|
470
517
|
return await decodeTransportResponse(response, transportRegistry(options), bound);
|
|
471
518
|
}
|
|
472
519
|
// A binary body comes back as a Blob rather than through `.text()`. Decoding bytes as UTF-8 does not
|
|
@@ -479,7 +526,14 @@ async function parseBody(response, options) {
|
|
|
479
526
|
// Bounded with the same reader JSON uses, but decoded leniently: `.text()` substitutes U+FFFD for a
|
|
480
527
|
// malformed sequence and callers have always seen that, so tightening to a fatal decode here would
|
|
481
528
|
// turn working text responses into failures for a reason nobody asked about.
|
|
482
|
-
|
|
529
|
+
let text;
|
|
530
|
+
if (local) {
|
|
531
|
+
text = await response.text(); // native lenient decode - same U+FFFD substitution semantics
|
|
532
|
+
assertTransportTextBounded(text, bound);
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
text = LENIENT_UTF8.decode(await readBoundedBytes(response, bound));
|
|
536
|
+
}
|
|
483
537
|
if (text === "")
|
|
484
538
|
return undefined;
|
|
485
539
|
try {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/client",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.1",
|
|
4
4
|
"description": "Browser-safe, end-to-end-typed client for @nifrajs/core servers (Eden-style proxy).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"@nifrajs/core": "^2.
|
|
42
|
+
"@nifrajs/core": "^2.9.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@nifrajs/core": "workspace:*",
|
package/src/client.ts
CHANGED
|
@@ -6,8 +6,11 @@ import {
|
|
|
6
6
|
NIFRA_BACKEND_MOUNT,
|
|
7
7
|
} from "@nifrajs/core/mount"
|
|
8
8
|
import {
|
|
9
|
+
assertTransportTextBounded,
|
|
9
10
|
createTransportCodecRegistry,
|
|
10
11
|
decodeTransportResponse,
|
|
12
|
+
decodeTransportText,
|
|
13
|
+
defaultTransportCodecs,
|
|
11
14
|
plainJsonCodec,
|
|
12
15
|
readBoundedBytes,
|
|
13
16
|
type TransportCodec,
|
|
@@ -29,6 +32,9 @@ const HTTP_VERBS: ReadonlySet<string> = new Set([
|
|
|
29
32
|
])
|
|
30
33
|
const BODY_VERBS: ReadonlySet<string> = new Set(["post", "put", "patch"])
|
|
31
34
|
|
|
35
|
+
/** Marks a fetcher whose responses are same-process objects (see {@link inProcessClient}). */
|
|
36
|
+
const LOCAL_FETCH = Symbol("nifra.local-fetch")
|
|
37
|
+
|
|
32
38
|
/**
|
|
33
39
|
* The fetch shape the client needs - looser than `typeof fetch` so an in-process bridge or a
|
|
34
40
|
* test mock satisfies it without the extra members (`.preconnect`, overloads) of the global.
|
|
@@ -103,8 +109,14 @@ export interface ClientOptions {
|
|
|
103
109
|
}
|
|
104
110
|
}
|
|
105
111
|
|
|
106
|
-
const
|
|
107
|
-
const
|
|
112
|
+
const DEFAULT_RETRY_STATUS_SET: ReadonlySet<number> = new Set([502, 503, 504])
|
|
113
|
+
const DEFAULT_IDEMPOTENT_SET: ReadonlySet<string> = new Set([
|
|
114
|
+
"GET",
|
|
115
|
+
"HEAD",
|
|
116
|
+
"OPTIONS",
|
|
117
|
+
"PUT",
|
|
118
|
+
"DELETE",
|
|
119
|
+
])
|
|
108
120
|
|
|
109
121
|
function defaultBackoff(attempt: number): number {
|
|
110
122
|
return Math.min(300 * 2 ** (attempt - 1), 3000) + Math.random() * 100
|
|
@@ -118,6 +130,8 @@ function delay(ms: number): Promise<void> {
|
|
|
118
130
|
|
|
119
131
|
/** Combine a per-call signal with a timeout into one signal; also returns the timeout signal so the
|
|
120
132
|
* caller can tell a timeout abort from a caller abort. */
|
|
133
|
+
const NO_SIGNAL: { signal?: AbortSignal | undefined; timeout?: AbortSignal | undefined } = {}
|
|
134
|
+
|
|
121
135
|
function buildSignal(
|
|
122
136
|
userSignal: AbortSignal | undefined,
|
|
123
137
|
timeoutMs: number | undefined,
|
|
@@ -126,10 +140,13 @@ function buildSignal(
|
|
|
126
140
|
timeoutMs !== undefined && typeof AbortSignal.timeout === "function"
|
|
127
141
|
? AbortSignal.timeout(timeoutMs)
|
|
128
142
|
: undefined
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
143
|
+
if (timeout === undefined) {
|
|
144
|
+
// The no-signal, no-timeout call is the overwhelming default; it shares one frozen-shape result.
|
|
145
|
+
return userSignal === undefined ? NO_SIGNAL : { signal: userSignal, timeout }
|
|
146
|
+
}
|
|
147
|
+
if (userSignal === undefined) return { signal: timeout, timeout }
|
|
148
|
+
const signal =
|
|
149
|
+
typeof AbortSignal.any === "function" ? AbortSignal.any([userSignal, timeout]) : userSignal
|
|
133
150
|
return { signal, timeout }
|
|
134
151
|
}
|
|
135
152
|
|
|
@@ -206,6 +223,11 @@ export function inProcessClient<
|
|
|
206
223
|
// is the platform-aware auto-mount path.
|
|
207
224
|
const direct: FetchFn = (url, init) => Promise.resolve(app.fetch(new Request(url, init)))
|
|
208
225
|
const bridge = options?.validateResponses === true ? withResponseValidation(app, direct) : direct
|
|
226
|
+
// Mark the bridge as same-process: its response bodies are memory the app already holds, so
|
|
227
|
+
// `parseBody` may use the native `Response.text()` read (measured ~23x cheaper than the streaming
|
|
228
|
+
// byte-cap reader) - the cap itself is still enforced on the result. Network fetchers are never
|
|
229
|
+
// marked; they keep the bounded-while-streaming read.
|
|
230
|
+
;(bridge as { [LOCAL_FETCH]?: true })[LOCAL_FETCH] = true
|
|
209
231
|
const mount: BackendMountHandler = (request, platform) =>
|
|
210
232
|
Promise.resolve((app.fetch as BackendMountHandler)(request, platform))
|
|
211
233
|
// NO_SOCKET marks the options so a typed `.ws()` call fails with a real explanation - an
|
|
@@ -242,39 +264,27 @@ export function inProcessClient<
|
|
|
242
264
|
*/
|
|
243
265
|
export const testClient = inProcessClient
|
|
244
266
|
|
|
245
|
-
function createProxy(
|
|
267
|
+
function createProxy(
|
|
268
|
+
base: string,
|
|
269
|
+
path: string,
|
|
270
|
+
options: ClientOptions,
|
|
271
|
+
cacheable = true,
|
|
272
|
+
): unknown {
|
|
246
273
|
const target = (): void => {}
|
|
274
|
+
// Every get-trap result is a pure function of (base, path, key, options), so a STATIC node
|
|
275
|
+
// memoizes them - `api.users` stops allocating a fresh Proxy (or verb closure) per lookup. A node
|
|
276
|
+
// below a param call (the apply trap) is created fresh per call, so caching on it would only add
|
|
277
|
+
// a Map nobody reads twice; those nodes (and their children) skip the cache entirely.
|
|
278
|
+
const children = cacheable ? new Map<string, unknown>() : undefined
|
|
247
279
|
return new Proxy(target, {
|
|
248
280
|
get(_target, key) {
|
|
249
281
|
// `then` guard: keep an un-awaited node proxy from looking like a thenable.
|
|
250
282
|
if (typeof key !== "string" || key === "then") return undefined
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
// `subscribe` is a reserved proxy key - a literal `/subscribe` path segment is unreachable
|
|
257
|
-
// through the typed proxy (no nifra app defines one reached this way).
|
|
258
|
-
if (key === "subscribe") {
|
|
259
|
-
return (onEvent: (event: unknown) => void, subscribeOptions?: SubscribeCallOptions) =>
|
|
260
|
-
subscribeSse(base, path, onEvent, subscribeOptions, options)
|
|
261
|
-
}
|
|
262
|
-
// Typed WebSocket handle for `app.ws()` routes - `ws` is a reserved proxy key like `subscribe`.
|
|
263
|
-
if (key === "ws") {
|
|
264
|
-
return (wsOptions?: Parameters<typeof openWebSocket>[2]) =>
|
|
265
|
-
openWebSocket(
|
|
266
|
-
base,
|
|
267
|
-
path,
|
|
268
|
-
{
|
|
269
|
-
headers: options.headers,
|
|
270
|
-
...wsOptions,
|
|
271
|
-
...(options.transport === undefined ? {} : { transport: options.transport }),
|
|
272
|
-
},
|
|
273
|
-
NO_SOCKET in options,
|
|
274
|
-
)
|
|
275
|
-
}
|
|
276
|
-
// `index` addresses the root path "/" and adds no segment.
|
|
277
|
-
return createProxy(base, key === "index" ? path : `${path}/${key}`, options)
|
|
283
|
+
const cached = children?.get(key)
|
|
284
|
+
if (cached !== undefined) return cached
|
|
285
|
+
const value = resolveSegment(base, path, key, options, cacheable)
|
|
286
|
+
children?.set(key, value)
|
|
287
|
+
return value
|
|
278
288
|
},
|
|
279
289
|
apply(_target, _thisArg, args) {
|
|
280
290
|
// A param call (`api.users({ id })`): append the single value, encoded - encoding "/"
|
|
@@ -288,12 +298,49 @@ function createProxy(base: string, path: string, options: ClientOptions): unknow
|
|
|
288
298
|
first !== null && typeof first === "object"
|
|
289
299
|
? Object.values(first as Record<string, unknown>)[0]
|
|
290
300
|
: first
|
|
291
|
-
if (value === undefined || value === null) return createProxy(base, path, options)
|
|
292
|
-
return createProxy(base, `${path}/${encodeURIComponent(String(value))}`, options)
|
|
301
|
+
if (value === undefined || value === null) return createProxy(base, path, options, false)
|
|
302
|
+
return createProxy(base, `${path}/${encodeURIComponent(String(value))}`, options, false)
|
|
293
303
|
},
|
|
294
304
|
})
|
|
295
305
|
}
|
|
296
306
|
|
|
307
|
+
/** Resolve one get-trap key on a proxy node - the (memoizable) body of the `get` trap above. */
|
|
308
|
+
function resolveSegment(
|
|
309
|
+
base: string,
|
|
310
|
+
path: string,
|
|
311
|
+
key: string,
|
|
312
|
+
options: ClientOptions,
|
|
313
|
+
cacheable: boolean,
|
|
314
|
+
): unknown {
|
|
315
|
+
if (HTTP_VERBS.has(key.toLowerCase())) {
|
|
316
|
+
return (...args: unknown[]): Promise<Result<unknown>> =>
|
|
317
|
+
execute(base, path, key.toLowerCase(), args, options)
|
|
318
|
+
}
|
|
319
|
+
// Typed SSE subscription for `app.sse()` routes. Like `fetch` on the in-process client,
|
|
320
|
+
// `subscribe` is a reserved proxy key - a literal `/subscribe` path segment is unreachable
|
|
321
|
+
// through the typed proxy (no nifra app defines one reached this way).
|
|
322
|
+
if (key === "subscribe") {
|
|
323
|
+
return (onEvent: (event: unknown) => void, subscribeOptions?: SubscribeCallOptions) =>
|
|
324
|
+
subscribeSse(base, path, onEvent, subscribeOptions, options)
|
|
325
|
+
}
|
|
326
|
+
// Typed WebSocket handle for `app.ws()` routes - `ws` is a reserved proxy key like `subscribe`.
|
|
327
|
+
if (key === "ws") {
|
|
328
|
+
return (wsOptions?: Parameters<typeof openWebSocket>[2]) =>
|
|
329
|
+
openWebSocket(
|
|
330
|
+
base,
|
|
331
|
+
path,
|
|
332
|
+
{
|
|
333
|
+
headers: options.headers,
|
|
334
|
+
...wsOptions,
|
|
335
|
+
...(options.transport === undefined ? {} : { transport: options.transport }),
|
|
336
|
+
},
|
|
337
|
+
NO_SOCKET in options,
|
|
338
|
+
)
|
|
339
|
+
}
|
|
340
|
+
// `index` addresses the root path "/" and adds no segment.
|
|
341
|
+
return createProxy(base, key === "index" ? path : `${path}/${key}`, options, cacheable)
|
|
342
|
+
}
|
|
343
|
+
|
|
297
344
|
async function execute(
|
|
298
345
|
base: string,
|
|
299
346
|
path: string,
|
|
@@ -327,11 +374,16 @@ async function execute(
|
|
|
327
374
|
|
|
328
375
|
// Safe retry: only when configured, only for idempotent methods + transient statuses, so a retry
|
|
329
376
|
// can never duplicate a side effect (a POST is never retried unless the app opts its method in).
|
|
377
|
+
// The default sets are shared module singletons; per-call Sets are built only for a custom policy.
|
|
330
378
|
const retry = options.retry
|
|
331
379
|
const maxRetries = retry === undefined ? 0 : (retry.attempts ?? 2)
|
|
332
|
-
const
|
|
333
|
-
|
|
334
|
-
|
|
380
|
+
const methodRetryable =
|
|
381
|
+
maxRetries > 0 &&
|
|
382
|
+
(retry?.methods === undefined
|
|
383
|
+
? DEFAULT_IDEMPOTENT_SET.has(method)
|
|
384
|
+
: retry.methods.some((m) => m.toUpperCase() === method))
|
|
385
|
+
const retryStatuses: ReadonlySet<number> =
|
|
386
|
+
methodRetryable && retry?.on !== undefined ? new Set(retry.on) : DEFAULT_RETRY_STATUS_SET
|
|
335
387
|
const backoff = retry?.backoff ?? defaultBackoff
|
|
336
388
|
const doFetch = options.fetch ?? fetch
|
|
337
389
|
|
|
@@ -584,12 +636,20 @@ function buildQuery(query: Record<string, unknown>): string {
|
|
|
584
636
|
return params.toString()
|
|
585
637
|
}
|
|
586
638
|
|
|
639
|
+
// A registry is immutable once built, so a custom codec's registry is built once per client and
|
|
640
|
+
// reused - constructing one per response paid Map building and validation on every parse.
|
|
641
|
+
const CUSTOM_REGISTRIES = new WeakMap<TransportCodec, TransportCodecRegistry>()
|
|
642
|
+
|
|
587
643
|
function transportRegistry(options: ClientOptions): TransportCodecRegistry {
|
|
588
644
|
if (options.transport?.registry !== undefined) return options.transport.registry
|
|
589
645
|
const codec = options.transport?.codec
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
646
|
+
if (codec === undefined || codec === plainJsonCodec) return defaultTransportCodecs
|
|
647
|
+
let registry = CUSTOM_REGISTRIES.get(codec)
|
|
648
|
+
if (registry === undefined) {
|
|
649
|
+
registry = createTransportCodecRegistry([plainJsonCodec, codec])
|
|
650
|
+
CUSTOM_REGISTRIES.set(codec, registry)
|
|
651
|
+
}
|
|
652
|
+
return registry
|
|
593
653
|
}
|
|
594
654
|
|
|
595
655
|
/**
|
|
@@ -640,6 +700,10 @@ function isPayloadTooLarge(cause: unknown): boolean {
|
|
|
640
700
|
)
|
|
641
701
|
}
|
|
642
702
|
|
|
703
|
+
// Shared lenient decoder for the streamed textual path (whole-buffer decode is stateless; building
|
|
704
|
+
// a TextDecoder per response cost ~115ns).
|
|
705
|
+
const LENIENT_UTF8 = new TextDecoder()
|
|
706
|
+
|
|
643
707
|
async function parseBody(response: Response, options: ClientOptions): Promise<unknown> {
|
|
644
708
|
if (response.status === 204) return undefined
|
|
645
709
|
const contentType = response.headers.get("content-type")?.toLowerCase() ?? ""
|
|
@@ -651,10 +715,24 @@ async function parseBody(response: Response, options: ClientOptions): Promise<un
|
|
|
651
715
|
// the transport path, so an app that set it there keeps the number it chose.
|
|
652
716
|
const decodedBytes = options.transport?.maxBytes ?? options.maxDecodedBytes
|
|
653
717
|
const bound = decodedBytes === undefined ? {} : { maxBytes: decodedBytes }
|
|
718
|
+
// In-process responses (the marked fetcher) hold their body as same-process memory the app
|
|
719
|
+
// already allocated, so the streaming byte-cap reader protects nothing there - the native read
|
|
720
|
+
// is ~23x cheaper and the SAME cap is enforced on the result (identical error). A network
|
|
721
|
+
// fetcher is never marked and keeps the bounded-while-streaming read.
|
|
722
|
+
const local =
|
|
723
|
+
(options.fetch as { readonly [LOCAL_FETCH]?: true } | undefined)?.[LOCAL_FETCH] === true
|
|
654
724
|
if (
|
|
655
725
|
contentType.startsWith("application/json") ||
|
|
656
726
|
contentType.startsWith("application/vnd.nifra.")
|
|
657
727
|
) {
|
|
728
|
+
if (local) {
|
|
729
|
+
return decodeTransportText(
|
|
730
|
+
await response.text(),
|
|
731
|
+
response.headers.get("content-type"),
|
|
732
|
+
transportRegistry(options),
|
|
733
|
+
bound,
|
|
734
|
+
)
|
|
735
|
+
}
|
|
658
736
|
return await decodeTransportResponse(response, transportRegistry(options), bound)
|
|
659
737
|
}
|
|
660
738
|
// A binary body comes back as a Blob rather than through `.text()`. Decoding bytes as UTF-8 does not
|
|
@@ -666,7 +744,13 @@ async function parseBody(response: Response, options: ClientOptions): Promise<un
|
|
|
666
744
|
// Bounded with the same reader JSON uses, but decoded leniently: `.text()` substitutes U+FFFD for a
|
|
667
745
|
// malformed sequence and callers have always seen that, so tightening to a fatal decode here would
|
|
668
746
|
// turn working text responses into failures for a reason nobody asked about.
|
|
669
|
-
|
|
747
|
+
let text: string
|
|
748
|
+
if (local) {
|
|
749
|
+
text = await response.text() // native lenient decode - same U+FFFD substitution semantics
|
|
750
|
+
assertTransportTextBounded(text, bound)
|
|
751
|
+
} else {
|
|
752
|
+
text = LENIENT_UTF8.decode(await readBoundedBytes(response, bound))
|
|
753
|
+
}
|
|
670
754
|
if (text === "") return undefined
|
|
671
755
|
try {
|
|
672
756
|
return JSON.parse(text)
|