@astrale-os/kernel-client 0.2.0
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/batch.d.ts +26 -0
- package/dist/client/batch.d.ts.map +1 -0
- package/dist/client/batch.js +8 -0
- package/dist/client/batch.js.map +1 -0
- package/dist/client/bound.d.ts +27 -0
- package/dist/client/bound.d.ts.map +1 -0
- package/dist/client/bound.js +14 -0
- package/dist/client/bound.js.map +1 -0
- package/dist/client/client.d.ts +93 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +393 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/config.d.ts +112 -0
- package/dist/client/config.d.ts.map +1 -0
- package/dist/client/config.js +10 -0
- package/dist/client/config.js.map +1 -0
- package/dist/client/fn-map.d.ts +61 -0
- package/dist/client/fn-map.d.ts.map +1 -0
- package/dist/client/fn-map.js +2 -0
- package/dist/client/fn-map.js.map +1 -0
- package/dist/client/freeze.d.ts +32 -0
- package/dist/client/freeze.d.ts.map +1 -0
- package/dist/client/freeze.js +42 -0
- package/dist/client/freeze.js.map +1 -0
- package/dist/client/hooks.d.ts +49 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +2 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -0
- package/dist/delegation/cache.d.ts +133 -0
- package/dist/delegation/cache.d.ts.map +1 -0
- package/dist/delegation/cache.js +258 -0
- package/dist/delegation/cache.js.map +1 -0
- package/dist/delegation/errors.d.ts +44 -0
- package/dist/delegation/errors.d.ts.map +1 -0
- package/dist/delegation/errors.js +62 -0
- package/dist/delegation/errors.js.map +1 -0
- package/dist/delegation/index.d.ts +6 -0
- package/dist/delegation/index.d.ts.map +1 -0
- package/dist/delegation/index.js +4 -0
- package/dist/delegation/index.js.map +1 -0
- package/dist/delegation/policy.d.ts +175 -0
- package/dist/delegation/policy.d.ts.map +1 -0
- package/dist/delegation/policy.js +109 -0
- package/dist/delegation/policy.js.map +1 -0
- package/dist/errors/errors.d.ts +103 -0
- package/dist/errors/errors.d.ts.map +1 -0
- package/dist/errors/errors.js +170 -0
- package/dist/errors/errors.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/session-error.d.ts +21 -0
- package/dist/errors/session-error.d.ts.map +1 -0
- package/dist/errors/session-error.js +25 -0
- package/dist/errors/session-error.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/pacer/batcher.d.ts +11 -0
- package/dist/pacer/batcher.d.ts.map +1 -0
- package/dist/pacer/batcher.js +15 -0
- package/dist/pacer/batcher.js.map +1 -0
- package/dist/pacer/defaults.d.ts +18 -0
- package/dist/pacer/defaults.d.ts.map +1 -0
- package/dist/pacer/defaults.js +18 -0
- package/dist/pacer/defaults.js.map +1 -0
- package/dist/pacer/index.d.ts +10 -0
- package/dist/pacer/index.d.ts.map +1 -0
- package/dist/pacer/index.js +11 -0
- package/dist/pacer/index.js.map +1 -0
- package/dist/pacer/queue.d.ts +11 -0
- package/dist/pacer/queue.d.ts.map +1 -0
- package/dist/pacer/queue.js +15 -0
- package/dist/pacer/queue.js.map +1 -0
- package/dist/pacer/rate-limiter.d.ts +11 -0
- package/dist/pacer/rate-limiter.d.ts.map +1 -0
- package/dist/pacer/rate-limiter.js +15 -0
- package/dist/pacer/rate-limiter.js.map +1 -0
- package/dist/pacer/retry.d.ts +14 -0
- package/dist/pacer/retry.d.ts.map +1 -0
- package/dist/pacer/retry.js +50 -0
- package/dist/pacer/retry.js.map +1 -0
- package/dist/persistence/index.d.ts +3 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +2 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/persistence.d.ts +52 -0
- package/dist/persistence/persistence.d.ts.map +1 -0
- package/dist/persistence/persistence.js +32 -0
- package/dist/persistence/persistence.js.map +1 -0
- package/dist/pool/errors.d.ts +13 -0
- package/dist/pool/errors.d.ts.map +1 -0
- package/dist/pool/errors.js +16 -0
- package/dist/pool/errors.js.map +1 -0
- package/dist/pool/index.d.ts +4 -0
- package/dist/pool/index.d.ts.map +1 -0
- package/dist/pool/index.js +3 -0
- package/dist/pool/index.js.map +1 -0
- package/dist/pool/pool.d.ts +63 -0
- package/dist/pool/pool.d.ts.map +1 -0
- package/dist/pool/pool.js +87 -0
- package/dist/pool/pool.js.map +1 -0
- package/dist/redirect/errors.d.ts +45 -0
- package/dist/redirect/errors.d.ts.map +1 -0
- package/dist/redirect/errors.js +52 -0
- package/dist/redirect/errors.js.map +1 -0
- package/dist/redirect/index.d.ts +4 -0
- package/dist/redirect/index.d.ts.map +1 -0
- package/dist/redirect/index.js +3 -0
- package/dist/redirect/index.js.map +1 -0
- package/dist/redirect/policy.d.ts +79 -0
- package/dist/redirect/policy.d.ts.map +1 -0
- package/dist/redirect/policy.js +69 -0
- package/dist/redirect/policy.js.map +1 -0
- package/dist/schema/call-args.d.ts +6 -0
- package/dist/schema/call-args.d.ts.map +1 -0
- package/dist/schema/call-args.js +21 -0
- package/dist/schema/call-args.js.map +1 -0
- package/dist/schema/class-proxy.d.ts +8 -0
- package/dist/schema/class-proxy.d.ts.map +1 -0
- package/dist/schema/class-proxy.js +38 -0
- package/dist/schema/class-proxy.js.map +1 -0
- package/dist/schema/extract.d.ts +9 -0
- package/dist/schema/extract.d.ts.map +1 -0
- package/dist/schema/extract.js +16 -0
- package/dist/schema/extract.js.map +1 -0
- package/dist/schema/from-entries.d.ts +12 -0
- package/dist/schema/from-entries.d.ts.map +1 -0
- package/dist/schema/from-entries.js +39 -0
- package/dist/schema/from-entries.js.map +1 -0
- package/dist/schema/index.d.ts +11 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +9 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/node-proxy.d.ts +9 -0
- package/dist/schema/node-proxy.d.ts.map +1 -0
- package/dist/schema/node-proxy.js +32 -0
- package/dist/schema/node-proxy.js.map +1 -0
- package/dist/schema/proxy-types.d.ts +112 -0
- package/dist/schema/proxy-types.d.ts.map +1 -0
- package/dist/schema/proxy-types.js +2 -0
- package/dist/schema/proxy-types.js.map +1 -0
- package/dist/schema/registry.d.ts +51 -0
- package/dist/schema/registry.d.ts.map +1 -0
- package/dist/schema/registry.js +111 -0
- package/dist/schema/registry.js.map +1 -0
- package/dist/schema/resolve.d.ts +26 -0
- package/dist/schema/resolve.d.ts.map +1 -0
- package/dist/schema/resolve.js +27 -0
- package/dist/schema/resolve.js.map +1 -0
- package/dist/schema/typed-client.d.ts +10 -0
- package/dist/schema/typed-client.d.ts.map +1 -0
- package/dist/schema/typed-client.js +26 -0
- package/dist/schema/typed-client.js.map +1 -0
- package/dist/schema/types.d.ts +9 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +2 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/session/bound.d.ts +11 -0
- package/dist/session/bound.d.ts.map +1 -0
- package/dist/session/bound.js +24 -0
- package/dist/session/bound.js.map +1 -0
- package/dist/session/client-session.d.ts +61 -0
- package/dist/session/client-session.d.ts.map +1 -0
- package/dist/session/client-session.js +635 -0
- package/dist/session/client-session.js.map +1 -0
- package/dist/session/config.d.ts +157 -0
- package/dist/session/config.d.ts.map +1 -0
- package/dist/session/config.js +2 -0
- package/dist/session/config.js.map +1 -0
- package/dist/session/errors/index.d.ts +6 -0
- package/dist/session/errors/index.d.ts.map +1 -0
- package/dist/session/errors/index.js +8 -0
- package/dist/session/errors/index.js.map +1 -0
- package/dist/session/errors/session-errors.d.ts +52 -0
- package/dist/session/errors/session-errors.d.ts.map +1 -0
- package/dist/session/errors/session-errors.js +70 -0
- package/dist/session/errors/session-errors.js.map +1 -0
- package/dist/session/forward.d.ts +14 -0
- package/dist/session/forward.d.ts.map +1 -0
- package/dist/session/forward.js +44 -0
- package/dist/session/forward.js.map +1 -0
- package/dist/session/helpers.d.ts +23 -0
- package/dist/session/helpers.d.ts.map +1 -0
- package/dist/session/helpers.js +56 -0
- package/dist/session/helpers.js.map +1 -0
- package/dist/session/hooks.d.ts +140 -0
- package/dist/session/hooks.d.ts.map +1 -0
- package/dist/session/hooks.js +2 -0
- package/dist/session/hooks.js.map +1 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +3 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/types.d.ts +38 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +2 -0
- package/dist/session/types.js.map +1 -0
- package/dist/transport/binary.d.ts +15 -0
- package/dist/transport/binary.d.ts.map +1 -0
- package/dist/transport/binary.js +2 -0
- package/dist/transport/binary.js.map +1 -0
- package/dist/transport/contract.d.ts +58 -0
- package/dist/transport/contract.d.ts.map +1 -0
- package/dist/transport/contract.js +11 -0
- package/dist/transport/contract.js.map +1 -0
- package/dist/transport/fetch.d.ts +28 -0
- package/dist/transport/fetch.d.ts.map +1 -0
- package/dist/transport/fetch.js +74 -0
- package/dist/transport/fetch.js.map +1 -0
- package/dist/transport/http-envelope.d.ts +49 -0
- package/dist/transport/http-envelope.d.ts.map +1 -0
- package/dist/transport/http-envelope.js +405 -0
- package/dist/transport/http-envelope.js.map +1 -0
- package/dist/transport/http-routed.d.ts +61 -0
- package/dist/transport/http-routed.d.ts.map +1 -0
- package/dist/transport/http-routed.js +409 -0
- package/dist/transport/http-routed.js.map +1 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +6 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/request-id.d.ts +9 -0
- package/dist/transport/request-id.d.ts.map +1 -0
- package/dist/transport/request-id.js +12 -0
- package/dist/transport/request-id.js.map +1 -0
- package/dist/transport/ws-envelope.d.ts +74 -0
- package/dist/transport/ws-envelope.d.ts.map +1 -0
- package/dist/transport/ws-envelope.js +560 -0
- package/dist/transport/ws-envelope.js.map +1 -0
- package/dist/util/race-signal.d.ts +12 -0
- package/dist/util/race-signal.d.ts.map +1 -0
- package/dist/util/race-signal.js +34 -0
- package/dist/util/race-signal.js.map +1 -0
- package/dist/wire/controller.d.ts +38 -0
- package/dist/wire/controller.d.ts.map +1 -0
- package/dist/wire/controller.js +38 -0
- package/dist/wire/controller.js.map +1 -0
- package/dist/wire/index.d.ts +7 -0
- package/dist/wire/index.d.ts.map +1 -0
- package/dist/wire/index.js +4 -0
- package/dist/wire/index.js.map +1 -0
- package/dist/wire/meta.d.ts +81 -0
- package/dist/wire/meta.d.ts.map +1 -0
- package/dist/wire/meta.js +44 -0
- package/dist/wire/meta.js.map +1 -0
- package/dist/wire/sse.d.ts +67 -0
- package/dist/wire/sse.d.ts.map +1 -0
- package/dist/wire/sse.js +170 -0
- package/dist/wire/sse.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native HTTP routed transport.
|
|
3
|
+
*
|
|
4
|
+
* Speaks a function's route binding — method, path template, query,
|
|
5
|
+
* headers, body modes (`'*'`, `Record<string, BodyPick>`), configurable
|
|
6
|
+
* credential source. The peer of the kernel envelope: same function,
|
|
7
|
+
* different wire shape.
|
|
8
|
+
*
|
|
9
|
+
* Output modes:
|
|
10
|
+
* - value → JSON body (errors via HTTP status + `{ error: { code, … } }`)
|
|
11
|
+
* - stream → raw SSE (one event per yielded value, `event: end` / `event: error`)
|
|
12
|
+
* - binary → raw bytes with `Content-Type` from response headers
|
|
13
|
+
*
|
|
14
|
+
* `batch` is not supported — routed has no multi-request shape.
|
|
15
|
+
* `signal` is a fire-and-forget call.
|
|
16
|
+
*
|
|
17
|
+
* `url` is `undefined` — each call brings its own `remoteUrl` via the
|
|
18
|
+
* `RoutedTransportRequest`.
|
|
19
|
+
*/
|
|
20
|
+
import { KERNEL_ERROR_CODES, jsonCodec, substituteTemplate } from '@astrale-os/kernel-api';
|
|
21
|
+
import { KernelError, UnsupportedTransportError, WebOSError, mapServerError, withDetails, } from '../errors/errors';
|
|
22
|
+
import { createController } from '../wire/controller';
|
|
23
|
+
import { DEFAULT_REQUEST_TIMEOUT_MS, headersToRecord } from '../wire/meta';
|
|
24
|
+
import { parseRawSseEvent, readSseBlocks } from '../wire/sse';
|
|
25
|
+
import { safeFetch } from './fetch';
|
|
26
|
+
export class HttpRoutedTransport {
|
|
27
|
+
name = 'http-routed';
|
|
28
|
+
url = undefined;
|
|
29
|
+
defaultTimeout;
|
|
30
|
+
extraHeaders;
|
|
31
|
+
fetchImpl;
|
|
32
|
+
constructor(config = {}) {
|
|
33
|
+
this.defaultTimeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
34
|
+
this.extraHeaders = config.headers ?? {};
|
|
35
|
+
this.fetchImpl = config.fetch ?? globalThis.fetch.bind(globalThis);
|
|
36
|
+
}
|
|
37
|
+
disconnect() {
|
|
38
|
+
// Stateless — nothing to release.
|
|
39
|
+
}
|
|
40
|
+
// ─── call ─────────────────────────────────────────────────────────────────
|
|
41
|
+
async call(request) {
|
|
42
|
+
const req = this.narrow(request);
|
|
43
|
+
const { fetchUrl, init } = this.buildRequest(req, 'application/json');
|
|
44
|
+
init.redirect = 'manual';
|
|
45
|
+
const started = Date.now();
|
|
46
|
+
const { signal, clear } = createController({
|
|
47
|
+
signal: req.signal,
|
|
48
|
+
timeout: req.timeout ?? this.defaultTimeout,
|
|
49
|
+
});
|
|
50
|
+
init.signal = signal;
|
|
51
|
+
try {
|
|
52
|
+
const res = await safeFetch(fetchUrl, init, this.fetchImpl);
|
|
53
|
+
const meta = this.metaFromResponse(res, started);
|
|
54
|
+
const redirection = await parseRedirect(res);
|
|
55
|
+
if (redirection)
|
|
56
|
+
return { kind: 'redirect', redirection, meta };
|
|
57
|
+
if (!res.ok) {
|
|
58
|
+
throw this.decorate(await this.decodeError(res), req, fetchUrl, meta);
|
|
59
|
+
}
|
|
60
|
+
if (res.status === 204)
|
|
61
|
+
return { kind: 'value', value: undefined, meta };
|
|
62
|
+
const text = await res.text();
|
|
63
|
+
if (!text)
|
|
64
|
+
return { kind: 'value', value: undefined, meta };
|
|
65
|
+
return { kind: 'value', value: jsonCodec.decode(text), meta };
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
clear();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ─── signal ───────────────────────────────────────────────────────────────
|
|
72
|
+
signal(request) {
|
|
73
|
+
// True fire-and-forget: issue the fetch but never read the body.
|
|
74
|
+
// Piggybacking on `call()` would `res.text()` and pay the full
|
|
75
|
+
// response-read latency — unnecessary when the caller doesn't want
|
|
76
|
+
// the result.
|
|
77
|
+
const req = this.narrow(request);
|
|
78
|
+
const { fetchUrl, init } = this.buildRequest(req, 'application/json');
|
|
79
|
+
// Don't use `redirect: 'manual'` here — we're not going to follow,
|
|
80
|
+
// and `manual` can trip on `opaqueredirect` in some runtimes.
|
|
81
|
+
safeFetch(fetchUrl, init, this.fetchImpl).catch(() => {
|
|
82
|
+
// Signals swallow transport errors; client observes via `onError`.
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// ─── binary ───────────────────────────────────────────────────────────────
|
|
86
|
+
async binary(request) {
|
|
87
|
+
const req = this.narrow(request);
|
|
88
|
+
const { fetchUrl, init } = this.buildRequest(req, '*/*');
|
|
89
|
+
init.redirect = 'manual';
|
|
90
|
+
const started = Date.now();
|
|
91
|
+
const { signal, clear } = createController({
|
|
92
|
+
signal: req.signal,
|
|
93
|
+
timeout: req.timeout ?? this.defaultTimeout,
|
|
94
|
+
});
|
|
95
|
+
init.signal = signal;
|
|
96
|
+
try {
|
|
97
|
+
const res = await safeFetch(fetchUrl, init, this.fetchImpl);
|
|
98
|
+
const meta = this.metaFromResponse(res, started);
|
|
99
|
+
const redirection = await parseRedirect(res);
|
|
100
|
+
if (redirection)
|
|
101
|
+
return { kind: 'redirect', redirection, meta };
|
|
102
|
+
if (!res.ok) {
|
|
103
|
+
throw this.decorate(await this.decodeError(res), req, fetchUrl, meta);
|
|
104
|
+
}
|
|
105
|
+
const contentType = res.headers.get('content-type') ?? 'application/octet-stream';
|
|
106
|
+
return {
|
|
107
|
+
kind: 'binary',
|
|
108
|
+
response: {
|
|
109
|
+
contentType,
|
|
110
|
+
status: res.status,
|
|
111
|
+
body: res.body
|
|
112
|
+
? res.body
|
|
113
|
+
: new Uint8Array(await res.arrayBuffer()),
|
|
114
|
+
},
|
|
115
|
+
meta,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
clear();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// ─── stream ───────────────────────────────────────────────────────────────
|
|
123
|
+
async stream(request) {
|
|
124
|
+
const req = this.narrow(request);
|
|
125
|
+
const { fetchUrl, init } = this.buildRequest(req, 'text/event-stream');
|
|
126
|
+
init.redirect = 'manual';
|
|
127
|
+
const started = Date.now();
|
|
128
|
+
const { signal, clear } = createController({
|
|
129
|
+
signal: req.signal,
|
|
130
|
+
timeout: req.timeout ?? this.defaultTimeout,
|
|
131
|
+
});
|
|
132
|
+
init.signal = signal;
|
|
133
|
+
let res;
|
|
134
|
+
try {
|
|
135
|
+
res = await safeFetch(fetchUrl, init, this.fetchImpl);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
clear();
|
|
139
|
+
throw err;
|
|
140
|
+
}
|
|
141
|
+
const meta = this.metaFromResponse(res, started);
|
|
142
|
+
const redirection = await parseRedirect(res);
|
|
143
|
+
if (redirection) {
|
|
144
|
+
clear();
|
|
145
|
+
return { kind: 'redirect', redirection, meta };
|
|
146
|
+
}
|
|
147
|
+
if (!res.ok) {
|
|
148
|
+
try {
|
|
149
|
+
throw this.decorate(await this.decodeError(res), req, fetchUrl, meta);
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
clear();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
kind: 'stream',
|
|
157
|
+
chunks: readRawSseChunks(res, req.signal, clear),
|
|
158
|
+
meta,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// ─── batch ────────────────────────────────────────────────────────────────
|
|
162
|
+
async batch(_requests) {
|
|
163
|
+
throw new UnsupportedTransportError('http-routed does not support batch; use http-envelope');
|
|
164
|
+
}
|
|
165
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────
|
|
166
|
+
narrow(request) {
|
|
167
|
+
const r = request;
|
|
168
|
+
if (!r.route || !r.remoteUrl) {
|
|
169
|
+
// Missing route/remoteUrl is a programmer error at the client layer —
|
|
170
|
+
// the client resolves these from the schema before dispatching.
|
|
171
|
+
throw new KernelError('http-routed requires a route binding + remoteUrl on the request', KERNEL_ERROR_CODES.INTERNAL_ERROR, 'PROGRAMMER_ERROR');
|
|
172
|
+
}
|
|
173
|
+
return r;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Build absolute URL + RequestInit for a routed call:
|
|
177
|
+
* 1) substitute host/path placeholders 2) append query 3) headers
|
|
178
|
+
* (incl. credential) 4) body per `route.body` mode.
|
|
179
|
+
*/
|
|
180
|
+
buildRequest(request, accept) {
|
|
181
|
+
const { route, remoteUrl } = request;
|
|
182
|
+
const params = (request.params ?? {});
|
|
183
|
+
const template = remoteUrl.replace(/\/$/, '') + route.path;
|
|
184
|
+
// `substituteTemplate` throws `Error('Missing placeholder value: ...')`
|
|
185
|
+
// on an unresolved {placeholder}; `new URL()` throws `TypeError` on
|
|
186
|
+
// a malformed result (e.g. partial substitution leaving literal braces
|
|
187
|
+
// that some runtimes tolerate before URL parsing fails). Both are
|
|
188
|
+
// caller-origin schema/param mismatches — surface as one typed error.
|
|
189
|
+
let url;
|
|
190
|
+
try {
|
|
191
|
+
const substituted = substituteTemplate(template, params);
|
|
192
|
+
url = new URL(substituted);
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
throw new KernelError(`Invalid routed URL for "${request.method}" at "${template}": ${err instanceof Error ? err.message : String(err)}`, KERNEL_ERROR_CODES.INTERNAL_ERROR, 'INVALID_URL', { remoteUrl, path: route.path, cause: err instanceof Error ? err.message : String(err) });
|
|
196
|
+
}
|
|
197
|
+
if (route.query) {
|
|
198
|
+
for (const [field, wireName] of Object.entries(route.query)) {
|
|
199
|
+
const value = params[field];
|
|
200
|
+
if (value !== undefined && value !== null) {
|
|
201
|
+
url.searchParams.set(wireName, String(value));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const headers = { accept, ...this.extraHeaders };
|
|
206
|
+
if (route.headers) {
|
|
207
|
+
for (const [field, pick] of Object.entries(route.headers)) {
|
|
208
|
+
if (pick === '*') {
|
|
209
|
+
const dict = params[field];
|
|
210
|
+
if (dict && typeof dict === 'object') {
|
|
211
|
+
for (const [k, v] of Object.entries(dict)) {
|
|
212
|
+
headers[k] = v;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
const value = params[field];
|
|
218
|
+
if (value !== undefined && value !== null) {
|
|
219
|
+
headers[pick] = String(value);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const credSource = Array.isArray(route.credential)
|
|
225
|
+
? (route.credential[0] ?? { in: 'header', name: 'authorization' })
|
|
226
|
+
: (route.credential ?? { in: 'header', name: 'authorization' });
|
|
227
|
+
applyCredential(url, headers, credSource, request.credential);
|
|
228
|
+
const fetchMethod = route.method === '*' ? (params._method ?? 'POST') : route.method;
|
|
229
|
+
let body;
|
|
230
|
+
if (route.body !== undefined && hasBody(fetchMethod)) {
|
|
231
|
+
if (route.body === '*') {
|
|
232
|
+
const claimed = collectClaimedFields(route, remoteUrl);
|
|
233
|
+
const bodyObj = {};
|
|
234
|
+
for (const [k, v] of Object.entries(params)) {
|
|
235
|
+
if (claimed.has(k) || k === '_method')
|
|
236
|
+
continue;
|
|
237
|
+
bodyObj[k] = v;
|
|
238
|
+
}
|
|
239
|
+
body = JSON.stringify(bodyObj);
|
|
240
|
+
headers['content-type'] = 'application/json';
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
const entries = Object.entries(route.body);
|
|
244
|
+
const wholeEntry = entries.find(([_, pick]) => typeof pick === 'object' && 'as' in pick);
|
|
245
|
+
if (wholeEntry) {
|
|
246
|
+
const [field, pick] = wholeEntry;
|
|
247
|
+
const value = params[field];
|
|
248
|
+
if (value === undefined || value === null) {
|
|
249
|
+
// Silent empty body is almost never what the caller intended;
|
|
250
|
+
// surface as a typed programmer error rather than hit the wire
|
|
251
|
+
// with `undefined`.
|
|
252
|
+
throw new KernelError(`Routed "${pick.as}" body requires the "${field}" param to be defined (got ${value === null ? 'null' : 'undefined'})`, KERNEL_ERROR_CODES.VALIDATION_ERROR, 'MISSING_BODY_FIELD', { field, mode: pick.as });
|
|
253
|
+
}
|
|
254
|
+
if (pick.as === 'text') {
|
|
255
|
+
body = typeof value === 'string' ? value : String(value);
|
|
256
|
+
}
|
|
257
|
+
else if (value instanceof Uint8Array) {
|
|
258
|
+
body = value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
throw new KernelError(`Routed "bytes" body requires the "${field}" param to be a Uint8Array`, KERNEL_ERROR_CODES.VALIDATION_ERROR, 'VALIDATION_ERROR', { field });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
const bodyObj = {};
|
|
266
|
+
for (const [field, wireName] of entries) {
|
|
267
|
+
if (params[field] !== undefined)
|
|
268
|
+
bodyObj[wireName] = params[field];
|
|
269
|
+
}
|
|
270
|
+
body = JSON.stringify(bodyObj);
|
|
271
|
+
headers['content-type'] = 'application/json';
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
fetchUrl: url.toString(),
|
|
277
|
+
init: { method: fetchMethod, headers, body },
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
async decodeError(res) {
|
|
281
|
+
const contentType = res.headers.get('content-type') ?? '';
|
|
282
|
+
if (contentType.includes('json')) {
|
|
283
|
+
try {
|
|
284
|
+
const text = await res.text();
|
|
285
|
+
const parsed = jsonCodec.decode(text);
|
|
286
|
+
if (parsed?.error) {
|
|
287
|
+
const e = parsed.error;
|
|
288
|
+
return mapServerError(typeof e.code === 'number' ? e.code : KERNEL_ERROR_CODES.INTERNAL_ERROR, typeof e.message === 'string' ? e.message : `HTTP ${res.status}`, e.data);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
/* fall through */
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return mapServerError(KERNEL_ERROR_CODES.INTERNAL_ERROR, `HTTP ${res.status} ${res.statusText}`);
|
|
296
|
+
}
|
|
297
|
+
metaFromResponse(res, started) {
|
|
298
|
+
return {
|
|
299
|
+
durationMs: Date.now() - started,
|
|
300
|
+
codec: 'json',
|
|
301
|
+
wire: { kind: 'http', status: res.status, headers: headersToRecord(res.headers) },
|
|
302
|
+
transport: this.name,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
decorate(error, request, target, meta) {
|
|
306
|
+
if (!(error instanceof WebOSError))
|
|
307
|
+
return error;
|
|
308
|
+
const details = {
|
|
309
|
+
method: request.method,
|
|
310
|
+
params: request.params,
|
|
311
|
+
url: target,
|
|
312
|
+
transport: this.name,
|
|
313
|
+
correlationId: request.correlationId,
|
|
314
|
+
meta,
|
|
315
|
+
};
|
|
316
|
+
withDetails(error, details);
|
|
317
|
+
return error;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// ─── Module-private helpers ────────────────────────────────────────────────
|
|
321
|
+
function applyCredential(url, headers, source, credential) {
|
|
322
|
+
if (credential === undefined || credential === '' || credential === null)
|
|
323
|
+
return;
|
|
324
|
+
const value = String(credential);
|
|
325
|
+
switch (source.in) {
|
|
326
|
+
case 'header':
|
|
327
|
+
headers[source.name ?? 'authorization'] = value;
|
|
328
|
+
return;
|
|
329
|
+
case 'query':
|
|
330
|
+
url.searchParams.set(source.name ?? 'credential', value);
|
|
331
|
+
return;
|
|
332
|
+
case 'cookie': {
|
|
333
|
+
const existing = headers['cookie'];
|
|
334
|
+
const cookie = `${source.name}=${encodeURIComponent(value)}`;
|
|
335
|
+
headers['cookie'] = existing ? `${existing}; ${cookie}` : cookie;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function collectClaimedFields(route, remoteUrl) {
|
|
340
|
+
const claimed = new Set();
|
|
341
|
+
for (const m of remoteUrl.matchAll(/\{([a-zA-Z_]\w*)\}/g))
|
|
342
|
+
claimed.add(m[1]);
|
|
343
|
+
for (const m of route.path.matchAll(/\{([a-zA-Z_]\w*)\+?\}/g))
|
|
344
|
+
claimed.add(m[1]);
|
|
345
|
+
if (route.query)
|
|
346
|
+
for (const k of Object.keys(route.query))
|
|
347
|
+
claimed.add(k);
|
|
348
|
+
if (route.headers)
|
|
349
|
+
for (const k of Object.keys(route.headers))
|
|
350
|
+
claimed.add(k);
|
|
351
|
+
return claimed;
|
|
352
|
+
}
|
|
353
|
+
function hasBody(method) {
|
|
354
|
+
return method === 'POST' || method === 'PUT' || method === 'PATCH' || method === 'DELETE';
|
|
355
|
+
}
|
|
356
|
+
function safeJsonParse(text) {
|
|
357
|
+
try {
|
|
358
|
+
return JSON.parse(text);
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return undefined;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Detect a manual redirect response and extract the `CallRedirection` payload.
|
|
366
|
+
* Returns `undefined` for non-redirect statuses without reading the body.
|
|
367
|
+
*/
|
|
368
|
+
async function parseRedirect(res) {
|
|
369
|
+
const isStatusRedirect = res.status >= 300 && res.status < 400;
|
|
370
|
+
const isOpaque = res.type === 'opaqueredirect';
|
|
371
|
+
if (!isStatusRedirect && !isOpaque)
|
|
372
|
+
return undefined;
|
|
373
|
+
const location = res.headers.get('location');
|
|
374
|
+
if (isOpaque) {
|
|
375
|
+
return location ? { path: '', url: location } : undefined;
|
|
376
|
+
}
|
|
377
|
+
try {
|
|
378
|
+
const body = await res.clone().text();
|
|
379
|
+
if (body) {
|
|
380
|
+
const parsed = jsonCodec.decode(body);
|
|
381
|
+
if (parsed?.redirect)
|
|
382
|
+
return parsed.redirect;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
/* body unreadable — fall through to Location-only */
|
|
387
|
+
}
|
|
388
|
+
return location ? { path: '', url: location } : undefined;
|
|
389
|
+
}
|
|
390
|
+
async function* readRawSseChunks(res, callerSignal, onClose) {
|
|
391
|
+
for await (const block of readSseBlocks(res, callerSignal, onClose)) {
|
|
392
|
+
const event = parseRawSseEvent(block);
|
|
393
|
+
if (!event)
|
|
394
|
+
continue;
|
|
395
|
+
if (event.event === 'end')
|
|
396
|
+
return;
|
|
397
|
+
if (event.event === 'error') {
|
|
398
|
+
const parsed = safeJsonParse(event.data);
|
|
399
|
+
const err = parsed && typeof parsed === 'object' && 'code' in parsed
|
|
400
|
+
? parsed
|
|
401
|
+
: { code: KERNEL_ERROR_CODES.INTERNAL_ERROR, message: 'Stream error' };
|
|
402
|
+
throw mapServerError(err.code, err.message ?? 'Stream error', err.data);
|
|
403
|
+
}
|
|
404
|
+
const parsed = safeJsonParse(event.data);
|
|
405
|
+
if (parsed !== undefined)
|
|
406
|
+
yield parsed;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=http-routed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-routed.js","sourceRoot":"","sources":["../../src/transport/http-routed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { BatchEntry, Transport, TransportRequest } from './contract';
|
|
2
|
+
export { HttpEnvelopeTransport, type HttpEnvelopeTransportConfig } from './http-envelope';
|
|
3
|
+
export { WsEnvelopeTransport, type WsEnvelopeTransportConfig } from './ws-envelope';
|
|
4
|
+
export { HttpRoutedTransport, type HttpRoutedTransportConfig, type RoutedTransportRequest, } from './http-routed';
|
|
5
|
+
export type { BinaryResponse } from './binary';
|
|
6
|
+
export { safeFetch } from './fetch';
|
|
7
|
+
export { nextRequestId } from './request-id';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EACL,mBAAmB,EACnB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { HttpEnvelopeTransport } from './http-envelope';
|
|
2
|
+
export { WsEnvelopeTransport } from './ws-envelope';
|
|
3
|
+
export { HttpRoutedTransport, } from './http-routed';
|
|
4
|
+
export { safeFetch } from './fetch';
|
|
5
|
+
export { nextRequestId } from './request-id';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAoC,MAAM,iBAAiB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAkC,MAAM,eAAe,CAAA;AACnF,OAAO,EACL,mBAAmB,GAGpB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monotonic request id counter shared across all client transports.
|
|
3
|
+
*
|
|
4
|
+
* Process-local. Numeric ids fit the kernel envelope's `RequestId` shape and
|
|
5
|
+
* give us O(1) generation. The counter is module-private; consumers call
|
|
6
|
+
* `nextRequestId()`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function nextRequestId(): number;
|
|
9
|
+
//# sourceMappingURL=request-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-id.d.ts","sourceRoot":"","sources":["../../src/transport/request-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monotonic request id counter shared across all client transports.
|
|
3
|
+
*
|
|
4
|
+
* Process-local. Numeric ids fit the kernel envelope's `RequestId` shape and
|
|
5
|
+
* give us O(1) generation. The counter is module-private; consumers call
|
|
6
|
+
* `nextRequestId()`.
|
|
7
|
+
*/
|
|
8
|
+
let counter = 0;
|
|
9
|
+
export function nextRequestId() {
|
|
10
|
+
return ++counter;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=request-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-id.js","sourceRoot":"","sources":["../../src/transport/request-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,IAAI,OAAO,GAAG,CAAC,CAAA;AAEf,MAAM,UAAU,aAAa;IAC3B,OAAO,EAAE,OAAO,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kernel-envelope WebSocket transport.
|
|
3
|
+
*
|
|
4
|
+
* Same envelope as HTTP, different channel. Connection is lazy — the
|
|
5
|
+
* socket opens on the first call. Each frame is a kernel envelope;
|
|
6
|
+
* per-message credential rides on the top-level `creds` field.
|
|
7
|
+
*
|
|
8
|
+
* WS exposes no HTTP-like status / headers, so `meta.wire` is
|
|
9
|
+
* `{ kind: 'ws' }` and `durationMs` measures the round-trip (unary) or
|
|
10
|
+
* time-to-first-frame (streams).
|
|
11
|
+
*
|
|
12
|
+
* `batch` and `binary` are not supported — the kernel WS envelope has
|
|
13
|
+
* no batch frame and the server currently handles only single-shot
|
|
14
|
+
* `Uint8Array` bodies on the HTTP path.
|
|
15
|
+
*/
|
|
16
|
+
import type { SendBinaryResult, SendResult, SendStreamResult } from '../client/fn-map';
|
|
17
|
+
import type { BatchEntry, Transport, TransportRequest } from './contract';
|
|
18
|
+
export type WsEnvelopeTransportConfig = {
|
|
19
|
+
/** HTTP base URL — the transport rewrites the protocol to ws/wss. */
|
|
20
|
+
url: string;
|
|
21
|
+
codec?: 'json' | 'msgpack';
|
|
22
|
+
connectTimeout?: number;
|
|
23
|
+
requestTimeout?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Max in-flight stream chunks per open stream. If a producer races ahead
|
|
26
|
+
* of a slow consumer, the stream fails loudly rather than growing
|
|
27
|
+
* memory without bound. Default 1024.
|
|
28
|
+
*/
|
|
29
|
+
streamQueueSize?: number;
|
|
30
|
+
};
|
|
31
|
+
export declare class WsEnvelopeTransport implements Transport {
|
|
32
|
+
readonly name: 'ws-envelope';
|
|
33
|
+
readonly url: string;
|
|
34
|
+
readonly wsUrl: string;
|
|
35
|
+
private readonly codec;
|
|
36
|
+
private readonly codecName;
|
|
37
|
+
private readonly connectTimeout;
|
|
38
|
+
private readonly defaultTimeout;
|
|
39
|
+
private readonly streamQueueSize;
|
|
40
|
+
private socket;
|
|
41
|
+
private connecting;
|
|
42
|
+
private pending;
|
|
43
|
+
private streams;
|
|
44
|
+
private listenerAc;
|
|
45
|
+
/**
|
|
46
|
+
* Safety net for abandoned stream iterables. If a caller receives
|
|
47
|
+
* `{ kind: 'stream', chunks }` but never iterates `chunks`, the
|
|
48
|
+
* generator's `finally` never runs, so the `streams` entry + buffer
|
|
49
|
+
* would leak for the lifetime of the transport. The FinalizationRegistry
|
|
50
|
+
* fires whenever the `chunks` object becomes unreachable (caller
|
|
51
|
+
* dropped it without iterating) and tears down the bookkeeping.
|
|
52
|
+
*
|
|
53
|
+
* Best-effort — GC timing is not deterministic. Callers who want
|
|
54
|
+
* immediate cleanup should either iterate (and `break`) or abort the
|
|
55
|
+
* call's signal.
|
|
56
|
+
*/
|
|
57
|
+
private readonly abandonRegistry;
|
|
58
|
+
constructor(config: WsEnvelopeTransportConfig);
|
|
59
|
+
get isOpen(): boolean;
|
|
60
|
+
disconnect(): void;
|
|
61
|
+
call(request: TransportRequest): Promise<SendResult<unknown>>;
|
|
62
|
+
signal(request: TransportRequest): void;
|
|
63
|
+
stream(request: TransportRequest): Promise<SendStreamResult<unknown>>;
|
|
64
|
+
binary(_request: TransportRequest): Promise<SendBinaryResult>;
|
|
65
|
+
batch(_requests: TransportRequest[]): Promise<BatchEntry[]>;
|
|
66
|
+
private ensureOpen;
|
|
67
|
+
private send;
|
|
68
|
+
private onMessage;
|
|
69
|
+
private onClose;
|
|
70
|
+
private attachAbort;
|
|
71
|
+
private unaryMeta;
|
|
72
|
+
private decorate;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=ws-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-envelope.d.ts","sourceRoot":"","sources":["../../src/transport/ws-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEtF,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAqBzE,MAAM,MAAM,yBAAyB,GAAG;IACtC,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAiGD,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,IAAI,EAAG,aAAa,CAAS;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IAExC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,UAAU,CAA+B;IAEjD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAGtB;IAEV,YAAY,MAAM,EAAE,yBAAyB,EAS5C;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,UAAU,IAAI,IAAI,CAmBjB;IAIK,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAsBlE;IAED,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAkBtC;IAEK,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAoG1E;IAEK,MAAM,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIlE;IAEK,KAAK,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAIhE;YAIa,UAAU;IAuExB,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,SAAS;IA8FjB,OAAO,CAAC,OAAO;IAsBf,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,QAAQ;CAajB"}
|