stitchkit 0.48.0 → 0.48.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/client.d.ts +3 -0
- package/dist/browser/client.d.ts.map +1 -1
- package/dist/browser/http.d.ts +7 -4
- package/dist/browser/http.d.ts.map +1 -1
- package/dist/cli.js +3 -2
- package/dist/{index-nrytvb30.js → index-03j2t778.js} +5 -8
- package/dist/{index-kp8xamqp.js → index-0hj37z43.js} +4 -2
- package/dist/index-48ffdxgk.js +6 -0
- package/dist/index-h05ygjqx.js +149 -0
- package/dist/{index-ee621cmy.js → index-jewp9r0a.js} +5 -139
- package/dist/index-p9d4cxt5.js +436 -0
- package/dist/{index-44xysy8r.js → index-ts21eyz4.js} +141 -19
- package/dist/{index-8ekq6res.js → index-v58mwa19.js} +4 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -3
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +8 -3
- package/dist/observability/audit.d.ts +4 -1
- package/dist/observability/audit.d.ts.map +1 -1
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +150 -16
- package/dist/observability/status.d.ts +105 -0
- package/dist/observability/status.d.ts.map +1 -0
- package/dist/server/implement.d.ts +16 -6
- package/dist/server/implement.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +14 -6
- package/dist/server/router.d.ts +4 -1
- package/dist/server/router.d.ts.map +1 -1
- package/dist/testing.d.ts +34 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +36 -0
- package/dist/tools/mcp.d.ts +1 -0
- package/dist/tools/mcp.d.ts.map +1 -1
- package/dist/tools.js +21 -428
- package/llms-full.txt +127 -16
- package/package.json +7 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { type ClientConfig, type ClientContract, type ClientRegistryValue, type ContractClientConfig, contractEndpointMatchers, createClient, createClients, createScopedClients, createScopedUrlBuilders, createUrlBuilder, createUrlBuilders, type PathPrefixArgs, type RegistryScope, type ScopeClientConfigs, type ScopedClientRegistry, type ScopedUrlBuilderRegistry, type UrlBuilderConfig, } from './browser/client';
|
|
1
|
+
export { type ClientConfig, type ClientContract, type ClientFetch, type ClientRegistryValue, type ContractClientConfig, contractEndpointMatchers, createClient, createClients, createScopedClients, createScopedUrlBuilders, createUrlBuilder, createUrlBuilders, type PathPrefixArgs, type RegistryScope, type ScopeClientConfigs, type ScopedClientRegistry, type ScopedUrlBuilderRegistry, type UrlBuilderConfig, } from './browser/client';
|
|
2
2
|
export { ApiError, type ApiEvent, type ApiEventListener, type ConfiguredHttpClient, createHttpClient, type HeaderProvider, type HttpClient, type HttpClientConfig, type RequestOptions, type UnauthorizedMatcher, } from './browser/http';
|
|
3
3
|
export type { RealtimeClient, RealtimeClientOptions, SocketEventMap, SocketIOClient, SocketIOClientConfig, } from './browser/socket-io';
|
|
4
4
|
export { createRealtimeClient, createSocketIOClient } from './browser/socket-io';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -295,7 +295,11 @@ function joinClientBaseUrl(baseUrl, relativeUrl) {
|
|
|
295
295
|
}
|
|
296
296
|
|
|
297
297
|
// src/browser/http.ts
|
|
298
|
-
import ky, {
|
|
298
|
+
import ky, {
|
|
299
|
+
isHTTPError,
|
|
300
|
+
isNetworkError,
|
|
301
|
+
isTimeoutError
|
|
302
|
+
} from "ky";
|
|
299
303
|
|
|
300
304
|
// src/observability/trace.ts
|
|
301
305
|
var TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(.*)$/i;
|
|
@@ -371,6 +375,15 @@ class ApiError extends Error {
|
|
|
371
375
|
return error instanceof ApiError;
|
|
372
376
|
}
|
|
373
377
|
}
|
|
378
|
+
function shouldRetryBunNetworkError(error) {
|
|
379
|
+
if (ApiError.is(error) || isHTTPError(error) || isNetworkError(error) || isTimeoutError(error) || error instanceof RequestCancellationError || error instanceof DOMException && (error.name === "AbortError" || error.name === "TimeoutError")) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
if (!(error instanceof Error))
|
|
383
|
+
return;
|
|
384
|
+
const code = Object.getOwnPropertyDescriptor(error, "code");
|
|
385
|
+
return code && "value" in code && code.value === "ConnectionRefused" ? true : undefined;
|
|
386
|
+
}
|
|
374
387
|
function parseApiErrorBody(body) {
|
|
375
388
|
if (!isRecord(body) || !isRecord(body.error))
|
|
376
389
|
return null;
|
|
@@ -404,7 +417,8 @@ function createHttpClient(config) {
|
|
|
404
417
|
retry: {
|
|
405
418
|
limit: config.retry?.limit ?? 2,
|
|
406
419
|
methods: config.retry?.methods ?? ["get"],
|
|
407
|
-
statusCodes: config.retry?.statusCodes ?? []
|
|
420
|
+
statusCodes: config.retry?.statusCodes ?? [],
|
|
421
|
+
shouldRetry: ({ error }) => shouldRetryBunNetworkError(error)
|
|
408
422
|
},
|
|
409
423
|
hooks: {
|
|
410
424
|
beforeRequest: [
|
|
@@ -657,6 +671,7 @@ function createHttpExecutor(endpoint, prefix, client, config) {
|
|
|
657
671
|
};
|
|
658
672
|
}
|
|
659
673
|
function createFetchExecutor(endpoint, prefix, config, contractConfig) {
|
|
674
|
+
const executeFetch = config.fetch ?? globalThis.fetch;
|
|
660
675
|
return async (requestArgs, options) => {
|
|
661
676
|
const plan = planClientRequest(endpoint, prefix, requestArgs, contractConfig);
|
|
662
677
|
const url = joinClientBaseUrl(config.baseUrl, plan.relativeUrl);
|
|
@@ -671,7 +686,7 @@ function createFetchExecutor(endpoint, prefix, config, contractConfig) {
|
|
|
671
686
|
try {
|
|
672
687
|
return await cancellation.run(async (signal) => {
|
|
673
688
|
const body = endpoint.multipart ? buildMultipartForm(endpoint.multipart, plan.remainingArgs) : hasBody ? JSON.stringify(plan.remainingArgs) : undefined;
|
|
674
|
-
const res = await
|
|
689
|
+
const res = await executeFetch(url, {
|
|
675
690
|
method: endpoint.method,
|
|
676
691
|
headers,
|
|
677
692
|
credentials: config.credentials,
|
package/dist/node.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { AppError, appError, badRequest, conflict, forbidden, notFound, rateLimited, unauthorized, } from './contract';
|
|
8
8
|
export { createHandler } from './server/create';
|
|
9
|
-
export { createImplement, implement } from './server/implement';
|
|
9
|
+
export { createImplement, createImplementRegistry, type ExactRegistryHandlers, type ImplementationRegistry, implement, implementRegistry, type RegistryHandlers, } from './server/implement';
|
|
10
10
|
export type { LogFormat } from './server/logger';
|
|
11
11
|
export { type NodeServerConfig, type NodeServerHandle, serveNode } from './server/node';
|
|
12
12
|
export { bindRealtimeServer, type RealtimeServer, type RealtimeServerConnection, type RealtimeServerHandle, } from './server/realtime';
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,SAAS,EACT,iBAAiB,EACjB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,IAAI,oBAAoB,EAChD,KAAK,wBAAwB,IAAI,oBAAoB,EACrD,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,EACR,eAAe,EACf,UAAU,GACX,MAAM,gBAAgB,CAAC"}
|
package/dist/node.js
CHANGED
|
@@ -2,9 +2,11 @@ import {
|
|
|
2
2
|
bindRealtimeServer,
|
|
3
3
|
createHandler,
|
|
4
4
|
createImplement,
|
|
5
|
+
createImplementRegistry,
|
|
5
6
|
createSocketIOServer,
|
|
6
|
-
implement
|
|
7
|
-
|
|
7
|
+
implement,
|
|
8
|
+
implementRegistry
|
|
9
|
+
} from "./index-ts21eyz4.js";
|
|
8
10
|
import"./index-r1qp4rve.js";
|
|
9
11
|
import {
|
|
10
12
|
AppError,
|
|
@@ -15,7 +17,8 @@ import {
|
|
|
15
17
|
notFound,
|
|
16
18
|
rateLimited,
|
|
17
19
|
unauthorized
|
|
18
|
-
} from "./index-
|
|
20
|
+
} from "./index-jewp9r0a.js";
|
|
21
|
+
import"./index-h05ygjqx.js";
|
|
19
22
|
// src/server/node.ts
|
|
20
23
|
import { serve } from "srvx";
|
|
21
24
|
async function serveNode(config) {
|
|
@@ -49,9 +52,11 @@ export {
|
|
|
49
52
|
serveNode,
|
|
50
53
|
rateLimited,
|
|
51
54
|
notFound,
|
|
55
|
+
implementRegistry,
|
|
52
56
|
implement,
|
|
53
57
|
forbidden,
|
|
54
58
|
createNodeSocketIOServer as createSocketIOServer,
|
|
59
|
+
createImplementRegistry,
|
|
55
60
|
createImplement,
|
|
56
61
|
createHandler,
|
|
57
62
|
conflict,
|
|
@@ -2,6 +2,7 @@ import type { ToolCallHooks } from '../tools/execute';
|
|
|
2
2
|
import { type RequestContext } from './context';
|
|
3
3
|
import type { RequestEvent } from './event';
|
|
4
4
|
import { type SanitizeOptions } from './sanitize';
|
|
5
|
+
import { type ObservabilityDrainReport, type ObservabilityStatus } from './status';
|
|
5
6
|
/** One isolated RequestEvent sink and its sanitisation policy. */
|
|
6
7
|
export interface RequestEventSinkConfig {
|
|
7
8
|
/**
|
|
@@ -56,8 +57,10 @@ export interface Observability {
|
|
|
56
57
|
toolCall: ToolCallHooks;
|
|
57
58
|
/** Wait for events admitted before this call. */
|
|
58
59
|
flush(): Promise<void>;
|
|
60
|
+
/** Read an immutable snapshot of each enabled sink and their aggregate. */
|
|
61
|
+
getStatus(): ObservabilityStatus;
|
|
59
62
|
/** Stop admission and drain every previously accepted event. Idempotent. */
|
|
60
|
-
close(): Promise<
|
|
63
|
+
close(): Promise<ObservabilityDrainReport>;
|
|
61
64
|
}
|
|
62
65
|
export declare function createObservability(config: ObservabilityConfig): Observability;
|
|
63
66
|
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/observability/audit.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAe,KAAK,eAAe,EAAmB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/observability/audit.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAe,KAAK,eAAe,EAAmB,MAAM,YAAY,CAAC;AAChF,OAAO,EAEL,KAAK,wBAAwB,EAI7B,KAAK,mBAAmB,EAEzB,MAAM,UAAU,CAAC;AAGlB,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,iFAAiF;IACjF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IAC1C,yEAAyE;IACzE,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,8DAA8D;IAC9D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA2B,SAAQ,sBAAsB;IACxE,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,gEAAgE;AAChE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACnD;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,iDAAiD;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,2EAA2E;IAC3E,SAAS,IAAI,mBAAmB,CAAC;IACjC,4EAA4E;IAC5E,KAAK,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC5C;AAkOD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAyJ9E"}
|
|
@@ -10,5 +10,6 @@ export { createObservability, type HttpRequestCompletion, type HttpRequestObserv
|
|
|
10
10
|
export { getRequestContext, getTraceId, getUserId, type RequestContext, runWithRequestContext, setRequestDimensions, setRequestEndpoint, setRequestError, setRequestUser, type WrapRequestContextOptions, wrapInRequestContext, } from './context';
|
|
11
11
|
export type { RequestEvent } from './event';
|
|
12
12
|
export { type JsonValue, measureSize, redact, type SanitizeOptions, type SizeMeasure, sanitizePayload, truncatePreview, } from './sanitize';
|
|
13
|
+
export { type ObservabilityDrainReport, ObservabilityDrainReportSchema, type ObservabilitySinkStatus, ObservabilitySinkStatusSchema, type ObservabilityStatus, ObservabilityStatusSchema, } from './status';
|
|
13
14
|
export { childSpan, createTraceContext, formatTraceparent, parseTraceparent, resolvePropagationContext, resolveTraceContext, type TraceContext, } from './trace';
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,KAAK,cAAc,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,KAAK,yBAAyB,EAC9B,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,SAAS,EACd,WAAW,EACX,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,KAAK,cAAc,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,KAAK,yBAAyB,EAC9B,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,KAAK,SAAS,EACd,WAAW,EACX,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,uBAAuB,EAC5B,6BAA6B,EAC7B,KAAK,mBAAmB,EACxB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC"}
|
|
@@ -3,26 +3,85 @@ import {
|
|
|
3
3
|
redact,
|
|
4
4
|
sanitizePayload,
|
|
5
5
|
truncatePreview
|
|
6
|
-
} from "../index-
|
|
6
|
+
} from "../index-v58mwa19.js";
|
|
7
7
|
import {
|
|
8
|
-
childSpan,
|
|
9
|
-
createTraceContext,
|
|
10
|
-
formatTraceparent,
|
|
11
8
|
getRequestContext,
|
|
12
9
|
getTraceId,
|
|
13
10
|
getUserId,
|
|
14
|
-
isRecord,
|
|
15
|
-
parseTraceparent,
|
|
16
11
|
recordedErrorMessage,
|
|
17
|
-
resolvePropagationContext,
|
|
18
|
-
resolveTraceContext,
|
|
19
12
|
runWithRequestContext,
|
|
20
13
|
setRequestDimensions,
|
|
21
14
|
setRequestEndpoint,
|
|
22
15
|
setRequestError,
|
|
23
16
|
setRequestUser,
|
|
24
17
|
wrapInRequestContext
|
|
25
|
-
} from "../index-
|
|
18
|
+
} from "../index-jewp9r0a.js";
|
|
19
|
+
import {
|
|
20
|
+
childSpan,
|
|
21
|
+
createTraceContext,
|
|
22
|
+
formatTraceparent,
|
|
23
|
+
isRecord,
|
|
24
|
+
parseTraceparent,
|
|
25
|
+
resolvePropagationContext,
|
|
26
|
+
resolveTraceContext
|
|
27
|
+
} from "../index-h05ygjqx.js";
|
|
28
|
+
|
|
29
|
+
// src/observability/status.ts
|
|
30
|
+
import { z } from "zod";
|
|
31
|
+
var NonNegativeIntegerSchema = z.number().int().nonnegative();
|
|
32
|
+
var ObservabilitySinkStatusSchema = z.object({
|
|
33
|
+
capacity: NonNegativeIntegerSchema,
|
|
34
|
+
received: NonNegativeIntegerSchema,
|
|
35
|
+
accepted: NonNegativeIntegerSchema,
|
|
36
|
+
filtered: NonNegativeIntegerSchema,
|
|
37
|
+
completed: NonNegativeIntegerSchema,
|
|
38
|
+
dropped: NonNegativeIntegerSchema,
|
|
39
|
+
failed: NonNegativeIntegerSchema,
|
|
40
|
+
preparationFailed: NonNegativeIntegerSchema,
|
|
41
|
+
preparing: NonNegativeIntegerSchema,
|
|
42
|
+
pending: NonNegativeIntegerSchema,
|
|
43
|
+
closed: z.boolean()
|
|
44
|
+
}).readonly();
|
|
45
|
+
var ObservabilityStatusObjectSchema = z.object({
|
|
46
|
+
request: ObservabilitySinkStatusSchema.optional(),
|
|
47
|
+
tools: ObservabilitySinkStatusSchema.optional(),
|
|
48
|
+
total: ObservabilitySinkStatusSchema
|
|
49
|
+
});
|
|
50
|
+
var ObservabilityStatusSchema = ObservabilityStatusObjectSchema.readonly();
|
|
51
|
+
var ObservabilityDrainReportSchema = ObservabilityStatusObjectSchema.extend({
|
|
52
|
+
durationMs: z.number().nonnegative()
|
|
53
|
+
}).readonly();
|
|
54
|
+
var SUMMED_STATUS_KEYS = [
|
|
55
|
+
"capacity",
|
|
56
|
+
"received",
|
|
57
|
+
"accepted",
|
|
58
|
+
"filtered",
|
|
59
|
+
"completed",
|
|
60
|
+
"dropped",
|
|
61
|
+
"failed",
|
|
62
|
+
"preparationFailed",
|
|
63
|
+
"preparing",
|
|
64
|
+
"pending"
|
|
65
|
+
];
|
|
66
|
+
function aggregateObservabilityStatus(surfaces, closed) {
|
|
67
|
+
const totals = {
|
|
68
|
+
capacity: 0,
|
|
69
|
+
received: 0,
|
|
70
|
+
accepted: 0,
|
|
71
|
+
filtered: 0,
|
|
72
|
+
completed: 0,
|
|
73
|
+
dropped: 0,
|
|
74
|
+
failed: 0,
|
|
75
|
+
preparationFailed: 0,
|
|
76
|
+
preparing: 0,
|
|
77
|
+
pending: 0
|
|
78
|
+
};
|
|
79
|
+
for (const surface of surfaces) {
|
|
80
|
+
for (const key of SUMMED_STATUS_KEYS)
|
|
81
|
+
totals[key] += surface[key];
|
|
82
|
+
}
|
|
83
|
+
return ObservabilitySinkStatusSchema.parse({ ...totals, closed });
|
|
84
|
+
}
|
|
26
85
|
|
|
27
86
|
// src/observability/audit.ts
|
|
28
87
|
function toolErrorMessage(result) {
|
|
@@ -76,6 +135,13 @@ function createSinkManager(config) {
|
|
|
76
135
|
}
|
|
77
136
|
let sequence = 0;
|
|
78
137
|
let closed = false;
|
|
138
|
+
let received = 0;
|
|
139
|
+
let accepted = 0;
|
|
140
|
+
let filtered = 0;
|
|
141
|
+
let completed = 0;
|
|
142
|
+
let dropped = 0;
|
|
143
|
+
let failed = 0;
|
|
144
|
+
let preparationFailed = 0;
|
|
79
145
|
let closePromise;
|
|
80
146
|
const preparing = new Map;
|
|
81
147
|
const writes = new Map;
|
|
@@ -87,17 +153,27 @@ function createSinkManager(config) {
|
|
|
87
153
|
};
|
|
88
154
|
const admit = (id, event) => {
|
|
89
155
|
try {
|
|
90
|
-
if (config.filter && !config.filter(event))
|
|
156
|
+
if (config.filter && !config.filter(event)) {
|
|
157
|
+
filtered += 1;
|
|
91
158
|
return;
|
|
159
|
+
}
|
|
92
160
|
} catch (error) {
|
|
161
|
+
preparationFailed += 1;
|
|
93
162
|
reportError(error, event);
|
|
94
163
|
return;
|
|
95
164
|
}
|
|
96
165
|
if (writes.size >= maxPending) {
|
|
166
|
+
dropped += 1;
|
|
97
167
|
reportDrop("capacity", event);
|
|
98
168
|
return;
|
|
99
169
|
}
|
|
100
|
-
|
|
170
|
+
accepted += 1;
|
|
171
|
+
const write = Promise.resolve().then(() => config.write(event)).then(() => {
|
|
172
|
+
completed += 1;
|
|
173
|
+
}).catch((error) => {
|
|
174
|
+
failed += 1;
|
|
175
|
+
reportError(error, event);
|
|
176
|
+
}).finally(() => writes.delete(id));
|
|
101
177
|
writes.set(id, write);
|
|
102
178
|
};
|
|
103
179
|
const awaitGeneration = async (boundary) => {
|
|
@@ -107,22 +183,59 @@ function createSinkManager(config) {
|
|
|
107
183
|
};
|
|
108
184
|
return {
|
|
109
185
|
submit(produce) {
|
|
186
|
+
received += 1;
|
|
110
187
|
const id = ++sequence;
|
|
111
188
|
if (closed) {
|
|
112
|
-
Promise.resolve().then(produce).then((event) =>
|
|
189
|
+
Promise.resolve().then(produce).then((event) => {
|
|
190
|
+
dropped += 1;
|
|
191
|
+
reportDrop("closed", event);
|
|
192
|
+
}).catch((error) => {
|
|
193
|
+
preparationFailed += 1;
|
|
194
|
+
reportError(error);
|
|
195
|
+
});
|
|
113
196
|
return;
|
|
114
197
|
}
|
|
115
|
-
const preparation = Promise.resolve().then(produce).then((event) => admit(id, event)).catch((error) =>
|
|
198
|
+
const preparation = Promise.resolve().then(produce).then((event) => admit(id, event)).catch((error) => {
|
|
199
|
+
preparationFailed += 1;
|
|
200
|
+
reportError(error);
|
|
201
|
+
}).finally(() => preparing.delete(id));
|
|
116
202
|
preparing.set(id, preparation);
|
|
117
203
|
},
|
|
118
204
|
flush() {
|
|
119
205
|
return awaitGeneration(sequence);
|
|
120
206
|
},
|
|
207
|
+
getStatus() {
|
|
208
|
+
return ObservabilitySinkStatusSchema.parse({
|
|
209
|
+
capacity: maxPending,
|
|
210
|
+
received,
|
|
211
|
+
accepted,
|
|
212
|
+
filtered,
|
|
213
|
+
completed,
|
|
214
|
+
dropped,
|
|
215
|
+
failed,
|
|
216
|
+
preparationFailed,
|
|
217
|
+
preparing: preparing.size,
|
|
218
|
+
pending: writes.size,
|
|
219
|
+
closed
|
|
220
|
+
});
|
|
221
|
+
},
|
|
121
222
|
close() {
|
|
122
223
|
if (closePromise)
|
|
123
224
|
return closePromise;
|
|
124
225
|
closed = true;
|
|
125
|
-
closePromise = awaitGeneration(sequence)
|
|
226
|
+
closePromise = awaitGeneration(sequence).then(() => ObservabilitySinkStatusSchema.parse({
|
|
227
|
+
capacity: maxPending,
|
|
228
|
+
received,
|
|
229
|
+
accepted,
|
|
230
|
+
filtered,
|
|
231
|
+
completed,
|
|
232
|
+
dropped,
|
|
233
|
+
failed,
|
|
234
|
+
preparationFailed,
|
|
235
|
+
preparing: preparing.size,
|
|
236
|
+
pending: writes.size,
|
|
237
|
+
closed
|
|
238
|
+
}));
|
|
126
239
|
return closePromise;
|
|
127
240
|
}
|
|
128
241
|
};
|
|
@@ -130,6 +243,7 @@ function createSinkManager(config) {
|
|
|
130
243
|
function createObservability(config) {
|
|
131
244
|
const requestManager = config.request ? createSinkManager(config.request) : undefined;
|
|
132
245
|
const toolManager = config.tools ? createSinkManager(config.tools) : undefined;
|
|
246
|
+
let closed = false;
|
|
133
247
|
let closePromise;
|
|
134
248
|
const request = config.request ? {
|
|
135
249
|
includePayload: config.request.includePayload ?? false,
|
|
@@ -228,16 +342,33 @@ function createObservability(config) {
|
|
|
228
342
|
} catch {}
|
|
229
343
|
}
|
|
230
344
|
} : undefined;
|
|
345
|
+
const getStatus = () => {
|
|
346
|
+
const requestStatus = requestManager?.getStatus();
|
|
347
|
+
const toolsStatus = toolManager?.getStatus();
|
|
348
|
+
const surfaces = [requestStatus, toolsStatus].filter((status) => status !== undefined);
|
|
349
|
+
return ObservabilityStatusSchema.parse({
|
|
350
|
+
...requestStatus && { request: requestStatus },
|
|
351
|
+
...toolsStatus && { tools: toolsStatus },
|
|
352
|
+
total: aggregateObservabilityStatus(surfaces, closed)
|
|
353
|
+
});
|
|
354
|
+
};
|
|
231
355
|
return {
|
|
232
356
|
...request && { request },
|
|
233
357
|
toolCall: toolCall ?? {},
|
|
234
358
|
async flush() {
|
|
235
359
|
await Promise.all([requestManager?.flush(), toolManager?.flush()]);
|
|
236
360
|
},
|
|
361
|
+
getStatus,
|
|
237
362
|
close() {
|
|
238
363
|
if (!closePromise) {
|
|
364
|
+
closed = true;
|
|
365
|
+
const startedAt = performance.now();
|
|
239
366
|
closePromise = Promise.all([requestManager?.close(), toolManager?.close()]).then(() => {
|
|
240
|
-
|
|
367
|
+
const status = getStatus();
|
|
368
|
+
return ObservabilityDrainReportSchema.parse({
|
|
369
|
+
...status,
|
|
370
|
+
durationMs: performance.now() - startedAt
|
|
371
|
+
});
|
|
241
372
|
});
|
|
242
373
|
}
|
|
243
374
|
return closePromise;
|
|
@@ -264,5 +395,8 @@ export {
|
|
|
264
395
|
formatTraceparent,
|
|
265
396
|
createTraceContext,
|
|
266
397
|
createObservability,
|
|
267
|
-
childSpan
|
|
398
|
+
childSpan,
|
|
399
|
+
ObservabilityStatusSchema,
|
|
400
|
+
ObservabilitySinkStatusSchema,
|
|
401
|
+
ObservabilityDrainReportSchema
|
|
268
402
|
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Immutable operational snapshot for one bounded observability sink. */
|
|
3
|
+
export declare const ObservabilitySinkStatusSchema: z.ZodReadonly<z.ZodObject<{
|
|
4
|
+
capacity: z.ZodNumber;
|
|
5
|
+
received: z.ZodNumber;
|
|
6
|
+
accepted: z.ZodNumber;
|
|
7
|
+
filtered: z.ZodNumber;
|
|
8
|
+
completed: z.ZodNumber;
|
|
9
|
+
dropped: z.ZodNumber;
|
|
10
|
+
failed: z.ZodNumber;
|
|
11
|
+
preparationFailed: z.ZodNumber;
|
|
12
|
+
preparing: z.ZodNumber;
|
|
13
|
+
pending: z.ZodNumber;
|
|
14
|
+
closed: z.ZodBoolean;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
export type ObservabilitySinkStatus = z.infer<typeof ObservabilitySinkStatusSchema>;
|
|
17
|
+
export declare const ObservabilityStatusSchema: z.ZodReadonly<z.ZodObject<{
|
|
18
|
+
request: z.ZodOptional<z.ZodReadonly<z.ZodObject<{
|
|
19
|
+
capacity: z.ZodNumber;
|
|
20
|
+
received: z.ZodNumber;
|
|
21
|
+
accepted: z.ZodNumber;
|
|
22
|
+
filtered: z.ZodNumber;
|
|
23
|
+
completed: z.ZodNumber;
|
|
24
|
+
dropped: z.ZodNumber;
|
|
25
|
+
failed: z.ZodNumber;
|
|
26
|
+
preparationFailed: z.ZodNumber;
|
|
27
|
+
preparing: z.ZodNumber;
|
|
28
|
+
pending: z.ZodNumber;
|
|
29
|
+
closed: z.ZodBoolean;
|
|
30
|
+
}, z.core.$strip>>>;
|
|
31
|
+
tools: z.ZodOptional<z.ZodReadonly<z.ZodObject<{
|
|
32
|
+
capacity: z.ZodNumber;
|
|
33
|
+
received: z.ZodNumber;
|
|
34
|
+
accepted: z.ZodNumber;
|
|
35
|
+
filtered: z.ZodNumber;
|
|
36
|
+
completed: z.ZodNumber;
|
|
37
|
+
dropped: z.ZodNumber;
|
|
38
|
+
failed: z.ZodNumber;
|
|
39
|
+
preparationFailed: z.ZodNumber;
|
|
40
|
+
preparing: z.ZodNumber;
|
|
41
|
+
pending: z.ZodNumber;
|
|
42
|
+
closed: z.ZodBoolean;
|
|
43
|
+
}, z.core.$strip>>>;
|
|
44
|
+
total: z.ZodReadonly<z.ZodObject<{
|
|
45
|
+
capacity: z.ZodNumber;
|
|
46
|
+
received: z.ZodNumber;
|
|
47
|
+
accepted: z.ZodNumber;
|
|
48
|
+
filtered: z.ZodNumber;
|
|
49
|
+
completed: z.ZodNumber;
|
|
50
|
+
dropped: z.ZodNumber;
|
|
51
|
+
failed: z.ZodNumber;
|
|
52
|
+
preparationFailed: z.ZodNumber;
|
|
53
|
+
preparing: z.ZodNumber;
|
|
54
|
+
pending: z.ZodNumber;
|
|
55
|
+
closed: z.ZodBoolean;
|
|
56
|
+
}, z.core.$strip>>;
|
|
57
|
+
}, z.core.$strip>>;
|
|
58
|
+
export type ObservabilityStatus = z.infer<typeof ObservabilityStatusSchema>;
|
|
59
|
+
/** Final immutable state returned after observability admission closes and drains. */
|
|
60
|
+
export declare const ObservabilityDrainReportSchema: z.ZodReadonly<z.ZodObject<{
|
|
61
|
+
request: z.ZodOptional<z.ZodReadonly<z.ZodObject<{
|
|
62
|
+
capacity: z.ZodNumber;
|
|
63
|
+
received: z.ZodNumber;
|
|
64
|
+
accepted: z.ZodNumber;
|
|
65
|
+
filtered: z.ZodNumber;
|
|
66
|
+
completed: z.ZodNumber;
|
|
67
|
+
dropped: z.ZodNumber;
|
|
68
|
+
failed: z.ZodNumber;
|
|
69
|
+
preparationFailed: z.ZodNumber;
|
|
70
|
+
preparing: z.ZodNumber;
|
|
71
|
+
pending: z.ZodNumber;
|
|
72
|
+
closed: z.ZodBoolean;
|
|
73
|
+
}, z.core.$strip>>>;
|
|
74
|
+
tools: z.ZodOptional<z.ZodReadonly<z.ZodObject<{
|
|
75
|
+
capacity: z.ZodNumber;
|
|
76
|
+
received: z.ZodNumber;
|
|
77
|
+
accepted: z.ZodNumber;
|
|
78
|
+
filtered: z.ZodNumber;
|
|
79
|
+
completed: z.ZodNumber;
|
|
80
|
+
dropped: z.ZodNumber;
|
|
81
|
+
failed: z.ZodNumber;
|
|
82
|
+
preparationFailed: z.ZodNumber;
|
|
83
|
+
preparing: z.ZodNumber;
|
|
84
|
+
pending: z.ZodNumber;
|
|
85
|
+
closed: z.ZodBoolean;
|
|
86
|
+
}, z.core.$strip>>>;
|
|
87
|
+
total: z.ZodReadonly<z.ZodObject<{
|
|
88
|
+
capacity: z.ZodNumber;
|
|
89
|
+
received: z.ZodNumber;
|
|
90
|
+
accepted: z.ZodNumber;
|
|
91
|
+
filtered: z.ZodNumber;
|
|
92
|
+
completed: z.ZodNumber;
|
|
93
|
+
dropped: z.ZodNumber;
|
|
94
|
+
failed: z.ZodNumber;
|
|
95
|
+
preparationFailed: z.ZodNumber;
|
|
96
|
+
preparing: z.ZodNumber;
|
|
97
|
+
pending: z.ZodNumber;
|
|
98
|
+
closed: z.ZodBoolean;
|
|
99
|
+
}, z.core.$strip>>;
|
|
100
|
+
durationMs: z.ZodNumber;
|
|
101
|
+
}, z.core.$strip>>;
|
|
102
|
+
export type ObservabilityDrainReport = z.infer<typeof ObservabilityDrainReportSchema>;
|
|
103
|
+
/** Build and freeze the aggregate without exposing mutable counters. */
|
|
104
|
+
export declare function aggregateObservabilityStatus(surfaces: readonly ObservabilitySinkStatus[], closed: boolean): ObservabilitySinkStatus;
|
|
105
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/observability/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,yEAAyE;AACzE,eAAO,MAAM,6BAA6B;;;;;;;;;;;;kBAc7B,CAAC;AAEd,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AASpF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAA6C,CAAC;AAEpF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,sFAAsF;AACtF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAE9B,CAAC;AAEd,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAiBtF,wEAAwE;AACxE,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAC5C,MAAM,EAAE,OAAO,GACd,uBAAuB,CAiBzB"}
|
|
@@ -30,12 +30,6 @@ export declare function defineMultipartStream<const E extends StreamingEndpoint,
|
|
|
30
30
|
files: StreamedFiles<E, R>;
|
|
31
31
|
}) => StreamingReturn<E>;
|
|
32
32
|
}): StreamingMultipartImplementation;
|
|
33
|
-
/**
|
|
34
|
-
* Bind a contract to its typed `handlers`, producing a `ServiceDef` to mount on
|
|
35
|
-
* `createServer`. Every handler is type-checked against its endpoint's schemas.
|
|
36
|
-
* Pass `TCtx` for a typed handler context — or use `createImplement` to fix it
|
|
37
|
-
* once.
|
|
38
|
-
*/
|
|
39
33
|
export declare function implement<T extends Record<string, EndpointDef>, TCtx extends RuntimeContext = RuntimeContext>(contract: ContractDef<T, string>, handlers: Handlers<T, TCtx>): ServiceDef;
|
|
40
34
|
/**
|
|
41
35
|
* Fix the handler context type once — `const implement =
|
|
@@ -43,5 +37,21 @@ export declare function implement<T extends Record<string, EndpointDef>, TCtx ex
|
|
|
43
37
|
* the generic. The application declares its context shape in a single place.
|
|
44
38
|
*/
|
|
45
39
|
export declare function createImplement<TCtx extends RuntimeContext>(): <T extends Record<string, EndpointDef>>(contract: ContractDef<T, string>, handlers: Handlers<T, TCtx>) => ServiceDef;
|
|
40
|
+
export type ImplementationRegistry = Record<string, ContractDef<Record<string, EndpointDef>, string>>;
|
|
41
|
+
/** Exact handlers map derived from a literal contract registry. */
|
|
42
|
+
export type RegistryHandlers<TContracts extends ImplementationRegistry, TCtx extends RuntimeContext = RuntimeContext> = {
|
|
43
|
+
[K in keyof TContracts]: TContracts[K] extends ContractDef<infer TEndpoints, string> ? Handlers<TEndpoints, TCtx> : never;
|
|
44
|
+
};
|
|
45
|
+
export type ExactRegistryHandlers<TContracts extends ImplementationRegistry, THandlers extends RegistryHandlers<TContracts, TCtx>, TCtx extends RuntimeContext> = THandlers & RegistryHandlers<TContracts, TCtx> & Record<Exclude<keyof THandlers, keyof TContracts>, never> & {
|
|
46
|
+
[K in keyof THandlers & keyof TContracts]: THandlers[K] & Record<Exclude<keyof THandlers[K], keyof RegistryHandlers<TContracts, TCtx>[K]>, never>;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Bind an exact `name → contract` registry to its exact handlers map. Missing,
|
|
50
|
+
* extra and endpoint-incompatible implementations fail at compile time; loose
|
|
51
|
+
* JavaScript callers receive the same checks at runtime.
|
|
52
|
+
*/
|
|
53
|
+
export declare function implementRegistry<const TContracts extends ImplementationRegistry, const THandlers extends RegistryHandlers<TContracts>>(contracts: TContracts, handlers: ExactRegistryHandlers<TContracts, THandlers, RuntimeContext>): ServiceDef[];
|
|
54
|
+
/** Fix one handler context type for every entry in an implementation registry. */
|
|
55
|
+
export declare function createImplementRegistry<TCtx extends RuntimeContext>(): <const TContracts extends ImplementationRegistry, const THandlers extends RegistryHandlers<TContracts, TCtx>>(contracts: TContracts, handlers: ExactRegistryHandlers<TContracts, THandlers, TCtx>) => ServiceDef[];
|
|
46
56
|
export {};
|
|
47
57
|
//# sourceMappingURL=implement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/server/implement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,sBAAsB,EACtB,QAAQ,EAER,iBAAiB,EACjB,UAAU,EACV,gCAAgC,EACjC,MAAM,SAAS,CAAC;AAEjB,KAAK,iBAAiB,GAAG,WAAW,GAAG;IACrC,SAAS,EAAE,mBAAmB,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;CACzD,CAAC;AACF,KAAK,WAAW,CAAC,CAAC,SAAS,iBAAiB,IAAI;KAC7C,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,iBAAiB;CACxD,CAAC;AACF,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACzE,KAAK,aAAa,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,IAAI;KACzE,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,QAAQ,EAAE,IAAI,CAAC;KAChB,GACG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GACrB,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,KAAK,CAAA;KAAE,GACpD,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GAC/B,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1B,CAAC;AACF,KAAK,eAAe,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS;IAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,GAChF,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACd,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAWzB;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,CAAC,SAAS,iBAAiB,EACjC,KAAK,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAE9B,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE;IACN,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1E,OAAO,EAAE,CACP,GAAG,EAAE,sBAAsB,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG;QAAE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KAAE,KAC5E,eAAe,CAAC,CAAC,CAAC,CAAC;CACzB,GACA,gCAAgC,CAqBlC;
|
|
1
|
+
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/server/implement.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { createHandler } from './create';
|
|
|
7
7
|
export { createErrorHook, type ErrorHookConfig, type ResolvedError, } from './error-hook';
|
|
8
8
|
export { createEventBus, type DefaultEventMap, type EventBus, type EventBusOptions, type EventHandler, } from './event-bus';
|
|
9
9
|
export { type ByteRange, parseByteRange, type ServeFileOptions, serveFile, staticRoute, weakETag, } from './file';
|
|
10
|
-
export { createImplement, defineMultipartStream, implement } from './implement';
|
|
10
|
+
export { createImplement, createImplementRegistry, defineMultipartStream, type ExactRegistryHandlers, type ImplementationRegistry, implement, implementRegistry, type RegistryHandlers, } from './implement';
|
|
11
11
|
export type { LogFormat } from './logger';
|
|
12
12
|
export { type AuthHook, type AuthHookConfig, type AuthRule, type BearerResolverConfig, createAuthHook, createBearerResolver, extractToken, type JwtPayload, type SignJwtOptions, signJwt, type VerifyJwtOptions, verifyJwt, } from './middleware/auth';
|
|
13
13
|
export { type CookieDef, type CookieOptions, defineCookie, parseCookies, serializeCookie, } from './middleware/cookies';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,KAAK,eAAe,EACpB,YAAY,GACb,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,KAAK,mBAAmB,IAAI,gBAAgB,EAC5C,KAAK,eAAe,IAAI,YAAY,EACpC,KAAK,gBAAgB,IAAI,aAAa,EACtC,KAAK,WAAW,IAAI,QAAQ,EAC5B,KAAK,kBAAkB,IAAI,eAAe,EAC1C,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,SAAS,EACd,cAAc,EACd,KAAK,gBAAgB,EACrB,SAAS,EACT,WAAW,EACX,QAAQ,GACT,MAAM,QAAQ,CAAC;AAChB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|