@cyanheads/mcp-ts-core 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,7 @@
9
9
  * @module src/testing/fuzz
10
10
  */
11
11
  import { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodLiteral, ZodNullable, ZodNumber, ZodOptional, ZodString, ZodUnion, } from 'zod';
12
+ import { McpError } from '../types-global/errors.js';
12
13
  import { createMockContext } from './index.js';
13
14
  // ---------------------------------------------------------------------------
14
15
  // Lazy-loaded peer dependency
@@ -46,32 +47,69 @@ function zodTypeName(schema) {
46
47
  // ---------------------------------------------------------------------------
47
48
  // Zod → fast-check arbitrary generation
48
49
  // ---------------------------------------------------------------------------
50
+ /** Elements generated for an array with no declared upper bound. */
51
+ const DEFAULT_ARRAY_MAX = 5;
52
+ /**
53
+ * Nesting levels expanded before a node is treated as non-terminating. Cycle
54
+ * detection catches self-referential schemas by identity; this is the backstop
55
+ * for a schema whose getters mint a fresh node on every access, where there is
56
+ * no repeated identity to detect.
57
+ */
58
+ const MAX_SCHEMA_DEPTH = 32;
49
59
  /**
50
60
  * Converts a Zod schema to a fast-check `Arbitrary` that produces valid values.
51
61
  * Supports the JSON-Schema-serializable subset used by MCP tool/resource schemas.
52
62
  *
63
+ * Finite nesting is expanded in full, however deep. A self-referential schema —
64
+ * Zod 4's getter pattern, where reading `.shape` re-enters the same node —
65
+ * terminates at the point of recursion with an absence the schema accepts.
66
+ *
53
67
  * Requires `fast-check` to be loaded first — call from within a `fuzzTool()`/
54
68
  * `fuzzResource()`/`fuzzPrompt()` run, or call `loadFc()` before standalone use.
55
69
  */
56
70
  export function zodToArbitrary(schema) {
57
- return zodNodeToArbitrary(schema, 0);
71
+ return zodNodeToArbitrary(schema, new Set(), 0) ?? getFc().constant(null);
72
+ }
73
+ /**
74
+ * Expands one schema node, tracking the nodes on the current path so recursion
75
+ * is distinguished from finite nesting.
76
+ *
77
+ * Returns `undefined` when the node cannot yield a finite value — it re-enters
78
+ * itself, or nesting passed `MAX_SCHEMA_DEPTH`. Callers turn that into a
79
+ * schema-valid absence where one exists (`[]`, omitted optional, `null`), and
80
+ * propagate it otherwise, so a generated sample never carries an invalid value
81
+ * at an arbitrary position.
82
+ */
83
+ function zodNodeToArbitrary(schema, path, depth) {
84
+ if (depth > MAX_SCHEMA_DEPTH)
85
+ return;
86
+ if (typeof schema !== 'object' || schema === null)
87
+ return expandNode(schema, path, depth);
88
+ if (path.has(schema))
89
+ return;
90
+ path.add(schema);
91
+ try {
92
+ return expandNode(schema, path, depth);
93
+ }
94
+ finally {
95
+ path.delete(schema);
96
+ }
58
97
  }
59
- function zodNodeToArbitrary(schema, depth) {
98
+ function expandNode(schema, path, depth) {
60
99
  const f = getFc();
61
- if (depth > 6)
62
- return f.constant(null);
63
- // Unwrap wrappers — cast through any to avoid Zod 4 $ZodType vs ZodType mismatch
100
+ // Unwrap wrappers — cast through any to avoid Zod 4 $ZodType vs ZodType mismatch.
101
+ // A wrapper whose inner node cannot terminate collapses to the absence it permits.
64
102
  if (schema instanceof ZodOptional) {
65
- return f.option(zodNodeToArbitrary(schema.unwrap(), depth), { nil: undefined });
103
+ const inner = zodNodeToArbitrary(schema.unwrap(), path, depth);
104
+ return inner ? f.option(inner, { nil: undefined }) : f.constant(undefined);
66
105
  }
67
106
  if (schema instanceof ZodNullable) {
68
- return f.option(zodNodeToArbitrary(schema.unwrap(), depth), { nil: null });
107
+ const inner = zodNodeToArbitrary(schema.unwrap(), path, depth);
108
+ return inner ? f.option(inner, { nil: null }) : f.constant(null);
69
109
  }
70
110
  if (schema instanceof ZodDefault) {
71
- return f.option(zodNodeToArbitrary(schema.removeDefault(), depth), {
72
- nil: undefined,
73
- freq: 5,
74
- });
111
+ const inner = zodNodeToArbitrary(schema.removeDefault(), path, depth);
112
+ return inner ? f.option(inner, { nil: undefined, freq: 5 }) : f.constant(undefined);
75
113
  }
76
114
  // Primitives
77
115
  if (schema instanceof ZodString || zodTypeName(schema) === 'string') {
@@ -93,17 +131,20 @@ function zodNodeToArbitrary(schema, depth) {
93
131
  }
94
132
  // Array
95
133
  if (schema instanceof ZodArray) {
96
- const s = schema;
97
- const minLen = typeof s.minLength === 'number' ? s.minLength : 0;
98
- return f.array(zodNodeToArbitrary(s.element, depth + 1), {
99
- minLength: minLen,
100
- maxLength: Math.max(minLen, 5),
101
- });
134
+ const { minLength, maxLength } = arrayLengthBounds(schema);
135
+ const element = zodNodeToArbitrary(schema.element, path, depth + 1);
136
+ // A recursive element type terminates here — an empty array is the finite value.
137
+ if (!element)
138
+ return f.constant([]);
139
+ return f.array(element, { minLength, maxLength });
102
140
  }
103
141
  // Union
104
142
  if (schema instanceof ZodUnion) {
105
143
  const options = schema._def.options;
106
- return f.oneof(...options.map((o) => zodNodeToArbitrary(o, depth + 1)));
144
+ const arbs = options
145
+ .map((o) => zodNodeToArbitrary(o, path, depth + 1))
146
+ .filter((arb) => arb !== undefined);
147
+ return arbs.length > 0 ? f.oneof(...arbs) : undefined;
107
148
  }
108
149
  // Object — check by _def.type since instanceof ZodObject may have type issues
109
150
  if (zodTypeName(schema) === 'object') {
@@ -115,13 +156,46 @@ function zodNodeToArbitrary(schema, depth) {
115
156
  return f.constant({});
116
157
  const arbs = {};
117
158
  for (const [key, fieldSchema] of entries) {
118
- arbs[key] = zodNodeToArbitrary(fieldSchema, depth + 1);
159
+ const field = zodNodeToArbitrary(fieldSchema, path, depth + 1);
160
+ // An optional or nullable field already collapsed to its permitted absence,
161
+ // so reaching here means a required field cannot terminate.
162
+ if (!field)
163
+ return;
164
+ arbs[key] = field;
119
165
  }
120
166
  return f.record(arbs);
121
167
  }
122
168
  // Fallback: generate JSON-safe primitives
123
169
  return f.oneof(f.string(), f.integer(), f.boolean(), f.constant(null));
124
170
  }
171
+ /**
172
+ * Resolves an array's declared length bounds.
173
+ *
174
+ * Unlike ZodString, Zod 4's ZodArray exposes no `.minLength`/`.maxLength`
175
+ * accessors — `.min()`, `.max()`, `.length()`, and `.nonempty()` all land in
176
+ * `_def.checks`. Reading the absent accessor silently drops every one of them.
177
+ */
178
+ function arrayLengthBounds(schema) {
179
+ const checks = (schema?._def?.checks ?? []);
180
+ let min = 0;
181
+ let max;
182
+ for (const check of checks) {
183
+ const def = check?._zod?.def;
184
+ if (def?.check === 'min_length' && typeof def.minimum === 'number') {
185
+ min = Math.max(min, def.minimum);
186
+ }
187
+ else if (def?.check === 'max_length' && typeof def.maximum === 'number') {
188
+ max = max === undefined ? def.maximum : Math.min(max, def.maximum);
189
+ }
190
+ else if (def?.check === 'length_equals' && typeof def.length === 'number') {
191
+ min = Math.max(min, def.length);
192
+ max = max === undefined ? def.length : Math.min(max, def.length);
193
+ }
194
+ }
195
+ // An unsatisfiable schema (min above max) still has to yield an arbitrary
196
+ // rather than throw out of the generator; the sample is rejected at parse.
197
+ return { minLength: min, maxLength: Math.max(min, max ?? DEFAULT_ARRAY_MAX) };
198
+ }
125
199
  /**
126
200
  * Zod 4 exposes `.minLength`, `.maxLength`, `.format` as direct accessors on ZodString.
127
201
  */
@@ -275,6 +349,23 @@ function checkErrorLeaks(errorText) {
275
349
  /[A-Za-z]:\\/.test(errorText);
276
350
  return { leakedStack, leakedInternals };
277
351
  }
352
+ function recordHandlerError(report, input, error) {
353
+ if (!(error instanceof McpError)) {
354
+ report.crashes.push({ input, error });
355
+ return;
356
+ }
357
+ const leakCheck = checkErrorLeaks(error.message);
358
+ if (leakCheck.leakedStack || leakCheck.leakedInternals) {
359
+ report.leaks.push({ input, errorText: error.message });
360
+ }
361
+ }
362
+ function createToolFuzzContext(def, options, overrides = {}) {
363
+ return createMockContext({
364
+ ...options.ctx,
365
+ ...(def.errors !== undefined && { errors: def.errors }),
366
+ ...overrides,
367
+ });
368
+ }
278
369
  // ---------------------------------------------------------------------------
279
370
  // Prototype pollution detection
280
371
  // ---------------------------------------------------------------------------
@@ -301,7 +392,7 @@ function createProtoPollutionGuard() {
301
392
  * Designed to be called inside a `describe()` / `it()` block.
302
393
  *
303
394
  * Checks:
304
- * 1. Valid inputs -> handler runs without crash, output matches schema
395
+ * 1. Valid inputs -> handler returns schema-valid output or a well-formed MCP error
305
396
  * 2. Adversarial inputs -> Zod rejects or handler errors gracefully
306
397
  * 3. No prototype pollution on Object.prototype
307
398
  * 4. No stack trace / path leaks in error messages
@@ -346,20 +437,20 @@ export async function fuzzTool(def, options = {}) {
346
437
  const parsed = def.input.safeParse(raw);
347
438
  if (!parsed.success)
348
439
  return;
349
- const ctx = createMockContext(options.ctx);
440
+ const ctx = createToolFuzzContext(def, options);
350
441
  try {
351
442
  const result = await withTimeout(def.handler(parsed.data, ctx), timeout);
352
443
  def.output.parse(result);
353
444
  }
354
445
  catch (err) {
355
- report.crashes.push({ input: parsed.data, error: err });
446
+ recordHandlerError(report, parsed.data, err);
356
447
  }
357
448
  }), fcParams);
358
449
  // Phase 2: Adversarial inputs (should be caught by Zod or handler, never crash)
359
450
  const advArb = adversarialObjectArbitrary(def.input);
360
451
  await f.assert(f.asyncProperty(advArb, async (input) => {
361
452
  report.totalRuns++;
362
- const ctx = createMockContext(options.ctx);
453
+ const ctx = createToolFuzzContext(def, options);
363
454
  try {
364
455
  const validated = def.input.safeParse(input);
365
456
  if (!validated.success)
@@ -392,7 +483,7 @@ export async function fuzzTool(def, options = {}) {
392
483
  const validated = def.input.safeParse(input);
393
484
  if (!validated.success)
394
485
  continue;
395
- const ctx = createMockContext(options.ctx);
486
+ const ctx = createToolFuzzContext(def, options);
396
487
  await withTimeout(def.handler(validated.data, ctx), timeout);
397
488
  }
398
489
  catch {
@@ -404,7 +495,7 @@ export async function fuzzTool(def, options = {}) {
404
495
  try {
405
496
  const controller = new AbortController();
406
497
  controller.abort();
407
- const ctx = createMockContext({ ...options.ctx, signal: controller.signal });
498
+ const ctx = createToolFuzzContext(def, options, { signal: controller.signal });
408
499
  const rawSample = generateOne(validArb);
409
500
  const parsedSample = def.input.parse(rawSample);
410
501
  await withTimeout(def.handler(parsedSample, ctx), timeout);
@@ -460,7 +551,7 @@ export async function fuzzResource(def, options = {}) {
460
551
  await withTimeout(def.handler(parsed.data, ctx), timeout);
461
552
  }
462
553
  catch (err) {
463
- report.crashes.push({ input: parsed.data, error: err });
554
+ recordHandlerError(report, parsed.data, err);
464
555
  }
465
556
  }), fcParams);
466
557
  // Phase 2: Adversarial params
@@ -496,7 +587,7 @@ export async function fuzzResource(def, options = {}) {
496
587
  await withTimeout(def.handler({}, ctx), timeout);
497
588
  }
498
589
  catch (err) {
499
- report.crashes.push({ input: {}, error: err });
590
+ recordHandlerError(report, {}, err);
500
591
  }
501
592
  }
502
593
  protoGuard.check(report);
@@ -1 +1 @@
1
- {"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../src/testing/fuzz.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../src/testing/fuzz.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,10 @@
5
5
  * `createInMemoryStorage()` for unit-testing services in isolation.
6
6
  * @module src/testing/index
7
7
  */
8
- import type { ContentBlock, ElicitResult } from '@modelcontextprotocol/sdk/types.js';
8
+ import type { CallToolResult, ContentBlock, ElicitResult } from '@modelcontextprotocol/sdk/types.js';
9
9
  import type { z } from 'zod';
10
10
  import type { AuthContext, Context, ContextLogger } from '../core/context.js';
11
+ import type { AnyToolDefinition } from '../mcp-server/tools/utils/toolDefinition.js';
11
12
  import { StorageService } from '../storage/core/StorageService.js';
12
13
  import { type InMemoryProviderOptions } from '../storage/providers/inMemory/inMemoryProvider.js';
13
14
  import type { ErrorContract } from '../types-global/errors.js';
@@ -92,6 +93,30 @@ export declare function createMockLogger(): MockContextLogger;
92
93
  * ```
93
94
  */
94
95
  export declare function createMockContext(options?: MockContextOptions): Context;
96
+ /** A mock HTTP session and the handler context bound to it. */
97
+ export interface MockSession {
98
+ /** Context carrying this session's identity. Pass it directly to a handler. */
99
+ ctx: Context;
100
+ /** Session identifier exposed as `ctx.sessionId`. */
101
+ sessionId: string;
102
+ /** Optional tenant identifier exposed as `ctx.tenantId`. */
103
+ tenantId?: string;
104
+ }
105
+ /**
106
+ * Creates a handler context bound to a deterministic HTTP session.
107
+ *
108
+ * All {@link MockContextOptions} remain available, including `errors`,
109
+ * `signal`, and notification callbacks. The default session ID is stable so
110
+ * assertions do not depend on generated values.
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * const session = createMockSession({ tenantId: 'tenant-a' });
115
+ * const result = await myTool.handler(input, session.ctx);
116
+ * expect(session.ctx.sessionId).toBe('test-session-id');
117
+ * ```
118
+ */
119
+ export declare function createMockSession(options?: MockContextOptions): MockSession;
95
120
  /**
96
121
  * Reads the enrichment a handler accumulated via `ctx.enrich(...)` on a mock
97
122
  * context, for assertions. Returns the merged field values (empty object when
@@ -119,6 +144,91 @@ export declare function getEnrichment(ctx: Context): Record<string, unknown>;
119
144
  * ```
120
145
  */
121
146
  export declare function getContentBlocks(ctx: Context): ContentBlock[];
147
+ /** A request matcher used by {@link createFetchMock}. */
148
+ export type FetchMockMatcher = string | RegExp | ((request: Request) => boolean);
149
+ /** A response factory used by {@link createFetchMock}. */
150
+ export type FetchMockResponder = Response | ((request: Request) => Promise<Response> | Response);
151
+ /** One upstream route handled by a {@link FetchMockHarness}. */
152
+ export interface FetchMockRoute {
153
+ /** URL string, regular expression, or request predicate. */
154
+ match: FetchMockMatcher;
155
+ /** Optional HTTP method constraint. Compared case-insensitively. */
156
+ method?: string;
157
+ /** Remove the route after its first matching request. */
158
+ once?: boolean;
159
+ /** Static response (cloned per call) or response factory. */
160
+ respond: FetchMockResponder;
161
+ }
162
+ /** A captured upstream request and the route that matched it. */
163
+ export interface FetchMockCall {
164
+ /** Clone of the request, safe to inspect after the responder reads its body. */
165
+ request: Request;
166
+ /** The route selected for the request. */
167
+ route: FetchMockRoute;
168
+ }
169
+ /** Options for {@link createFetchMock}. */
170
+ export interface FetchMockOptions {
171
+ /** Optional fallback for unmatched requests. The default throws. */
172
+ onUnhandled?: (request: Request) => Promise<Response> | Response;
173
+ }
174
+ /**
175
+ * Stateful fetch fake for testing upstream HTTP boundaries without mocking
176
+ * server-owned services. Routes are evaluated in registration order.
177
+ */
178
+ export interface FetchMockHarness {
179
+ /** Captured requests in call order. */
180
+ readonly calls: readonly FetchMockCall[];
181
+ /** Fetch-compatible function for explicit dependency injection. */
182
+ fetch: typeof globalThis.fetch;
183
+ /** Install the harness as `globalThis.fetch`. Idempotent until restored. */
184
+ install(): void;
185
+ /** Drop all captured calls and registered routes. */
186
+ reset(): void;
187
+ /** Restore the fetch implementation captured by {@link install}. */
188
+ restore(): void;
189
+ /** Add one or more routes. */
190
+ route(...routes: FetchMockRoute[]): FetchMockHarness;
191
+ }
192
+ /**
193
+ * Creates a strict fetch/HTTP harness for upstream API tests.
194
+ *
195
+ * Unmatched requests throw by default, making accidental network access loud.
196
+ * Use `harness.fetch` as an injected dependency or call `install()` and
197
+ * `restore()` around code that reads `globalThis.fetch`.
198
+ *
199
+ * @example
200
+ * ```ts
201
+ * const http = createFetchMock([
202
+ * {
203
+ * method: 'GET',
204
+ * match: 'https://api.example.test/items/42',
205
+ * respond: Response.json({ id: '42', name: 'Example' }),
206
+ * },
207
+ * ]);
208
+ * http.install();
209
+ * try {
210
+ * await expect(loadItem('42')).resolves.toMatchObject({ id: '42' });
211
+ * expect(http.calls).toHaveLength(1);
212
+ * } finally {
213
+ * http.restore();
214
+ * }
215
+ * ```
216
+ */
217
+ export declare function createFetchMock(initialRoutes?: readonly FetchMockRoute[], options?: FetchMockOptions): FetchMockHarness;
218
+ /** Options for {@link runToolContract}. */
219
+ export interface RunToolContractOptions {
220
+ /** Context capabilities and identity supplied to the handler. */
221
+ context?: MockContextOptions;
222
+ }
223
+ /**
224
+ * Executes a tool definition through its public contract boundary.
225
+ *
226
+ * The runner validates input and output schemas, invokes the real handler,
227
+ * applies `format()`, enrichment, and collected content, and converts thrown
228
+ * values to the same dual-surface error envelope used by the production tool
229
+ * pipeline. It intentionally skips transport auth and telemetry.
230
+ */
231
+ export declare function runToolContract<TDefinition extends AnyToolDefinition>(definition: TDefinition, input: z.input<TDefinition['input']>, options?: RunToolContractOptions): Promise<CallToolResult>;
122
232
  /**
123
233
  * Build a real `StorageService` backed by an in-memory provider, suitable for
124
234
  * unit-testing services that accept a `StorageService` dependency.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,KAAK,EAAW,CAAC,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EACP,aAAa,EAId,MAAM,mBAAmB,CAAC;AAY3B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,2CAA2C;IAC3C,yBAAyB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,sCAAsC;IACtC,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,uCAAuC;IACvC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAMD,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAC9C,mFAAmF;IACnF,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CAiBpD;AAwGD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAqD3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,EAAE,CAE7D;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,cAAc,CAEvF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  * @module src/testing/index
7
7
  */
8
8
  import { attachTypedFail, createContentCollect, createContentStore, createEnrich, createEnrichmentStore, readContentStore, readEnrichmentStore, stashContentStore, stashEnrichmentStore, } from '../core/context.js';
9
+ import { buildToolSuccessResult, classifyAndBuildToolErrorResult, } from '../mcp-server/tools/utils/toolHandlerFactory.js';
9
10
  import { StorageService } from '../storage/core/StorageService.js';
10
11
  import { InMemoryProvider, } from '../storage/providers/inMemory/inMemoryProvider.js';
11
12
  /**
@@ -192,6 +193,29 @@ export function createMockContext(options = {}) {
192
193
  // contracts leave the no-op resolver in place.
193
194
  return attachTypedFail(ctx, options.errors);
194
195
  }
196
+ /**
197
+ * Creates a handler context bound to a deterministic HTTP session.
198
+ *
199
+ * All {@link MockContextOptions} remain available, including `errors`,
200
+ * `signal`, and notification callbacks. The default session ID is stable so
201
+ * assertions do not depend on generated values.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * const session = createMockSession({ tenantId: 'tenant-a' });
206
+ * const result = await myTool.handler(input, session.ctx);
207
+ * expect(session.ctx.sessionId).toBe('test-session-id');
208
+ * ```
209
+ */
210
+ export function createMockSession(options = {}) {
211
+ const sessionId = options.sessionId ?? 'test-session-id';
212
+ const ctx = createMockContext({ ...options, sessionId });
213
+ return {
214
+ ctx,
215
+ sessionId,
216
+ ...(options.tenantId !== undefined && { tenantId: options.tenantId }),
217
+ };
218
+ }
195
219
  /**
196
220
  * Reads the enrichment a handler accumulated via `ctx.enrich(...)` on a mock
197
221
  * context, for assertions. Returns the merged field values (empty object when
@@ -223,6 +247,121 @@ export function getEnrichment(ctx) {
223
247
  export function getContentBlocks(ctx) {
224
248
  return readContentStore(ctx)?.blocks ?? [];
225
249
  }
250
+ function matchesFetchRoute(route, request) {
251
+ if (route.method && route.method.toUpperCase() !== request.method.toUpperCase()) {
252
+ return false;
253
+ }
254
+ if (typeof route.match === 'string')
255
+ return request.url === route.match;
256
+ if (route.match instanceof RegExp) {
257
+ route.match.lastIndex = 0;
258
+ return route.match.test(request.url);
259
+ }
260
+ return route.match(request);
261
+ }
262
+ /**
263
+ * Creates a strict fetch/HTTP harness for upstream API tests.
264
+ *
265
+ * Unmatched requests throw by default, making accidental network access loud.
266
+ * Use `harness.fetch` as an injected dependency or call `install()` and
267
+ * `restore()` around code that reads `globalThis.fetch`.
268
+ *
269
+ * @example
270
+ * ```ts
271
+ * const http = createFetchMock([
272
+ * {
273
+ * method: 'GET',
274
+ * match: 'https://api.example.test/items/42',
275
+ * respond: Response.json({ id: '42', name: 'Example' }),
276
+ * },
277
+ * ]);
278
+ * http.install();
279
+ * try {
280
+ * await expect(loadItem('42')).resolves.toMatchObject({ id: '42' });
281
+ * expect(http.calls).toHaveLength(1);
282
+ * } finally {
283
+ * http.restore();
284
+ * }
285
+ * ```
286
+ */
287
+ export function createFetchMock(initialRoutes = [], options = {}) {
288
+ const routes = [...initialRoutes];
289
+ const calls = [];
290
+ let installedFetch;
291
+ const mockFetch = (input, init) => {
292
+ const request = new Request(input, init);
293
+ const route = routes.find((candidate) => matchesFetchRoute(candidate, request));
294
+ if (!route) {
295
+ if (options.onUnhandled)
296
+ return Promise.resolve(options.onUnhandled(request));
297
+ return Promise.reject(new Error(`Unhandled fetch request: ${request.method} ${request.url}`));
298
+ }
299
+ calls.push({ request: request.clone(), route });
300
+ if (route.once)
301
+ routes.splice(routes.indexOf(route), 1);
302
+ return Promise.resolve(route.respond instanceof Response ? route.respond.clone() : route.respond(request));
303
+ };
304
+ const harness = {
305
+ calls,
306
+ fetch: mockFetch,
307
+ install() {
308
+ if (installedFetch)
309
+ return;
310
+ installedFetch = globalThis.fetch;
311
+ globalThis.fetch = mockFetch;
312
+ },
313
+ reset() {
314
+ calls.length = 0;
315
+ routes.length = 0;
316
+ },
317
+ restore() {
318
+ if (!installedFetch)
319
+ return;
320
+ globalThis.fetch = installedFetch;
321
+ installedFetch = undefined;
322
+ },
323
+ route(...newRoutes) {
324
+ routes.push(...newRoutes);
325
+ return harness;
326
+ },
327
+ };
328
+ return harness;
329
+ }
330
+ /**
331
+ * Executes a tool definition through its public contract boundary.
332
+ *
333
+ * The runner validates input and output schemas, invokes the real handler,
334
+ * applies `format()`, enrichment, and collected content, and converts thrown
335
+ * values to the same dual-surface error envelope used by the production tool
336
+ * pipeline. It intentionally skips transport auth and telemetry.
337
+ */
338
+ export async function runToolContract(definition, input, options = {}) {
339
+ const ctx = createMockContext({
340
+ ...options.context,
341
+ ...(definition.errors && { errors: definition.errors }),
342
+ });
343
+ try {
344
+ const validatedInput = definition.input.parse(input);
345
+ const output = await definition.handler(validatedInput, ctx);
346
+ const validatedOutput = definition.output.parse(output);
347
+ let content;
348
+ try {
349
+ content = definition.format
350
+ ? definition.format(validatedOutput)
351
+ : [{ type: 'text', text: JSON.stringify(validatedOutput, null, 2) }];
352
+ }
353
+ catch (error) {
354
+ throw new Error(`Output formatting failed: ${error instanceof Error ? error.message : String(error)}`);
355
+ }
356
+ const collected = getContentBlocks(ctx);
357
+ if (collected.length > 0)
358
+ content = [...collected, ...content];
359
+ return buildToolSuccessResult(definition, ctx, validatedOutput, content);
360
+ }
361
+ catch (error) {
362
+ return classifyAndBuildToolErrorResult(error);
363
+ }
364
+ }
226
365
  // ---------------------------------------------------------------------------
227
366
  // Storage helpers
228
367
  // ---------------------------------------------------------------------------