stitchkit 0.44.1 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/browser/http.d.ts.map +1 -1
- package/dist/browser/socket-io.d.ts +16 -0
- package/dist/browser/socket-io.d.ts.map +1 -1
- package/dist/cli.js +3 -4
- package/dist/contract/errors.d.ts +1 -0
- package/dist/contract/errors.d.ts.map +1 -1
- package/dist/contract/index.js +2 -2
- package/dist/{index-yh0p5ddn.js → index-5s8b7z6q.js} +31 -11
- package/dist/{index-mvjyq9h9.js → index-62pqb23z.js} +309 -144
- package/dist/index-c40tkxcd.js +181 -0
- package/dist/{index-r6czv7yt.js → index-pwyedf7b.js} +4 -3
- package/dist/{index-6jypn22c.js → index-r1qp4rve.js} +9 -1
- package/dist/{index-s4qsmgwe.js → index-tss6bk5c.js} +4 -1
- package/dist/{index-36f1xkdb.js → index-w1s873ng.js} +2 -2
- package/dist/index-yxpe3phd.js +63 -0
- package/dist/{index-4fyn9f09.js → index-zwqty9zf.js} +396 -246
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +266 -17
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/secure-fetch.d.ts +23 -3
- package/dist/internal/secure-fetch.d.ts.map +1 -1
- package/dist/internal/typed.d.ts +7 -0
- package/dist/internal/typed.d.ts.map +1 -1
- package/dist/internal/within-dir.d.ts +6 -0
- package/dist/internal/within-dir.d.ts.map +1 -1
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +5 -4
- package/dist/observability/audit.d.ts.map +1 -1
- package/dist/observability/event.d.ts +7 -0
- package/dist/observability/event.d.ts.map +1 -1
- package/dist/observability/index.js +54 -125
- package/dist/observability/sanitize.d.ts +8 -1
- package/dist/observability/sanitize.d.ts.map +1 -1
- package/dist/observability/trace.d.ts +3 -1
- package/dist/observability/trace.d.ts.map +1 -1
- package/dist/react/cache-bridge.d.ts +4 -0
- package/dist/react/cache-bridge.d.ts.map +1 -1
- package/dist/react.js +46 -5
- package/dist/realtime/contract.d.ts +39 -0
- package/dist/realtime/contract.d.ts.map +1 -0
- package/dist/realtime/index.d.ts +3 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/rejection.d.ts +10 -0
- package/dist/realtime/rejection.d.ts.map +1 -0
- package/dist/realtime/socket.d.ts +30 -0
- package/dist/realtime/socket.d.ts.map +1 -0
- package/dist/server/cache.d.ts +5 -1
- package/dist/server/cache.d.ts.map +1 -1
- package/dist/server/error-hook.d.ts +1 -0
- package/dist/server/error-hook.d.ts.map +1 -1
- package/dist/server/file.d.ts +6 -0
- package/dist/server/file.d.ts.map +1 -1
- package/dist/server/implement.d.ts.map +1 -1
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +110 -11
- package/dist/server/middleware/cors.d.ts.map +1 -1
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/realtime.d.ts +24 -0
- package/dist/server/realtime.d.ts.map +1 -0
- package/dist/server/router.d.ts +0 -8
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/stream.d.ts.map +1 -1
- package/dist/server/types.d.ts +2 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/tools/cli-args.d.ts +11 -3
- package/dist/tools/cli-args.d.ts.map +1 -1
- package/dist/tools/cli.d.ts +5 -0
- package/dist/tools/cli.d.ts.map +1 -1
- package/dist/tools/coerce.d.ts.map +1 -1
- package/dist/tools/json-schema.d.ts.map +1 -1
- package/dist/tools/mcp-handler.d.ts +4 -3
- package/dist/tools/mcp-handler.d.ts.map +1 -1
- package/dist/tools/mcp-prepare.d.ts +95 -0
- package/dist/tools/mcp-prepare.d.ts.map +1 -0
- package/dist/tools/mcp-round.d.ts +4 -0
- package/dist/tools/mcp-round.d.ts.map +1 -1
- package/dist/tools/mcp-stdio.d.ts +2 -1
- package/dist/tools/mcp-stdio.d.ts.map +1 -1
- package/dist/tools/mcp.d.ts +2 -78
- package/dist/tools/mcp.d.ts.map +1 -1
- package/dist/tools/mount-download.d.ts +5 -0
- package/dist/tools/mount-download.d.ts.map +1 -1
- package/dist/tools/native-mcp.d.ts +1 -1
- package/dist/tools/native-mcp.d.ts.map +1 -1
- package/dist/tools/oauth-provider.d.ts +20 -1
- package/dist/tools/oauth-provider.d.ts.map +1 -1
- package/dist/tools/tool-logger.d.ts +1 -1
- package/dist/tools/tool-logger.d.ts.map +1 -1
- package/dist/tools/view-file.d.ts +9 -0
- package/dist/tools/view-file.d.ts.map +1 -1
- package/dist/tools.d.ts +2 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +342 -214
- package/llms-full.txt +175 -44
- package/llms.txt +1 -1
- package/package.json +2 -2
- package/dist/index-frfyw9fa.js +0 -33
- package/dist/index-x3fcszf8.js +0 -8
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,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,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,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
|
@@ -17,12 +17,13 @@ import {
|
|
|
17
17
|
parseTrailingWildcard,
|
|
18
18
|
rateLimited,
|
|
19
19
|
unauthorized
|
|
20
|
-
} from "./index-
|
|
20
|
+
} from "./index-pwyedf7b.js";
|
|
21
21
|
import {
|
|
22
22
|
isRecord,
|
|
23
23
|
mapObject,
|
|
24
|
+
transportResult,
|
|
24
25
|
typedEntries
|
|
25
|
-
} from "./index-
|
|
26
|
+
} from "./index-tss6bk5c.js";
|
|
26
27
|
|
|
27
28
|
// src/browser/client-multipart.ts
|
|
28
29
|
function isFileDescriptor(value) {
|
|
@@ -211,7 +212,7 @@ function joinClientBaseUrl(baseUrl, relativeUrl) {
|
|
|
211
212
|
import ky, { isHTTPError } from "ky";
|
|
212
213
|
|
|
213
214
|
// src/observability/trace.ts
|
|
214
|
-
var TRACEPARENT_RE = /^
|
|
215
|
+
var TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(.*)$/i;
|
|
215
216
|
function randomHex(bytes) {
|
|
216
217
|
const arr = new Uint8Array(bytes);
|
|
217
218
|
crypto.getRandomValues(arr);
|
|
@@ -227,16 +228,24 @@ function parseTraceparent(header) {
|
|
|
227
228
|
if (!header)
|
|
228
229
|
return null;
|
|
229
230
|
const match = TRACEPARENT_RE.exec(header.trim());
|
|
230
|
-
if (!match?.[1] || !match[2])
|
|
231
|
+
if (!match?.[1] || !match[2] || !match[3] || !match[4] || match[5] === undefined)
|
|
231
232
|
return null;
|
|
232
|
-
const
|
|
233
|
-
|
|
233
|
+
const version = match[1].toLowerCase();
|
|
234
|
+
if (version === "ff")
|
|
235
|
+
return null;
|
|
236
|
+
const suffix = match[5];
|
|
237
|
+
if (version === "00" ? suffix !== "" : suffix !== "" && !/^(?:-[0-9a-f]{2,})+$/i.test(suffix)) {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
const traceId = match[2].toLowerCase();
|
|
241
|
+
const parentSpanId = match[3].toLowerCase();
|
|
242
|
+
const traceFlags = match[4].toLowerCase();
|
|
234
243
|
if (/^0+$/.test(traceId) || /^0+$/.test(parentSpanId))
|
|
235
244
|
return null;
|
|
236
|
-
return { traceId, spanId: randomHex(8), parentSpanId };
|
|
245
|
+
return { traceId, spanId: randomHex(8), parentSpanId, traceFlags };
|
|
237
246
|
}
|
|
238
247
|
function formatTraceparent(ctx) {
|
|
239
|
-
return `00-${ctx.traceId}-${ctx.spanId}
|
|
248
|
+
return `00-${ctx.traceId}-${ctx.spanId}-${ctx.traceFlags ?? "01"}`;
|
|
240
249
|
}
|
|
241
250
|
function childSpan(parent) {
|
|
242
251
|
return {
|
|
@@ -244,7 +253,8 @@ function childSpan(parent) {
|
|
|
244
253
|
spanId: randomHex(8),
|
|
245
254
|
parentSpanId: parent.spanId,
|
|
246
255
|
...parent.tracestate !== undefined && { tracestate: parent.tracestate },
|
|
247
|
-
...parent.baggage !== undefined && { baggage: parent.baggage }
|
|
256
|
+
...parent.baggage !== undefined && { baggage: parent.baggage },
|
|
257
|
+
...parent.traceFlags !== undefined && { traceFlags: parent.traceFlags }
|
|
248
258
|
};
|
|
249
259
|
}
|
|
250
260
|
var encoder = new TextEncoder;
|
|
@@ -376,10 +386,10 @@ function createHttpClient(config) {
|
|
|
376
386
|
}
|
|
377
387
|
try {
|
|
378
388
|
if (options.responseType === "blob") {
|
|
379
|
-
return client[method](url, kyOptions).blob();
|
|
389
|
+
return transportResult(await client[method](url, kyOptions).blob());
|
|
380
390
|
}
|
|
381
391
|
if (options.responseType === "response") {
|
|
382
|
-
return await client[method](url, kyOptions);
|
|
392
|
+
return transportResult(await client[method](url, kyOptions));
|
|
383
393
|
}
|
|
384
394
|
const response = await client[method](url, kyOptions);
|
|
385
395
|
if (options.responseType === "void") {
|
|
@@ -389,9 +399,9 @@ function createHttpClient(config) {
|
|
|
389
399
|
}
|
|
390
400
|
}
|
|
391
401
|
if (options.responseType === "void" || response.status === 204 || response.headers.get("content-length") === "0") {
|
|
392
|
-
return;
|
|
402
|
+
return transportResult(undefined);
|
|
393
403
|
}
|
|
394
|
-
return response.json();
|
|
404
|
+
return await response.json();
|
|
395
405
|
} catch (error) {
|
|
396
406
|
if (ApiError.is(error))
|
|
397
407
|
throw error;
|
|
@@ -646,6 +656,201 @@ function createUrlBuilders(contracts, source, contractConfig) {
|
|
|
646
656
|
function createScopedUrlBuilders(contracts, source, scopeConfigs) {
|
|
647
657
|
return buildScopedRegistry(contracts, scopeConfigs, "URL builder", (contract, config) => createUrlBuilder(contract, source, config));
|
|
648
658
|
}
|
|
659
|
+
// src/realtime/rejection.ts
|
|
660
|
+
import { z as z2 } from "zod";
|
|
661
|
+
|
|
662
|
+
// src/internal/errors.ts
|
|
663
|
+
import { z } from "zod";
|
|
664
|
+
function issuePath(path) {
|
|
665
|
+
return path.length > 0 ? path.map(String).join(".") : "(root)";
|
|
666
|
+
}
|
|
667
|
+
function zodIssues(error) {
|
|
668
|
+
return error.issues.map((issue) => ({
|
|
669
|
+
path: issuePath(issue.path),
|
|
670
|
+
code: issue.code,
|
|
671
|
+
message: issue.message
|
|
672
|
+
}));
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
// src/realtime/rejection.ts
|
|
676
|
+
function realtimeContractViolation(options) {
|
|
677
|
+
const issues = options.cause instanceof z2.ZodError ? zodIssues(options.cause) : undefined;
|
|
678
|
+
const reason = options.reason.replaceAll("-", " ");
|
|
679
|
+
const error = new AppError("REALTIME_CONTRACT_VIOLATION", `Realtime event "${options.event}" (${options.direction}, ${options.phase}): ${reason}`, 500, {
|
|
680
|
+
event: options.event,
|
|
681
|
+
direction: options.direction,
|
|
682
|
+
phase: options.phase,
|
|
683
|
+
reason: options.reason,
|
|
684
|
+
fault: options.fault,
|
|
685
|
+
...issues !== undefined && { issues }
|
|
686
|
+
});
|
|
687
|
+
if (options.cause !== undefined)
|
|
688
|
+
error.cause = options.cause;
|
|
689
|
+
return { ...options, error };
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
// src/realtime/socket.ts
|
|
693
|
+
function method(target, name) {
|
|
694
|
+
const value = Reflect.get(target, name);
|
|
695
|
+
if (typeof value !== "function") {
|
|
696
|
+
throw new Error(`Realtime target does not implement ${name}()`);
|
|
697
|
+
}
|
|
698
|
+
return (...args) => Reflect.apply(value, target, args);
|
|
699
|
+
}
|
|
700
|
+
function splitWireArguments(definition, args) {
|
|
701
|
+
if (!definition.ack)
|
|
702
|
+
return { values: args };
|
|
703
|
+
const acknowledgement = args.at(-1);
|
|
704
|
+
if (typeof acknowledgement !== "function")
|
|
705
|
+
return { values: args };
|
|
706
|
+
return {
|
|
707
|
+
values: args.slice(0, -1),
|
|
708
|
+
acknowledgement: (...callbackArgs) => Reflect.apply(acknowledgement, undefined, callbackArgs)
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
function eventDefinition(registry, event, direction) {
|
|
712
|
+
const definition = registry[event];
|
|
713
|
+
if (!definition) {
|
|
714
|
+
throw realtimeContractViolation({
|
|
715
|
+
event,
|
|
716
|
+
direction,
|
|
717
|
+
phase: "arguments",
|
|
718
|
+
reason: "unknown-event",
|
|
719
|
+
fault: "local"
|
|
720
|
+
}).error;
|
|
721
|
+
}
|
|
722
|
+
return definition;
|
|
723
|
+
}
|
|
724
|
+
function reportRejected(rejected, hook, logger) {
|
|
725
|
+
if (!hook) {
|
|
726
|
+
if (logger) {
|
|
727
|
+
logger.warn(rejected.error.message, rejected.error.details);
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
console.warn(`[stitchkit] rejected realtime ${rejected.direction} event "${rejected.event}" (${rejected.phase})`, rejected.error);
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
Promise.resolve(hook(rejected)).catch((error) => {
|
|
734
|
+
console.error("[stitchkit] realtime rejection hook failed", error);
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
function createValidatedRealtimeSocket({
|
|
738
|
+
target,
|
|
739
|
+
inbound,
|
|
740
|
+
outbound,
|
|
741
|
+
inboundDirection,
|
|
742
|
+
outboundDirection,
|
|
743
|
+
onRejected,
|
|
744
|
+
logger,
|
|
745
|
+
subscribe
|
|
746
|
+
}) {
|
|
747
|
+
const emitTarget = method(target, "emit");
|
|
748
|
+
return {
|
|
749
|
+
on: (event, handler) => {
|
|
750
|
+
const definition = eventDefinition(inbound, event, inboundDirection);
|
|
751
|
+
const wrapped = (...wireArgs) => {
|
|
752
|
+
const { values, acknowledgement } = splitWireArguments(definition, wireArgs);
|
|
753
|
+
const parsed = definition.args.safeParse(values);
|
|
754
|
+
if (!parsed.success) {
|
|
755
|
+
reportRejected(realtimeContractViolation({
|
|
756
|
+
event,
|
|
757
|
+
direction: inboundDirection,
|
|
758
|
+
phase: "arguments",
|
|
759
|
+
reason: "invalid-arguments",
|
|
760
|
+
fault: "peer",
|
|
761
|
+
cause: parsed.error
|
|
762
|
+
}), onRejected, logger);
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
765
|
+
if (definition.ack && !acknowledgement) {
|
|
766
|
+
reportRejected(realtimeContractViolation({
|
|
767
|
+
event,
|
|
768
|
+
direction: inboundDirection,
|
|
769
|
+
phase: "acknowledgement",
|
|
770
|
+
reason: "missing-acknowledgement",
|
|
771
|
+
fault: "peer"
|
|
772
|
+
}), onRejected, logger);
|
|
773
|
+
return;
|
|
774
|
+
}
|
|
775
|
+
const applicationArgs = [...parsed.data];
|
|
776
|
+
if (definition.ack) {
|
|
777
|
+
applicationArgs.push((value) => {
|
|
778
|
+
const ack = definition.ack?.safeParse(value);
|
|
779
|
+
if (!ack?.success) {
|
|
780
|
+
if (ack) {
|
|
781
|
+
reportRejected(realtimeContractViolation({
|
|
782
|
+
event,
|
|
783
|
+
direction: outboundDirection,
|
|
784
|
+
phase: "acknowledgement",
|
|
785
|
+
reason: "invalid-acknowledgement-value",
|
|
786
|
+
fault: "local",
|
|
787
|
+
cause: ack.error
|
|
788
|
+
}), onRejected, logger);
|
|
789
|
+
}
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
792
|
+
acknowledgement?.(ack.data);
|
|
793
|
+
});
|
|
794
|
+
}
|
|
795
|
+
Reflect.apply(handler, undefined, applicationArgs);
|
|
796
|
+
};
|
|
797
|
+
if (subscribe)
|
|
798
|
+
return subscribe(event, wrapped);
|
|
799
|
+
const onTarget = method(target, "on");
|
|
800
|
+
const offTarget = method(target, "off");
|
|
801
|
+
onTarget(event, wrapped);
|
|
802
|
+
return () => {
|
|
803
|
+
offTarget(event, wrapped);
|
|
804
|
+
};
|
|
805
|
+
},
|
|
806
|
+
emit: (event, ...args) => {
|
|
807
|
+
const definition = eventDefinition(outbound, event, outboundDirection);
|
|
808
|
+
const { values, acknowledgement } = splitWireArguments(definition, args);
|
|
809
|
+
const parsed = definition.args.safeParse(values);
|
|
810
|
+
if (!parsed.success) {
|
|
811
|
+
throw realtimeContractViolation({
|
|
812
|
+
event,
|
|
813
|
+
direction: outboundDirection,
|
|
814
|
+
phase: "arguments",
|
|
815
|
+
reason: "invalid-arguments",
|
|
816
|
+
fault: "local",
|
|
817
|
+
cause: parsed.error
|
|
818
|
+
}).error;
|
|
819
|
+
}
|
|
820
|
+
if (definition.ack && !acknowledgement) {
|
|
821
|
+
throw realtimeContractViolation({
|
|
822
|
+
event,
|
|
823
|
+
direction: outboundDirection,
|
|
824
|
+
phase: "acknowledgement",
|
|
825
|
+
reason: "missing-acknowledgement",
|
|
826
|
+
fault: "local"
|
|
827
|
+
}).error;
|
|
828
|
+
}
|
|
829
|
+
const wireArgs = [...parsed.data];
|
|
830
|
+
if (definition.ack && acknowledgement) {
|
|
831
|
+
wireArgs.push((value) => {
|
|
832
|
+
const ack = definition.ack?.safeParse(value);
|
|
833
|
+
if (!ack?.success) {
|
|
834
|
+
if (ack) {
|
|
835
|
+
reportRejected(realtimeContractViolation({
|
|
836
|
+
event,
|
|
837
|
+
direction: inboundDirection,
|
|
838
|
+
phase: "acknowledgement",
|
|
839
|
+
reason: "invalid-acknowledgement-value",
|
|
840
|
+
fault: "peer",
|
|
841
|
+
cause: ack.error
|
|
842
|
+
}), onRejected, logger);
|
|
843
|
+
}
|
|
844
|
+
return;
|
|
845
|
+
}
|
|
846
|
+
acknowledgement(ack.data);
|
|
847
|
+
});
|
|
848
|
+
}
|
|
849
|
+
emitTarget(event, ...wireArgs);
|
|
850
|
+
}
|
|
851
|
+
};
|
|
852
|
+
}
|
|
853
|
+
|
|
649
854
|
// src/retained.ts
|
|
650
855
|
function createRetainedTopics() {
|
|
651
856
|
const last = {};
|
|
@@ -691,6 +896,40 @@ function toIoAuth(auth) {
|
|
|
691
896
|
Promise.resolve().then(auth).then(cb, () => cb({}));
|
|
692
897
|
};
|
|
693
898
|
}
|
|
899
|
+
function createRealtimeClient(contract, { onRejected, logger, ...config }) {
|
|
900
|
+
const transport = createSocketIOClient(config);
|
|
901
|
+
const events = createValidatedRealtimeSocket({
|
|
902
|
+
target: transport,
|
|
903
|
+
inbound: contract.serverToClient,
|
|
904
|
+
outbound: contract.clientToServer,
|
|
905
|
+
inboundDirection: "client-inbound",
|
|
906
|
+
outboundDirection: "client-outbound",
|
|
907
|
+
onRejected,
|
|
908
|
+
logger,
|
|
909
|
+
subscribe: (event, handler) => {
|
|
910
|
+
const subscribe = Reflect.get(transport, "on");
|
|
911
|
+
if (typeof subscribe !== "function") {
|
|
912
|
+
throw new Error("Socket.IO client does not implement on()");
|
|
913
|
+
}
|
|
914
|
+
const unsubscribe = Reflect.apply(subscribe, transport, [event, handler]);
|
|
915
|
+
if (typeof unsubscribe !== "function") {
|
|
916
|
+
throw new Error("Socket.IO client on() did not return an unsubscribe function");
|
|
917
|
+
}
|
|
918
|
+
return () => {
|
|
919
|
+
Reflect.apply(unsubscribe, undefined, []);
|
|
920
|
+
};
|
|
921
|
+
}
|
|
922
|
+
});
|
|
923
|
+
return {
|
|
924
|
+
...events,
|
|
925
|
+
connect: transport.connect,
|
|
926
|
+
disconnect: transport.disconnect,
|
|
927
|
+
get connected() {
|
|
928
|
+
return transport.connected;
|
|
929
|
+
},
|
|
930
|
+
onConnectionChange: transport.onConnectionChange
|
|
931
|
+
};
|
|
932
|
+
}
|
|
694
933
|
function createSocketIOClient(config) {
|
|
695
934
|
let socket = null;
|
|
696
935
|
let desiredConnected = false;
|
|
@@ -741,6 +980,9 @@ function createSocketIOClient(config) {
|
|
|
741
980
|
}, serverDisconnectDelay);
|
|
742
981
|
}
|
|
743
982
|
});
|
|
983
|
+
socket.io.on("reconnect_failed", () => {
|
|
984
|
+
desiredConnected = false;
|
|
985
|
+
});
|
|
744
986
|
if (retained) {
|
|
745
987
|
for (const name of retainNames) {
|
|
746
988
|
socket.on(name, (payload) => retained.record(name, payload));
|
|
@@ -755,9 +997,13 @@ function createSocketIOClient(config) {
|
|
|
755
997
|
return socket?.connected ?? false;
|
|
756
998
|
},
|
|
757
999
|
connect() {
|
|
758
|
-
if (socket || desiredConnected)
|
|
1000
|
+
if (socket?.connected || desiredConnected)
|
|
759
1001
|
return;
|
|
760
1002
|
desiredConnected = true;
|
|
1003
|
+
if (socket) {
|
|
1004
|
+
socket.connect();
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
761
1007
|
loadIo().then(openSocket);
|
|
762
1008
|
},
|
|
763
1009
|
disconnect() {
|
|
@@ -801,9 +1047,6 @@ function createSocketIOClient(config) {
|
|
|
801
1047
|
}
|
|
802
1048
|
};
|
|
803
1049
|
}
|
|
804
|
-
// src/internal/errors.ts
|
|
805
|
-
import { z } from "zod";
|
|
806
|
-
|
|
807
1050
|
// src/server/stream.ts
|
|
808
1051
|
async function* parseSSE(response, options) {
|
|
809
1052
|
const reader = response.body?.getReader();
|
|
@@ -838,6 +1081,10 @@ async function* parseSSE(response, options) {
|
|
|
838
1081
|
reader.releaseLock();
|
|
839
1082
|
}
|
|
840
1083
|
}
|
|
1084
|
+
// src/realtime/contract.ts
|
|
1085
|
+
function defineRealtimeContract(contract) {
|
|
1086
|
+
return contract;
|
|
1087
|
+
}
|
|
841
1088
|
export {
|
|
842
1089
|
unauthorized,
|
|
843
1090
|
rateLimited,
|
|
@@ -849,6 +1096,7 @@ export {
|
|
|
849
1096
|
formatTraceparent,
|
|
850
1097
|
forbidden,
|
|
851
1098
|
encodeCursor,
|
|
1099
|
+
defineRealtimeContract,
|
|
852
1100
|
defineErrors,
|
|
853
1101
|
defineContract,
|
|
854
1102
|
decodeCursor,
|
|
@@ -859,6 +1107,7 @@ export {
|
|
|
859
1107
|
createScopedUrlBuilders,
|
|
860
1108
|
createScopedClients,
|
|
861
1109
|
createRetainedTopics,
|
|
1110
|
+
createRealtimeClient,
|
|
862
1111
|
createHttpClient,
|
|
863
1112
|
createContractFactory,
|
|
864
1113
|
createClients,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/internal/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,wBAAgB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAMxD;AAED,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,eAAe,EAAE,CAM9D;AAKD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,MAAM,EAAE,OAAO,GACd,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/internal/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,wBAAgB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAMxD;AAED,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,eAAe,EAAE,CAM9D;AAKD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,MAAM,EAAE,OAAO,GACd,MAAM,GAAG,SAAS,CAYpB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAyBrD;AA4BD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,OAAO,EACb,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,GACrC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAe9D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE,OAAO,EACb,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,GACrC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAe9D"}
|
|
@@ -4,9 +4,13 @@ export declare function isPrivateIp(ip: string): boolean;
|
|
|
4
4
|
* Refuse a URL that is not `http(s)`, has no host, or whose host is — or
|
|
5
5
|
* resolves to — a private/internal address. Called on the initial URL and on
|
|
6
6
|
* every redirect hop, so a public host cannot `302` to an internal address or
|
|
7
|
-
* to a `file:` / `gopher:` / `data:` scheme.
|
|
7
|
+
* to a `file:` / `gopher:` / `data:` scheme. The DNS lookup honours `signal`,
|
|
8
|
+
* so a slow resolver cannot outlive the caller's deadline.
|
|
9
|
+
*
|
|
10
|
+
* This is the single host-validation implementation — `fetchGuarded` and
|
|
11
|
+
* `fetchPinnedDocument` both go through `resolvePublicAddress`.
|
|
8
12
|
*/
|
|
9
|
-
export declare function assertPublicUrl(url: URL): Promise<void>;
|
|
13
|
+
export declare function assertPublicUrl(url: URL, signal?: AbortSignal): Promise<void>;
|
|
10
14
|
/**
|
|
11
15
|
* Fetch a URL with the SSRF guard enforced on the initial URL and on every
|
|
12
16
|
* redirect hop — a public host can otherwise `302` to an internal address or a
|
|
@@ -17,7 +21,23 @@ export declare function assertPublicUrl(url: URL): Promise<void>;
|
|
|
17
21
|
* per-hop re-check is the larger and fully-closed hole; a static private DNS
|
|
18
22
|
* record is rejected outright.
|
|
19
23
|
*/
|
|
20
|
-
export
|
|
24
|
+
export interface GuardedFetchOptions {
|
|
25
|
+
/**
|
|
26
|
+
* Deadline for producing the FINAL response headers — DNS, connects and every
|
|
27
|
+
* redirect hop share this single budget, so a redirect chain cannot multiply
|
|
28
|
+
* it. Default 15 seconds.
|
|
29
|
+
*/
|
|
30
|
+
timeoutMs?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Separate deadline for consuming the body once headers have arrived — a slow
|
|
33
|
+
* LARGE download must not be killed by the connection budget, but a drip-feed
|
|
34
|
+
* body must still end. Default 120 seconds.
|
|
35
|
+
*/
|
|
36
|
+
bodyTimeoutMs?: number;
|
|
37
|
+
/** Optional caller cancellation, combined with both deadlines. */
|
|
38
|
+
signal?: AbortSignal;
|
|
39
|
+
}
|
|
40
|
+
export declare function fetchGuarded(start: URL, allowPrivate: boolean, options?: GuardedFetchOptions): Promise<Response>;
|
|
21
41
|
export interface PinnedDocumentFetchOptions {
|
|
22
42
|
maxBytes: number;
|
|
23
43
|
timeoutMs: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-fetch.d.ts","sourceRoot":"","sources":["../../src/internal/secure-fetch.ts"],"names":[],"mappings":"AAiEA,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CA8D/C;
|
|
1
|
+
{"version":3,"file":"secure-fetch.d.ts","sourceRoot":"","sources":["../../src/internal/secure-fetch.ts"],"names":[],"mappings":"AAiEA,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CA8D/C;AA4BD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,OAAO,EACrB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAiDnB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;CACV;AAsCD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAkFjC;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBnF"}
|
package/dist/internal/typed.d.ts
CHANGED
|
@@ -3,6 +3,13 @@ export declare function typedEntries<T extends object>(value: T): Array<{
|
|
|
3
3
|
}[keyof T]>;
|
|
4
4
|
/** Narrow an unknown value to a plain object — not `null`, not an array. */
|
|
5
5
|
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
6
|
+
/** Invoke a runtime-discovered handler after a fail-first function check. */
|
|
7
|
+
export declare function callRuntimeHandler(handler: unknown, context: unknown): unknown;
|
|
8
|
+
/**
|
|
9
|
+
* Isolated loose-to-typed adapter boundary for transports whose decoder is
|
|
10
|
+
* selected at runtime while the contract fixes the generic result type.
|
|
11
|
+
*/
|
|
12
|
+
export declare function transportResult<T>(value: unknown): T;
|
|
6
13
|
export declare function mapObject<TSource extends object, TResult extends {
|
|
7
14
|
[K in keyof TSource]?: unknown;
|
|
8
15
|
}>(source: TSource, mapper: <K extends keyof TSource>(key: K, value: TSource[K]) => TResult[K] | undefined): TResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed.d.ts","sourceRoot":"","sources":["../../src/internal/typed.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,KAAK,EAAE,CAAC,GACP,KAAK,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAE/C;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,SAAS,CACvB,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS;KAAG,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO;CAAE,EAElD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GACrF,OAAO,CAOT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS;KAAG,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO;CAAE,EAElD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,OAAO,CAAC,KAAK,OAAO,GACrE,OAAO,CAKT"}
|
|
1
|
+
{"version":3,"file":"typed.d.ts","sourceRoot":"","sources":["../../src/internal/typed.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,KAAK,EAAE,CAAC,GACP,KAAK,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAE/C;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAK9E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAEpD;AAED,wBAAgB,SAAS,CACvB,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS;KAAG,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO;CAAE,EAElD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GACrF,OAAO,CAOT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS;KAAG,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO;CAAE,EAElD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,OAAO,CAAC,KAAK,OAAO,GACrE,OAAO,CAKT"}
|
|
@@ -4,4 +4,10 @@
|
|
|
4
4
|
* check behind `staticRoute` and `view_file`'s local-file branch.
|
|
5
5
|
*/
|
|
6
6
|
export declare function isWithinDir(root: string, target: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve both paths through the filesystem and return the real target only
|
|
9
|
+
* when it remains inside the real root. The lexical check must run first at a
|
|
10
|
+
* URL boundary; this second check closes symlink escapes.
|
|
11
|
+
*/
|
|
12
|
+
export declare function realPathWithinDir(root: string, target: string): Promise<string | null>;
|
|
7
13
|
//# sourceMappingURL=within-dir.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"within-dir.d.ts","sourceRoot":"","sources":["../../src/internal/within-dir.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"within-dir.d.ts","sourceRoot":"","sources":["../../src/internal/within-dir.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQjE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO5F"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Minimal structured logger shared by browser-safe and server entrypoints. */
|
|
2
|
+
export interface StitchLogger {
|
|
3
|
+
info(msg: string, data?: Record<string, unknown>): void;
|
|
4
|
+
warn(msg: string, data?: Record<string, unknown>): void;
|
|
5
|
+
error(msg: string, data?: Record<string, unknown>): void;
|
|
6
|
+
debug(msg: string, data?: Record<string, unknown>): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1D"}
|
package/dist/node.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export { createHandler } from './server/create';
|
|
|
9
9
|
export { createImplement, implement } from './server/implement';
|
|
10
10
|
export type { LogFormat } from './server/logger';
|
|
11
11
|
export { type NodeServerConfig, type NodeServerHandle, serveNode } from './server/node';
|
|
12
|
+
export { bindRealtimeServer, type RealtimeServer, type RealtimeServerConnection, type RealtimeServerHandle, } from './server/realtime';
|
|
12
13
|
export { createNodeSocketIOServer as createSocketIOServer, type NodeSocketIOServerHandle as SocketIOServerHandle, type SocketIOServerConfig, } from './server/socket-io-node';
|
|
13
14
|
export type { FetchComposition, FetchHandler, HandlerConfig, LoggingConfig, LogOutcome, RawRoute, RawRouteContext, ServiceDef, } from './server/types';
|
|
14
15
|
//# sourceMappingURL=node.d.ts.map
|
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,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACxF,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"}
|
|
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,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,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
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
bindRealtimeServer,
|
|
2
3
|
createHandler,
|
|
3
4
|
createImplement,
|
|
4
5
|
createSocketIOServer,
|
|
5
6
|
implement
|
|
6
|
-
} from "./index-
|
|
7
|
-
import"./index-
|
|
8
|
-
import"./index-x3fcszf8.js";
|
|
7
|
+
} from "./index-zwqty9zf.js";
|
|
8
|
+
import"./index-r1qp4rve.js";
|
|
9
9
|
import {
|
|
10
10
|
AppError,
|
|
11
11
|
appError,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
notFound,
|
|
16
16
|
rateLimited,
|
|
17
17
|
unauthorized
|
|
18
|
-
} from "./index-
|
|
18
|
+
} from "./index-5s8b7z6q.js";
|
|
19
19
|
// src/server/node.ts
|
|
20
20
|
import { serve } from "srvx";
|
|
21
21
|
async function serveNode(config) {
|
|
@@ -55,6 +55,7 @@ export {
|
|
|
55
55
|
createImplement,
|
|
56
56
|
createHandler,
|
|
57
57
|
conflict,
|
|
58
|
+
bindRealtimeServer,
|
|
58
59
|
badRequest,
|
|
59
60
|
appError,
|
|
60
61
|
AppError
|
|
@@ -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;AAGhF,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;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;CAC5B;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;CACzB;AAkFD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,
|
|
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;AAGhF,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;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;CAC5B;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;CACzB;AAkFD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAwH9E"}
|
|
@@ -36,6 +36,8 @@ export interface RequestEvent {
|
|
|
36
36
|
dimensions?: Record<string, string>;
|
|
37
37
|
/** Tool name — tool calls only. */
|
|
38
38
|
toolName?: string;
|
|
39
|
+
/** Distinguishes a completed operation from an MRTR input-gating round. */
|
|
40
|
+
toolPhase?: 'operation' | 'input-round';
|
|
39
41
|
/** Validated MCP transport attribution, available only on MCP tool calls. */
|
|
40
42
|
mcp?: {
|
|
41
43
|
era: 'modern' | 'legacy';
|
|
@@ -81,6 +83,11 @@ export interface RequestEvent {
|
|
|
81
83
|
resultSize: number | null;
|
|
82
84
|
/** Serialised byte length of the result. */
|
|
83
85
|
responseBytes: number;
|
|
86
|
+
/**
|
|
87
|
+
* Set when the result could not be serialised at all (bigint, a cycle) —
|
|
88
|
+
* distinguishes `responseBytes: 0` "nothing returned" from "unmeasurable".
|
|
89
|
+
*/
|
|
90
|
+
resultUnserializable?: boolean;
|
|
84
91
|
/** Resolved user id, when authenticated. */
|
|
85
92
|
userId?: string;
|
|
86
93
|
/** How the caller authenticated, when the app records it on the context. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/observability/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,GAAG,CAAC,EAAE;QACJ,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,kFAAkF;QAClF,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,4CAA4C;QAC5C,OAAO,CAAC,EAAE,gBAAgB,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;QAC/E,8CAA8C;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,uEAAuE;IACvE,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,mDAAmD;IACnD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/observability/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC;IACxC,6EAA6E;IAC7E,GAAG,CAAC,EAAE;QACJ,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,kFAAkF;QAClF,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,4CAA4C;QAC5C,OAAO,CAAC,EAAE,gBAAgB,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;QAC/E,8CAA8C;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,uEAAuE;IACvE,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,mDAAmD;IACnD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,SAAS,EAAE,IAAI,CAAC;CACjB"}
|