@cyanheads/mcp-ts-core 0.1.28 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +19 -1
- package/README.md +18 -1
- package/biome.json +10 -0
- package/dist/linter/rules/tool-rules.js +10 -22
- package/dist/linter/rules/tool-rules.js.map +1 -1
- package/dist/testing/fuzz.d.ts +109 -0
- package/dist/testing/fuzz.d.ts.map +1 -0
- package/dist/testing/fuzz.js +558 -0
- package/dist/testing/fuzz.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/network/retry.d.ts +83 -0
- package/dist/utils/network/retry.d.ts.map +1 -0
- package/dist/utils/network/retry.js +152 -0
- package/dist/utils/network/retry.js.map +1 -0
- package/package.json +7 -3
- package/skills/add-service/SKILL.md +53 -0
- package/skills/api-utils/SKILL.md +1 -0
- package/skills/design-mcp-server/SKILL.md +37 -1
- package/skills/polish-docs-meta/SKILL.md +32 -8
- package/skills/report-issue-framework/SKILL.md +231 -0
- package/skills/report-issue-local/SKILL.md +225 -0
- package/skills/setup/SKILL.md +1 -0
- package/templates/.github/ISSUE_TEMPLATE/bug_report.yml +106 -0
- package/templates/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/templates/.github/ISSUE_TEMPLATE/feature_request.yml +36 -0
- package/templates/CLAUDE.md +2 -0
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Schema-aware fuzz testing utilities for MCP definitions.
|
|
3
|
+
* Generates valid, near-miss, and adversarial inputs from Zod schemas,
|
|
4
|
+
* then asserts handler invariants (no crashes, well-formed errors, etc.).
|
|
5
|
+
*
|
|
6
|
+
* Uses `fast-check` for property-based generation. Consumers use
|
|
7
|
+
* `fuzzTool()`, `fuzzResource()`, and `fuzzPrompt()` in their Vitest suites.
|
|
8
|
+
*
|
|
9
|
+
* @module src/testing/fuzz
|
|
10
|
+
*/
|
|
11
|
+
import fc from 'fast-check';
|
|
12
|
+
import { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodLiteral, ZodNullable, ZodNumber, ZodOptional, ZodString, ZodUnion, } from 'zod';
|
|
13
|
+
import { createMockContext } from './index.js';
|
|
14
|
+
const DEFAULTS = {
|
|
15
|
+
numRuns: 50,
|
|
16
|
+
numAdversarial: 30,
|
|
17
|
+
timeout: 5000,
|
|
18
|
+
};
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Zod type introspection (Zod 4 compatible)
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/**
|
|
23
|
+
* Returns the internal Zod type discriminator string.
|
|
24
|
+
* Zod 4 uses `_def.type` (e.g. 'string', 'object', 'optional').
|
|
25
|
+
*/
|
|
26
|
+
function zodTypeName(schema) {
|
|
27
|
+
return schema?._def?.type ?? '';
|
|
28
|
+
}
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Zod → fast-check arbitrary generation
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Converts a Zod schema to a fast-check `Arbitrary` that produces valid values.
|
|
34
|
+
* Supports the JSON-Schema-serializable subset used by MCP tool/resource schemas.
|
|
35
|
+
*/
|
|
36
|
+
export function zodToArbitrary(schema) {
|
|
37
|
+
return zodNodeToArbitrary(schema, 0);
|
|
38
|
+
}
|
|
39
|
+
function zodNodeToArbitrary(schema, depth) {
|
|
40
|
+
if (depth > 6)
|
|
41
|
+
return fc.constant(null);
|
|
42
|
+
// Unwrap wrappers — cast through any to avoid Zod 4 $ZodType vs ZodType mismatch
|
|
43
|
+
if (schema instanceof ZodOptional) {
|
|
44
|
+
return fc.option(zodNodeToArbitrary(schema.unwrap(), depth), { nil: undefined });
|
|
45
|
+
}
|
|
46
|
+
if (schema instanceof ZodNullable) {
|
|
47
|
+
return fc.option(zodNodeToArbitrary(schema.unwrap(), depth), { nil: null });
|
|
48
|
+
}
|
|
49
|
+
if (schema instanceof ZodDefault) {
|
|
50
|
+
return fc.option(zodNodeToArbitrary(schema.removeDefault(), depth), {
|
|
51
|
+
nil: undefined,
|
|
52
|
+
freq: 5,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Primitives
|
|
56
|
+
if (schema instanceof ZodString) {
|
|
57
|
+
return arbitraryForZodString(schema);
|
|
58
|
+
}
|
|
59
|
+
if (schema instanceof ZodNumber) {
|
|
60
|
+
return arbitraryForZodNumber(schema);
|
|
61
|
+
}
|
|
62
|
+
if (schema instanceof ZodBoolean) {
|
|
63
|
+
return fc.boolean();
|
|
64
|
+
}
|
|
65
|
+
// Enum / literal
|
|
66
|
+
if (schema instanceof ZodEnum) {
|
|
67
|
+
const values = schema.options;
|
|
68
|
+
return fc.constantFrom(...values);
|
|
69
|
+
}
|
|
70
|
+
if (schema instanceof ZodLiteral) {
|
|
71
|
+
return fc.constant(schema.value);
|
|
72
|
+
}
|
|
73
|
+
// Array
|
|
74
|
+
if (schema instanceof ZodArray) {
|
|
75
|
+
return fc.array(zodNodeToArbitrary(schema.element, depth + 1), { maxLength: 5 });
|
|
76
|
+
}
|
|
77
|
+
// Union
|
|
78
|
+
if (schema instanceof ZodUnion) {
|
|
79
|
+
const options = schema._def.options;
|
|
80
|
+
return fc.oneof(...options.map((o) => zodNodeToArbitrary(o, depth + 1)));
|
|
81
|
+
}
|
|
82
|
+
// Object — check by _def.type since instanceof ZodObject may have type issues
|
|
83
|
+
if (zodTypeName(schema) === 'object') {
|
|
84
|
+
const shape = schema.shape;
|
|
85
|
+
if (!shape)
|
|
86
|
+
return fc.constant({});
|
|
87
|
+
const entries = Object.entries(shape);
|
|
88
|
+
if (entries.length === 0)
|
|
89
|
+
return fc.constant({});
|
|
90
|
+
const arbs = {};
|
|
91
|
+
for (const [key, fieldSchema] of entries) {
|
|
92
|
+
arbs[key] = zodNodeToArbitrary(fieldSchema, depth + 1);
|
|
93
|
+
}
|
|
94
|
+
return fc.record(arbs);
|
|
95
|
+
}
|
|
96
|
+
// Fallback: generate JSON-safe primitives
|
|
97
|
+
return fc.oneof(fc.string(), fc.integer(), fc.boolean(), fc.constant(null));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Zod 4 exposes `.minLength`, `.maxLength`, `.format` as direct accessors on ZodString.
|
|
101
|
+
*/
|
|
102
|
+
function arbitraryForZodString(schema) {
|
|
103
|
+
const s = schema;
|
|
104
|
+
const format = s.format;
|
|
105
|
+
if (format === 'email') {
|
|
106
|
+
// fc.emailAddress() can produce emails Zod 4 rejects (e.g. "!a@a.aa").
|
|
107
|
+
// Generate simple, spec-safe emails instead.
|
|
108
|
+
return fc
|
|
109
|
+
.tuple(fc.stringMatching(/^[a-z][a-z0-9]{0,10}$/), fc.stringMatching(/^[a-z]{2,8}\.[a-z]{2,4}$/))
|
|
110
|
+
.map(([local, domain]) => `${local}@${domain}`);
|
|
111
|
+
}
|
|
112
|
+
if (format === 'url' || format === 'uri')
|
|
113
|
+
return fc.webUrl();
|
|
114
|
+
if (format === 'uuid')
|
|
115
|
+
return fc.uuid();
|
|
116
|
+
const minLen = typeof s.minLength === 'number' ? s.minLength : 0;
|
|
117
|
+
const maxLen = typeof s.maxLength === 'number' ? s.maxLength : 200;
|
|
118
|
+
return fc.string({ minLength: minLen, maxLength: Math.max(minLen, maxLen) });
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Zod 4 exposes `.minValue`, `.maxValue`, `.isInt`, `.isFinite` as direct accessors.
|
|
122
|
+
* Zod 4 defaults to `isFinite: true`, rejecting Infinity/NaN — respect that.
|
|
123
|
+
*/
|
|
124
|
+
function arbitraryForZodNumber(schema) {
|
|
125
|
+
const s = schema;
|
|
126
|
+
const isFiniteNum = s.isFinite !== false;
|
|
127
|
+
const rawMin = typeof s.minValue === 'number' ? s.minValue : -1_000_000;
|
|
128
|
+
const rawMax = typeof s.maxValue === 'number' ? s.maxValue : 1_000_000;
|
|
129
|
+
const min = isFiniteNum && !Number.isFinite(rawMin) ? -1_000_000 : rawMin;
|
|
130
|
+
const max = isFiniteNum && !Number.isFinite(rawMax) ? 1_000_000 : rawMax;
|
|
131
|
+
const isInt = s.isInt === true;
|
|
132
|
+
return isInt
|
|
133
|
+
? fc.integer({ min, max })
|
|
134
|
+
: fc.double({ min, max, noNaN: true, noDefaultInfinity: true });
|
|
135
|
+
}
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
// Adversarial input generators
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
/** Strings designed to trigger injection, encoding, or parsing vulnerabilities. */
|
|
140
|
+
export const ADVERSARIAL_STRINGS = [
|
|
141
|
+
// Prototype pollution
|
|
142
|
+
'__proto__',
|
|
143
|
+
'constructor',
|
|
144
|
+
'prototype',
|
|
145
|
+
'{"__proto__":{"polluted":true}}',
|
|
146
|
+
'{"constructor":{"prototype":{"polluted":true}}}',
|
|
147
|
+
// Script injection
|
|
148
|
+
'<script>alert(1)</script>',
|
|
149
|
+
'<img onerror=alert(1) src=x>',
|
|
150
|
+
'javascript:alert(1)',
|
|
151
|
+
'<svg/onload=alert(1)>',
|
|
152
|
+
// SQL injection
|
|
153
|
+
"'; DROP TABLE users; --",
|
|
154
|
+
"' OR '1'='1",
|
|
155
|
+
'1; SELECT * FROM information_schema.tables',
|
|
156
|
+
// Command injection
|
|
157
|
+
'; rm -rf /',
|
|
158
|
+
'$(cat /etc/passwd)',
|
|
159
|
+
'`whoami`',
|
|
160
|
+
'| ls -la',
|
|
161
|
+
// Path traversal
|
|
162
|
+
'../../../etc/passwd',
|
|
163
|
+
'..\\..\\..\\windows\\system32\\config\\sam',
|
|
164
|
+
'%2e%2e%2f%2e%2e%2f',
|
|
165
|
+
// Encoding attacks
|
|
166
|
+
'\0',
|
|
167
|
+
'\x00',
|
|
168
|
+
'\uFEFF',
|
|
169
|
+
'\uD800',
|
|
170
|
+
'\uDBFF\uDFFF',
|
|
171
|
+
// Format string
|
|
172
|
+
'%s%s%s%s%s',
|
|
173
|
+
'%x%x%x%x',
|
|
174
|
+
'%n%n%n%n',
|
|
175
|
+
// Oversized
|
|
176
|
+
'A'.repeat(10_000),
|
|
177
|
+
'A'.repeat(100_000),
|
|
178
|
+
// Template injection
|
|
179
|
+
'{{7*7}}',
|
|
180
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: adversarial test string
|
|
181
|
+
'${7*7}',
|
|
182
|
+
'#{7*7}',
|
|
183
|
+
// JSON edge cases
|
|
184
|
+
'{"a":{"b":{"c":{"d":{"e":{"f":{"g":"deep"}}}}}}}',
|
|
185
|
+
'[]',
|
|
186
|
+
'null',
|
|
187
|
+
'undefined',
|
|
188
|
+
'NaN',
|
|
189
|
+
'Infinity',
|
|
190
|
+
'-Infinity',
|
|
191
|
+
'',
|
|
192
|
+
' ',
|
|
193
|
+
'\n',
|
|
194
|
+
'\t',
|
|
195
|
+
'\r\n',
|
|
196
|
+
];
|
|
197
|
+
/** Generates adversarial values for object fields based on expected type. */
|
|
198
|
+
export function adversarialArbitrary() {
|
|
199
|
+
return fc.oneof(
|
|
200
|
+
// Wrong types
|
|
201
|
+
fc.constant(null), fc.constant(undefined), fc.constant(true), fc.constant(false), fc.constant(0), fc.constant(-1), fc.constant(Number.MAX_SAFE_INTEGER), fc.constant(Number.MIN_SAFE_INTEGER), fc.constant(NaN), fc.constant(Infinity), fc.constant(-Infinity), fc.constant(''), fc.constantFrom(...ADVERSARIAL_STRINGS),
|
|
202
|
+
// Arrays where objects expected (and vice versa)
|
|
203
|
+
fc.constant([]), fc.constant([1, 2, 3]), fc.constant({}),
|
|
204
|
+
// Prototype pollution objects
|
|
205
|
+
fc.constant({ __proto__: { polluted: true } }), fc.constant({ constructor: { prototype: { polluted: true } } }),
|
|
206
|
+
// Deeply nested
|
|
207
|
+
fc.constant(buildDeepObject(20)),
|
|
208
|
+
// Circular-safe deep object
|
|
209
|
+
fc.constant(buildWideObject(100)));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Generates an adversarial variant of a Zod object schema's input.
|
|
213
|
+
* Produces objects that match the key structure but have wrong-type values.
|
|
214
|
+
*/
|
|
215
|
+
export function adversarialObjectArbitrary(schema) {
|
|
216
|
+
const shape = schema.shape;
|
|
217
|
+
const keys = shape ? Object.keys(shape) : [];
|
|
218
|
+
if (keys.length === 0) {
|
|
219
|
+
return adversarialArbitrary();
|
|
220
|
+
}
|
|
221
|
+
return fc.record(Object.fromEntries(keys.map((k) => [k, adversarialArbitrary()])));
|
|
222
|
+
}
|
|
223
|
+
function buildDeepObject(depth) {
|
|
224
|
+
let obj = { value: 'leaf' };
|
|
225
|
+
for (let i = 0; i < depth; i++) {
|
|
226
|
+
obj = { nested: obj };
|
|
227
|
+
}
|
|
228
|
+
return obj;
|
|
229
|
+
}
|
|
230
|
+
function buildWideObject(width) {
|
|
231
|
+
const obj = {};
|
|
232
|
+
for (let i = 0; i < width; i++) {
|
|
233
|
+
obj[`key_${i}`] = `value_${i}`;
|
|
234
|
+
}
|
|
235
|
+
return obj;
|
|
236
|
+
}
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
// Leak detection
|
|
239
|
+
// ---------------------------------------------------------------------------
|
|
240
|
+
function checkErrorLeaks(errorText) {
|
|
241
|
+
const leakedStack = /\bat\s+\S+\s+\(/.test(errorText) || /node_modules/.test(errorText);
|
|
242
|
+
const leakedInternals = /process\.env/.test(errorText) ||
|
|
243
|
+
/\/Users\//.test(errorText) ||
|
|
244
|
+
/\/home\//.test(errorText) ||
|
|
245
|
+
/[A-Za-z]:\\/.test(errorText);
|
|
246
|
+
return { leakedStack, leakedInternals };
|
|
247
|
+
}
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// Prototype pollution detection
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
/** Snapshot Object.prototype keys, returns a checker that detects and cleans pollution. */
|
|
252
|
+
function createProtoPollutionGuard() {
|
|
253
|
+
const before = new Set(Object.keys(Object.prototype));
|
|
254
|
+
return {
|
|
255
|
+
before,
|
|
256
|
+
check(report) {
|
|
257
|
+
for (const key of Object.keys(Object.prototype)) {
|
|
258
|
+
if (!before.has(key)) {
|
|
259
|
+
report.prototypePollution = true;
|
|
260
|
+
delete Object.prototype[key];
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
// fuzzTool
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
/**
|
|
270
|
+
* Fuzz-tests a tool definition's handler with valid and adversarial inputs.
|
|
271
|
+
* Designed to be called inside a `describe()` / `it()` block.
|
|
272
|
+
*
|
|
273
|
+
* Checks:
|
|
274
|
+
* 1. Valid inputs -> handler runs without crash, output matches schema
|
|
275
|
+
* 2. Adversarial inputs -> Zod rejects or handler errors gracefully
|
|
276
|
+
* 3. No prototype pollution on Object.prototype
|
|
277
|
+
* 4. No stack trace / path leaks in error messages
|
|
278
|
+
* 5. Aborted signals -> handler doesn't hang
|
|
279
|
+
*
|
|
280
|
+
* @returns FuzzReport for additional custom assertions.
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```ts
|
|
284
|
+
* import { fuzzTool } from '@cyanheads/mcp-ts-core/testing/fuzz';
|
|
285
|
+
*
|
|
286
|
+
* describe('myTool fuzz', () => {
|
|
287
|
+
* it('survives fuzz testing', async () => {
|
|
288
|
+
* const report = await fuzzTool(myTool, { numRuns: 100 });
|
|
289
|
+
* expect(report.crashes).toHaveLength(0);
|
|
290
|
+
* expect(report.leaks).toHaveLength(0);
|
|
291
|
+
* expect(report.prototypePollution).toBe(false);
|
|
292
|
+
* });
|
|
293
|
+
* });
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
export async function fuzzTool(def, options = {}) {
|
|
297
|
+
const numRuns = options.numRuns ?? DEFAULTS.numRuns;
|
|
298
|
+
const numAdversarial = options.numAdversarial ?? DEFAULTS.numAdversarial;
|
|
299
|
+
const timeout = options.timeout ?? DEFAULTS.timeout;
|
|
300
|
+
const fcParams = {
|
|
301
|
+
numRuns,
|
|
302
|
+
...(options.seed !== undefined && { seed: options.seed }),
|
|
303
|
+
};
|
|
304
|
+
const report = {
|
|
305
|
+
totalRuns: 0,
|
|
306
|
+
crashes: [],
|
|
307
|
+
leaks: [],
|
|
308
|
+
prototypePollution: false,
|
|
309
|
+
};
|
|
310
|
+
const protoGuard = createProtoPollutionGuard();
|
|
311
|
+
// Phase 1: Valid inputs
|
|
312
|
+
const validArb = zodToArbitrary(def.input);
|
|
313
|
+
await fc.assert(fc.asyncProperty(validArb, async (input) => {
|
|
314
|
+
report.totalRuns++;
|
|
315
|
+
const ctx = createMockContext(options.ctx);
|
|
316
|
+
try {
|
|
317
|
+
const result = await withTimeout(def.handler(input, ctx), timeout);
|
|
318
|
+
def.output.parse(result);
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
report.crashes.push({ input, error: err });
|
|
322
|
+
}
|
|
323
|
+
}), fcParams);
|
|
324
|
+
// Phase 2: Adversarial inputs (should be caught by Zod or handler, never crash)
|
|
325
|
+
const advArb = adversarialObjectArbitrary(def.input);
|
|
326
|
+
await fc.assert(fc.asyncProperty(advArb, async (input) => {
|
|
327
|
+
report.totalRuns++;
|
|
328
|
+
const ctx = createMockContext(options.ctx);
|
|
329
|
+
try {
|
|
330
|
+
const validated = def.input.safeParse(input);
|
|
331
|
+
if (!validated.success)
|
|
332
|
+
return;
|
|
333
|
+
const result = await withTimeout(def.handler(validated.data, ctx), timeout);
|
|
334
|
+
def.output.parse(result);
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
338
|
+
const leakCheck = checkErrorLeaks(msg);
|
|
339
|
+
if (leakCheck.leakedStack || leakCheck.leakedInternals) {
|
|
340
|
+
report.leaks.push({ input, errorText: msg });
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}), { ...fcParams, numRuns: numAdversarial });
|
|
344
|
+
// Phase 3: Raw adversarial (completely wrong types at the top level)
|
|
345
|
+
const rawAdversarial = [
|
|
346
|
+
null,
|
|
347
|
+
undefined,
|
|
348
|
+
42,
|
|
349
|
+
'string',
|
|
350
|
+
true,
|
|
351
|
+
[],
|
|
352
|
+
{ __proto__: { polluted: true } },
|
|
353
|
+
{ constructor: { prototype: { polluted: true } } },
|
|
354
|
+
];
|
|
355
|
+
for (const input of rawAdversarial) {
|
|
356
|
+
report.totalRuns++;
|
|
357
|
+
try {
|
|
358
|
+
const validated = def.input.safeParse(input);
|
|
359
|
+
if (!validated.success)
|
|
360
|
+
continue;
|
|
361
|
+
const ctx = createMockContext(options.ctx);
|
|
362
|
+
await withTimeout(def.handler(validated.data, ctx), timeout);
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// Expected
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// Phase 4: Aborted signal
|
|
369
|
+
report.totalRuns++;
|
|
370
|
+
try {
|
|
371
|
+
const controller = new AbortController();
|
|
372
|
+
controller.abort();
|
|
373
|
+
const ctx = createMockContext({ ...options.ctx, signal: controller.signal });
|
|
374
|
+
const validSample = generateOne(validArb);
|
|
375
|
+
await withTimeout(def.handler(validSample, ctx), timeout);
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
// Expected
|
|
379
|
+
}
|
|
380
|
+
protoGuard.check(report);
|
|
381
|
+
return report;
|
|
382
|
+
}
|
|
383
|
+
// ---------------------------------------------------------------------------
|
|
384
|
+
// fuzzResource
|
|
385
|
+
// ---------------------------------------------------------------------------
|
|
386
|
+
/**
|
|
387
|
+
* Fuzz-tests a resource definition's handler with valid and adversarial params.
|
|
388
|
+
*
|
|
389
|
+
* @example
|
|
390
|
+
* ```ts
|
|
391
|
+
* const report = await fuzzResource(myResource, { numRuns: 50 });
|
|
392
|
+
* expect(report.crashes).toHaveLength(0);
|
|
393
|
+
* ```
|
|
394
|
+
*/
|
|
395
|
+
export async function fuzzResource(def, options = {}) {
|
|
396
|
+
const numRuns = options.numRuns ?? DEFAULTS.numRuns;
|
|
397
|
+
const numAdversarial = options.numAdversarial ?? DEFAULTS.numAdversarial;
|
|
398
|
+
const timeout = options.timeout ?? DEFAULTS.timeout;
|
|
399
|
+
const fcParams = {
|
|
400
|
+
numRuns,
|
|
401
|
+
...(options.seed !== undefined && { seed: options.seed }),
|
|
402
|
+
};
|
|
403
|
+
const report = {
|
|
404
|
+
totalRuns: 0,
|
|
405
|
+
crashes: [],
|
|
406
|
+
leaks: [],
|
|
407
|
+
prototypePollution: false,
|
|
408
|
+
};
|
|
409
|
+
const protoGuard = createProtoPollutionGuard();
|
|
410
|
+
const paramsSchema = def.params;
|
|
411
|
+
if (paramsSchema) {
|
|
412
|
+
// Phase 1: Valid params
|
|
413
|
+
const validArb = zodToArbitrary(paramsSchema);
|
|
414
|
+
await fc.assert(fc.asyncProperty(validArb, async (params) => {
|
|
415
|
+
report.totalRuns++;
|
|
416
|
+
const ctx = createMockContext({
|
|
417
|
+
...options.ctx,
|
|
418
|
+
uri: new URL(`fuzz://test/${encodeURIComponent(JSON.stringify(params))}`),
|
|
419
|
+
});
|
|
420
|
+
try {
|
|
421
|
+
await withTimeout(def.handler(params, ctx), timeout);
|
|
422
|
+
}
|
|
423
|
+
catch (err) {
|
|
424
|
+
report.crashes.push({ input: params, error: err });
|
|
425
|
+
}
|
|
426
|
+
}), fcParams);
|
|
427
|
+
// Phase 2: Adversarial params
|
|
428
|
+
const advArb = adversarialObjectArbitrary(paramsSchema);
|
|
429
|
+
await fc.assert(fc.asyncProperty(advArb, async (params) => {
|
|
430
|
+
report.totalRuns++;
|
|
431
|
+
const ctx = createMockContext({
|
|
432
|
+
...options.ctx,
|
|
433
|
+
uri: new URL('fuzz://test/adversarial'),
|
|
434
|
+
});
|
|
435
|
+
try {
|
|
436
|
+
const validated = paramsSchema.safeParse(params);
|
|
437
|
+
if (!validated.success)
|
|
438
|
+
return;
|
|
439
|
+
await withTimeout(def.handler(validated.data, ctx), timeout);
|
|
440
|
+
}
|
|
441
|
+
catch (err) {
|
|
442
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
443
|
+
const leakCheck = checkErrorLeaks(msg);
|
|
444
|
+
if (leakCheck.leakedStack || leakCheck.leakedInternals) {
|
|
445
|
+
report.leaks.push({ input: params, errorText: msg });
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}), { ...fcParams, numRuns: numAdversarial });
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
report.totalRuns++;
|
|
452
|
+
const ctx = createMockContext({
|
|
453
|
+
...options.ctx,
|
|
454
|
+
uri: new URL('fuzz://test/no-params'),
|
|
455
|
+
});
|
|
456
|
+
try {
|
|
457
|
+
await withTimeout(def.handler({}, ctx), timeout);
|
|
458
|
+
}
|
|
459
|
+
catch (err) {
|
|
460
|
+
report.crashes.push({ input: {}, error: err });
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
protoGuard.check(report);
|
|
464
|
+
return report;
|
|
465
|
+
}
|
|
466
|
+
// ---------------------------------------------------------------------------
|
|
467
|
+
// fuzzPrompt
|
|
468
|
+
// ---------------------------------------------------------------------------
|
|
469
|
+
/**
|
|
470
|
+
* Fuzz-tests a prompt definition's `generate()` with valid and adversarial args.
|
|
471
|
+
*
|
|
472
|
+
* @example
|
|
473
|
+
* ```ts
|
|
474
|
+
* const report = await fuzzPrompt(myPrompt, { numRuns: 50 });
|
|
475
|
+
* expect(report.crashes).toHaveLength(0);
|
|
476
|
+
* ```
|
|
477
|
+
*/
|
|
478
|
+
export async function fuzzPrompt(def, options = {}) {
|
|
479
|
+
const numRuns = options.numRuns ?? DEFAULTS.numRuns;
|
|
480
|
+
const numAdversarial = options.numAdversarial ?? DEFAULTS.numAdversarial;
|
|
481
|
+
const timeout = options.timeout ?? DEFAULTS.timeout;
|
|
482
|
+
const fcParams = {
|
|
483
|
+
numRuns,
|
|
484
|
+
...(options.seed !== undefined && { seed: options.seed }),
|
|
485
|
+
};
|
|
486
|
+
const report = {
|
|
487
|
+
totalRuns: 0,
|
|
488
|
+
crashes: [],
|
|
489
|
+
leaks: [],
|
|
490
|
+
prototypePollution: false,
|
|
491
|
+
};
|
|
492
|
+
const protoGuard = createProtoPollutionGuard();
|
|
493
|
+
const argsSchema = def.args;
|
|
494
|
+
if (argsSchema) {
|
|
495
|
+
const validArb = zodToArbitrary(argsSchema);
|
|
496
|
+
await fc.assert(fc.asyncProperty(validArb, async (args) => {
|
|
497
|
+
report.totalRuns++;
|
|
498
|
+
try {
|
|
499
|
+
const messages = await withTimeout(def.generate(args), timeout);
|
|
500
|
+
if (!Array.isArray(messages)) {
|
|
501
|
+
report.crashes.push({
|
|
502
|
+
input: args,
|
|
503
|
+
error: new Error('generate() did not return array'),
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
catch (err) {
|
|
508
|
+
report.crashes.push({ input: args, error: err });
|
|
509
|
+
}
|
|
510
|
+
}), fcParams);
|
|
511
|
+
const advArb = adversarialObjectArbitrary(argsSchema);
|
|
512
|
+
await fc.assert(fc.asyncProperty(advArb, async (args) => {
|
|
513
|
+
report.totalRuns++;
|
|
514
|
+
try {
|
|
515
|
+
const validated = argsSchema.safeParse(args);
|
|
516
|
+
if (!validated.success)
|
|
517
|
+
return;
|
|
518
|
+
await withTimeout(def.generate(validated.data), timeout);
|
|
519
|
+
}
|
|
520
|
+
catch {
|
|
521
|
+
// Expected
|
|
522
|
+
}
|
|
523
|
+
}), { ...fcParams, numRuns: numAdversarial });
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
report.totalRuns++;
|
|
527
|
+
try {
|
|
528
|
+
const messages = await withTimeout(def.generate({}), timeout);
|
|
529
|
+
if (!Array.isArray(messages)) {
|
|
530
|
+
report.crashes.push({ input: {}, error: new Error('generate() did not return array') });
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
catch (err) {
|
|
534
|
+
report.crashes.push({ input: {}, error: err });
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
protoGuard.check(report);
|
|
538
|
+
return report;
|
|
539
|
+
}
|
|
540
|
+
// ---------------------------------------------------------------------------
|
|
541
|
+
// Helpers
|
|
542
|
+
// ---------------------------------------------------------------------------
|
|
543
|
+
function withTimeout(promise, ms) {
|
|
544
|
+
return Promise.race([
|
|
545
|
+
Promise.resolve(promise),
|
|
546
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Fuzz timeout after ${ms}ms`)), ms)),
|
|
547
|
+
]);
|
|
548
|
+
}
|
|
549
|
+
function generateOne(arb) {
|
|
550
|
+
let value;
|
|
551
|
+
fc.assert(fc.property(arb, (v) => {
|
|
552
|
+
value = v;
|
|
553
|
+
return false; // Stop after first
|
|
554
|
+
}), { numRuns: 1, endOnFailure: true });
|
|
555
|
+
// biome-ignore lint/style/noNonNullAssertion: guaranteed set by fc.assert with numRuns:1
|
|
556
|
+
return value;
|
|
557
|
+
}
|
|
558
|
+
//# sourceMappingURL=fuzz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../src/testing/fuzz.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export { type AuthContext, type CreateRequestContextParams, type RequestContext,
|
|
|
11
11
|
export { type RuntimeCapabilities, runtimeCaps } from './internal/runtime.js';
|
|
12
12
|
export { type ChatMessage, countChatTokens, countTokens, type ModelHeuristics, } from './metrics/tokenCounter.js';
|
|
13
13
|
export { type FetchWithTimeoutOptions, fetchWithTimeout } from './network/fetchWithTimeout.js';
|
|
14
|
+
export { type RetryOptions, withRetry } from './network/retry.js';
|
|
14
15
|
export { DEFAULT_PAGINATION_CONFIG, decodeCursor, encodeCursor, extractCursor, type PaginatedResult, type PaginationState, paginateArray, } from './pagination/pagination.js';
|
|
15
16
|
export { type AddPageOptions, Allow, CsvParser, csvParser, type DrawImageOptions, type DrawTextOptions, dateParser, type EmbedImageOptions, type ExtractTextOptions, type ExtractTextResult, type FillFormOptions, FrontmatterParser, type FrontmatterResult, frontmatterParser, JsonParser, jsonParser, type PageRange, type PdfMetadata, PdfParser, parseDateString, parseDateStringDetailed, pdfParser, type SetMetadataOptions, thinkBlockRegex, XmlParser, xmlParser, YamlParser, yamlParser, } from './parsing/index.js';
|
|
16
17
|
export { type Job, SchedulerService, schedulerService } from './scheduling/scheduler.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,aAAa,EACb,KAAK,oBAAoB,EACzB,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,cAAc,EACd,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7F,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,YAAY,GACb,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,KAAK,mBAAmB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE9E,OAAO,EACL,KAAK,WAAW,EAChB,eAAe,EACf,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,KAAK,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export { runtimeCaps } from './internal/runtime.js';
|
|
|
18
18
|
export { countChatTokens, countTokens, } from './metrics/tokenCounter.js';
|
|
19
19
|
// Network
|
|
20
20
|
export { fetchWithTimeout } from './network/fetchWithTimeout.js';
|
|
21
|
+
export { withRetry } from './network/retry.js';
|
|
21
22
|
// Pagination
|
|
22
23
|
export { DEFAULT_PAGINATION_CONFIG, decodeCursor, encodeCursor, extractCursor, paginateArray, } from './pagination/pagination.js';
|
|
23
24
|
// Parsing
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|