callman-mcp 0.7.0 → 0.8.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/CHANGELOG.md +26 -0
- package/README.md +27 -7
- package/dist/client/api.d.ts +59 -1
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +67 -0
- package/dist/client/api.js.map +1 -1
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js +18 -11
- package/dist/client/errors.js.map +1 -1
- package/dist/client/types.d.ts +105 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +8 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/domain/requestShape.d.ts +4 -4
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/resources/docs/mocks.d.ts +2 -0
- package/dist/resources/docs/mocks.d.ts.map +1 -0
- package/dist/resources/docs/mocks.js +210 -0
- package/dist/resources/docs/mocks.js.map +1 -0
- package/dist/resources/docs/overview.d.ts +1 -1
- package/dist/resources/docs/overview.d.ts.map +1 -1
- package/dist/resources/docs/overview.js +7 -1
- package/dist/resources/docs/overview.js.map +1 -1
- package/dist/resources/generated/aiPacks.d.ts +1 -1
- package/dist/resources/generated/aiPacks.js +2 -2
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +2 -0
- package/dist/resources/index.js.map +1 -1
- package/dist/run/executeCollection.d.ts.map +1 -1
- package/dist/run/executeCollection.js +5 -1
- package/dist/run/executeCollection.js.map +1 -1
- package/dist/run/loadBundle.d.ts.map +1 -1
- package/dist/run/loadBundle.js +49 -2
- package/dist/run/loadBundle.js.map +1 -1
- package/dist/run/summarize.d.ts +28 -4
- package/dist/run/summarize.d.ts.map +1 -1
- package/dist/run/summarize.js +19 -1
- package/dist/run/summarize.js.map +1 -1
- package/dist/run/types.d.ts +2 -1
- package/dist/run/types.d.ts.map +1 -1
- package/dist/server.d.ts +6 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +16 -4
- package/dist/server.js.map +1 -1
- package/dist/tools/catalog.d.ts +1 -1
- package/dist/tools/catalog.d.ts.map +1 -1
- package/dist/tools/catalog.js +18 -0
- package/dist/tools/catalog.js.map +1 -1
- package/dist/tools/index.d.ts +9 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +27 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/meta.d.ts.map +1 -1
- package/dist/tools/meta.js +29 -2
- package/dist/tools/meta.js.map +1 -1
- package/dist/tools/mockShared.d.ts +983 -0
- package/dist/tools/mockShared.d.ts.map +1 -0
- package/dist/tools/mockShared.js +387 -0
- package/dist/tools/mockShared.js.map +1 -0
- package/dist/tools/mocks.d.ts +4 -0
- package/dist/tools/mocks.d.ts.map +1 -0
- package/dist/tools/mocks.js +331 -0
- package/dist/tools/mocks.js.map +1 -0
- package/dist/tools/mocksLocal.d.ts +24 -0
- package/dist/tools/mocksLocal.d.ts.map +1 -0
- package/dist/tools/mocksLocal.js +169 -0
- package/dist/tools/mocksLocal.js.map +1 -0
- package/dist/tools/run.d.ts +0 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +7 -26
- package/dist/tools/run.js.map +1 -1
- package/dist-cjs/client/api.js +67 -0
- package/dist-cjs/client/errors.js +18 -11
- package/dist-cjs/config.js +5 -1
- package/dist-cjs/context.js +1 -0
- package/dist-cjs/resources/docs/mocks.js +212 -0
- package/dist-cjs/resources/docs/overview.js +7 -1
- package/dist-cjs/resources/generated/aiPacks.js +2 -2
- package/dist-cjs/resources/index.js +2 -0
- package/dist-cjs/run/executeCollection.js +5 -1
- package/dist-cjs/run/loadBundle.js +49 -2
- package/dist-cjs/run/summarize.js +19 -1
- package/dist-cjs/server.js +16 -4
- package/dist-cjs/tools/catalog.js +18 -0
- package/dist-cjs/tools/index.js +30 -6
- package/dist-cjs/tools/meta.js +28 -1
- package/dist-cjs/tools/mockShared.js +414 -0
- package/dist-cjs/tools/mocks.js +334 -0
- package/dist-cjs/tools/mocksLocal.js +179 -0
- package/dist-cjs/tools/run.js +7 -26
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockShared.d.ts","sourceRoot":"","sources":["../../src/tools/mockShared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ToolInputError } from "../client/errors.js";
|
|
3
|
+
import { resolveRef } from "../domain/resolve.js";
|
|
4
|
+
import { normalizeName } from "../lib/ids.js";
|
|
5
|
+
import { unknownKeysErrorMap } from "../lib/strict.js";
|
|
6
|
+
import { jsonPreview, LIMITS, safeStringify } from "../lib/truncate.js";
|
|
7
|
+
import { findInWorkspaces } from "./lookups.js";
|
|
8
|
+
import { refArg } from "./shared.js";
|
|
9
|
+
// Shared by the mock tools: the route input schema (typed, but the backend
|
|
10
|
+
// stays the validator), conversion to the server's route body, the shape of a
|
|
11
|
+
// mock as the model reads it, reference resolution (mock by name / slug / id,
|
|
12
|
+
// route by id / "METHOD /path" / name) and the ready-to-run curl lines.
|
|
13
|
+
export const MOCK_METHODS = ["GET", "POST", "PUT", "DELETE", "PATCH", "ANY"];
|
|
14
|
+
const strictObject = (shape, where) => z.object(shape, { errorMap: unknownKeysErrorMap("field", Object.keys(shape), where) }).strict();
|
|
15
|
+
const statusCode = z.coerce.number().int().min(100).max(599);
|
|
16
|
+
const headersSchema = z.record(z.string().max(8192));
|
|
17
|
+
// ── route input ─────────────────────────────────────────────────────────
|
|
18
|
+
const delaySchema = z.discriminatedUnion("mode", [
|
|
19
|
+
strictObject({ mode: z.literal("none") }, "delay"),
|
|
20
|
+
strictObject({ mode: z.literal("fixed"), ms: z.number().int().min(0).max(60_000) }, "delay"),
|
|
21
|
+
strictObject({ mode: z.literal("random"), minMs: z.number().int().min(0).max(60_000), maxMs: z.number().int().min(0).max(60_000) }, "delay"),
|
|
22
|
+
]);
|
|
23
|
+
const staticOrTemplateResponse = (type) => strictObject({
|
|
24
|
+
type: z.literal(type),
|
|
25
|
+
statusCode,
|
|
26
|
+
headers: headersSchema.optional(),
|
|
27
|
+
body: z.unknown().optional().describe(type === "template" ? 'JSON value; every string may contain {{request.params.id}}, {{request.query.x}}, {{request.body.x}}, {{state.key}}, {{faker.email}}, {{random.int(1,9)}}, {{now}} …' : "Any JSON value (object, array, string, number, null). Omit for an empty body."),
|
|
28
|
+
}, `${type} response`);
|
|
29
|
+
const builderResponse = strictObject({
|
|
30
|
+
type: z.literal("builder"),
|
|
31
|
+
preset: z.enum(["list", "detail", "create", "update", "delete", "echo", "custom"]),
|
|
32
|
+
config: z.record(z.unknown()).describe("The preset's config; config.preset must equal preset. See callman://docs/mocks"),
|
|
33
|
+
}, "builder response");
|
|
34
|
+
export const mockResponseSchema = z.discriminatedUnion("type", [staticOrTemplateResponse("static"), staticOrTemplateResponse("template"), builderResponse]);
|
|
35
|
+
const variantSchema = strictObject({
|
|
36
|
+
variantId: z.string().max(64).optional(),
|
|
37
|
+
priority: z.number().int().min(0).max(10_000).describe("Lower runs first; the first matching variant wins"),
|
|
38
|
+
condition: strictObject({
|
|
39
|
+
type: z.enum(["all", "any"]),
|
|
40
|
+
rules: z
|
|
41
|
+
.array(strictObject({
|
|
42
|
+
field: z.string().min(1).max(200).describe("headers.<name>, params.<name>, query.<name> or body.<dotted.path>"),
|
|
43
|
+
operator: z.enum(["exists", "not-exists", "equals", "not-equals", "contains", "starts-with", "matches"]),
|
|
44
|
+
value: z.string().max(2000).optional(),
|
|
45
|
+
}, "condition rule"))
|
|
46
|
+
.min(1)
|
|
47
|
+
.max(20),
|
|
48
|
+
}, "condition"),
|
|
49
|
+
response: mockResponseSchema,
|
|
50
|
+
}, "variant");
|
|
51
|
+
const requestValidationSchema = strictObject({ mode: z.enum(["any", "schema"]), schema: z.unknown().optional().describe("JSON Schema (draft-07) the request body must match when mode is schema; a mismatch answers 400") }, "requestValidation");
|
|
52
|
+
const routeShape = {
|
|
53
|
+
method: z.enum(MOCK_METHODS),
|
|
54
|
+
path: z.string().min(1).max(256).describe("Starts with /; :name segments are path parameters, a trailing /* is a catch-all. Example: /api/users/:id"),
|
|
55
|
+
name: z.string().max(120).optional(),
|
|
56
|
+
response: mockResponseSchema.optional().describe("The response. Shorthand instead: statusCode / headers / body (a static response)"),
|
|
57
|
+
statusCode: statusCode.optional().describe("Shorthand for a static response (default 200)"),
|
|
58
|
+
headers: headersSchema.optional().describe("Shorthand: static response headers"),
|
|
59
|
+
body: z.unknown().optional().describe("Shorthand: static response body (any JSON value; on target desktop a string is sent as is and anything else as formatted JSON)"),
|
|
60
|
+
variants: z.array(variantSchema).max(20).optional().describe("Server mocks only: other responses chosen by a condition on the request"),
|
|
61
|
+
delay: delaySchema.optional().describe("Wait before answering (server: ≤ 60 s, desktop: ≤ 30 s)"),
|
|
62
|
+
requestValidation: requestValidationSchema.nullish().describe("Server mocks only: validate the request body against a JSON Schema"),
|
|
63
|
+
};
|
|
64
|
+
export const mockRouteInputSchema = strictObject(routeShape, "route").describe("One mock route");
|
|
65
|
+
export const mockRoutePatchSchema = mockRouteInputSchema.partial().describe("The fields to change; the rest of the route is kept");
|
|
66
|
+
// ── path / response validation (early, readable errors) ────────────────
|
|
67
|
+
const PATH_PATTERN = /^\/[A-Za-z0-9/_\-:*.]*$/;
|
|
68
|
+
export const assertRoutePath = (path, where) => {
|
|
69
|
+
const problem = !PATH_PATTERN.test(path)
|
|
70
|
+
? "must start with / and use only letters, digits and / _ - : * ."
|
|
71
|
+
: path.includes("..")
|
|
72
|
+
? "may not contain '..'"
|
|
73
|
+
: path.split("/").some((segment) => segment.startsWith(":") && !/^:[A-Za-z_][A-Za-z0-9_]*$/.test(segment))
|
|
74
|
+
? "path parameters are :name with letters, digits or underscore (e.g. :userId)"
|
|
75
|
+
: null;
|
|
76
|
+
if (problem)
|
|
77
|
+
throw new ToolInputError("MOCK_ROUTE_PATH_INVALID", `${where}: path "${path}" ${problem}.`, { path });
|
|
78
|
+
};
|
|
79
|
+
const SHORTHAND = ["statusCode", "headers", "body"];
|
|
80
|
+
const hasShorthand = (route) => SHORTHAND.some((key) => route[key] !== undefined);
|
|
81
|
+
// A route as the server's createRouteSchema takes it.
|
|
82
|
+
export const toServerRoute = (input, where) => {
|
|
83
|
+
assertRoutePath(input.path, where);
|
|
84
|
+
if (input.response && hasShorthand(input)) {
|
|
85
|
+
throw new ToolInputError("MOCK_ROUTE_RESPONSE_CONFLICT", `${where}: give either \`response\` or the shorthand statusCode / headers / body, not both.`);
|
|
86
|
+
}
|
|
87
|
+
const response = input.response ?? { type: "static", statusCode: input.statusCode ?? 200, headers: input.headers ?? {}, ...(input.body !== undefined ? { body: input.body } : {}) };
|
|
88
|
+
return {
|
|
89
|
+
method: input.method,
|
|
90
|
+
path: input.path,
|
|
91
|
+
...(input.name ? { name: input.name } : {}),
|
|
92
|
+
response,
|
|
93
|
+
...(input.variants ? { variants: input.variants } : {}),
|
|
94
|
+
behavior: { delay: input.delay ?? { mode: "none" } },
|
|
95
|
+
...(input.requestValidation ? { requestValidation: input.requestValidation } : {}),
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
// A patch as the server's updateRouteSchema takes it. Shorthand fields are
|
|
99
|
+
// merged over the route's current static/template response so that
|
|
100
|
+
// `{ statusCode: 404 }` alone keeps the body.
|
|
101
|
+
export const toServerRoutePatch = (patch, current, where) => {
|
|
102
|
+
if (patch.path !== undefined)
|
|
103
|
+
assertRoutePath(patch.path, where);
|
|
104
|
+
if (patch.response && hasShorthand(patch)) {
|
|
105
|
+
throw new ToolInputError("MOCK_ROUTE_RESPONSE_CONFLICT", `${where}: give either \`response\` or the shorthand statusCode / headers / body, not both.`);
|
|
106
|
+
}
|
|
107
|
+
const body = {};
|
|
108
|
+
if (patch.method !== undefined)
|
|
109
|
+
body.method = patch.method;
|
|
110
|
+
if (patch.path !== undefined)
|
|
111
|
+
body.path = patch.path;
|
|
112
|
+
if (patch.name !== undefined)
|
|
113
|
+
body.name = patch.name;
|
|
114
|
+
if (patch.response)
|
|
115
|
+
body.response = patch.response;
|
|
116
|
+
else if (hasShorthand(patch)) {
|
|
117
|
+
const base = current.response.type === "static" || current.response.type === "template" ? current.response : { type: "static", statusCode: 200, headers: {} };
|
|
118
|
+
if (current.response.type === "builder") {
|
|
119
|
+
throw new ToolInputError("MOCK_ROUTE_RESPONSE_CONFLICT", `${where}: this route uses a builder response; pass a complete \`response\` to replace it.`);
|
|
120
|
+
}
|
|
121
|
+
body.response = { ...base, ...(patch.statusCode !== undefined ? { statusCode: patch.statusCode } : {}), ...(patch.headers !== undefined ? { headers: patch.headers } : {}), ...(patch.body !== undefined ? { body: patch.body } : {}) };
|
|
122
|
+
}
|
|
123
|
+
if (patch.variants !== undefined)
|
|
124
|
+
body.variants = patch.variants;
|
|
125
|
+
if (patch.delay !== undefined)
|
|
126
|
+
body.behavior = { delay: patch.delay };
|
|
127
|
+
if (patch.requestValidation !== undefined)
|
|
128
|
+
body.requestValidation = patch.requestValidation ?? { mode: "any" };
|
|
129
|
+
if (Object.keys(body).length === 0)
|
|
130
|
+
throw new ToolInputError("NOTHING_TO_UPDATE", `${where}: no field to change was given.`);
|
|
131
|
+
return body;
|
|
132
|
+
};
|
|
133
|
+
export const duplicateRoutes = (routes) => {
|
|
134
|
+
const seen = new Set();
|
|
135
|
+
const duplicates = [];
|
|
136
|
+
for (const route of routes) {
|
|
137
|
+
const key = `${route.method} ${route.path}`;
|
|
138
|
+
if (seen.has(key))
|
|
139
|
+
duplicates.push(key);
|
|
140
|
+
seen.add(key);
|
|
141
|
+
}
|
|
142
|
+
return duplicates;
|
|
143
|
+
};
|
|
144
|
+
// ── views ───────────────────────────────────────────────────────────────
|
|
145
|
+
// The summary rows of GET /api/mocks come without routes and state, so their
|
|
146
|
+
// routeCount / stateSizeBytes are always 0 — a list shows neither (get_mock does).
|
|
147
|
+
export const mockListView = (mock) => ({
|
|
148
|
+
mockId: mock.mockId,
|
|
149
|
+
id: mock.id,
|
|
150
|
+
name: mock.name,
|
|
151
|
+
...(mock.description ? { description: mock.description } : {}),
|
|
152
|
+
auth: mock.auth.type,
|
|
153
|
+
publicUrl: mock.publicUrl,
|
|
154
|
+
requestCount: mock.requestCount,
|
|
155
|
+
expiresAt: mock.expiresAt,
|
|
156
|
+
expired: Date.parse(mock.expiresAt) < Date.now(),
|
|
157
|
+
createdAt: mock.createdAt,
|
|
158
|
+
});
|
|
159
|
+
export const mockSummaryView = (mock) => ({
|
|
160
|
+
...mockListView(mock),
|
|
161
|
+
routeCount: mock.routeCount,
|
|
162
|
+
stateSizeBytes: mock.stateSizeBytes,
|
|
163
|
+
});
|
|
164
|
+
// The server announces its own public address (MOCK_PUBLIC_BASE_URL); an
|
|
165
|
+
// installation that left it at the default announces a host nobody can reach.
|
|
166
|
+
// When it differs from the API address we were configured with, offer the
|
|
167
|
+
// address that certainly answers from here.
|
|
168
|
+
export const alternativeUrl = (apiUrl, mock) => {
|
|
169
|
+
try {
|
|
170
|
+
if (new URL(mock.publicUrl).origin === new URL(apiUrl).origin)
|
|
171
|
+
return {};
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return {};
|
|
175
|
+
}
|
|
176
|
+
return { alternativeUrl: `${apiUrl.replace(/\/+$/, "")}/mock/${mock.mockId}`, urlNote: "publicUrl is the address the server announces; if it does not answer from here, the same mock is served at alternativeUrl (the API address)." };
|
|
177
|
+
};
|
|
178
|
+
export const routeView = (route) => ({
|
|
179
|
+
routeId: route.routeId,
|
|
180
|
+
method: route.method,
|
|
181
|
+
path: route.path,
|
|
182
|
+
...(route.name ? { name: route.name } : {}),
|
|
183
|
+
response: route.response,
|
|
184
|
+
...(route.variants?.length ? { variants: route.variants } : {}),
|
|
185
|
+
delay: route.behavior?.delay ?? { mode: "none" },
|
|
186
|
+
...(route.requestValidation ? { requestValidation: route.requestValidation } : {}),
|
|
187
|
+
});
|
|
188
|
+
const routeBrief = (route) => ({
|
|
189
|
+
routeId: route.routeId,
|
|
190
|
+
method: route.method,
|
|
191
|
+
path: route.path,
|
|
192
|
+
...(route.name ? { name: route.name } : {}),
|
|
193
|
+
responseType: route.response?.type,
|
|
194
|
+
...(typeof route.response?.statusCode === "number" ? { statusCode: route.response.statusCode } : {}),
|
|
195
|
+
...(route.variants?.length ? { variants: route.variants.length } : {}),
|
|
196
|
+
});
|
|
197
|
+
const ROUTES_INLINE_LIMIT = 128 * 1024;
|
|
198
|
+
// Full routes while they fit, one line per route beyond that.
|
|
199
|
+
export const routesView = (routes) => {
|
|
200
|
+
const full = routes.map(routeView);
|
|
201
|
+
if (safeStringify(full).length <= ROUTES_INLINE_LIMIT)
|
|
202
|
+
return { routes: full };
|
|
203
|
+
return { routes: routes.map(routeBrief), routesTruncated: true, routesNote: "Routes are shown without their response bodies (too large); read one with get_mock { route }… or change it with update_mock_route." };
|
|
204
|
+
};
|
|
205
|
+
export const mockDetailView = (mock, apiUrl, auth) => ({
|
|
206
|
+
...mockSummaryView(mock),
|
|
207
|
+
...alternativeUrl(apiUrl, mock),
|
|
208
|
+
auth,
|
|
209
|
+
limits: mock.limits,
|
|
210
|
+
...routesView(mock.routes ?? []),
|
|
211
|
+
});
|
|
212
|
+
// ── curl ────────────────────────────────────────────────────────────────
|
|
213
|
+
const shellQuote = (value) => `'${value.replace(/'/g, "'\\''")}'`;
|
|
214
|
+
const sampleValue = (schema) => {
|
|
215
|
+
const type = schema?.type;
|
|
216
|
+
switch (Array.isArray(type) ? type[0] : type) {
|
|
217
|
+
case "number":
|
|
218
|
+
case "integer":
|
|
219
|
+
return 1;
|
|
220
|
+
case "boolean":
|
|
221
|
+
return true;
|
|
222
|
+
case "array":
|
|
223
|
+
return [];
|
|
224
|
+
case "object":
|
|
225
|
+
return sampleObject(schema);
|
|
226
|
+
default:
|
|
227
|
+
return "example";
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
const sampleObject = (schema) => {
|
|
231
|
+
const properties = schema?.properties ?? {};
|
|
232
|
+
const required = schema?.required;
|
|
233
|
+
const keys = Array.isArray(required) ? required.filter((key) => typeof key === "string") : Object.keys(properties).slice(0, 5);
|
|
234
|
+
return Object.fromEntries(keys.map((key) => [key, sampleValue(properties[key])]));
|
|
235
|
+
};
|
|
236
|
+
// A request body that the route will accept: from its JSON Schema gate, or a
|
|
237
|
+
// create builder's required fields; `{}` otherwise.
|
|
238
|
+
const sampleBody = (route) => {
|
|
239
|
+
if (route.requestValidation?.mode === "schema")
|
|
240
|
+
return sampleObject(route.requestValidation.schema);
|
|
241
|
+
const config = route.response?.type === "builder" ? route.response.config : undefined;
|
|
242
|
+
if (config?.preset === "create" && Array.isArray(config.requiredFields))
|
|
243
|
+
return Object.fromEntries(config.requiredFields.map((field) => [String(field), "example"]));
|
|
244
|
+
return {};
|
|
245
|
+
};
|
|
246
|
+
export const sampleRoutePath = (path) => path
|
|
247
|
+
.split("/")
|
|
248
|
+
.map((segment) => (segment.startsWith(":") ? "1" : segment === "*" || segment === "**" ? "example" : segment))
|
|
249
|
+
.join("/");
|
|
250
|
+
export const curlLine = (baseUrl, route, token) => {
|
|
251
|
+
const method = route.method === "ANY" ? "GET" : route.method;
|
|
252
|
+
const parts = ["curl -sS", `-X ${method}`];
|
|
253
|
+
if (token !== undefined)
|
|
254
|
+
parts.push(`-H ${shellQuote(`X-Mock-Token: ${token ?? "<token>"}`)}`);
|
|
255
|
+
if (method === "POST" || method === "PUT" || method === "PATCH")
|
|
256
|
+
parts.push("-H 'Content-Type: application/json'", `-d ${shellQuote(safeStringify(sampleBody(route)))}`);
|
|
257
|
+
parts.push(shellQuote(`${baseUrl.replace(/\/+$/, "")}${sampleRoutePath(route.path)}`));
|
|
258
|
+
return parts.join(" ");
|
|
259
|
+
};
|
|
260
|
+
export const mockRefArg = (what) => refArg(what, "(its name, slug or id)");
|
|
261
|
+
export const targetArg = z
|
|
262
|
+
.enum(["server", "desktop"])
|
|
263
|
+
.optional()
|
|
264
|
+
.describe('"server" (default): a mock on the Callman server with a public URL. "desktop": a local mock inside the user\'s Callman desktop app, reachable at http://127.0.0.1:<port> on their computer only (needs the app open with "Let AI tools manage local mock APIs on this computer" on).');
|
|
265
|
+
// An argument that belongs to the other target is an error, not a silent no-op.
|
|
266
|
+
export const requireTarget = (target, args, only, hint) => {
|
|
267
|
+
const given = Object.entries(args).filter(([, value]) => value !== undefined).map(([key]) => key);
|
|
268
|
+
if (given.length > 0 && target !== only) {
|
|
269
|
+
throw new ToolInputError("ARG_TARGET_MISMATCH", `${given.join(", ")} ${given.length === 1 ? "applies" : "apply"} to ${only} mocks only — ${hint}`, { target });
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
export const loadMocks = (ctx, ws) => ctx.cache.getOrSet(`mocks:${ws}`, () => ctx.api.listAllMocks(ws));
|
|
273
|
+
// `id` of a MockRef is the slug (mockId) — what every /api/mocks route takes.
|
|
274
|
+
export const resolveMock = async (ctx, ws, ref, options = {}) => {
|
|
275
|
+
const mocks = await loadMocks(ctx, ws);
|
|
276
|
+
const items = mocks.map((summary) => ({ id: summary.mockId, name: summary.name, summary }));
|
|
277
|
+
return resolveRef("mock", ref, items, { aliases: (item) => [item.summary.id], describe: (item) => ({ publicUrl: item.summary.publicUrl }), ...options });
|
|
278
|
+
};
|
|
279
|
+
export const findMock = (ctx, workspace, ref, options = {}) => findInWorkspaces(ctx, workspace, "mock", ref, (ws) => resolveMock(ctx, ws.id, ref, options), {
|
|
280
|
+
matchOf: (resolved) => resolved.matched,
|
|
281
|
+
describe: (resolved) => ({ mockId: resolved.item.id, name: resolved.item.name }),
|
|
282
|
+
});
|
|
283
|
+
// A route of a mock: routeId, "METHOD /path", the path alone (when unique) or its name.
|
|
284
|
+
export const resolveRoute = (mock, ref) => {
|
|
285
|
+
const routes = mock.routes ?? [];
|
|
286
|
+
const reference = ref.trim();
|
|
287
|
+
const candidates = () => routes.slice(0, 20).map((route) => ({ routeId: route.routeId, method: route.method, path: route.path, ...(route.name ? { name: route.name } : {}) }));
|
|
288
|
+
const byId = routes.find((route) => route.routeId === reference);
|
|
289
|
+
if (byId)
|
|
290
|
+
return byId;
|
|
291
|
+
const combined = /^(GET|POST|PUT|DELETE|PATCH|ANY)\s+(\S+)$/i.exec(reference);
|
|
292
|
+
if (combined) {
|
|
293
|
+
const hit = routes.find((route) => route.method === combined[1].toUpperCase() && route.path === combined[2]);
|
|
294
|
+
if (hit)
|
|
295
|
+
return hit;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
const byPath = routes.filter((route) => route.path === reference);
|
|
299
|
+
if (byPath.length === 1)
|
|
300
|
+
return byPath[0];
|
|
301
|
+
if (byPath.length > 1)
|
|
302
|
+
throw new ToolInputError("REF_AMBIGUOUS", `Several routes use the path "${reference}" — say "METHOD ${reference}" or pass the routeId.`, { kind: "route", ref: reference, candidates: byPath.map((route) => ({ routeId: route.routeId, method: route.method, path: route.path })) });
|
|
303
|
+
const byName = routes.filter((route) => route.name && normalizeName(route.name) === normalizeName(reference));
|
|
304
|
+
if (byName.length === 1)
|
|
305
|
+
return byName[0];
|
|
306
|
+
}
|
|
307
|
+
throw new ToolInputError("REF_NOT_FOUND", `No route of mock "${mock.name}" matches "${reference}".`, { kind: "route", ref: reference, candidates: candidates() });
|
|
308
|
+
};
|
|
309
|
+
// ── local mocks (the desktop app's own mock servers) ───────────────────
|
|
310
|
+
export const LOCAL_BODY_MAX_BYTES = 256 * 1024;
|
|
311
|
+
export const LOCAL_DELAY_MAX_MS = 30_000;
|
|
312
|
+
const localUnsupported = (where, what) => new ToolInputError("LOCAL_MOCK_FEATURE_UNSUPPORTED", `${where}: local mocks on the desktop answer with static responses only — ${what} is not available.`, {
|
|
313
|
+
hint: 'Use target: "server" for templates, builders, variants, request validation and state, or describe the response as a static one.',
|
|
314
|
+
});
|
|
315
|
+
// A route as the desktop's local mock manager stores it.
|
|
316
|
+
export const toLocalRoute = (input, where) => {
|
|
317
|
+
assertRoutePath(input.path, where);
|
|
318
|
+
if (input.variants?.length)
|
|
319
|
+
throw localUnsupported(where, "variants");
|
|
320
|
+
if (input.requestValidation)
|
|
321
|
+
throw localUnsupported(where, "requestValidation");
|
|
322
|
+
if (input.response && hasShorthand(input)) {
|
|
323
|
+
throw new ToolInputError("MOCK_ROUTE_RESPONSE_CONFLICT", `${where}: give either \`response\` or the shorthand statusCode / headers / body, not both.`);
|
|
324
|
+
}
|
|
325
|
+
if (input.response && input.response.type !== "static")
|
|
326
|
+
throw localUnsupported(where, `a ${input.response.type} response`);
|
|
327
|
+
const source = input.response ?? { statusCode: input.statusCode ?? 200, headers: input.headers, body: input.body };
|
|
328
|
+
const body = source.body === undefined || source.body === null ? "" : typeof source.body === "string" ? source.body : JSON.stringify(source.body, null, 2);
|
|
329
|
+
if (Buffer.byteLength(body, "utf8") > LOCAL_BODY_MAX_BYTES) {
|
|
330
|
+
throw new ToolInputError("LOCAL_MOCK_BODY_TOO_LARGE", `${where}: the response body is larger than ${LOCAL_BODY_MAX_BYTES / 1024} KB, the limit of a local mock route.`);
|
|
331
|
+
}
|
|
332
|
+
const delay = input.delay ?? { mode: "none" };
|
|
333
|
+
if ((delay.mode === "fixed" && delay.ms > LOCAL_DELAY_MAX_MS) || (delay.mode === "random" && (delay.maxMs > LOCAL_DELAY_MAX_MS || delay.minMs > delay.maxMs))) {
|
|
334
|
+
throw new ToolInputError("LOCAL_MOCK_DELAY_INVALID", `${where}: a local mock delay is at most ${LOCAL_DELAY_MAX_MS / 1000} s (random: minMs ≤ maxMs).`);
|
|
335
|
+
}
|
|
336
|
+
return { method: input.method, path: input.path, ...(input.name ? { name: input.name } : {}), statusCode: source.statusCode, headers: source.headers ?? {}, body, delay };
|
|
337
|
+
};
|
|
338
|
+
export const localBaseUrl = (mock) => `http://127.0.0.1:${mock.port}`;
|
|
339
|
+
export const localRouteView = (route) => ({
|
|
340
|
+
...(route.routeId ? { routeId: route.routeId } : {}),
|
|
341
|
+
method: route.method,
|
|
342
|
+
path: route.path,
|
|
343
|
+
...(route.name ? { name: route.name } : {}),
|
|
344
|
+
statusCode: route.statusCode,
|
|
345
|
+
headers: route.headers,
|
|
346
|
+
body: route.body,
|
|
347
|
+
delay: route.delay,
|
|
348
|
+
});
|
|
349
|
+
export const localMockView = (mock, options = { routes: true }) => {
|
|
350
|
+
const routes = (mock.routes ?? []).map(localRouteView);
|
|
351
|
+
const inline = safeStringify(routes).length <= ROUTES_INLINE_LIMIT;
|
|
352
|
+
return {
|
|
353
|
+
id: mock.id,
|
|
354
|
+
name: mock.name,
|
|
355
|
+
port: mock.port,
|
|
356
|
+
running: mock.running,
|
|
357
|
+
baseUrl: localBaseUrl(mock),
|
|
358
|
+
autoStart: mock.autoStart,
|
|
359
|
+
...(mock.source ? { source: mock.source } : {}),
|
|
360
|
+
...(mock.lastError ? { lastError: mock.lastError } : {}),
|
|
361
|
+
requestCount: mock.requestCount ?? 0,
|
|
362
|
+
routeCount: routes.length,
|
|
363
|
+
...(options.routes
|
|
364
|
+
? inline
|
|
365
|
+
? { routes }
|
|
366
|
+
: { routes: routes.map(({ body: _body, headers: _headers, ...rest }) => rest), routesTruncated: true }
|
|
367
|
+
: {}),
|
|
368
|
+
};
|
|
369
|
+
};
|
|
370
|
+
export const localCalls = (mock) => (mock.routes ?? []).map((route) => ({ route: `${route.method} ${route.path}`, curl: curlLine(localBaseUrl(mock), route, undefined) }));
|
|
371
|
+
export const resolveLocalMock = (mocks, ref, options = {}) => resolveRef("local mock", ref, mocks.map((record) => ({ id: record.id, name: record.name, record })), { describe: (item) => ({ port: item.record.port, running: item.record.running }), ...options });
|
|
372
|
+
export const logView = (entry) => ({
|
|
373
|
+
id: String(entry._id),
|
|
374
|
+
at: entry.createdAt,
|
|
375
|
+
method: entry.request?.method,
|
|
376
|
+
path: entry.request?.path,
|
|
377
|
+
...(entry.request?.query && Object.keys(entry.request.query).length > 0 ? { query: entry.request.query } : {}),
|
|
378
|
+
...(entry.request?.body !== undefined ? { requestBody: jsonPreview(entry.request.body, LIMITS.BODY_PREVIEW) } : {}),
|
|
379
|
+
statusCode: entry.response?.statusCode,
|
|
380
|
+
durationMs: entry.response?.durationMs,
|
|
381
|
+
...(entry.response?.body !== undefined ? { responseBody: jsonPreview(entry.response.body, LIMITS.BODY_PREVIEW) } : {}),
|
|
382
|
+
matched: entry.matchInfo?.matched ?? false,
|
|
383
|
+
...(entry.matchInfo?.matchedRouteId ? { routeId: entry.matchInfo.matchedRouteId } : {}),
|
|
384
|
+
...(entry.matchInfo?.matchedVariantId ? { variantId: entry.matchInfo.matchedVariantId } : {}),
|
|
385
|
+
...(entry.matchInfo?.failureReason ? { failureReason: entry.matchInfo.failureReason } : {}),
|
|
386
|
+
});
|
|
387
|
+
//# sourceMappingURL=mockShared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockShared.js","sourceRoot":"","sources":["../../src/tools/mockShared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/tools/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgCjD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IAgXvE,CAAC"}
|