holon-sh 0.0.1-dev.13 → 0.0.1-dev.15

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 CHANGED
@@ -122,6 +122,18 @@ A refused subscription is answered Forbidden, and access is checked again at eac
122
122
 
123
123
  Poll and push delivery are here, with targeted emits, subscription hooks, authorization, ending subscriptions, limits, paged listing and removing event types. Webhook delivery and check functions, which read a source that keeps its own history, are not, and neither are typed event names. Clients are not told when the event types change: they list them again.
124
124
 
125
+ ## Run an app without Holon
126
+
127
+ `holon-sh/serve` serves an app's module at the paths Holon gives it, so the app also runs wherever Node does:
128
+
129
+ ```ts
130
+ import { serve } from "holon-sh/serve";
131
+
132
+ await serve(await import("./server.ts"));
133
+ ```
134
+
135
+ The MCP endpoint is at `/mcp` and `/mcp/<app>`, and the files of `frontend` are at every other path. `PORT` and `HOST` change where it listens, 127.0.0.1:3000 unless they are set. Holon answers clients of the 2025 MCP versions in front of an app, and here the app's handler answers them, so create it without `legacy: "reject"`.
136
+
125
137
  ## Community
126
138
 
127
139
  Ask questions and share what you're building on the [Holon Discord](https://discord.gg/jXExyBdy).
@@ -71,7 +71,7 @@ export interface EventDefinition<A, D> {
71
71
  onUnsubscribe?: (subscription: Subscription<A>) => void | Promise<void>;
72
72
  }
73
73
  /** Emits occurrences of one event type to the subscriptions they match, and ends its subscriptions. */
74
- export interface Emitter<D> {
74
+ export interface Emitter<D, A = unknown> {
75
75
  /**
76
76
  * `eventId` lets a client drop an occurrence it has seen. Give the source's own id when it has one. With
77
77
  * `subscriptionId`, the sketch's targeted emit, the occurrence goes to that subscription alone, whatever its
@@ -107,11 +107,30 @@ export interface Emitter<D> {
107
107
  * Stops offering this event type: its subscriptions end with NotFound.
108
108
  */
109
109
  remove(): void;
110
+ /**
111
+ * Keeps a value for each subscriber, such as its status, for as long as it subscribes. A subscriber is named by its
112
+ * subscription's arguments, so give each one its own, such as an id its client makes: subscriptions with the same
113
+ * arguments, such as one client's overlapping streams, are one subscriber. `told` makes the data emitted when a
114
+ * value is set, and, given none, when it leaves.
115
+ */
116
+ presence<V>(told: (args: A, value: V | undefined) => D): Presence<A, V>;
117
+ }
118
+ /** Each subscriber's value, kept while it subscribes. */
119
+ export interface Presence<A, V> {
120
+ /**
121
+ * Sets the value of the subscriber these arguments name, and emits it. It stays while a subscription with these
122
+ * arguments is open, by either delivery mode, and leaves `linger` milliseconds after the last one ends or after it is
123
+ * last set, whichever is later. So a subscriber that reconnects within the linger keeps it, and a caller that cannot
124
+ * subscribe keeps it by setting it again.
125
+ */
126
+ set(args: A, value: V, linger: number): void;
127
+ /** The values a subscription with these arguments is shown: those whose data `match` lets it receive, asked with no context. */
128
+ seen(args: A): V[];
110
129
  }
111
130
  /** The event types of a process, served by each MCP server it creates. */
112
131
  export interface Events {
113
132
  /** Declares an event type. Emit its occurrences with the returned emitter. */
114
- event<A, D>(name: string, definition: EventDefinition<A, D>): Emitter<D>;
133
+ event<A, D>(name: string, definition: EventDefinition<A, D>): Emitter<D, A>;
115
134
  /** Serves events/list, events/poll and events/stream on an McpServer or a Server, and declares the extension. */
116
135
  serve(server: McpServer | Server): void;
117
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/ext/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/ext/events.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,16 @@ const identify = async (who, name, args) => {
45
45
  };
46
46
  // A caller without an identity gets an id of its own for each stream.
47
47
  const unique = () => `sub_${hex(crypto.getRandomValues(new Uint8Array(16)))}`;
48
+ // The subscriber a subscription's arguments name, whoever the caller.
49
+ const named = (args) => JSON.stringify(canonical(args));
50
+ // Counts up or down under a key, and forgets a key that reaches none.
51
+ const count = (counts, key, by) => {
52
+ const total = (counts.get(key) ?? 0) + by;
53
+ if (total)
54
+ counts.set(key, total);
55
+ else
56
+ counts.delete(key);
57
+ };
48
58
  // A teardown that fails has nobody to tell, and must not take the process down.
49
59
  const settle = (run) => { Promise.resolve().then(run).catch(() => { }); };
50
60
  const integer = (value, minimum) => value === undefined || Number.isInteger(value) && value >= minimum;
@@ -181,7 +191,15 @@ export function createEvents() {
181
191
  if ((callers.get(who) ?? 0) >= MAX_SUBSCRIPTIONS_PER_CALLER)
182
192
  throw refusal({ code: RESOURCE_EXHAUSTED, message: "ResourceExhausted", data: { limit: "subscriptionsPerCaller", max: MAX_SUBSCRIPTIONS_PER_CALLER } });
183
193
  subscribed++;
184
- callers.set(who, (callers.get(who) ?? 0) + 1);
194
+ count(callers, who, 1);
195
+ // A presence keeps a subscriber's value while any of its streams or leases is open.
196
+ const subscriber = named(args);
197
+ const hold = (by) => {
198
+ count(type.holds, subscriber, by);
199
+ for (const keep of type.present)
200
+ keep(subscriber);
201
+ };
202
+ hold(1);
185
203
  let entry = type.subscriptions.get(id);
186
204
  if (!entry) {
187
205
  const subscription = { subscriptionId: id, name: type.name, delivery, arguments: args, context };
@@ -197,11 +215,8 @@ export function createEvents() {
197
215
  return;
198
216
  closed = true;
199
217
  subscribed--;
200
- const count = callers.get(who) ?? 1;
201
- if (count === 1)
202
- callers.delete(who);
203
- else
204
- callers.set(who, count - 1);
218
+ count(callers, who, -1);
219
+ hold(-1);
205
220
  current.held.delete(held);
206
221
  if (current.held.size)
207
222
  return;
@@ -287,10 +302,10 @@ export function createEvents() {
287
302
  throw new Error(`Event ${name} is delivered by ${delivery.join(", ") || "nothing"}, but only ${OFFERED.join(", ")} are served.`);
288
303
  const type = {
289
304
  name, order: ++declared, description, inputSchema, payloadSchema, _meta, delivery, match, transform, authorize, onSubscribe, onUnsubscribe,
290
- sequence: 0, dropped: 0, kept: [], sinks: new Set(), subscriptions: new Map(),
305
+ sequence: 0, dropped: 0, kept: [], sinks: new Set(), subscriptions: new Map(), holds: new Map(), present: new Set(),
291
306
  };
292
307
  types.set(name, type);
293
- return {
308
+ const emitter = {
294
309
  emit(data, { eventId = crypto.randomUUID(), timestamp = new Date().toISOString(), subscriptionId: target } = {}) {
295
310
  const occurrence = { eventId, name, timestamp, data };
296
311
  // Data that cannot be sent as JSON is refused here, before anything is kept or sent.
@@ -319,7 +334,39 @@ export function createEvents() {
319
334
  for (const each of [...type.subscriptions.keys()])
320
335
  endSubscription(type, each, removed);
321
336
  },
337
+ presence(told) {
338
+ const values = new Map();
339
+ // A value has no timer while its subscriber holds a subscription, and leaves its linger after it stops.
340
+ const keep = (subscriber) => {
341
+ const shown = values.get(subscriber);
342
+ if (!shown)
343
+ return;
344
+ clearTimeout(shown.leaving);
345
+ if (type.holds.has(subscriber))
346
+ return;
347
+ shown.leaving = setTimeout(() => {
348
+ values.delete(subscriber);
349
+ emitter.emit(told(shown.args, undefined));
350
+ }, shown.linger);
351
+ shown.leaving.unref?.();
352
+ };
353
+ type.present.add(keep);
354
+ return {
355
+ set(args, value, linger) {
356
+ const subscriber = named(args);
357
+ values.set(subscriber, { args, value, linger, leaving: values.get(subscriber)?.leaving });
358
+ keep(subscriber);
359
+ emitter.emit(told(args, value));
360
+ },
361
+ seen(args) {
362
+ return [...values.values()]
363
+ .filter(shown => !type.match || type.match(told(shown.args, shown.value), args, undefined))
364
+ .map(({ value }) => value);
365
+ },
366
+ };
367
+ },
322
368
  };
369
+ return emitter;
323
370
  },
324
371
  /** Serves the declared event types on an MCP server: events/list, events/poll and events/stream. */
325
372
  serve(mcp) {
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/ext/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/ext/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type Server } from "node:http";
2
+ /** An app's module: the MCP handler it exports by default, and the directory of its page. */
3
+ export interface App {
4
+ default: {
5
+ fetch(request: Request): Promise<Response>;
6
+ };
7
+ /** The directory of the page's files, as a file URL. */
8
+ frontend?: URL;
9
+ }
10
+ /**
11
+ * Runs an app without Holon, at the paths Holon gives it: the MCP endpoint at `/mcp` and `/mcp/<app>`, and the page's
12
+ * files everywhere else. Listens on `PORT` and `HOST`, or else on 127.0.0.1:3000.
13
+ *
14
+ * ```ts
15
+ * await serve(await import("./server.ts"));
16
+ * ```
17
+ *
18
+ * Holon answers clients of the 2025 MCP versions in front of an app. Here the handler answers them, so create it
19
+ * without `legacy: "reject"`.
20
+ */
21
+ export declare function serve({ default: handler, frontend }: App): Promise<Server>;
22
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAMjG,6FAA6F;AAC7F,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAC;IACxD,wDAAwD;IACxD,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBhF"}
package/dist/serve.js ADDED
@@ -0,0 +1,74 @@
1
+ import { once } from "node:events";
2
+ import { readFile } from "node:fs/promises";
3
+ import { createServer } from "node:http";
4
+ import { Readable } from "node:stream";
5
+ import { pipeline } from "node:stream/promises";
6
+ import mime from "mime";
7
+ /**
8
+ * Runs an app without Holon, at the paths Holon gives it: the MCP endpoint at `/mcp` and `/mcp/<app>`, and the page's
9
+ * files everywhere else. Listens on `PORT` and `HOST`, or else on 127.0.0.1:3000.
10
+ *
11
+ * ```ts
12
+ * await serve(await import("./server.ts"));
13
+ * ```
14
+ *
15
+ * Holon answers clients of the 2025 MCP versions in front of an app. Here the handler answers them, so create it
16
+ * without `legacy: "reject"`.
17
+ */
18
+ export async function serve({ default: handler, frontend }) {
19
+ const { PORT = "3000", HOST = "127.0.0.1" } = process.env;
20
+ // A directory's URL ends in `/`. Without it, a name would resolve beside the directory instead of in it.
21
+ const directory = frontend && new URL(frontend.href.replace(/\/?$/, "/"));
22
+ const server = createServer((req, res) => respond(handler, directory, req, res).catch((error) => {
23
+ console.error(error);
24
+ if (!res.headersSent)
25
+ res.writeHead(500);
26
+ res.end();
27
+ }));
28
+ server.listen(Number(PORT), HOST);
29
+ await once(server, "listening");
30
+ const { port } = server.address();
31
+ const origin = `http://${HOST.includes(":") ? `[${HOST}]` : HOST}:${port}`;
32
+ console.log(`Serving ${origin}/ with the MCP endpoint at ${origin}/mcp`);
33
+ return server;
34
+ }
35
+ async function respond(handler, directory, req, res) {
36
+ const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
37
+ if (/^\/mcp(\/[^/]+)?$/.test(url.pathname)) {
38
+ const gone = new AbortController();
39
+ res.on("close", () => gone.abort());
40
+ const headers = new Headers();
41
+ for (const [name, values = []] of Object.entries(req.headersDistinct))
42
+ for (const value of values)
43
+ headers.append(name, value);
44
+ // Holon forwards the origin it serves the app at. Here that is this server, unless a proxy in front forwards its own.
45
+ if (!headers.has("x-forwarded-host"))
46
+ headers.set("x-forwarded-host", url.host);
47
+ if (!headers.has("x-forwarded-proto"))
48
+ headers.set("x-forwarded-proto", "http");
49
+ const body = req.method === "GET" || req.method === "HEAD" ? undefined : req;
50
+ const response = await handler.fetch(new Request(url, { method: req.method, headers, body, duplex: "half", signal: gone.signal }));
51
+ res.setHeaders(response.headers).writeHead(response.status);
52
+ // When the client leaves, pipeline cancels the body, so a stream between events ends then and not at its next
53
+ // write. Either side failing ends the response, which is all there is to do.
54
+ if (response.body)
55
+ await pipeline(Readable.fromWeb(response.body), res).catch(() => { });
56
+ else
57
+ res.end();
58
+ return;
59
+ }
60
+ if (!directory || (req.method !== "GET" && req.method !== "HEAD"))
61
+ return void res.writeHead(404).end();
62
+ const name = url.pathname.endsWith("/") ? `${url.pathname}index.html` : url.pathname;
63
+ // The URL parser has resolved every `..`, and a file URL may not encode `/`, so no name leads out of the directory.
64
+ // Like Holon, serve nothing hidden, however its dot is spelled, and treat what cannot be read, such as a directory, as
65
+ // not found.
66
+ const contents = /\/(\.|%2e)/i.test(name) ? undefined : await readFile(new URL(`.${name}`, directory)).catch(() => undefined);
67
+ if (!contents)
68
+ return void res.writeHead(404).end();
69
+ // Like Holon, take the type from the MIME database, and call text UTF-8, which a built page is.
70
+ const type = mime.getType(name) ?? "application/octet-stream";
71
+ const contentType = type.startsWith("text/") ? `${type}; charset=utf-8` : type;
72
+ res.writeHead(200, { "content-type": contentType, "x-content-type-options": "nosniff" }).end(contents);
73
+ }
74
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "holon-sh",
3
- "version": "0.0.1-dev.13",
3
+ "version": "0.0.1-dev.15",
4
4
  "description": "Typed MCP clients, MCP Events, and the caller of an MCP request, for Node.js.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,6 +35,10 @@
35
35
  "./ext/files": {
36
36
  "types": "./dist/ext/files.d.ts",
37
37
  "import": "./dist/ext/files.js"
38
+ },
39
+ "./serve": {
40
+ "types": "./dist/serve.d.ts",
41
+ "import": "./dist/serve.js"
38
42
  }
39
43
  },
40
44
  "typesVersions": {
@@ -53,6 +57,9 @@
53
57
  ],
54
58
  "ext/files": [
55
59
  "./dist/ext/files.d.ts"
60
+ ],
61
+ "serve": [
62
+ "./dist/serve.d.ts"
56
63
  ]
57
64
  }
58
65
  },
@@ -73,6 +80,7 @@
73
80
  "dependencies": {
74
81
  "@modelcontextprotocol/client": "^2.3.1",
75
82
  "ipaddr.js": "^2.5.0",
83
+ "mime": "^4.1.2",
76
84
  "undici": "^7.16.0"
77
85
  },
78
86
  "peerDependencies": {
package/src/ext/events.ts CHANGED
@@ -75,7 +75,7 @@ export interface EventDefinition<A, D> {
75
75
  onUnsubscribe?: (subscription: Subscription<A>) => void | Promise<void>;
76
76
  }
77
77
  /** Emits occurrences of one event type to the subscriptions they match, and ends its subscriptions. */
78
- export interface Emitter<D> {
78
+ export interface Emitter<D, A = unknown> {
79
79
  /**
80
80
  * `eventId` lets a client drop an occurrence it has seen. Give the source's own id when it has one. With
81
81
  * `subscriptionId`, the sketch's targeted emit, the occurrence goes to that subscription alone, whatever its
@@ -107,11 +107,30 @@ export interface Emitter<D> {
107
107
  * Stops offering this event type: its subscriptions end with NotFound.
108
108
  */
109
109
  remove(): void;
110
+ /**
111
+ * Keeps a value for each subscriber, such as its status, for as long as it subscribes. A subscriber is named by its
112
+ * subscription's arguments, so give each one its own, such as an id its client makes: subscriptions with the same
113
+ * arguments, such as one client's overlapping streams, are one subscriber. `told` makes the data emitted when a
114
+ * value is set, and, given none, when it leaves.
115
+ */
116
+ presence<V>(told: (args: A, value: V | undefined) => D): Presence<A, V>;
117
+ }
118
+ /** Each subscriber's value, kept while it subscribes. */
119
+ export interface Presence<A, V> {
120
+ /**
121
+ * Sets the value of the subscriber these arguments name, and emits it. It stays while a subscription with these
122
+ * arguments is open, by either delivery mode, and leaves `linger` milliseconds after the last one ends or after it is
123
+ * last set, whichever is later. So a subscriber that reconnects within the linger keeps it, and a caller that cannot
124
+ * subscribe keeps it by setting it again.
125
+ */
126
+ set(args: A, value: V, linger: number): void;
127
+ /** The values a subscription with these arguments is shown: those whose data `match` lets it receive, asked with no context. */
128
+ seen(args: A): V[];
110
129
  }
111
130
  /** The event types of a process, served by each MCP server it creates. */
112
131
  export interface Events {
113
132
  /** Declares an event type. Emit its occurrences with the returned emitter. */
114
- event<A, D>(name: string, definition: EventDefinition<A, D>): Emitter<D>;
133
+ event<A, D>(name: string, definition: EventDefinition<A, D>): Emitter<D, A>;
115
134
  /** Serves events/list, events/poll and events/stream on an McpServer or a Server, and declares the extension. */
116
135
  serve(server: McpServer | Server): void;
117
136
  }
@@ -166,6 +185,10 @@ interface Type<A = any, D = any> {
166
185
  readonly sinks: Set<() => void>;
167
186
  /** The subscriptions held by streams and poll leases, by id. */
168
187
  readonly subscriptions: Map<string, { held: Set<Held>; ready: Promise<Subscription<A>> }>;
188
+ /** How many streams and poll leases are open, by the subscriber their arguments name. */
189
+ readonly holds: Map<string, number>;
190
+ /** Told when a subscriber's holds change: one for each presence. */
191
+ readonly present: Set<(subscriber: string) => void>;
169
192
  }
170
193
  interface Lease { type: Type; opening: Promise<Held>; ended?: EventError; release?: () => void; timer?: ReturnType<typeof setTimeout> }
171
194
 
@@ -209,6 +232,14 @@ const identify = async (who: string | null, name: string, args: unknown) => {
209
232
  };
210
233
  // A caller without an identity gets an id of its own for each stream.
211
234
  const unique = () => `sub_${hex(crypto.getRandomValues(new Uint8Array(16)))}`;
235
+ // The subscriber a subscription's arguments name, whoever the caller.
236
+ const named = (args: unknown) => JSON.stringify(canonical(args));
237
+ // Counts up or down under a key, and forgets a key that reaches none.
238
+ const count = (counts: Map<string, number>, key: string, by: number) => {
239
+ const total = (counts.get(key) ?? 0) + by;
240
+ if (total) counts.set(key, total);
241
+ else counts.delete(key);
242
+ };
212
243
  // A teardown that fails has nobody to tell, and must not take the process down.
213
244
  const settle = (run: () => unknown) => { Promise.resolve().then(run).catch(() => {}); };
214
245
  const integer = (value: unknown, minimum: number) => value === undefined || Number.isInteger(value) && (value as number) >= minimum;
@@ -338,7 +369,14 @@ export function createEvents(): Events {
338
369
  if (subscribed >= MAX_SUBSCRIPTIONS) throw refusal({ code: RESOURCE_EXHAUSTED, message: "ResourceExhausted", data: { limit: "subscriptions", max: MAX_SUBSCRIPTIONS } });
339
370
  if ((callers.get(who) ?? 0) >= MAX_SUBSCRIPTIONS_PER_CALLER) throw refusal({ code: RESOURCE_EXHAUSTED, message: "ResourceExhausted", data: { limit: "subscriptionsPerCaller", max: MAX_SUBSCRIPTIONS_PER_CALLER } });
340
371
  subscribed++;
341
- callers.set(who, (callers.get(who) ?? 0) + 1);
372
+ count(callers, who, 1);
373
+ // A presence keeps a subscriber's value while any of its streams or leases is open.
374
+ const subscriber = named(args);
375
+ const hold = (by: number) => {
376
+ count(type.holds, subscriber, by);
377
+ for (const keep of type.present) keep(subscriber);
378
+ };
379
+ hold(1);
342
380
  let entry = type.subscriptions.get(id);
343
381
  if (!entry) {
344
382
  const subscription = { subscriptionId: id, name: type.name, delivery, arguments: args, context };
@@ -353,9 +391,8 @@ export function createEvents(): Events {
353
391
  if (closed) return;
354
392
  closed = true;
355
393
  subscribed--;
356
- const count = callers.get(who) ?? 1;
357
- if (count === 1) callers.delete(who);
358
- else callers.set(who, count - 1);
394
+ count(callers, who, -1);
395
+ hold(-1);
359
396
  current.held.delete(held);
360
397
  if (current.held.size) return;
361
398
  if (type.subscriptions.get(id) === current) type.subscriptions.delete(id);
@@ -426,16 +463,16 @@ export function createEvents(): Events {
426
463
  * Declares an event type and returns the function that emits it. `match` decides which subscriptions receive an
427
464
  * event from their arguments, and `transform` shapes its data for each.
428
465
  */
429
- event<A, D>(name: string, { description, inputSchema, payloadSchema, _meta, match, transform, delivery = OFFERED, authorize, onSubscribe, onUnsubscribe }: EventDefinition<A, D>): Emitter<D> {
466
+ event<A, D>(name: string, { description, inputSchema, payloadSchema, _meta, match, transform, delivery = OFFERED, authorize, onSubscribe, onUnsubscribe }: EventDefinition<A, D>): Emitter<D, A> {
430
467
  if (types.has(name)) throw new Error(`Event ${name} is already declared.`);
431
468
  const unknown = delivery.filter(mode => !OFFERED.includes(mode));
432
469
  if (unknown.length || !delivery.length) throw new Error(`Event ${name} is delivered by ${delivery.join(", ") || "nothing"}, but only ${OFFERED.join(", ")} are served.`);
433
470
  const type: Type<A, D> = {
434
471
  name, order: ++declared, description, inputSchema, payloadSchema, _meta, delivery, match, transform, authorize, onSubscribe, onUnsubscribe,
435
- sequence: 0, dropped: 0, kept: [], sinks: new Set(), subscriptions: new Map(),
472
+ sequence: 0, dropped: 0, kept: [], sinks: new Set(), subscriptions: new Map(), holds: new Map(), present: new Set(),
436
473
  };
437
474
  types.set(name, type);
438
- return {
475
+ const emitter: Emitter<D, A> = {
439
476
  emit(data, { eventId = crypto.randomUUID(), timestamp = new Date().toISOString(), subscriptionId: target } = {}) {
440
477
  const occurrence = { eventId, name, timestamp, data };
441
478
  // Data that cannot be sent as JSON is refused here, before anything is kept or sent.
@@ -458,7 +495,37 @@ export function createEvents(): Events {
458
495
  types.delete(name);
459
496
  for (const each of [...type.subscriptions.keys()]) endSubscription(type, each, removed);
460
497
  },
498
+ presence<V>(told: (args: A, value: V | undefined) => D): Presence<A, V> {
499
+ const values = new Map<string, { args: A; value: V; linger: number; leaving?: ReturnType<typeof setTimeout> }>();
500
+ // A value has no timer while its subscriber holds a subscription, and leaves its linger after it stops.
501
+ const keep = (subscriber: string) => {
502
+ const shown = values.get(subscriber);
503
+ if (!shown) return;
504
+ clearTimeout(shown.leaving);
505
+ if (type.holds.has(subscriber)) return;
506
+ shown.leaving = setTimeout(() => {
507
+ values.delete(subscriber);
508
+ emitter.emit(told(shown.args, undefined));
509
+ }, shown.linger);
510
+ shown.leaving.unref?.();
511
+ };
512
+ type.present.add(keep);
513
+ return {
514
+ set(args, value, linger) {
515
+ const subscriber = named(args);
516
+ values.set(subscriber, { args, value, linger, leaving: values.get(subscriber)?.leaving });
517
+ keep(subscriber);
518
+ emitter.emit(told(args, value));
519
+ },
520
+ seen(args) {
521
+ return [...values.values()]
522
+ .filter(shown => !type.match || type.match(told(shown.args, shown.value), args, undefined))
523
+ .map(({ value }) => value);
524
+ },
525
+ };
526
+ },
461
527
  };
528
+ return emitter;
462
529
  },
463
530
 
464
531
  /** Serves the declared event types on an MCP server: events/list, events/poll and events/stream. */
package/src/serve.ts ADDED
@@ -0,0 +1,76 @@
1
+ import { once } from "node:events";
2
+ import { readFile } from "node:fs/promises";
3
+ import { createServer, type IncomingMessage, type Server, type ServerResponse } from "node:http";
4
+ import type { AddressInfo } from "node:net";
5
+ import { Readable } from "node:stream";
6
+ import { pipeline } from "node:stream/promises";
7
+ import mime from "mime";
8
+
9
+ /** An app's module: the MCP handler it exports by default, and the directory of its page. */
10
+ export interface App {
11
+ default: { fetch(request: Request): Promise<Response> };
12
+ /** The directory of the page's files, as a file URL. */
13
+ frontend?: URL;
14
+ }
15
+
16
+ /**
17
+ * Runs an app without Holon, at the paths Holon gives it: the MCP endpoint at `/mcp` and `/mcp/<app>`, and the page's
18
+ * files everywhere else. Listens on `PORT` and `HOST`, or else on 127.0.0.1:3000.
19
+ *
20
+ * ```ts
21
+ * await serve(await import("./server.ts"));
22
+ * ```
23
+ *
24
+ * Holon answers clients of the 2025 MCP versions in front of an app. Here the handler answers them, so create it
25
+ * without `legacy: "reject"`.
26
+ */
27
+ export async function serve({ default: handler, frontend }: App): Promise<Server> {
28
+ const { PORT = "3000", HOST = "127.0.0.1" } = process.env;
29
+ // A directory's URL ends in `/`. Without it, a name would resolve beside the directory instead of in it.
30
+ const directory = frontend && new URL(frontend.href.replace(/\/?$/, "/"));
31
+ const server = createServer((req, res) =>
32
+ respond(handler, directory, req, res).catch((error: unknown) => {
33
+ console.error(error);
34
+ if (!res.headersSent) res.writeHead(500);
35
+ res.end();
36
+ }),
37
+ );
38
+ server.listen(Number(PORT), HOST);
39
+ await once(server, "listening");
40
+ const { port } = server.address() as AddressInfo;
41
+ const origin = `http://${HOST.includes(":") ? `[${HOST}]` : HOST}:${port}`;
42
+ console.log(`Serving ${origin}/ with the MCP endpoint at ${origin}/mcp`);
43
+ return server;
44
+ }
45
+
46
+ async function respond(handler: App["default"], directory: URL | undefined, req: IncomingMessage, res: ServerResponse) {
47
+ const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
48
+ if (/^\/mcp(\/[^/]+)?$/.test(url.pathname)) {
49
+ const gone = new AbortController();
50
+ res.on("close", () => gone.abort());
51
+ const headers = new Headers();
52
+ for (const [name, values = []] of Object.entries(req.headersDistinct)) for (const value of values) headers.append(name, value);
53
+ // Holon forwards the origin it serves the app at. Here that is this server, unless a proxy in front forwards its own.
54
+ if (!headers.has("x-forwarded-host")) headers.set("x-forwarded-host", url.host);
55
+ if (!headers.has("x-forwarded-proto")) headers.set("x-forwarded-proto", "http");
56
+ const body = req.method === "GET" || req.method === "HEAD" ? undefined : req;
57
+ const response = await handler.fetch(new Request(url, { method: req.method, headers, body, duplex: "half", signal: gone.signal }));
58
+ res.setHeaders(response.headers).writeHead(response.status);
59
+ // When the client leaves, pipeline cancels the body, so a stream between events ends then and not at its next
60
+ // write. Either side failing ends the response, which is all there is to do.
61
+ if (response.body) await pipeline(Readable.fromWeb(response.body), res).catch(() => {});
62
+ else res.end();
63
+ return;
64
+ }
65
+ if (!directory || (req.method !== "GET" && req.method !== "HEAD")) return void res.writeHead(404).end();
66
+ const name = url.pathname.endsWith("/") ? `${url.pathname}index.html` : url.pathname;
67
+ // The URL parser has resolved every `..`, and a file URL may not encode `/`, so no name leads out of the directory.
68
+ // Like Holon, serve nothing hidden, however its dot is spelled, and treat what cannot be read, such as a directory, as
69
+ // not found.
70
+ const contents = /\/(\.|%2e)/i.test(name) ? undefined : await readFile(new URL(`.${name}`, directory)).catch(() => undefined);
71
+ if (!contents) return void res.writeHead(404).end();
72
+ // Like Holon, take the type from the MIME database, and call text UTF-8, which a built page is.
73
+ const type = mime.getType(name) ?? "application/octet-stream";
74
+ const contentType = type.startsWith("text/") ? `${type}; charset=utf-8` : type;
75
+ res.writeHead(200, { "content-type": contentType, "x-content-type-options": "nosniff" }).end(contents);
76
+ }