stitchkit 0.74.1 → 0.75.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.
Files changed (75) hide show
  1. package/dist/agent-runtime/sqlite-purge.d.ts +3 -3
  2. package/dist/agent-runtime/sqlite-purge.d.ts.map +1 -1
  3. package/dist/agent-runtime/sqlite.d.ts +5 -17
  4. package/dist/agent-runtime/sqlite.d.ts.map +1 -1
  5. package/dist/agent-runtime-coding-tools.js +2 -1
  6. package/dist/agent-runtime-harness.js +5 -4
  7. package/dist/agent-runtime-sqlite-bun.d.ts +1 -1
  8. package/dist/agent-runtime-sqlite-bun.d.ts.map +1 -1
  9. package/dist/agent-runtime-sqlite-node.d.ts +1 -1
  10. package/dist/agent-runtime-sqlite-node.d.ts.map +1 -1
  11. package/dist/agent-runtime.js +8 -7
  12. package/dist/application/keyspace-sqlite.d.ts +31 -0
  13. package/dist/application/keyspace-sqlite.d.ts.map +1 -0
  14. package/dist/application/keyspace.d.ts +142 -0
  15. package/dist/application/keyspace.d.ts.map +1 -0
  16. package/dist/application/watch-hub.d.ts +113 -0
  17. package/dist/application/watch-hub.d.ts.map +1 -0
  18. package/dist/application.d.ts +4 -0
  19. package/dist/application.d.ts.map +1 -1
  20. package/dist/application.js +455 -0
  21. package/dist/cli.js +7 -6
  22. package/dist/contract/index.js +2 -1
  23. package/dist/{index-aczggrty.js → index-28jsdwt1.js} +1 -1
  24. package/dist/index-35z5h2ty.js +594 -0
  25. package/dist/{index-f6n5n7nz.js → index-4kp4fxvp.js} +4 -18
  26. package/dist/{index-118v0z41.js → index-52400rdd.js} +8 -3
  27. package/dist/{index-da1aqnhb.js → index-65kathdm.js} +6 -4
  28. package/dist/{index-jqtsc9mj.js → index-6wr9f6qm.js} +2 -2
  29. package/dist/{index-7qy2ex0m.js → index-885chjxq.js} +1 -1
  30. package/dist/{index-k2zczx1g.js → index-9c5dbr5q.js} +1 -1
  31. package/dist/{index-s2rchahr.js → index-9my2n66s.js} +4 -4
  32. package/dist/{index-nemjkxjp.js → index-e0a57ymn.js} +1 -1
  33. package/dist/{index-vbf2p6me.js → index-endzd8sj.js} +1 -1
  34. package/dist/{index-vj3vvpaa.js → index-hsz2mmk0.js} +1 -17
  35. package/dist/{index-s4c8wy8m.js → index-k68e5jz0.js} +2 -2
  36. package/dist/index-rxfy4cq7.js +17 -0
  37. package/dist/{index-58jzmnn4.js → index-v5dm4bwq.js} +1 -1
  38. package/dist/{index-m668wzyc.js → index-v7xjfy10.js} +1 -1
  39. package/dist/index-vdvmcy7r.js +22 -0
  40. package/dist/{index-ezmn6ac6.js → index-xgahrwdf.js} +3 -3
  41. package/dist/index.js +26 -611
  42. package/dist/internal/sqlite.d.ts +27 -0
  43. package/dist/internal/sqlite.d.ts.map +1 -0
  44. package/dist/internal/stable-digest.d.ts +24 -0
  45. package/dist/internal/stable-digest.d.ts.map +1 -0
  46. package/dist/live/events.d.ts +155 -0
  47. package/dist/live/events.d.ts.map +1 -0
  48. package/dist/live/watch-client.d.ts +66 -0
  49. package/dist/live/watch-client.d.ts.map +1 -0
  50. package/dist/live/watch-contract.d.ts +157 -0
  51. package/dist/live/watch-contract.d.ts.map +1 -0
  52. package/dist/live.d.ts +18 -0
  53. package/dist/live.d.ts.map +1 -0
  54. package/dist/live.js +284 -0
  55. package/dist/node.js +5 -4
  56. package/dist/observability/index.js +4 -3
  57. package/dist/primitives.js +2 -1
  58. package/dist/remote.js +3 -2
  59. package/dist/server/create.d.ts.map +1 -1
  60. package/dist/server/event-bus.d.ts +49 -1
  61. package/dist/server/event-bus.d.ts.map +1 -1
  62. package/dist/server/index.d.ts +2 -1
  63. package/dist/server/index.d.ts.map +1 -1
  64. package/dist/server/index.js +224 -12
  65. package/dist/server/middleware/trust-fence.d.ts +116 -0
  66. package/dist/server/middleware/trust-fence.d.ts.map +1 -0
  67. package/dist/server/types.d.ts +16 -1
  68. package/dist/server/types.d.ts.map +1 -1
  69. package/dist/testing.js +3 -2
  70. package/dist/tool-invoker.js +6 -5
  71. package/dist/tools/mcp-round.d.ts.map +1 -1
  72. package/dist/tools.js +15 -30
  73. package/llms-full.txt +412 -4
  74. package/llms.txt +1 -0
  75. package/package.json +6 -2
package/dist/live.js ADDED
@@ -0,0 +1,284 @@
1
+ import {
2
+ LiveStatePhaseSchema,
3
+ LiveStateStopReasonSchema
4
+ } from "./index-35z5h2ty.js";
5
+ import {
6
+ bytesToBase64Url
7
+ } from "./index-rxfy4cq7.js";
8
+
9
+ // src/live/events.ts
10
+ import { z } from "zod";
11
+ function assertName(kind, value) {
12
+ if (value.length === 0) {
13
+ throw new Error(`[stitchkit] defineEvents: ${kind} name cannot be empty.`);
14
+ }
15
+ if (/\s/.test(value)) {
16
+ throw new Error(`[stitchkit] defineEvents: ${kind} name "${value}" cannot contain whitespace.`);
17
+ }
18
+ }
19
+ function defineEvents(config, topics) {
20
+ const prefix = config.prefix;
21
+ if (prefix !== undefined)
22
+ assertName("prefix", prefix);
23
+ const declared = {};
24
+ for (const [name, topic] of Object.entries(topics)) {
25
+ assertName("topic", name);
26
+ if (topic.mode === "emit") {
27
+ if (topic.whenAllDefer !== undefined) {
28
+ throw new Error(`[stitchkit] defineEvents: topic "${name}" declares whenAllDefer, which only a 'decision' topic has. Its mode is 'emit'.`);
29
+ }
30
+ if (topic.listenerTimeoutMs !== undefined) {
31
+ throw new Error(`[stitchkit] defineEvents: topic "${name}" declares listenerTimeoutMs, but mode 'emit' never waits for a listener.`);
32
+ }
33
+ } else {
34
+ if (topic.listenerTimeoutMs === undefined) {
35
+ throw new Error(`[stitchkit] defineEvents: topic "${name}" has mode '${topic.mode}', which waits for listeners, so it must declare listenerTimeoutMs.`);
36
+ }
37
+ if (!Number.isFinite(topic.listenerTimeoutMs) || topic.listenerTimeoutMs <= 0) {
38
+ throw new Error(`[stitchkit] defineEvents: topic "${name}" declares listenerTimeoutMs ${String(topic.listenerTimeoutMs)}; it must be finite and greater than zero.`);
39
+ }
40
+ if (topic.mode === "decision" && topic.whenAllDefer === undefined) {
41
+ throw new Error(`[stitchkit] defineEvents: topic "${name}" has mode 'decision', so it must declare whenAllDefer: 'allow' or 'deny' — the outcome when every listener defers. There is no default, because a default would decide it silently.`);
42
+ }
43
+ if (topic.mode === "serial" && topic.whenAllDefer !== undefined) {
44
+ throw new Error(`[stitchkit] defineEvents: topic "${name}" declares whenAllDefer, which only a 'decision' topic has. Its mode is 'serial'.`);
45
+ }
46
+ }
47
+ declared[prefix === undefined ? name : `${prefix}.${name}`] = topic;
48
+ }
49
+ return { prefix, topics: declared };
50
+ }
51
+ function toRealtimeContract(declaration) {
52
+ const serverToClient = {};
53
+ for (const [topic, definition] of Object.entries(declaration.topics)) {
54
+ const schema = definition.schema;
55
+ serverToClient[topic] = { args: z.tuple([schema]) };
56
+ }
57
+ return { serverToClient, clientToServer: {} };
58
+ }
59
+ // src/internal/stable-digest.ts
60
+ function stableValue(value) {
61
+ if (Array.isArray(value))
62
+ return value.map(stableValue);
63
+ if (value === null || typeof value !== "object")
64
+ return value;
65
+ const result = {};
66
+ for (const key of Object.keys(value).sort()) {
67
+ result[key] = stableValue(Reflect.get(value, key));
68
+ }
69
+ return result;
70
+ }
71
+ async function argumentsDigest(args) {
72
+ const bytes = new TextEncoder().encode(JSON.stringify(stableValue(args)));
73
+ return bytesToBase64Url(new Uint8Array(await crypto.subtle.digest("SHA-256", bytes)));
74
+ }
75
+
76
+ // src/live/watch-contract.ts
77
+ import { z as z2 } from "zod";
78
+ var WatchKeySchema = z2.object({
79
+ service: z2.string().min(1),
80
+ action: z2.string().min(1),
81
+ digest: z2.string().min(1)
82
+ }).strict().readonly();
83
+ var WatchOpenSchema = z2.object({ key: WatchKeySchema, args: z2.unknown() }).readonly();
84
+ var WatchAcceptedSchema = z2.object({
85
+ accepted: z2.boolean(),
86
+ reason: z2.string().optional()
87
+ }).strict().readonly();
88
+ var WatchValueSchema = z2.object({
89
+ key: WatchKeySchema,
90
+ revision: z2.number().int().nonnegative(),
91
+ value: z2.unknown()
92
+ }).readonly();
93
+ var WatchStateSchema = z2.object({
94
+ key: WatchKeySchema,
95
+ phase: LiveStatePhaseSchema,
96
+ reason: LiveStateStopReasonSchema.optional(),
97
+ code: z2.string().optional(),
98
+ message: z2.string().optional()
99
+ }).readonly();
100
+ var WATCH_OPEN = "stitchkit.watch.open";
101
+ var WATCH_CLOSE = "stitchkit.watch.close";
102
+ var WATCH_VALUE = "stitchkit.watch.value";
103
+ var WATCH_STATE = "stitchkit.watch.state";
104
+ var watchContract = {
105
+ serverToClient: {
106
+ [WATCH_VALUE]: { args: z2.tuple([WatchValueSchema]) },
107
+ [WATCH_STATE]: { args: z2.tuple([WatchStateSchema]) }
108
+ },
109
+ clientToServer: {
110
+ [WATCH_OPEN]: { args: z2.tuple([WatchOpenSchema]), ack: WatchAcceptedSchema },
111
+ [WATCH_CLOSE]: { args: z2.tuple([z2.object({ key: WatchKeySchema }).readonly()]) }
112
+ }
113
+ };
114
+ function watchKeyString(key) {
115
+ return `${key.service}/${key.action}/${key.digest}`;
116
+ }
117
+
118
+ // src/live/watch-client.ts
119
+ function createWatchClient(contract, config) {
120
+ const entries = new Map;
121
+ const digests = new Map;
122
+ const holdMs = config.holdMs ?? 0;
123
+ const openTimeoutMs = config.openTimeoutMs ?? 1e4;
124
+ const service = contract.meta.prefix;
125
+ config.transport.on(WATCH_VALUE, (frame) => {
126
+ const entry = entries.get(watchKeyString(frame.key));
127
+ if (!entry)
128
+ return;
129
+ if (entry.hasValue && frame.revision <= entry.revision)
130
+ return;
131
+ entry.revision = frame.revision;
132
+ entry.value = frame.value;
133
+ entry.hasValue = true;
134
+ for (const listener of [...entry.listeners])
135
+ listener.value(frame.value);
136
+ });
137
+ config.transport.on(WATCH_STATE, (frame) => {
138
+ const entry = entries.get(watchKeyString(frame.key));
139
+ if (!entry)
140
+ return;
141
+ entry.state = frame;
142
+ for (const listener of [...entry.listeners])
143
+ listener.state?.(frame);
144
+ });
145
+ function cachedDigest(action, args) {
146
+ return digests.get(`${service}/${action}/${JSON.stringify(stableValue(args))}`);
147
+ }
148
+ async function resolveDigest(action, args) {
149
+ const cacheKey = `${service}/${action}/${JSON.stringify(stableValue(args))}`;
150
+ const cached = digests.get(cacheKey);
151
+ if (cached !== undefined)
152
+ return cached;
153
+ const digest = await argumentsDigest(args);
154
+ digests.set(cacheKey, digest);
155
+ return digest;
156
+ }
157
+ function entryFor(key) {
158
+ const id = watchKeyString(key);
159
+ const existing = entries.get(id);
160
+ if (existing) {
161
+ clearTimeout(existing.release);
162
+ existing.release = undefined;
163
+ return existing;
164
+ }
165
+ const entry = {
166
+ key,
167
+ listeners: new Set,
168
+ revision: 0,
169
+ hasValue: false,
170
+ state: { key, phase: "opening" }
171
+ };
172
+ entries.set(id, entry);
173
+ return entry;
174
+ }
175
+ function releaseEntry(entry) {
176
+ if (entry.listeners.size > 0)
177
+ return;
178
+ const drop = () => {
179
+ if (entry.listeners.size > 0)
180
+ return;
181
+ entries.delete(watchKeyString(entry.key));
182
+ config.transport.emit(WATCH_CLOSE, { key: entry.key });
183
+ };
184
+ if (holdMs === 0) {
185
+ drop();
186
+ return;
187
+ }
188
+ entry.release = setTimeout(drop, holdMs);
189
+ entry.release.unref?.();
190
+ }
191
+ function handleFor(action, args) {
192
+ const mine = new Set;
193
+ let entry;
194
+ let opened = false;
195
+ const known = cachedDigest(action, args);
196
+ if (known !== undefined)
197
+ entry = entryFor({ service, action, digest: known });
198
+ const ready = (async () => {
199
+ if (entry)
200
+ return entry;
201
+ const digest = await resolveDigest(action, args);
202
+ entry = entryFor({ service, action, digest });
203
+ return entry;
204
+ })();
205
+ async function open(target) {
206
+ if (opened)
207
+ return;
208
+ opened = true;
209
+ const acknowledgement = await config.transport.request(WATCH_OPEN, { key: target.key, args }, { timeoutMs: openTimeoutMs });
210
+ if (!acknowledgement.accepted) {
211
+ const reason = acknowledgement.reason ?? "the server refused this watch";
212
+ config.onRefused?.(target.key, reason);
213
+ const refusal = {
214
+ key: target.key,
215
+ phase: "unavailable",
216
+ reason: "source-unavailable",
217
+ message: reason
218
+ };
219
+ target.state = refusal;
220
+ for (const listener of [...target.listeners])
221
+ listener.state?.(refusal);
222
+ }
223
+ }
224
+ return {
225
+ subscribe(listeners) {
226
+ const registered = listeners;
227
+ mine.add(registered);
228
+ if (entry) {
229
+ entry.listeners.add(registered);
230
+ if (entry.hasValue)
231
+ registered.value(entry.value);
232
+ registered.state?.(entry.state);
233
+ }
234
+ ready.then((target) => {
235
+ if (!mine.has(registered))
236
+ return;
237
+ if (!target.listeners.has(registered)) {
238
+ target.listeners.add(registered);
239
+ if (target.hasValue)
240
+ registered.value(target.value);
241
+ registered.state?.(target.state);
242
+ }
243
+ open(target);
244
+ });
245
+ return () => {
246
+ mine.delete(registered);
247
+ const target = entry;
248
+ if (!target)
249
+ return;
250
+ target.listeners.delete(registered);
251
+ releaseEntry(target);
252
+ };
253
+ },
254
+ close() {
255
+ const target = entry;
256
+ if (!target)
257
+ return;
258
+ for (const listener of mine)
259
+ target.listeners.delete(listener);
260
+ mine.clear();
261
+ releaseEntry(target);
262
+ }
263
+ };
264
+ }
265
+ const client = {};
266
+ for (const action of Object.keys(contract.endpoints)) {
267
+ client[action] = (args = {}) => handleFor(action, args);
268
+ }
269
+ return client;
270
+ }
271
+ export {
272
+ watchKeyString,
273
+ watchContract,
274
+ toRealtimeContract,
275
+ defineEvents,
276
+ createWatchClient,
277
+ WatchValueSchema,
278
+ WatchStateSchema,
279
+ WatchKeySchema,
280
+ WATCH_VALUE,
281
+ WATCH_STATE,
282
+ WATCH_OPEN,
283
+ WATCH_CLOSE
284
+ };
package/dist/node.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  createHandler,
6
6
  createSocketIOServer,
7
7
  createUnixClientTransport
8
- } from "./index-118v0z41.js";
8
+ } from "./index-52400rdd.js";
9
9
  import {
10
10
  createImplement,
11
11
  createImplementRegistry,
@@ -14,8 +14,8 @@ import {
14
14
  createScopedImplementRegistry,
15
15
  implement,
16
16
  implementRegistry
17
- } from "./index-vbf2p6me.js";
18
- import"./index-nemjkxjp.js";
17
+ } from "./index-endzd8sj.js";
18
+ import"./index-e0a57ymn.js";
19
19
  import"./index-7b188kmz.js";
20
20
  import {
21
21
  ShutdownOptionsSchema,
@@ -25,7 +25,8 @@ import {
25
25
  createServerLifecycle
26
26
  } from "./index-3z73fh2c.js";
27
27
  import"./index-nt1mp8km.js";
28
- import"./index-vj3vvpaa.js";
28
+ import"./index-hsz2mmk0.js";
29
+ import"./index-rxfy4cq7.js";
29
30
  import {
30
31
  AppError,
31
32
  appError,
@@ -10,7 +10,7 @@ import {
10
10
  redact,
11
11
  sanitizePayload,
12
12
  truncatePreview
13
- } from "../index-aczggrty.js";
13
+ } from "../index-28jsdwt1.js";
14
14
  import {
15
15
  getRequestContext,
16
16
  getTraceId,
@@ -21,7 +21,7 @@ import {
21
21
  setRequestError,
22
22
  setRequestUser,
23
23
  wrapInRequestContext
24
- } from "../index-nemjkxjp.js";
24
+ } from "../index-e0a57ymn.js";
25
25
  import {
26
26
  childSpan,
27
27
  createTraceContext,
@@ -31,7 +31,8 @@ import {
31
31
  resolvePropagationContext,
32
32
  resolveTraceContext
33
33
  } from "../index-nt1mp8km.js";
34
- import"../index-vj3vvpaa.js";
34
+ import"../index-hsz2mmk0.js";
35
+ import"../index-rxfy4cq7.js";
35
36
  import"../index-0w9abg87.js";
36
37
  import {
37
38
  isRecord
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  ManagedFileRefSchema
3
- } from "./index-f6n5n7nz.js";
3
+ } from "./index-4kp4fxvp.js";
4
+ import"./index-rxfy4cq7.js";
4
5
  import"./index-ksp6e2ye.js";
5
6
 
6
7
  // src/primitives/audit.ts
package/dist/remote.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  ApiError,
3
3
  createClient
4
- } from "./index-58jzmnn4.js";
4
+ } from "./index-v5dm4bwq.js";
5
5
  import"./index-1rxswfbv.js";
6
6
  import"./index-nt1mp8km.js";
7
7
  import {
8
8
  mergeMeta
9
- } from "./index-vj3vvpaa.js";
9
+ } from "./index-hsz2mmk0.js";
10
+ import"./index-rxfy4cq7.js";
10
11
  import {
11
12
  AppError
12
13
  } from "./index-0w9abg87.js";
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/server/create.ts"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EAId,MAAM,SAAS,CAAC;AAkCjB,wBAAgB,aAAa,CAAC,OAAO,GAAG,OAAO,EAC7C,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,YAAY,CAAC,OAAO,CAAC,CA4iBvB"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/server/create.ts"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EAId,MAAM,SAAS,CAAC;AAkCjB,wBAAgB,aAAa,CAAC,OAAO,GAAG,OAAO,EAC7C,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,YAAY,CAAC,OAAO,CAAC,CAujBvB"}
@@ -1,4 +1,12 @@
1
- export type EventHandler<T = unknown> = (data: T) => void | Promise<void>;
1
+ import type { EventDecision, EventTopicDeclaration } from '../live/events.js';
2
+ /**
3
+ * A listener's return value.
4
+ *
5
+ * `emit` ignores it, `emitSerial` awaits it, and `decide` reads it as a vote.
6
+ * One registry serves all three, so a listener is registered once no matter how
7
+ * its topic is delivered — a second registration path per mode is a second bus.
8
+ */
9
+ export type EventHandler<T = unknown> = (data: T) => unknown;
2
10
  /** Default event map — untyped string-keyed events (ad-hoc buses). */
3
11
  export type DefaultEventMap = Record<string, unknown>;
4
12
  /**
@@ -11,9 +19,38 @@ export type DefaultEventMap = Record<string, unknown>;
11
19
  * const bus = createEventBus<{ 'user:created': { id: string } }>();
12
20
  * bus.emit('user:created', { id: '1' }); // typed
13
21
  * ```
22
+ *
23
+ * Pass `topics` from `defineEvents` as well and the bus becomes a **closed**
24
+ * registry that enforces each topic's declared delivery mode: an unknown topic
25
+ * is refused, and so is delivering a topic by a verb its declaration did not
26
+ * choose.
14
27
  */
15
28
  export interface EventBus<M extends Record<string, unknown> = DefaultEventMap> {
29
+ /**
30
+ * Announce and continue. Listeners run concurrently, a failing one is
31
+ * isolated, and nothing is awaited. Declared topics: `emit` mode only.
32
+ */
16
33
  emit<K extends keyof M & string>(event: K, data: M[K]): void;
34
+ /**
35
+ * Run listeners one at a time in registration order and wait for all of them.
36
+ * A listener that throws, rejects or outruns its declared
37
+ * `listenerTimeoutMs` is reported to `onListenerError` and the next listener
38
+ * still runs — the caller waits for the sequence, not for every listener to
39
+ * succeed. Requires a declared `serial` topic.
40
+ */
41
+ emitSerial<K extends keyof M & string>(event: K, data: M[K]): Promise<void>;
42
+ /**
43
+ * Collect listeners' votes in registration order and stop at the first
44
+ * `deny`. Requires a declared `decision` topic.
45
+ *
46
+ * Every way a listener can fail to produce a vote resolves to `deny`, and the
47
+ * reason says which: a throw, a rejection, a timeout, or a return value that
48
+ * is not a decision at all. This is the one asymmetry worth stating out loud
49
+ * — for `emit` an isolated failure means "the others carry on", and for a vote
50
+ * the same isolation would mean "counted as consent". A listener that was
51
+ * asked and did not answer has not agreed.
52
+ */
53
+ decide<K extends keyof M & string>(event: K, data: M[K]): Promise<EventDecision>;
17
54
  on<K extends keyof M & string>(event: K, handler: EventHandler<M[K]>): () => void;
18
55
  once<K extends keyof M & string>(event: K, handler: EventHandler<M[K]>): () => void;
19
56
  off<K extends keyof M & string>(event: K, handler: EventHandler<M[K]>): void;
@@ -27,6 +64,17 @@ export interface EventBusOptions {
27
64
  * invisible. Wire it to a logger to surface listener bugs.
28
65
  */
29
66
  onListenerError?: (error: unknown, event: string) => void;
67
+ /**
68
+ * The declared topics, from `defineEvents(...).topics`.
69
+ *
70
+ * Supplying them closes the registry: an event not declared is refused rather
71
+ * than delivered to nobody, which is the failure a string-keyed bus cannot
72
+ * report — a publisher with a typo and a subscriber with the right name look
73
+ * exactly like a quiet system. It also supplies `listenerTimeoutMs` and
74
+ * `whenAllDefer`, so those are read from the declaration instead of repeated
75
+ * at every call site where they could disagree.
76
+ */
77
+ topics?: Readonly<Record<string, EventTopicDeclaration>>;
30
78
  }
31
79
  export declare function createEventBus<M extends Record<string, unknown> = DefaultEventMap>(options?: EventBusOptions): EventBus<M>;
32
80
  //# sourceMappingURL=event-bus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/server/event-bus.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1E,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe;IAC3E,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7D,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAClF,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACpF,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7E,KAAK,IAAI,IAAI,CAAC;CACf;AAYD,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,EAChF,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CAAC,CAAC,CAAC,CA0Db"}
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/server/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAkB,MAAM,gBAAgB,CAAC;AAE3F;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;AAE7D,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe;IAC3E;;;OAGG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7D;;;;;;OAMG;IACH,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E;;;;;;;;;;OAUG;IACH,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjF,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAClF,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACpF,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7E,KAAK,IAAI,IAAI,CAAC;CACf;AAYD,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CAC1D;AAkCD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,EAChF,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CAAC,CAAC,CAAC,CAwKb"}
@@ -14,6 +14,7 @@ export { type AuthHook, type AuthHookConfig, type AuthRule, type AuthRuleContrib
14
14
  export { type CookieDef, type CookieOptions, defineCookie, parseCookies, serializeCookie, } from './middleware/cookies.js';
15
15
  export { type CorsConfig, corsHeaders, corsPreflightResponse, DEFAULT_CORS_ALLOW_HEADERS, DEFAULT_CORS_EXPOSE_HEADERS, } from './middleware/cors.js';
16
16
  export { deriveCodeChallenge, type PkceMethod, verifyPkce } from './middleware/pkce.js';
17
+ export { createTrustFence, isLoopbackAddress, type TrustFence, type TrustFenceConfig, type TrustLane, type TrustRefusal, type TrustRefusalReason, } from './middleware/trust-fence.js';
17
18
  export { type MultipartLifecycle, type MultipartResult, parseMultipart } from './multipart.js';
18
19
  export { generateOpenApiDocument, type OpenApiConfig, type OpenApiDocument, type OpenApiInfo, type OpenApiServer, openApiRoute, } from './openapi.js';
19
20
  export { bindProcessSignals, type ProcessSignalName, type ProcessSignalsBinding, type ProcessSignalsErrorPhase, type ProcessSignalsOptions, type ShutdownTarget, type SignalSource, } from './process-signals.js';
@@ -26,7 +27,7 @@ export type { SocketIOHandshakeConfig, SocketIOPeerLoaders, SocketIORequestPolic
26
27
  export { createSocketIOServer, socketIoLane } from './socket-io.js';
27
28
  export { type ParseSSEOptions, parseSSE, streamSSE } from './stream.js';
28
29
  export { DEFAULT_STREAM_HEARTBEAT_MS, ndjsonRoute, type StreamingFormat, type StreamingRouteOptions, type StreamingSourceContext, sseRoute, streamingRoute, } from './streaming-route.js';
29
- export type { AuthorizationContext, EffectiveScope, EndpointHandlerContext, Handlers, LifecycleHooks, LoggingConfig, LogOutcome, MethodDef, MultipartFileMetadata, MultipartReceiver, MultipartReceiverResult, OperationIdentity, RouteGroup, ScopeContexts, ScopedHandlers, ServiceDef, StitchLogger, StreamingMultipartImplementation, } from './types.js';
30
+ export type { AuthorizationContext, EffectiveScope, EndpointHandlerContext, Handlers, LifecycleHooks, LoggingConfig, LogOutcome, MethodDef, MultipartFileMetadata, MultipartReceiver, MultipartReceiverResult, OperationIdentity, RouteGroup, RouteGroupHooks, ScopeContexts, ScopedHandlers, ServiceDef, StitchLogger, StreamingMultipartImplementation, } from './types.js';
30
31
  export { createUnixClientTransport, type UnixClientDeliveryState, type UnixClientTransport, type UnixClientTransportConfig, UnixClientTransportError, type UnixClientTransportErrorCode, type UnixResponseBodyMode, } from './unix-client.js';
31
32
  export { type ComposedLane, composeWebSocketHandlers, type WebSocketComposeConfig, type WebSocketLane, webSocketLane, } from './websocket.js';
32
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}