@procedures/client 0.28.0 → 0.29.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.
@@ -34,6 +34,7 @@ import { hydrateInput, runProgram } from "./program.js";
34
34
  import { INFERRED_EFFECTS_METADATA_KEY, PURE_EFFECTS, REGISTRY_READ_EFFECTS, effectsValue, withEffects } from "./effects.js";
35
35
  import { MANIFEST_FORMAT, describeProcedure as describeEntry, describeRegistry } from "./manifest.js";
36
36
  import { isRuntimeDefined, markRuntimeProgram, runtimeProgramOfHandler } from "./runtime-programs.js";
37
+ import { InvocationError } from "./invoke.js";
37
38
  // Input schemas of procedure.define and procedure.delete (roadmap 2.1)
38
39
  const procedurePathField = z.array(z.string().min(1)).min(1);
39
40
  const defineInputSchema = z.object({
@@ -183,6 +184,7 @@ export function clearRuntimeProcedures(registry = PROCEDURE_REGISTRY) {
183
184
  * stays: an MCP client cannot replace a tool or an internal procedure.
184
185
  * - The registry gets the procedure first. A define that fails leaves nothing.
185
186
  * - The new procedure is data-driven: with a server's `expose` rule, it calls only exposed paths.
187
+ * - With a server's `expose` rule, a caller cannot replace a hidden procedure (`NOT_EXPOSED`).
186
188
  * - Its input is raw (the `runs-refs` tag): `exec()` does not run the body at definition time.
187
189
  */
188
190
  export const defineProcedureProcedure = defineProcedure({
@@ -203,6 +205,10 @@ export const defineProcedureProcedure = defineProcedure({
203
205
  }
204
206
  const pathKey = path.join(".");
205
207
  const existing = registry.get(path);
208
+ // A procedure outside the expose rule of the host is not the caller's to replace (R17)
209
+ if (existing && ctx?.expose && !ctx.expose(path)) {
210
+ throw new InvocationError("NOT_EXPOSED", `Procedure not exposed: ${pathKey}. procedure.define can replace only a procedure that this host exposes.`, ctx.path ?? ["procedure", "define"]);
211
+ }
206
212
  if (existing && !isRuntimeDefined(existing)) {
207
213
  throw new Error(`A code procedure exists at path: ${pathKey}. procedure.define can replace only a procedure that procedure.define made.`);
208
214
  }
@@ -360,7 +366,8 @@ export const manifestProcedure = defineProcedure({
360
366
  }),
361
367
  });
362
368
  /**
363
- * Delete a runtime-defined procedure.
369
+ * Delete a runtime-defined procedure. A procedure outside the expose rule of the host is not
370
+ * found (R17), so a caller cannot delete a hidden procedure.
364
371
  */
365
372
  export const deleteProcedureProcedure = defineProcedure({
366
373
  path: ["procedure", "delete"],
@@ -372,6 +379,10 @@ export const deleteProcedureProcedure = defineProcedure({
372
379
  },
373
380
  handler: async (input, ctx) => {
374
381
  const registry = ctx?.registry ?? PROCEDURE_REGISTRY;
382
+ // A procedure outside the expose rule of the host is not found (R17)
383
+ if (ctx?.expose && !ctx.expose(input.path)) {
384
+ return { deleted: false };
385
+ }
375
386
  const existing = registry.get(input.path);
376
387
  if (!existing) {
377
388
  return { deleted: false };
@@ -1 +1 @@
1
- {"version":3,"file":"define-procedure.js","sourceRoot":"","sources":["../../src/procedures/define-procedure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define-procedure.js","sourceRoot":"","sources":["../../src/procedures/define-procedure.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@procedures/client",
4
- "version": "0.28.0",
4
+ "version": "0.29.0",
5
5
  "description": "Procedures as data for TypeScript: define typed procedures once and call them in process, over HTTP, WebSocket, the CLI or MCP. Streaming, middleware, retries, caching and a JSON program format.",
6
6
  "keywords": [
7
7
  "rpc",
@@ -108,7 +108,7 @@
108
108
  },
109
109
  "dependencies": {
110
110
  "@mark1russell7/algebra": "^0.7.1",
111
- "@mark1russell7/coeval": "^0.6.3",
111
+ "@mark1russell7/coeval": "^0.7.0",
112
112
  "@mark1russell7/quantity": "^0.2.0",
113
113
  "@mark1russell7/service": "^0.5.8",
114
114
  "@types/ws": "^8.18.1",
@@ -381,10 +381,11 @@ export class IncomingCalls {
381
381
  private async serve(frame: WebSocketMessage): Promise<void> {
382
382
  const controller = new AbortController();
383
383
  this.inflight.set(frame.id, controller);
384
+ let credit: StreamCredit | undefined;
384
385
  try {
385
386
  const response = await this.options.handler.handle(this.options.requestOf(frame, controller.signal));
386
387
  if (response.stream) {
387
- const credit = typeof frame.credit === "number" && frame.credit > 0 ? new StreamCredit(frame.credit) : undefined;
388
+ credit = typeof frame.credit === "number" && frame.credit > 0 ? new StreamCredit(frame.credit) : undefined;
388
389
  if (credit) this.credits.set(frame.id, credit);
389
390
  await this.sendStream(frame.id, response.stream, controller.signal, credit);
390
391
  } else {
@@ -408,7 +409,8 @@ export class IncomingCalls {
408
409
  this.inflight.delete(frame.id);
409
410
  this.options.onSettled?.();
410
411
  }
411
- this.credits.delete(frame.id);
412
+ // A newer request with the same id keeps its credit (audit pass 2)
413
+ if (credit !== undefined && this.credits.get(frame.id) === credit) this.credits.delete(frame.id);
412
414
  }
413
415
  }
414
416
 
@@ -68,17 +68,21 @@ export interface BatchExecutionResult<TRoute extends Route = Route> {
68
68
  results: BatchItem[];
69
69
  }
70
70
 
71
- /** An abort controller whose signal also aborts when the parent signal aborts. */
72
- function linkedController(parent: AbortSignal | undefined): AbortController {
71
+ /**
72
+ * An abort controller whose signal also aborts when the parent signal aborts. `release` removes
73
+ * the listener from the parent when the call ends. (Before, each call left its listener on the
74
+ * parent, so a long-lived signal kept every controller: audit pass 2.)
75
+ */
76
+ function linkedController(parent: AbortSignal | undefined): { controller: AbortController; release: () => void } {
73
77
  const controller = new AbortController();
74
- if (parent) {
75
- if (parent.aborted) {
76
- controller.abort(parent.reason);
77
- } else {
78
- parent.addEventListener("abort", () => controller.abort(parent.reason), { once: true });
79
- }
78
+ if (!parent) return { controller, release: () => undefined };
79
+ if (parent.aborted) {
80
+ controller.abort(parent.reason);
81
+ return { controller, release: () => undefined };
80
82
  }
81
- return controller;
83
+ const onAbort = (): void => controller.abort(parent.reason);
84
+ parent.addEventListener("abort", onAbort, { once: true });
85
+ return { controller, release: () => parent.removeEventListener("abort", onAbort) };
82
86
  }
83
87
 
84
88
  function cancelledResult(path: ProcedurePath, message: string): ProcedureCallResult {
@@ -162,13 +166,18 @@ export class BatchExecutor {
162
166
  context: ExecutionContext
163
167
  ): Promise<BatchExecutionResult<TRoute>> {
164
168
  const startTime = Date.now();
165
- const controllers = resolved.map(() => linkedController(context.signal));
169
+ const links = resolved.map(() => linkedController(context.signal));
166
170
  const calls = resolved.map((route, index) =>
167
- this.runOne(route, { ...context, signal: controllers[index]!.signal }).then((item) => ({ item, index }))
171
+ this.runOne(route, { ...context, signal: links[index]!.controller.signal }).then((item) => ({ item, index }))
168
172
  );
169
173
 
170
- const winner = await Promise.race(calls);
171
- controllers.forEach((controller, index) => {
174
+ let winner: { item: BatchItem; index: number };
175
+ try {
176
+ winner = await Promise.race(calls);
177
+ } finally {
178
+ links.forEach((link) => link.release());
179
+ }
180
+ links.forEach(({ controller }, index) => {
172
181
  if (index !== winner.index) controller.abort();
173
182
  });
174
183
 
@@ -238,9 +247,10 @@ export class BatchExecutor {
238
247
  (bufferSize <= 0 || done.length < bufferSize)
239
248
  ) {
240
249
  const { route, index } = pending.shift()!;
241
- const controller = linkedController(context.signal);
250
+ const { controller, release } = linkedController(context.signal);
242
251
  running.set(index, { path: route.path, controller });
243
252
  void this.runOne(route, { ...context, signal: controller.signal }).then((item) => {
253
+ release();
244
254
  // A cancelled call has its result already
245
255
  if (!running.delete(index)) return;
246
256
  done.push({ ...item, index });
@@ -12,6 +12,7 @@ import { isDuration, optionalMs, type Duration } from "../../duration.js";
12
12
  import type { Effects } from "../../procedures/types.js";
13
13
  import { TIMER_DEFAULTS } from "../../timers.js";
14
14
  import { methodName } from "../../server/method.js";
15
+ import { abortedItem } from "./items.js";
15
16
 
16
17
  /**
17
18
  * Cache middleware options.
@@ -207,6 +208,29 @@ function cacheOverrides(value: unknown): { ttl?: number; bypass?: boolean; refre
207
208
  /**
208
209
  * Default should cache predicate - only cache successful responses.
209
210
  */
211
+ /** The value of `untilAbort` when the signal aborts first. */
212
+ const ABORTED: unique symbol = Symbol("aborted");
213
+
214
+ /** The value of a promise, or `ABORTED` when the signal aborts first. Without a signal, the promise. */
215
+ function untilAbort<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T | typeof ABORTED> {
216
+ if (signal === undefined) return promise;
217
+ if (signal.aborted) return Promise.resolve(ABORTED);
218
+ return new Promise((resolve, reject) => {
219
+ const onAbort = (): void => resolve(ABORTED);
220
+ signal.addEventListener("abort", onAbort, { once: true });
221
+ promise.then(
222
+ (value) => {
223
+ signal.removeEventListener("abort", onAbort);
224
+ resolve(value);
225
+ },
226
+ (error: unknown) => {
227
+ signal.removeEventListener("abort", onAbort);
228
+ reject(error);
229
+ },
230
+ );
231
+ });
232
+ }
233
+
210
234
  function defaultShouldCache(item: ResponseItem<unknown>): boolean {
211
235
  return item.status.type === "success";
212
236
  }
@@ -354,7 +378,12 @@ export function createCacheMiddleware(options: CacheOptions): TypedClientMiddlew
354
378
  // The same call is in flight: wait for it and give a copy of its response (R13)
355
379
  const pending = overrides.refresh ? undefined : inFlight.get(cacheKey);
356
380
  if (pending) {
357
- const shared = await pending;
381
+ // The wait follows the signal of this call: an abort ends it, also while the first call runs
382
+ const shared = await untilAbort(pending, context.message.signal);
383
+ if (shared === ABORTED) {
384
+ yield abortedItem<TRes>(context.message.id);
385
+ return;
386
+ }
358
387
  if (shared) {
359
388
  stats.hits++;
360
389
  setState(true);
@@ -284,9 +284,14 @@ function collect(nodes: readonly RegexNode[], ways: Ways): void {
284
284
  if (node.min !== node.max) {
285
285
  ways.variable = true;
286
286
  if (node.max === Infinity) ways.unbounded = true;
287
- ways.count *= node.max - node.min + 1;
288
287
  }
289
- collect([node.node], ways);
288
+ // Each repetition multiplies the ways of the part inside it: ((a|a){9}){9} has 2^81 ways, not 2^9
289
+ const inner: Ways = { unbounded: false, variable: false, overlap: false, count: 1 };
290
+ collect([node.node], inner);
291
+ ways.unbounded ||= inner.unbounded;
292
+ ways.variable ||= inner.variable;
293
+ ways.overlap ||= inner.overlap;
294
+ ways.count *= node.max === Infinity ? Infinity : (node.max - node.min + 1) * inner.count ** node.max;
290
295
  } else if (node.kind === "group") {
291
296
  if (node.branches.length > 1) {
292
297
  ways.count *= node.branches.length;
@@ -216,7 +216,10 @@ const minProcedure: MinProcedure = defineProcedure({
216
216
  if (input.values.length === 0) {
217
217
  return Infinity;
218
218
  }
219
- return Math.min(...input.values);
219
+ // A loop, not a spread: a long array as arguments overflows the stack (audit pass 2)
220
+ let min = Infinity;
221
+ for (const value of input.values) min = Math.min(min, value);
222
+ return min;
220
223
  },
221
224
  });
222
225
 
@@ -246,7 +249,9 @@ const maxProcedure: MaxProcedure = defineProcedure({
246
249
  if (input.values.length === 0) {
247
250
  return -Infinity;
248
251
  }
249
- return Math.max(...input.values);
252
+ let max = -Infinity;
253
+ for (const value of input.values) max = Math.max(max, value);
254
+ return max;
250
255
  },
251
256
  });
252
257
 
@@ -51,6 +51,7 @@ import { INFERRED_EFFECTS_METADATA_KEY, PURE_EFFECTS, REGISTRY_READ_EFFECTS, eff
51
51
  import { MANIFEST_FORMAT, describeProcedure as describeEntry, describeRegistry, type ProcedureManifest } from "./manifest.js";
52
52
  import type { JsonSchema } from "./schema.js";
53
53
  import { isRuntimeDefined, markRuntimeProgram, runtimeProgramOfHandler } from "./runtime-programs.js";
54
+ import { InvocationError } from "./invoke.js";
54
55
 
55
56
  // Input schemas of procedure.define and procedure.delete (roadmap 2.1)
56
57
  const procedurePathField = z.array(z.string().min(1)).min(1);
@@ -297,6 +298,7 @@ interface DefineMetadata extends ProcedureMetadata {
297
298
  * stays: an MCP client cannot replace a tool or an internal procedure.
298
299
  * - The registry gets the procedure first. A define that fails leaves nothing.
299
300
  * - The new procedure is data-driven: with a server's `expose` rule, it calls only exposed paths.
301
+ * - With a server's `expose` rule, a caller cannot replace a hidden procedure (`NOT_EXPOSED`).
300
302
  * - Its input is raw (the `runs-refs` tag): `exec()` does not run the body at definition time.
301
303
  */
302
304
  export const defineProcedureProcedure: Procedure<
@@ -326,6 +328,14 @@ export const defineProcedureProcedure: Procedure<
326
328
 
327
329
  const pathKey = path.join(".");
328
330
  const existing = registry.get(path);
331
+ // A procedure outside the expose rule of the host is not the caller's to replace (R17)
332
+ if (existing && ctx?.expose && !ctx.expose(path)) {
333
+ throw new InvocationError(
334
+ "NOT_EXPOSED",
335
+ `Procedure not exposed: ${pathKey}. procedure.define can replace only a procedure that this host exposes.`,
336
+ ctx.path ?? ["procedure", "define"]
337
+ );
338
+ }
329
339
  if (existing && !isRuntimeDefined(existing)) {
330
340
  throw new Error(
331
341
  `A code procedure exists at path: ${pathKey}. procedure.define can replace only a procedure that procedure.define made.`
@@ -539,7 +549,8 @@ export const manifestProcedure: Procedure<{ namespace?: string | undefined }, Pr
539
549
  });
540
550
 
541
551
  /**
542
- * Delete a runtime-defined procedure.
552
+ * Delete a runtime-defined procedure. A procedure outside the expose rule of the host is not
553
+ * found (R17), so a caller cannot delete a hidden procedure.
543
554
  */
544
555
  export const deleteProcedureProcedure: Procedure<
545
556
  { path: ProcedurePath },
@@ -555,6 +566,10 @@ export const deleteProcedureProcedure: Procedure<
555
566
  },
556
567
  handler: async (input: { path: ProcedurePath }, ctx?: ProcedureContext): Promise<{ deleted: boolean }> => {
557
568
  const registry = ctx?.registry ?? PROCEDURE_REGISTRY;
569
+ // A procedure outside the expose rule of the host is not found (R17)
570
+ if (ctx?.expose && !ctx.expose(input.path)) {
571
+ return { deleted: false };
572
+ }
558
573
  const existing = registry.get(input.path);
559
574
  if (!existing) {
560
575
  return { deleted: false };