@pellux/goodvibes-sdk 0.19.6 → 0.19.8
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/_internal/contracts/index.d.ts +1 -0
- package/dist/_internal/contracts/index.d.ts.map +1 -1
- package/dist/_internal/contracts/index.js +2 -0
- package/dist/_internal/contracts/types.d.ts +4 -0
- package/dist/_internal/contracts/types.d.ts.map +1 -1
- package/dist/_internal/contracts/zod-schemas/accounts.d.ts +81 -0
- package/dist/_internal/contracts/zod-schemas/accounts.d.ts.map +1 -0
- package/dist/_internal/contracts/zod-schemas/accounts.js +47 -0
- package/dist/_internal/contracts/zod-schemas/auth.d.ts +42 -0
- package/dist/_internal/contracts/zod-schemas/auth.d.ts.map +1 -0
- package/dist/_internal/contracts/zod-schemas/auth.js +29 -0
- package/dist/_internal/contracts/zod-schemas/events.d.ts +37 -0
- package/dist/_internal/contracts/zod-schemas/events.d.ts.map +1 -0
- package/dist/_internal/contracts/zod-schemas/events.js +26 -0
- package/dist/_internal/contracts/zod-schemas/index.d.ts +9 -0
- package/dist/_internal/contracts/zod-schemas/index.d.ts.map +1 -0
- package/dist/_internal/contracts/zod-schemas/index.js +4 -0
- package/dist/_internal/contracts/zod-schemas/session.d.ts +22 -0
- package/dist/_internal/contracts/zod-schemas/session.d.ts.map +1 -0
- package/dist/_internal/contracts/zod-schemas/session.js +19 -0
- package/dist/_internal/daemon/api-router.d.ts.map +1 -1
- package/dist/_internal/daemon/api-router.js +0 -1
- package/dist/_internal/daemon/automation.d.ts.map +1 -1
- package/dist/_internal/daemon/channel-route-types.d.ts.map +1 -1
- package/dist/_internal/daemon/channel-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/context.d.ts.map +1 -1
- package/dist/_internal/daemon/control-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/http-policy.d.ts.map +1 -1
- package/dist/_internal/daemon/http-policy.js +0 -1
- package/dist/_internal/daemon/integration-route-types.d.ts.map +1 -1
- package/dist/_internal/daemon/integration-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/knowledge-route-types.d.ts.map +1 -1
- package/dist/_internal/daemon/knowledge-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/knowledge-routes.js +5 -4
- package/dist/_internal/daemon/media-route-types.d.ts.map +1 -1
- package/dist/_internal/daemon/media-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/operator.d.ts.map +1 -1
- package/dist/_internal/daemon/remote-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/remote.d.ts.map +1 -1
- package/dist/_internal/daemon/route-helpers.d.ts.map +1 -1
- package/dist/_internal/daemon/runtime-automation-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/runtime-route-types.d.ts +14 -1
- package/dist/_internal/daemon/runtime-route-types.d.ts.map +1 -1
- package/dist/_internal/daemon/runtime-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/runtime-session-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/runtime-session-routes.js +0 -2
- package/dist/_internal/daemon/sessions.d.ts.map +1 -1
- package/dist/_internal/daemon/system-route-types.d.ts.map +1 -1
- package/dist/_internal/daemon/system-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/tasks.d.ts.map +1 -1
- package/dist/_internal/daemon/telemetry-routes.d.ts.map +1 -1
- package/dist/_internal/errors/daemon-error-contract.d.ts.map +1 -1
- package/dist/_internal/errors/index.d.ts +2 -2
- package/dist/_internal/errors/index.js +2 -2
- package/dist/_internal/operator/client-core.d.ts.map +1 -1
- package/dist/_internal/operator/client-core.js +8 -2
- package/dist/_internal/operator/client.d.ts +7 -0
- package/dist/_internal/operator/client.d.ts.map +1 -1
- package/dist/_internal/operator/client.js +32 -1
- package/dist/_internal/peer/client-core.d.ts.map +1 -1
- package/dist/_internal/platform/agents/orchestrator.d.ts +7 -0
- package/dist/_internal/platform/agents/orchestrator.d.ts.map +1 -1
- package/dist/_internal/platform/agents/orchestrator.js +8 -0
- package/dist/_internal/platform/auth/android-keystore-token-store.d.ts +110 -0
- package/dist/_internal/platform/auth/android-keystore-token-store.d.ts.map +1 -0
- package/dist/_internal/platform/auth/android-keystore-token-store.js +164 -0
- package/dist/_internal/platform/auth/auto-refresh-middleware.d.ts +46 -0
- package/dist/_internal/platform/auth/auto-refresh-middleware.d.ts.map +1 -0
- package/dist/_internal/platform/auth/auto-refresh-middleware.js +155 -0
- package/dist/_internal/platform/auth/auto-refresh.d.ts +123 -0
- package/dist/_internal/platform/auth/auto-refresh.d.ts.map +1 -0
- package/dist/_internal/platform/auth/auto-refresh.js +236 -0
- package/dist/_internal/platform/auth/expo-secure-token-store.d.ts +82 -0
- package/dist/_internal/platform/auth/expo-secure-token-store.d.ts.map +1 -0
- package/dist/_internal/platform/auth/expo-secure-token-store.js +135 -0
- package/dist/_internal/platform/auth/index.d.ts +3 -0
- package/dist/_internal/platform/auth/index.d.ts.map +1 -1
- package/dist/_internal/platform/auth/index.js +2 -0
- package/dist/_internal/platform/auth/ios-keychain-token-store.d.ts +88 -0
- package/dist/_internal/platform/auth/ios-keychain-token-store.d.ts.map +1 -0
- package/dist/_internal/platform/auth/ios-keychain-token-store.js +147 -0
- package/dist/_internal/platform/auth/session-manager.d.ts +2 -0
- package/dist/_internal/platform/auth/session-manager.d.ts.map +1 -1
- package/dist/_internal/platform/auth/session-manager.js +9 -1
- package/dist/_internal/platform/auth/token-store.d.ts +13 -0
- package/dist/_internal/platform/auth/token-store.d.ts.map +1 -1
- package/dist/_internal/platform/auth/token-store.js +23 -0
- package/dist/_internal/platform/companion/companion-chat-manager.d.ts +64 -11
- package/dist/_internal/platform/companion/companion-chat-manager.d.ts.map +1 -1
- package/dist/_internal/platform/companion/companion-chat-manager.js +158 -12
- package/dist/_internal/platform/companion/companion-chat-persistence.d.ts +33 -0
- package/dist/_internal/platform/companion/companion-chat-persistence.d.ts.map +1 -0
- package/dist/_internal/platform/companion/companion-chat-persistence.js +115 -0
- package/dist/_internal/platform/companion/companion-chat-rate-limiter.d.ts +47 -0
- package/dist/_internal/platform/companion/companion-chat-rate-limiter.d.ts.map +1 -0
- package/dist/_internal/platform/companion/companion-chat-rate-limiter.js +117 -0
- package/dist/_internal/platform/companion/companion-chat-types.d.ts +2 -4
- package/dist/_internal/platform/companion/companion-chat-types.d.ts.map +1 -1
- package/dist/_internal/platform/companion/companion-chat-types.js +2 -4
- package/dist/_internal/platform/companion/index.d.ts +4 -0
- package/dist/_internal/platform/companion/index.d.ts.map +1 -1
- package/dist/_internal/platform/companion/index.js +2 -0
- package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/facade-composition.js +5 -0
- package/dist/_internal/platform/daemon/facade.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/facade.js +3 -0
- package/dist/_internal/platform/daemon/http/runtime-route-types.d.ts +0 -7
- package/dist/_internal/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
- package/dist/_internal/platform/state/db.d.ts.map +1 -1
- package/dist/_internal/platform/state/db.js +0 -1
- package/dist/_internal/platform/state/sqlite-store.d.ts.map +1 -1
- package/dist/_internal/platform/state/sqlite-store.js +0 -1
- package/dist/_internal/platform/version.js +1 -1
- package/dist/_internal/transport-core/client-transport.d.ts.map +1 -1
- package/dist/_internal/transport-core/event-envelope.d.ts.map +1 -1
- package/dist/_internal/transport-core/event-feeds.d.ts.map +1 -1
- package/dist/_internal/transport-core/index.d.ts +5 -0
- package/dist/_internal/transport-core/index.d.ts.map +1 -1
- package/dist/_internal/transport-core/index.js +3 -0
- package/dist/_internal/transport-core/middleware.d.ts +76 -0
- package/dist/_internal/transport-core/middleware.d.ts.map +1 -0
- package/dist/_internal/transport-core/middleware.js +67 -0
- package/dist/_internal/transport-core/observer.d.ts +53 -0
- package/dist/_internal/transport-core/observer.d.ts.map +1 -0
- package/dist/_internal/transport-core/observer.js +26 -0
- package/dist/_internal/transport-core/otel.d.ts +64 -0
- package/dist/_internal/transport-core/otel.d.ts.map +1 -0
- package/dist/_internal/transport-core/otel.js +149 -0
- package/dist/_internal/transport-direct/index.d.ts.map +1 -1
- package/dist/_internal/transport-direct/index.js +0 -1
- package/dist/_internal/transport-http/contract-client.d.ts +11 -1
- package/dist/_internal/transport-http/contract-client.d.ts.map +1 -1
- package/dist/_internal/transport-http/contract-client.js +18 -4
- package/dist/_internal/transport-http/http-core.d.ts +27 -1
- package/dist/_internal/transport-http/http-core.d.ts.map +1 -1
- package/dist/_internal/transport-http/http-core.js +180 -12
- package/dist/_internal/transport-http/http.d.ts +3 -3
- package/dist/_internal/transport-http/http.d.ts.map +1 -1
- package/dist/_internal/transport-http/http.js +2 -2
- package/dist/_internal/transport-http/index.d.ts +4 -2
- package/dist/_internal/transport-http/index.d.ts.map +1 -1
- package/dist/_internal/transport-http/index.js +2 -1
- package/dist/_internal/transport-http/paths.js +1 -1
- package/dist/_internal/transport-http/reconnect.d.ts +2 -0
- package/dist/_internal/transport-http/reconnect.d.ts.map +1 -1
- package/dist/_internal/transport-http/reconnect.js +4 -2
- package/dist/_internal/transport-http/retry.d.ts +15 -0
- package/dist/_internal/transport-http/retry.d.ts.map +1 -1
- package/dist/_internal/transport-http/retry.js +19 -0
- package/dist/_internal/transport-realtime/domain-events.d.ts.map +1 -1
- package/dist/_internal/transport-realtime/runtime-events.d.ts +10 -3
- package/dist/_internal/transport-realtime/runtime-events.d.ts.map +1 -1
- package/dist/_internal/transport-realtime/runtime-events.js +73 -8
- package/dist/auth.d.ts +38 -3
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +68 -3
- package/dist/client.d.ts +61 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +64 -3
- package/dist/expo.d.ts +1 -0
- package/dist/expo.d.ts.map +1 -1
- package/dist/expo.js +1 -0
- package/dist/observer/index.d.ts +16 -25
- package/dist/observer/index.d.ts.map +1 -1
- package/dist/platform/runtime/transports/http.js +1 -1
- package/dist/react-native.d.ts +2 -0
- package/dist/react-native.d.ts.map +1 -1
- package/dist/react-native.js +2 -0
- package/package.json +16 -3
|
@@ -1,9 +1,37 @@
|
|
|
1
1
|
// Synced from packages/transport-http/src/http-core.ts
|
|
2
|
-
import { ConfigurationError, ContractError, HttpStatusError, createHttpStatusError } from '../errors/index.js';
|
|
2
|
+
import { ConfigurationError, ContractError, GoodVibesSdkError, HttpStatusError, createHttpStatusError } from '../errors/index.js';
|
|
3
3
|
import { sleepWithSignal } from './backoff.js';
|
|
4
4
|
import { mergeHeaders, normalizeAuthToken, resolveAuthToken, resolveHeaders } from './auth.js';
|
|
5
|
-
import { getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, resolveHttpRetryPolicy, } from './retry.js';
|
|
5
|
+
import { applyPerMethodPolicy, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, resolveHttpRetryPolicy, } from './retry.js';
|
|
6
6
|
import { buildUrl, createTransportPaths } from './paths.js';
|
|
7
|
+
import { composeMiddleware, injectTraceparent, invokeTransportObserver, } from '../transport-core/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Generate a UUID v4 idempotency key.
|
|
10
|
+
* Uses `crypto.randomUUID()` when available (Bun, browsers, Workers, Node 14.17+).
|
|
11
|
+
* Falls back to a manual RFC 4122 v4 implementation otherwise.
|
|
12
|
+
*/
|
|
13
|
+
export function generateIdempotencyKey() {
|
|
14
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
15
|
+
return crypto.randomUUID();
|
|
16
|
+
}
|
|
17
|
+
// Fallback: manual RFC 4122 v4
|
|
18
|
+
const bytes = new Uint8Array(16);
|
|
19
|
+
if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {
|
|
20
|
+
crypto.getRandomValues(bytes);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
for (let i = 0; i < 16; i++) {
|
|
24
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Set version (4) and variant bits (RFC 4122)
|
|
28
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
29
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
30
|
+
const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
31
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
32
|
+
}
|
|
33
|
+
/** Methods that are safe to send idempotency keys for (all non-GET requests). */
|
|
34
|
+
const IDEMPOTENCY_KEY_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
|
|
7
35
|
function isPlainObject(value) {
|
|
8
36
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
9
37
|
}
|
|
@@ -98,7 +126,7 @@ export function createNetworkTransportError(error, url, method) {
|
|
|
98
126
|
}
|
|
99
127
|
function toStringValue(value, key) {
|
|
100
128
|
if (value === undefined || value === null) {
|
|
101
|
-
throw new ContractError(`Missing required path parameter "${key}"
|
|
129
|
+
throw new ContractError(`Missing required path parameter "${key}". Ensure the input object includes a non-null value for this field before invoking the route.`);
|
|
102
130
|
}
|
|
103
131
|
return String(value);
|
|
104
132
|
}
|
|
@@ -143,7 +171,7 @@ export const createJsonInit = createJsonRequestInit;
|
|
|
143
171
|
export function createFetch(fetchImpl, fallbackFetch) {
|
|
144
172
|
const resolved = fetchImpl ?? fallbackFetch ?? globalThis.fetch;
|
|
145
173
|
if (typeof resolved !== 'function') {
|
|
146
|
-
throw new ConfigurationError('Fetch implementation is required');
|
|
174
|
+
throw new ConfigurationError('Fetch implementation is required. Pass a fetch option (e.g. options.fetch) or ensure globalThis.fetch is available in your runtime.');
|
|
147
175
|
}
|
|
148
176
|
return resolved.bind(globalThis);
|
|
149
177
|
}
|
|
@@ -199,28 +227,165 @@ export function createHttpJsonTransport(options) {
|
|
|
199
227
|
const defaultHeaders = options.headers;
|
|
200
228
|
const retryPolicy = options.retry;
|
|
201
229
|
const paths = createTransportPaths(baseUrl);
|
|
202
|
-
const
|
|
230
|
+
const observer = options.observer;
|
|
231
|
+
// Persistent middleware chain — mutated via use().
|
|
232
|
+
const middlewareChain = [...(options.middleware ?? [])];
|
|
233
|
+
const requestJsonForTransport = async (pathOrUrl, requestOptions = {}, legacyMethodId) => {
|
|
203
234
|
const url = pathOrUrl.startsWith('http://') || pathOrUrl.startsWith('https://')
|
|
204
235
|
? pathOrUrl
|
|
205
236
|
: buildUrl(baseUrl, pathOrUrl);
|
|
206
237
|
const method = requestOptions.method ?? (requestOptions.body === undefined ? 'GET' : 'POST');
|
|
207
|
-
|
|
238
|
+
// Resolve methodId: options.methodId takes precedence over legacy 3rd-arg for backward compat.
|
|
239
|
+
const methodId = requestOptions.methodId ?? legacyMethodId;
|
|
240
|
+
// Resolve idempotent flag from request options (set by contract-client from contract.idempotent).
|
|
241
|
+
const contractIdempotent = requestOptions.idempotent === true;
|
|
242
|
+
// Apply per-method retry policy override if a methodId is provided.
|
|
243
|
+
const baseRetry = resolveHttpRetryPolicy(retryPolicy, requestOptions.retry);
|
|
244
|
+
const resolvedRetry = methodId ? applyPerMethodPolicy(baseRetry, methodId) : baseRetry;
|
|
245
|
+
// Determine idempotency: non-GET mutations without an explicit idempotent flag do NOT retry.
|
|
246
|
+
// This is enforced below by gating the retry check on method type.
|
|
247
|
+
const isMutatingMethod = IDEMPOTENCY_KEY_METHODS.has(method.toUpperCase());
|
|
208
248
|
let attempt = 0;
|
|
209
249
|
while (true) {
|
|
210
250
|
attempt += 1;
|
|
211
251
|
const token = (await getAuthToken()) ?? null;
|
|
212
|
-
const
|
|
252
|
+
const resolvedHeaders = await resolveHeaders(defaultHeaders, options.getHeaders);
|
|
253
|
+
// Build merged headers record: default + per-request, then inject cross-cutting headers.
|
|
254
|
+
const mergedHeaders = mergeHeaderRecord(resolvedHeaders ?? {}, requestOptions.headers ?? {});
|
|
255
|
+
if (token) {
|
|
256
|
+
mergedHeaders['Authorization'] = `Bearer ${token}`;
|
|
257
|
+
}
|
|
258
|
+
if (requestOptions.body !== undefined) {
|
|
259
|
+
mergedHeaders['Content-Type'] = 'application/json';
|
|
260
|
+
}
|
|
261
|
+
// Inject W3C traceparent if OTel is active.
|
|
262
|
+
injectTraceparent(mergedHeaders);
|
|
263
|
+
// Inject idempotency key for mutating methods.
|
|
264
|
+
if (isMutatingMethod) {
|
|
265
|
+
mergedHeaders['Idempotency-Key'] = generateIdempotencyKey();
|
|
266
|
+
}
|
|
267
|
+
// Notify observer before dispatching the request.
|
|
268
|
+
invokeTransportObserver(() => observer?.onTransportActivity?.({ direction: 'send', url, kind: 'http' }));
|
|
269
|
+
const sendAt = Date.now();
|
|
270
|
+
// Build the middleware context for this attempt.
|
|
271
|
+
const ctx = {
|
|
272
|
+
method,
|
|
273
|
+
url,
|
|
274
|
+
headers: mergedHeaders,
|
|
275
|
+
body: requestOptions.body,
|
|
276
|
+
options: requestOptions,
|
|
277
|
+
signal: requestOptions.signal,
|
|
278
|
+
};
|
|
279
|
+
// Build the inner fetch that middleware wraps (and also used directly without middleware).
|
|
280
|
+
const innerFetch = async (c) => {
|
|
281
|
+
const init = {
|
|
282
|
+
method: c.method,
|
|
283
|
+
credentials: 'include',
|
|
284
|
+
signal: c.signal,
|
|
285
|
+
headers: c.headers,
|
|
286
|
+
...(c.body !== undefined ? { body: JSON.stringify(c.body) } : {}),
|
|
287
|
+
};
|
|
288
|
+
let response;
|
|
289
|
+
try {
|
|
290
|
+
response = await fetchImpl(c.url, init);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
throw createNetworkTransportError(error, c.url, c.method);
|
|
294
|
+
}
|
|
295
|
+
const body = await readJsonBody(response);
|
|
296
|
+
if (!response.ok) {
|
|
297
|
+
const retryAfterMs = parseRetryAfterMs(response.headers);
|
|
298
|
+
throw createTransportError(response.status, c.url, c.method, body, retryAfterMs);
|
|
299
|
+
}
|
|
300
|
+
// Return synthetic Response carrying parsed body so callers can .json() it.
|
|
301
|
+
return new Response(JSON.stringify(body), { status: response.status });
|
|
302
|
+
};
|
|
303
|
+
// Track middleware errors for wrapping — set when an error escapes the middleware chain.
|
|
304
|
+
let middlewareErrorInfo = null;
|
|
305
|
+
// Instrument innerFetch to detect when errors originate from middleware (not the real fetch).
|
|
306
|
+
// We use a flag that middleware can set before rethrowing.
|
|
307
|
+
const instrumentedInnerFetch = async (c) => {
|
|
308
|
+
return innerFetch(c);
|
|
309
|
+
};
|
|
213
310
|
try {
|
|
214
|
-
|
|
311
|
+
if (middlewareChain.length > 0) {
|
|
312
|
+
// Middleware path — compose chain around innerFetch.
|
|
313
|
+
// Wrap each middleware to track which one threw.
|
|
314
|
+
const instrumentedChain = middlewareChain.map((mw, i) => {
|
|
315
|
+
const mwName = mw.name || String(i);
|
|
316
|
+
const wrapper = async (c, next) => {
|
|
317
|
+
try {
|
|
318
|
+
await mw(c, next);
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
// Tag the error as coming from this middleware.
|
|
322
|
+
middlewareErrorInfo = { name: mwName };
|
|
323
|
+
throw err;
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
return wrapper;
|
|
327
|
+
});
|
|
328
|
+
const composed = composeMiddleware(instrumentedChain, instrumentedInnerFetch);
|
|
329
|
+
await composed(ctx);
|
|
330
|
+
if (ctx.error)
|
|
331
|
+
throw ctx.error;
|
|
332
|
+
const result = ctx.response ? await ctx.response.json() : undefined;
|
|
333
|
+
invokeTransportObserver(() => observer?.onTransportActivity?.({
|
|
334
|
+
direction: 'recv',
|
|
335
|
+
url,
|
|
336
|
+
kind: 'http',
|
|
337
|
+
durationMs: ctx.durationMs,
|
|
338
|
+
}));
|
|
339
|
+
return result;
|
|
340
|
+
}
|
|
341
|
+
// No-middleware fast path — directly invoke innerFetch with ctx.
|
|
342
|
+
const rawResponse = await innerFetch(ctx);
|
|
343
|
+
const result = await rawResponse.json();
|
|
344
|
+
// Notify observer after a successful response.
|
|
345
|
+
invokeTransportObserver(() => observer?.onTransportActivity?.({
|
|
346
|
+
direction: 'recv',
|
|
347
|
+
url,
|
|
348
|
+
kind: 'http',
|
|
349
|
+
durationMs: Date.now() - sendAt,
|
|
350
|
+
}));
|
|
351
|
+
return result;
|
|
215
352
|
}
|
|
216
353
|
catch (error) {
|
|
217
|
-
|
|
218
|
-
|
|
354
|
+
// Wrap middleware errors as SDKError{kind:'unknown'} with middleware identity in cause.
|
|
355
|
+
// ALL errors originating from the middleware chain are wrapped — including HttpStatusError.
|
|
356
|
+
const wrappedError = (() => {
|
|
357
|
+
if (middlewareErrorInfo !== null) {
|
|
358
|
+
// Error came from within the middleware chain — wrap regardless of error type.
|
|
359
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
360
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
361
|
+
const middlewareName = middlewareErrorInfo.name;
|
|
362
|
+
const wrapped = new GoodVibesSdkError(`Transport middleware error: ${msg}`, {
|
|
363
|
+
category: 'unknown',
|
|
364
|
+
source: 'transport',
|
|
365
|
+
recoverable: false,
|
|
366
|
+
});
|
|
367
|
+
const causeValue = { middleware: middlewareName, originalError: error };
|
|
368
|
+
Object.defineProperty(wrapped, 'cause', { value: causeValue, writable: true, configurable: true });
|
|
369
|
+
return wrapped;
|
|
370
|
+
}
|
|
371
|
+
if (error instanceof GoodVibesSdkError)
|
|
372
|
+
return error;
|
|
373
|
+
return error;
|
|
374
|
+
})();
|
|
375
|
+
// Notify observer of the transport error before deciding to retry or rethrow.
|
|
376
|
+
invokeTransportObserver(() => observer?.onError?.(wrappedError instanceof Error ? wrappedError : new Error(String(wrappedError))));
|
|
377
|
+
const status = typeof wrappedError === 'object' && wrappedError !== null && 'transport' in wrappedError
|
|
378
|
+
? wrappedError.transport?.status
|
|
219
379
|
: undefined;
|
|
220
|
-
|
|
380
|
+
// Mutating methods (POST/PUT/PATCH/DELETE) without idempotent contract mark:
|
|
381
|
+
// do NOT retry on 5xx to avoid duplicate side effects.
|
|
382
|
+
// Precedence: explicit perMethodPolicy > contract.idempotent flag > HTTP-verb default.
|
|
383
|
+
const hasPerMethodOverride = methodId !== undefined && baseRetry.perMethodPolicy[methodId] !== undefined;
|
|
384
|
+
const canRetry = !isMutatingMethod || hasPerMethodOverride || contractIdempotent;
|
|
385
|
+
const shouldRetry = canRetry && attempt < resolvedRetry.maxAttempts && ((typeof status === 'number' && status > 0 && isRetryableHttpStatus(method, status, resolvedRetry))
|
|
221
386
|
|| (typeof status === 'number' && status === 0 && isRetryableNetworkError(method, resolvedRetry)));
|
|
222
387
|
if (!shouldRetry) {
|
|
223
|
-
throw
|
|
388
|
+
throw wrappedError;
|
|
224
389
|
}
|
|
225
390
|
await sleepWithSignal(getHttpRetryDelay(attempt + 1, resolvedRetry), requestOptions.signal);
|
|
226
391
|
}
|
|
@@ -259,5 +424,8 @@ export function createHttpJsonTransport(options) {
|
|
|
259
424
|
},
|
|
260
425
|
requestJson: requestJsonForTransport,
|
|
261
426
|
resolveContractRequest,
|
|
427
|
+
use(middleware) {
|
|
428
|
+
middlewareChain.push(middleware);
|
|
429
|
+
},
|
|
262
430
|
};
|
|
263
431
|
}
|
|
@@ -2,11 +2,11 @@ import { type AuthTokenResolver, type HeaderResolver, type MaybePromise, mergeHe
|
|
|
2
2
|
import { type BackoffPolicy, type ResolvedBackoffPolicy, computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal } from './backoff.js';
|
|
3
3
|
import { type HttpRetryPolicy, type ResolvedHttpRetryPolicy, DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy } from './retry.js';
|
|
4
4
|
import { type ResolvedStreamReconnectPolicy, type StreamReconnectPolicy, DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy } from './reconnect.js';
|
|
5
|
-
import { createFetch, createJsonInit, createJsonRequestInit, readJsonBody, requestJson, type HttpJsonRequestOptions, type HttpJsonTransport, type HttpJsonTransportOptions, type JsonObject, type JsonValue, type ResolvedContractRequest, type TransportJsonError } from './http-core.js';
|
|
6
|
-
export type { AuthTokenResolver, BackoffPolicy, HeaderResolver, HttpJsonRequestOptions, HttpRetryPolicy, JsonObject, JsonValue, MaybePromise, ResolvedBackoffPolicy, ResolvedContractRequest, ResolvedHttpRetryPolicy, ResolvedStreamReconnectPolicy, StreamReconnectPolicy, TransportJsonError, };
|
|
5
|
+
import { createFetch, createJsonInit, createJsonRequestInit, generateIdempotencyKey, readJsonBody, requestJson, type HttpJsonRequestOptions, type HttpJsonTransport, type HttpJsonTransportOptions, type JsonObject, type JsonValue, type ResolvedContractRequest, type TransportContext, type TransportMiddleware, type TransportJsonError } from './http-core.js';
|
|
6
|
+
export type { AuthTokenResolver, BackoffPolicy, HeaderResolver, HttpJsonRequestOptions, HttpRetryPolicy, JsonObject, JsonValue, MaybePromise, ResolvedBackoffPolicy, ResolvedContractRequest, ResolvedHttpRetryPolicy, ResolvedStreamReconnectPolicy, StreamReconnectPolicy, TransportContext, TransportJsonError, TransportMiddleware, };
|
|
7
7
|
export type HttpTransportOptions = HttpJsonTransportOptions;
|
|
8
8
|
export type HttpTransport = HttpJsonTransport;
|
|
9
|
-
export { createFetch, createJsonInit, createJsonRequestInit, readJsonBody, requestJson, mergeHeaders, resolveAuthToken, resolveHeaders, computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal, DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy, DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy, };
|
|
9
|
+
export { createFetch, createJsonInit, createJsonRequestInit, generateIdempotencyKey, readJsonBody, requestJson, mergeHeaders, resolveAuthToken, resolveHeaders, computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal, DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy, DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy, };
|
|
10
10
|
export declare function normalizeTransportError(error: unknown): Error;
|
|
11
11
|
export declare function createHttpTransport(options: HttpTransportOptions): HttpTransport;
|
|
12
12
|
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/http.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EAEX,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/http.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EAEX,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACX,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,+BAA+B,EAC/B,uBAAuB,EACvB,8BAA8B,GAC/B,CAAC;AA2CF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAwD7D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAmBhF"}
|
|
@@ -4,8 +4,8 @@ import { mergeHeaders, resolveAuthToken, resolveHeaders, } from './auth.js';
|
|
|
4
4
|
import { computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal, } from './backoff.js';
|
|
5
5
|
import { DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy, } from './retry.js';
|
|
6
6
|
import { DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy, } from './reconnect.js';
|
|
7
|
-
import { createFetch, createHttpJsonTransport, createJsonInit, createJsonRequestInit, readJsonBody, requestJson, } from './http-core.js';
|
|
8
|
-
export { createFetch, createJsonInit, createJsonRequestInit, readJsonBody, requestJson, mergeHeaders, resolveAuthToken, resolveHeaders, computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal, DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy, DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy, };
|
|
7
|
+
import { createFetch, createHttpJsonTransport, createJsonInit, createJsonRequestInit, generateIdempotencyKey, readJsonBody, requestJson, } from './http-core.js';
|
|
8
|
+
export { createFetch, createJsonInit, createJsonRequestInit, generateIdempotencyKey, readJsonBody, requestJson, mergeHeaders, resolveAuthToken, resolveHeaders, computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal, DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy, DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy, };
|
|
9
9
|
function isTransportError(error) {
|
|
10
10
|
return Boolean(error
|
|
11
11
|
&& typeof error === 'object'
|
|
@@ -2,6 +2,8 @@ export type { ContractInvokeOptions, ContractRouteDefinition, ContractRouteLike,
|
|
|
2
2
|
export { buildContractInput, invokeContractRoute, openContractRouteStream, requireContractRoute, } from './contract-client.js';
|
|
3
3
|
export type { HttpJsonRequestOptions, HttpTransport, HttpTransportOptions, JsonObject, JsonValue, ResolvedContractRequest, TransportJsonError, } from './http.js';
|
|
4
4
|
export { createFetch, createHttpTransport, createJsonInit, createJsonRequestInit, normalizeTransportError, readJsonBody, requestJson, } from './http.js';
|
|
5
|
+
export type { TransportContext, TransportMiddleware } from './http-core.js';
|
|
6
|
+
export { generateIdempotencyKey } from './http-core.js';
|
|
5
7
|
export type { ServerSentEventHandlers, ServerSentEventOptions } from './sse.js';
|
|
6
8
|
export { openServerSentEventStream } from './sse.js';
|
|
7
9
|
export type { ServerSentEventHandlers as RawServerSentEventHandlers, ServerSentEventOptions as RawServerSentEventOptions } from './sse-stream.js';
|
|
@@ -10,8 +12,8 @@ export type { AuthTokenInput, AuthTokenResolver, HeaderResolver, MaybePromise }
|
|
|
10
12
|
export { mergeHeaders, normalizeAuthToken, resolveAuthToken, resolveHeaders } from './auth.js';
|
|
11
13
|
export type { BackoffPolicy, ResolvedBackoffPolicy } from './backoff.js';
|
|
12
14
|
export { computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal } from './backoff.js';
|
|
13
|
-
export type { HttpRetryPolicy, ResolvedHttpRetryPolicy } from './retry.js';
|
|
14
|
-
export { DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy } from './retry.js';
|
|
15
|
+
export type { HttpRetryPolicy, PerMethodRetryPolicy, ResolvedHttpRetryPolicy } from './retry.js';
|
|
16
|
+
export { DEFAULT_HTTP_RETRY_POLICY, applyPerMethodPolicy, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy } from './retry.js';
|
|
15
17
|
export type { StreamReconnectPolicy, ResolvedStreamReconnectPolicy } from './reconnect.js';
|
|
16
18
|
export { DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy } from './reconnect.js';
|
|
17
19
|
export type { TransportPaths } from './paths.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,YAAY,EAAE,uBAAuB,IAAI,0BAA0B,EAAE,sBAAsB,IAAI,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAClJ,OAAO,EAAE,yBAAyB,IAAI,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/F,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5F,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,YAAY,EAAE,uBAAuB,IAAI,0BAA0B,EAAE,sBAAsB,IAAI,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAClJ,OAAO,EAAE,yBAAyB,IAAI,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/F,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5F,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAClM,YAAY,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAC1H,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export { buildContractInput, invokeContractRoute, openContractRouteStream, requireContractRoute, } from './contract-client.js';
|
|
2
2
|
export { createFetch, createHttpTransport, createJsonInit, createJsonRequestInit, normalizeTransportError, readJsonBody, requestJson, } from './http.js';
|
|
3
|
+
export { generateIdempotencyKey } from './http-core.js';
|
|
3
4
|
export { openServerSentEventStream } from './sse.js';
|
|
4
5
|
export { openServerSentEventStream as openRawServerSentEventStream } from './sse-stream.js';
|
|
5
6
|
export { mergeHeaders, normalizeAuthToken, resolveAuthToken, resolveHeaders } from './auth.js';
|
|
6
7
|
export { computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal } from './backoff.js';
|
|
7
|
-
export { DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy } from './retry.js';
|
|
8
|
+
export { DEFAULT_HTTP_RETRY_POLICY, applyPerMethodPolicy, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy } from './retry.js';
|
|
8
9
|
export { DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy } from './reconnect.js';
|
|
9
10
|
export { buildUrl, createTransportPaths, normalizeBaseUrl } from './paths.js';
|
|
@@ -3,7 +3,7 @@ import { ConfigurationError } from '../errors/index.js';
|
|
|
3
3
|
export function normalizeBaseUrl(baseUrl) {
|
|
4
4
|
const normalized = baseUrl.trim();
|
|
5
5
|
if (!normalized) {
|
|
6
|
-
throw new ConfigurationError('Transport baseUrl is required', { code: 'SDK_TRANSPORT_BASE_URL_REQUIRED' });
|
|
6
|
+
throw new ConfigurationError('Transport baseUrl is required. Pass a non-empty baseUrl string to your transport or SDK options.', { code: 'SDK_TRANSPORT_BASE_URL_REQUIRED' });
|
|
7
7
|
}
|
|
8
8
|
return normalized.endsWith('/') ? normalized.slice(0, -1) : normalized;
|
|
9
9
|
}
|
|
@@ -5,6 +5,8 @@ export interface StreamReconnectPolicy extends BackoffPolicy {
|
|
|
5
5
|
export interface ResolvedStreamReconnectPolicy extends ResolvedBackoffPolicy {
|
|
6
6
|
readonly enabled: boolean;
|
|
7
7
|
}
|
|
8
|
+
/** Maximum reconnect attempts when reconnect is enabled and the caller does not set a limit. */
|
|
9
|
+
export declare const DEFAULT_STREAM_MAX_ATTEMPTS = 10;
|
|
8
10
|
export declare const DEFAULT_STREAM_RECONNECT_POLICY: ResolvedStreamReconnectPolicy;
|
|
9
11
|
export declare function normalizeStreamReconnectPolicy(policy?: StreamReconnectPolicy): ResolvedStreamReconnectPolicy;
|
|
10
12
|
export declare function getStreamReconnectDelay(attempt: number, policy: ResolvedStreamReconnectPolicy): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconnect.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/reconnect.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,KAAK,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE3H,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,+BAA+B,EAAE,6BAM7C,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,qBAAqB,GAC7B,6BAA6B,CAM/B;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,6BAA6B,GACpC,MAAM,CAER"}
|
|
1
|
+
{"version":3,"file":"reconnect.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/reconnect.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,KAAK,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE3H,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,gGAAgG;AAChG,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C,eAAO,MAAM,+BAA+B,EAAE,6BAM7C,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,qBAAqB,GAC7B,6BAA6B,CAM/B;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,6BAA6B,GACpC,MAAM,CAER"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
// Synced from packages/transport-http/src/reconnect.ts
|
|
2
2
|
import { computeBackoffDelay, normalizeBackoffPolicy } from './backoff.js';
|
|
3
|
+
/** Maximum reconnect attempts when reconnect is enabled and the caller does not set a limit. */
|
|
4
|
+
export const DEFAULT_STREAM_MAX_ATTEMPTS = 10;
|
|
3
5
|
export const DEFAULT_STREAM_RECONNECT_POLICY = {
|
|
4
6
|
enabled: false,
|
|
5
|
-
maxAttempts:
|
|
7
|
+
maxAttempts: DEFAULT_STREAM_MAX_ATTEMPTS,
|
|
6
8
|
baseDelayMs: 500,
|
|
7
|
-
maxDelayMs:
|
|
9
|
+
maxDelayMs: 30_000,
|
|
8
10
|
backoffFactor: 2,
|
|
9
11
|
};
|
|
10
12
|
export function normalizeStreamReconnectPolicy(policy) {
|
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
import { type BackoffPolicy, type ResolvedBackoffPolicy } from './backoff.js';
|
|
2
|
+
export interface PerMethodRetryPolicy {
|
|
3
|
+
readonly maxAttempts?: number;
|
|
4
|
+
readonly baseDelayMs?: number;
|
|
5
|
+
readonly maxDelayMs?: number;
|
|
6
|
+
readonly backoffFactor?: number;
|
|
7
|
+
}
|
|
2
8
|
export interface HttpRetryPolicy extends BackoffPolicy {
|
|
3
9
|
readonly retryOnStatuses?: readonly number[];
|
|
4
10
|
readonly retryOnMethods?: readonly string[];
|
|
5
11
|
readonly retryOnNetworkError?: boolean;
|
|
12
|
+
/** Per-method retry policy overrides keyed by method ID. */
|
|
13
|
+
readonly perMethodPolicy?: Readonly<Record<string, PerMethodRetryPolicy>>;
|
|
6
14
|
}
|
|
7
15
|
export interface ResolvedHttpRetryPolicy extends ResolvedBackoffPolicy {
|
|
8
16
|
readonly retryOnStatuses: readonly number[];
|
|
9
17
|
readonly retryOnMethods: readonly string[];
|
|
10
18
|
readonly retryOnNetworkError: boolean;
|
|
19
|
+
/** Per-method retry policy overrides keyed by method ID. */
|
|
20
|
+
readonly perMethodPolicy: Readonly<Record<string, PerMethodRetryPolicy>>;
|
|
11
21
|
}
|
|
12
22
|
export declare const DEFAULT_HTTP_RETRY_POLICY: ResolvedHttpRetryPolicy;
|
|
13
23
|
export declare function normalizeHttpRetryPolicy(policy?: HttpRetryPolicy): ResolvedHttpRetryPolicy;
|
|
14
24
|
export declare function resolveHttpRetryPolicy(defaultPolicy?: HttpRetryPolicy, override?: false | HttpRetryPolicy): ResolvedHttpRetryPolicy;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a per-method retry policy override by method ID.
|
|
27
|
+
* Returns the base policy with overrides applied, or the base policy unchanged.
|
|
28
|
+
*/
|
|
29
|
+
export declare function applyPerMethodPolicy(base: ResolvedHttpRetryPolicy, methodId: string): ResolvedHttpRetryPolicy;
|
|
15
30
|
export declare function getHttpRetryDelay(attempt: number, policy: ResolvedHttpRetryPolicy): number;
|
|
16
31
|
export declare function isRetryableHttpStatus(method: string, status: number, policy: ResolvedHttpRetryPolicy): boolean;
|
|
17
32
|
export declare function isRetryableNetworkError(method: string, policy: ResolvedHttpRetryPolicy): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/retry.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,KAAK,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE3H,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/retry.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,KAAK,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE3H,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;CAC1E;AAED,eAAO,MAAM,yBAAyB,EAAE,uBASvC,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,MAAM,CAAC,EAAE,eAAe,GACvB,uBAAuB,CASzB;AAED,wBAAgB,sBAAsB,CACpC,aAAa,CAAC,EAAE,eAAe,EAC/B,QAAQ,CAAC,EAAE,KAAK,GAAG,eAAe,GACjC,uBAAuB,CAczB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,MAAM,GACf,uBAAuB,CAUzB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAER;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAGT;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAET"}
|
|
@@ -8,6 +8,7 @@ export const DEFAULT_HTTP_RETRY_POLICY = {
|
|
|
8
8
|
retryOnStatuses: [408, 429, 500, 502, 503, 504],
|
|
9
9
|
retryOnMethods: ['GET', 'HEAD', 'OPTIONS'],
|
|
10
10
|
retryOnNetworkError: true,
|
|
11
|
+
perMethodPolicy: {},
|
|
11
12
|
};
|
|
12
13
|
export function normalizeHttpRetryPolicy(policy) {
|
|
13
14
|
const normalized = normalizeBackoffPolicy(policy, DEFAULT_HTTP_RETRY_POLICY);
|
|
@@ -16,6 +17,7 @@ export function normalizeHttpRetryPolicy(policy) {
|
|
|
16
17
|
retryOnStatuses: [...(policy?.retryOnStatuses ?? DEFAULT_HTTP_RETRY_POLICY.retryOnStatuses)],
|
|
17
18
|
retryOnMethods: [...(policy?.retryOnMethods ?? DEFAULT_HTTP_RETRY_POLICY.retryOnMethods)].map((method) => method.toUpperCase()),
|
|
18
19
|
retryOnNetworkError: policy?.retryOnNetworkError ?? DEFAULT_HTTP_RETRY_POLICY.retryOnNetworkError,
|
|
20
|
+
perMethodPolicy: policy?.perMethodPolicy ?? DEFAULT_HTTP_RETRY_POLICY.perMethodPolicy,
|
|
19
21
|
};
|
|
20
22
|
}
|
|
21
23
|
export function resolveHttpRetryPolicy(defaultPolicy, override) {
|
|
@@ -31,6 +33,23 @@ export function resolveHttpRetryPolicy(defaultPolicy, override) {
|
|
|
31
33
|
retryOnStatuses: override.retryOnStatuses ? [...override.retryOnStatuses] : base.retryOnStatuses,
|
|
32
34
|
retryOnMethods: override.retryOnMethods ? override.retryOnMethods.map((method) => method.toUpperCase()) : base.retryOnMethods,
|
|
33
35
|
retryOnNetworkError: override.retryOnNetworkError ?? base.retryOnNetworkError,
|
|
36
|
+
perMethodPolicy: override.perMethodPolicy ?? base.perMethodPolicy,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolve a per-method retry policy override by method ID.
|
|
41
|
+
* Returns the base policy with overrides applied, or the base policy unchanged.
|
|
42
|
+
*/
|
|
43
|
+
export function applyPerMethodPolicy(base, methodId) {
|
|
44
|
+
const override = base.perMethodPolicy[methodId];
|
|
45
|
+
if (!override)
|
|
46
|
+
return base;
|
|
47
|
+
return {
|
|
48
|
+
...base,
|
|
49
|
+
maxAttempts: override.maxAttempts ?? base.maxAttempts,
|
|
50
|
+
baseDelayMs: override.baseDelayMs ?? base.baseDelayMs,
|
|
51
|
+
maxDelayMs: override.maxDelayMs ?? base.maxDelayMs,
|
|
52
|
+
backoffFactor: override.backoffFactor ?? base.backoffFactor,
|
|
34
53
|
};
|
|
35
54
|
}
|
|
36
55
|
export function getHttpRetryDelay(attempt, policy) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/domain-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"domain-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/domain-events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkD,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpH,KAAK,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,uBAAuB,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,IAClC,CACF,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,KAAK,IAAI,KAC5D,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AAEhC,MAAM,MAAM,YAAY,CACtB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,IAClC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAmIvC,wBAAgB,wBAAwB,CACtC,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,EAEpC,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,GAC7C,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAK/B;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CACxB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,EAEpC,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EACrC,SAAS,EAAE,MAAM,GAChB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAY/B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type RuntimeEventDomain } from '../contracts/index.js';
|
|
2
|
-
import type { AnyRuntimeEvent } from '../platform/runtime/events/index.js';
|
|
3
2
|
import { type AuthTokenResolver, type StreamReconnectPolicy } from '../transport-http/index.js';
|
|
3
|
+
import { type TransportObserver } from '../transport-core/index.js';
|
|
4
4
|
import { type DomainEventConnector, type DomainEvents, type SerializedEventEnvelope } from './domain-events.js';
|
|
5
5
|
type RuntimeEventRecord = {
|
|
6
6
|
readonly type: string;
|
|
@@ -37,6 +37,13 @@ export { forSession as forSessionRuntime } from './domain-events.js';
|
|
|
37
37
|
export interface RuntimeEventConnectorOptions {
|
|
38
38
|
readonly reconnect?: StreamReconnectPolicy;
|
|
39
39
|
readonly onError?: (error: unknown) => void;
|
|
40
|
+
readonly observer?: TransportObserver;
|
|
41
|
+
/**
|
|
42
|
+
* Called once the WebSocket connector is set up, providing an `emitLocal`
|
|
43
|
+
* function the caller can use to send messages over this connection.
|
|
44
|
+
* Primarily for test/shim use cases that need to inject outbound frames.
|
|
45
|
+
*/
|
|
46
|
+
readonly onEmitter?: (emitLocal: (data: string) => void) => void;
|
|
40
47
|
}
|
|
41
48
|
type AuthTokenSource = string | null | undefined | AuthTokenResolver;
|
|
42
49
|
/** Default max reconnect attempts for WebSocket connections (finite to prevent infinite auth loops). */
|
|
@@ -44,6 +51,6 @@ export declare const DEFAULT_WS_MAX_ATTEMPTS = 10;
|
|
|
44
51
|
export declare function createRemoteRuntimeEvents<TEvent extends RuntimeEventRecord = RuntimeEventRecord>(connect: DomainEventConnector<RuntimeEventDomain, TEvent>): RemoteRuntimeEvents<TEvent>;
|
|
45
52
|
export declare function buildEventSourceUrl(baseUrl: string, domain: RuntimeEventDomain): string;
|
|
46
53
|
export declare function buildWebSocketUrl(baseUrl: string, domains: readonly RuntimeEventDomain[]): string;
|
|
47
|
-
export declare function createEventSourceConnector(baseUrl: string, token: AuthTokenSource, fetchImpl: typeof fetch, options?: RuntimeEventConnectorOptions): DomainEventConnector<RuntimeEventDomain,
|
|
48
|
-
export declare function createWebSocketConnector(baseUrl: string, token: AuthTokenSource, WebSocketImpl: typeof WebSocket, options?: RuntimeEventConnectorOptions): DomainEventConnector<RuntimeEventDomain,
|
|
54
|
+
export declare function createEventSourceConnector<TEvent extends RuntimeEventRecord = RuntimeEventRecord>(baseUrl: string, token: AuthTokenSource, fetchImpl: typeof fetch, options?: RuntimeEventConnectorOptions): DomainEventConnector<RuntimeEventDomain, TEvent>;
|
|
55
|
+
export declare function createWebSocketConnector<TEvent extends RuntimeEventRecord = RuntimeEventRecord>(baseUrl: string, token: AuthTokenSource, WebSocketImpl: typeof WebSocket, options?: RuntimeEventConnectorOptions): DomainEventConnector<RuntimeEventDomain, TEvent>;
|
|
49
56
|
//# sourceMappingURL=runtime-events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/runtime-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/runtime-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAI3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAmD,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACrH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,kBAAkB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,yBAAyB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,IAC1F,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAElC,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,IACpF,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;CAClE;AAED,KAAK,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAErE,wGAAwG;AACxG,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAK1C,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,EAC9F,OAAO,EAAE,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,CAAC,GACxD,mBAAmB,CAAC,MAAM,CAAC,CAK7B;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAIR;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,MAAM,CAQR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,EAC/F,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,OAAO,KAAK,EACvB,OAAO,GAAE,4BAAiC,GACzC,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAmClD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,EAC7F,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,OAAO,SAAS,EAC/B,OAAO,GAAE,4BAAiC,GACzC,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CA+JlD"}
|