callman-mcp 0.7.1 → 0.9.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.
Files changed (113) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +38 -5
  3. package/dist/client/api.d.ts +97 -1
  4. package/dist/client/api.d.ts.map +1 -1
  5. package/dist/client/api.js +120 -0
  6. package/dist/client/api.js.map +1 -1
  7. package/dist/client/errors.d.ts.map +1 -1
  8. package/dist/client/errors.js +45 -11
  9. package/dist/client/errors.js.map +1 -1
  10. package/dist/client/http.d.ts +2 -1
  11. package/dist/client/http.d.ts.map +1 -1
  12. package/dist/client/http.js +4 -2
  13. package/dist/client/http.js.map +1 -1
  14. package/dist/client/types.d.ts +196 -0
  15. package/dist/client/types.d.ts.map +1 -1
  16. package/dist/client/types.js +0 -3
  17. package/dist/client/types.js.map +1 -1
  18. package/dist/config.d.ts +1 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +2 -0
  21. package/dist/config.js.map +1 -1
  22. package/dist/context.d.ts +16 -0
  23. package/dist/context.d.ts.map +1 -1
  24. package/dist/context.js +2 -0
  25. package/dist/context.js.map +1 -1
  26. package/dist/domain/requestShape.d.ts +4 -4
  27. package/dist/index.js +17 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/resources/docs/mocks.d.ts +2 -0
  30. package/dist/resources/docs/mocks.d.ts.map +1 -0
  31. package/dist/resources/docs/mocks.js +445 -0
  32. package/dist/resources/docs/mocks.js.map +1 -0
  33. package/dist/resources/docs/overview.d.ts +1 -1
  34. package/dist/resources/docs/overview.d.ts.map +1 -1
  35. package/dist/resources/docs/overview.js +11 -1
  36. package/dist/resources/docs/overview.js.map +1 -1
  37. package/dist/resources/generated/aiPacks.d.ts +1 -1
  38. package/dist/resources/generated/aiPacks.js +2 -2
  39. package/dist/resources/index.d.ts.map +1 -1
  40. package/dist/resources/index.js +2 -0
  41. package/dist/resources/index.js.map +1 -1
  42. package/dist/server.d.ts +8 -2
  43. package/dist/server.d.ts.map +1 -1
  44. package/dist/server.js +5 -2
  45. package/dist/server.js.map +1 -1
  46. package/dist/tools/catalog.d.ts +1 -1
  47. package/dist/tools/catalog.d.ts.map +1 -1
  48. package/dist/tools/catalog.js +32 -0
  49. package/dist/tools/catalog.js.map +1 -1
  50. package/dist/tools/import.d.ts.map +1 -1
  51. package/dist/tools/import.js +7 -1
  52. package/dist/tools/import.js.map +1 -1
  53. package/dist/tools/index.d.ts.map +1 -1
  54. package/dist/tools/index.js +2 -0
  55. package/dist/tools/index.js.map +1 -1
  56. package/dist/tools/meta.d.ts.map +1 -1
  57. package/dist/tools/meta.js +29 -2
  58. package/dist/tools/meta.js.map +1 -1
  59. package/dist/tools/mockData.d.ts +4 -0
  60. package/dist/tools/mockData.d.ts.map +1 -0
  61. package/dist/tools/mockData.js +384 -0
  62. package/dist/tools/mockData.js.map +1 -0
  63. package/dist/tools/mockEngine.d.ts +129 -0
  64. package/dist/tools/mockEngine.d.ts.map +1 -0
  65. package/dist/tools/mockEngine.js +225 -0
  66. package/dist/tools/mockEngine.js.map +1 -0
  67. package/dist/tools/mockImport.d.ts +5 -0
  68. package/dist/tools/mockImport.d.ts.map +1 -0
  69. package/dist/tools/mockImport.js +298 -0
  70. package/dist/tools/mockImport.js.map +1 -0
  71. package/dist/tools/mockSchemas.d.ts +12272 -0
  72. package/dist/tools/mockSchemas.d.ts.map +1 -0
  73. package/dist/tools/mockSchemas.js +247 -0
  74. package/dist/tools/mockSchemas.js.map +1 -0
  75. package/dist/tools/mockShared.d.ts +6355 -0
  76. package/dist/tools/mockShared.d.ts.map +1 -0
  77. package/dist/tools/mockShared.js +445 -0
  78. package/dist/tools/mockShared.js.map +1 -0
  79. package/dist/tools/mocks.d.ts +4 -0
  80. package/dist/tools/mocks.d.ts.map +1 -0
  81. package/dist/tools/mocks.js +413 -0
  82. package/dist/tools/mocks.js.map +1 -0
  83. package/dist/tools/mocksLocal.d.ts +48 -0
  84. package/dist/tools/mocksLocal.d.ts.map +1 -0
  85. package/dist/tools/mocksLocal.js +261 -0
  86. package/dist/tools/mocksLocal.js.map +1 -0
  87. package/dist/tools/uiTestAdmin.d.ts.map +1 -1
  88. package/dist/tools/uiTestAdmin.js +3 -1
  89. package/dist/tools/uiTestAdmin.js.map +1 -1
  90. package/dist-cjs/client/api.js +120 -0
  91. package/dist-cjs/client/errors.js +45 -11
  92. package/dist-cjs/client/http.js +4 -2
  93. package/dist-cjs/client/types.js +0 -3
  94. package/dist-cjs/config.js +2 -0
  95. package/dist-cjs/context.js +2 -0
  96. package/dist-cjs/resources/docs/mocks.js +447 -0
  97. package/dist-cjs/resources/docs/overview.js +11 -1
  98. package/dist-cjs/resources/generated/aiPacks.js +2 -2
  99. package/dist-cjs/resources/index.js +2 -0
  100. package/dist-cjs/server.js +5 -2
  101. package/dist-cjs/tools/catalog.js +32 -0
  102. package/dist-cjs/tools/import.js +7 -1
  103. package/dist-cjs/tools/index.js +2 -0
  104. package/dist-cjs/tools/meta.js +28 -1
  105. package/dist-cjs/tools/mockData.js +387 -0
  106. package/dist-cjs/tools/mockEngine.js +243 -0
  107. package/dist-cjs/tools/mockImport.js +302 -0
  108. package/dist-cjs/tools/mockSchemas.js +253 -0
  109. package/dist-cjs/tools/mockShared.js +474 -0
  110. package/dist-cjs/tools/mocks.js +416 -0
  111. package/dist-cjs/tools/mocksLocal.js +277 -0
  112. package/dist-cjs/tools/uiTestAdmin.js +3 -1
  113. package/package.json +3 -3
@@ -0,0 +1,129 @@
1
+ import { type MockResource, type MockUserAuthConfig } from "callman-core/mock-engine";
2
+ import { z } from "zod";
3
+ import type { MockApiDetail } from "../client/types.js";
4
+ import type { ToolContext } from "../context.js";
5
+ import { type CurlRoute, type MockRouteInput } from "./mockShared.js";
6
+ import { type ResourceInput, type ResourcePatch, type SimpleFaultsInput, type UserAuthInput } from "./mockSchemas.js";
7
+ export interface MockEngine {
8
+ version: number;
9
+ features: string[];
10
+ limits: Record<string, number>;
11
+ }
12
+ export declare const mockEngineOf: (ctx: ToolContext, wsId: string) => Promise<MockEngine>;
13
+ export declare const requireEngine: (engine: MockEngine, used: Array<[string, string]>) => void;
14
+ export declare const requireRelayEngine: (ctx: ToolContext, wsId: string, what: string) => Promise<void>;
15
+ export declare const toServerResource: (input: ResourceInput | ResourcePatch, where: string, options?: {
16
+ partial?: boolean;
17
+ }) => Record<string, unknown>;
18
+ export declare const toServerUserAuth: (input: UserAuthInput, where: string) => Record<string, unknown>;
19
+ export interface DefinitionInput {
20
+ routes?: MockRouteInput[];
21
+ resources?: ResourceInput[];
22
+ userAuth?: UserAuthInput;
23
+ faults?: SimpleFaultsInput;
24
+ }
25
+ export declare const definitionFeatures: (input: DefinitionInput) => Array<[string, string]>;
26
+ export declare const toServerDefinition: (input: DefinitionInput) => Record<string, unknown>;
27
+ export declare const definitionIssues: (draft: Record<string, unknown>) => import("callman-core/mock-engine").MockDefinitionIssue[];
28
+ export declare const resourceView: (resource: MockResource, recordCount?: number) => {
29
+ recordCount?: number | undefined;
30
+ seed?: {
31
+ salt?: string | undefined;
32
+ generate?: number | undefined;
33
+ records?: string | undefined;
34
+ } | undefined;
35
+ endpoints: {
36
+ [k: string]: unknown;
37
+ };
38
+ list: import("callman-core/mock-engine").MockResourceListConfig;
39
+ protected?: boolean | {
40
+ roles: string[];
41
+ } | undefined;
42
+ ownerField?: string | undefined;
43
+ fields: import("callman-core/mock-engine").MockField[];
44
+ additionalFields: "strip" | "allow" | "reject";
45
+ timestamps: {
46
+ createdAt: string | null;
47
+ updatedAt: string | null;
48
+ };
49
+ allowClientId?: boolean | undefined;
50
+ lookupField?: string | undefined;
51
+ name: string;
52
+ resourceId: string;
53
+ basePath: string;
54
+ idField: string;
55
+ idStrategy: import("callman-core/mock-engine").MockIdStrategy;
56
+ };
57
+ export declare const userAuthView: (userAuth: (MockUserAuthConfig & {
58
+ hasSecret?: boolean;
59
+ }) | null | undefined) => {
60
+ enabled: boolean;
61
+ usersResource: string;
62
+ identityField: string;
63
+ passwordField: string;
64
+ tokenTtlSeconds: number;
65
+ issuer?: string;
66
+ audience?: string;
67
+ roleClaim?: string;
68
+ claims?: Record<string, string>;
69
+ protect: "none" | "resources" | "all";
70
+ endpoints: {
71
+ login: {
72
+ enabled: boolean;
73
+ path: string;
74
+ };
75
+ register: {
76
+ enabled: boolean;
77
+ path: string;
78
+ };
79
+ me: {
80
+ enabled: boolean;
81
+ path: string;
82
+ };
83
+ };
84
+ responses?: Partial<Record<"loginSuccess" | "loginFailure" | "unauthorized" | "forbidden", import("callman-core/mock-engine").MockOutcomeResponse>>;
85
+ } | undefined;
86
+ export declare const mockEngineView: (mock: MockApiDetail) => Record<string, unknown>;
87
+ export declare const resourceCalls: (baseUrl: string, resources: MockResource[], userAuth: MockUserAuthConfig | null | undefined, token: string | null | undefined) => {
88
+ resource: string;
89
+ endpoint: import("callman-core/mock-engine").MockResourceEndpointName;
90
+ route: string;
91
+ curl: string;
92
+ }[];
93
+ interface CallableRoute extends CurlRoute {
94
+ auth?: unknown;
95
+ }
96
+ export declare const definitionCalls: (baseUrl: string, definition: {
97
+ routes?: CallableRoute[];
98
+ resources?: MockResource[];
99
+ userAuth?: MockUserAuthConfig | null;
100
+ }, token: string | null | undefined) => {
101
+ route: string;
102
+ curl: string;
103
+ }[];
104
+ export declare const MOCK_TOKEN_HEADER = "X-Mock-Token";
105
+ export declare const mockAuthArg: z.ZodEnum<["public", "token"]>;
106
+ export declare const mockAuthView: (mock: MockApiDetail, token?: string | null, note?: string) => {
107
+ note?: string | undefined;
108
+ token: string;
109
+ type: string;
110
+ header: string;
111
+ } | {
112
+ note?: string | undefined;
113
+ tokenMasked: boolean;
114
+ type: string;
115
+ header: string;
116
+ } | {
117
+ type: string;
118
+ };
119
+ export declare const mockCalls: (mock: MockApiDetail, token?: string | null) => {
120
+ route: string;
121
+ curl: string;
122
+ }[];
123
+ export declare const userAuthCalls: (baseUrl: string, userAuth: MockUserAuthConfig | null | undefined, resources: MockResource[], token: string | null | undefined) => {
124
+ signIn: "login" | "register" | "me";
125
+ route: string;
126
+ curl: string;
127
+ }[];
128
+ export {};
129
+ //# sourceMappingURL=mockEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockEngine.d.ts","sourceRoot":"","sources":["../../src/tools/mockEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ import { defaultUserAuth, exampleBodyForEndpoint, MOCK_RESOURCE_TEMPLATES, normalizeMockDefinition, normalizeResource, resourceEndpointRoutes, validateMockDefinition, } from "callman-core/mock-engine";
2
+ import { z } from "zod";
3
+ import { CallmanApiError, ToolInputError } from "../client/errors.js";
4
+ import { assertRoutePath, curlLine, faultsView, routeEngineFeatures, toServerRoute } from "./mockShared.js";
5
+ import { fromAuthRequirement, toAuthRequirement, toFaultConfig } from "./mockSchemas.js";
6
+ const V1 = { version: 1, features: [], limits: {} };
7
+ // `GET /api/mocks/policy` carries `engine` from mock engine v2 on; a server
8
+ // without it is v1. Servers older than the lifetime policy answer the route
9
+ // with 404 (they read "policy" as a mock id) — v1 as well.
10
+ export const mockEngineOf = (ctx, wsId) => ctx.cache.getOrSet(`mock-engine:${wsId}`, async () => {
11
+ try {
12
+ const engine = (await ctx.api.getMockPolicy(wsId))?.engine;
13
+ return engine && typeof engine.version === "number" && engine.version >= 2 ? { version: engine.version, features: engine.features ?? [], limits: engine.limits ?? {} } : V1;
14
+ }
15
+ catch (error) {
16
+ if (error instanceof CallmanApiError && error.status === 404)
17
+ return V1;
18
+ throw error;
19
+ }
20
+ });
21
+ const FEATURE_LABELS = {
22
+ resources: "resources",
23
+ "data-actions": "data routes",
24
+ "user-auth": "user sign-in",
25
+ faults: "faults",
26
+ sessions: "test sessions",
27
+ import: "mock import",
28
+ definition: "whole-mock definitions (also what a local mock beyond static routes is written with)",
29
+ };
30
+ // An older server drops the keys it does not know WITHOUT an error: the mock
31
+ // would be created without the resources, sign-in or faults that were asked
32
+ // for. So refuse before anything is written. `used` = [where, feature].
33
+ export const requireEngine = (engine, used) => {
34
+ const missing = used.filter(([, feature]) => engine.version < 2 || !engine.features.includes(feature));
35
+ if (missing.length === 0)
36
+ return;
37
+ const what = [...new Set(missing.map(([, feature]) => FEATURE_LABELS[feature] ?? feature))].join(", ");
38
+ throw new ToolInputError("MOCK_ENGINE_UNSUPPORTED", engine.version < 2
39
+ ? `This Callman server runs mock engine v1, which has no ${what} (${missing.map(([where]) => where).join(", ")}). Nothing was created or changed.`
40
+ : `This Callman server's mock engine does not offer ${what} (${missing.map(([where]) => where).join(", ")}). Nothing was created or changed.`, {
41
+ serverEngine: engine.version,
42
+ unsupported: missing.map(([where, feature]) => ({ where, feature })),
43
+ hint: "An older server drops fields it does not know without an error, so these are refused up front. Mock engine v2 (resources, data routes, user sign-in, faults, test sessions, import) needs callman-backend built on callman-core 1.39 or later — ask the administrator to update the server. Until then, describe the API with static, template and builder routes over state (callman://docs/mocks).",
44
+ });
45
+ };
46
+ // The local-mock relay learnt the v2 ops (define / records / sessions) with
47
+ // the same server release; an older one answers them with a validation error.
48
+ export const requireRelayEngine = async (ctx, wsId, what) => {
49
+ requireEngine(await mockEngineOf(ctx, wsId), [[what, "definition"]]);
50
+ };
51
+ // ── conversion: tool input → server shapes ──────────────────────────────
52
+ const templateResource = (id) => {
53
+ const template = MOCK_RESOURCE_TEMPLATES.find((entry) => entry.id === id);
54
+ if (!template)
55
+ return {};
56
+ const resource = template.resource();
57
+ return { idField: resource.idField, idStrategy: resource.idStrategy, fields: resource.fields, ...(resource.seed ? { seed: resource.seed } : {}) };
58
+ };
59
+ const toEndpoints = (endpoints) => Object.fromEntries(Object.entries(endpoints)
60
+ .filter(([, value]) => value !== undefined)
61
+ .map(([name, value]) => {
62
+ if (typeof value === "boolean")
63
+ return [name, value];
64
+ const { protected: guard, faults, ...rest } = value;
65
+ return [name, { ...rest, ...(guard !== undefined ? { auth: toAuthRequirement(guard) } : {}), ...(faults ? { faults: toFaultConfig(faults) } : {}) }];
66
+ }));
67
+ // A resource as `POST …/resources` (and a definition's `resources[]`) takes it.
68
+ export const toServerResource = (input, where, options = {}) => {
69
+ const { template, protected: guard, endpoints, basePath, ...rest } = input;
70
+ const name = rest.name ?? template;
71
+ if (!options.partial && !name)
72
+ throw new ToolInputError("MOCK_RESOURCE_NAME_REQUIRED", `${where}: give the resource a name (or a template).`);
73
+ if (basePath !== undefined)
74
+ assertRoutePath(basePath, `${where}.basePath`);
75
+ return {
76
+ ...(template ? templateResource(template) : {}),
77
+ ...rest,
78
+ ...(name ? { name } : {}),
79
+ ...(basePath !== undefined ? { basePath } : {}),
80
+ ...(guard !== undefined ? { auth: toAuthRequirement(guard) } : {}),
81
+ ...(endpoints ? { endpoints: toEndpoints(endpoints) } : {}),
82
+ };
83
+ };
84
+ // Sign-in as the server takes it: the endpoints' paths are filled in (the
85
+ // server needs a path for every endpoint it is given).
86
+ export const toServerUserAuth = (input, where) => {
87
+ const { endpoints, ...rest } = input;
88
+ const defaults = defaultUserAuth(input.usersResource ?? "users").endpoints;
89
+ const filled = endpoints
90
+ ? Object.fromEntries(["login", "register", "me"]
91
+ .filter((key) => endpoints[key])
92
+ .map((key) => {
93
+ const endpoint = endpoints[key] ?? {};
94
+ if (endpoint.path)
95
+ assertRoutePath(endpoint.path, `${where}.endpoints.${key}.path`);
96
+ return [key, { enabled: endpoint.enabled ?? true, path: endpoint.path ?? defaults[key].path }];
97
+ }))
98
+ : undefined;
99
+ return { ...rest, usersResource: input.usersResource ?? "users", ...(filled ? { endpoints: filled } : {}) };
100
+ };
101
+ // The engine v2 parts a create uses, as [where, feature] for requireEngine.
102
+ export const definitionFeatures = (input) => [
103
+ ...(input.resources?.length ? [["resources", "resources"]] : []),
104
+ ...(input.userAuth ? [["userAuth", "user-auth"]] : []),
105
+ ...(input.faults ? [["faults", "faults"]] : []),
106
+ ...(input.routes ?? []).flatMap((route, index) => routeEngineFeatures(route, `routes[${index}]`)),
107
+ ];
108
+ // A whole mock as `POST /api/mocks { definition }` and the relay's `define`
109
+ // take it.
110
+ export const toServerDefinition = (input) => ({
111
+ routes: (input.routes ?? []).map((route, index) => toServerRoute(route, `routes[${index}]`)),
112
+ resources: (input.resources ?? []).map((resource, index) => toServerResource(resource, `resources[${index}]`)),
113
+ ...(input.userAuth ? { userAuth: toServerUserAuth(input.userAuth, "userAuth") } : {}),
114
+ ...(input.faults ? { faults: toFaultConfig(input.faults) } : {}),
115
+ });
116
+ // What the server (or the desktop) will refuse in a whole definition —
117
+ // callman-core's own validator, for dry runs. The writes themselves leave the
118
+ // verdict to the server, which answers MOCK_DEFINITION_INVALID with the same
119
+ // issues and writes nothing.
120
+ export const definitionIssues = (draft) => validateMockDefinition(normalizeMockDefinition(draft)).slice(0, 50);
121
+ // ── views ───────────────────────────────────────────────────────────────
122
+ const endpointView = (config) => {
123
+ const guard = fromAuthRequirement(config.auth);
124
+ const { enabled, auth: _auth, faults, ...rest } = config;
125
+ const extra = { ...rest, ...(guard !== undefined ? { protected: guard } : {}), ...faultsView(faults) };
126
+ return Object.keys(extra).length === 0 ? enabled : { enabled, ...extra };
127
+ };
128
+ // A resource the way add_mock_resource / update_mock_resource take it; seed
129
+ // records are counted, not listed (query_mock_records reads the data).
130
+ export const resourceView = (resource, recordCount) => {
131
+ const guard = fromAuthRequirement(resource.auth);
132
+ const seedRecords = resource.seed?.records?.length ?? 0;
133
+ return {
134
+ name: resource.name,
135
+ resourceId: resource.resourceId,
136
+ basePath: resource.basePath,
137
+ idField: resource.idField,
138
+ idStrategy: resource.idStrategy,
139
+ ...(resource.lookupField ? { lookupField: resource.lookupField } : {}),
140
+ ...(resource.allowClientId !== undefined ? { allowClientId: resource.allowClientId } : {}),
141
+ fields: resource.fields,
142
+ additionalFields: resource.additionalFields,
143
+ timestamps: resource.timestamps,
144
+ ...(resource.ownerField ? { ownerField: resource.ownerField } : {}),
145
+ ...(guard !== undefined ? { protected: guard } : {}),
146
+ endpoints: Object.fromEntries(Object.entries(resource.endpoints ?? {}).map(([name, config]) => [name, endpointView(config)])),
147
+ list: resource.list,
148
+ ...(resource.seed ? { seed: { ...(seedRecords ? { records: `${seedRecords} record(s)` } : {}), ...(resource.seed.generate ? { generate: resource.seed.generate } : {}), ...(resource.seed.salt ? { salt: resource.seed.salt } : {}) } } : {}),
149
+ ...(recordCount !== undefined ? { recordCount } : {}),
150
+ };
151
+ };
152
+ export const userAuthView = (userAuth) => {
153
+ if (!userAuth)
154
+ return undefined;
155
+ const { secret: _secret, hasSecret: _hasSecret, ...rest } = userAuth;
156
+ return rest;
157
+ };
158
+ // The engine v2 parts of a server mock, in the shapes the tools take.
159
+ export const mockEngineView = (mock) => ({
160
+ ...(mock.resources?.length ? { resources: mock.resources.map((resource) => resourceView(resource)) } : {}),
161
+ ...(mock.userAuth ? { userAuth: userAuthView(mock.userAuth) } : {}),
162
+ ...faultsView(mock.faults),
163
+ ...(mock.sessions ? { sessions: mock.sessions } : {}),
164
+ });
165
+ // Is this endpoint behind sign-in? (Its own requirement, else the resource's,
166
+ // else the mock-wide default `protect`.)
167
+ const needsUser = (resource, endpoint, userAuth) => {
168
+ if (!userAuth || userAuth.enabled === false)
169
+ return false;
170
+ const own = resource.endpoints[endpoint]?.auth ?? resource.auth;
171
+ if (own !== undefined)
172
+ return own !== "none";
173
+ return userAuth.protect === "resources" || userAuth.protect === "all";
174
+ };
175
+ // The auto CRUD endpoints of each resource (never stored as routes), with a
176
+ // curl line each — an example body from the fields for writes.
177
+ export const resourceCalls = (baseUrl, resources, userAuth, token) => resources.flatMap((draft) => {
178
+ const resource = normalizeResource(draft);
179
+ return resourceEndpointRoutes(resource)
180
+ .filter((entry) => resource.endpoints[entry.endpoint]?.enabled !== false)
181
+ .map((entry) => {
182
+ const body = entry.endpoint === "create" || entry.endpoint === "replace" || entry.endpoint === "patch" ? exampleBodyForEndpoint(resource, entry.endpoint, 1) : undefined;
183
+ const route = { method: entry.method, path: entry.path, ...(body ? { body } : {}), bearer: needsUser(resource, entry.endpoint, userAuth) };
184
+ return { resource: resource.name, endpoint: entry.endpoint, route: `${entry.method} ${entry.path}`, curl: curlLine(baseUrl, route, token) };
185
+ });
186
+ });
187
+ // A curl line per route, per resource endpoint and per sign-in endpoint.
188
+ export const definitionCalls = (baseUrl, definition, token) => {
189
+ const userAuth = definition.userAuth && definition.userAuth.enabled !== false ? definition.userAuth : null;
190
+ return [
191
+ ...(definition.routes ?? []).map((route) => {
192
+ const bearer = Boolean(userAuth) && (route.auth !== undefined && route.auth !== null ? route.auth !== "none" : userAuth?.protect === "all");
193
+ return { route: `${route.method} ${route.path}`, curl: curlLine(baseUrl, { ...route, bearer }, token) };
194
+ }),
195
+ ...resourceCalls(baseUrl, definition.resources ?? [], userAuth, token),
196
+ ...userAuthCalls(baseUrl, userAuth, definition.resources ?? [], token),
197
+ ];
198
+ };
199
+ export const MOCK_TOKEN_HEADER = "X-Mock-Token";
200
+ export const mockAuthArg = z.enum(["public", "token"]).describe('"public" (default): anyone with the URL can call it. "token": callers must send the X-Mock-Token header; the token is shown once, when it is generated.');
201
+ export const mockAuthView = (mock, token, note) => mock.auth.type === "token"
202
+ ? { type: "token", header: MOCK_TOKEN_HEADER, ...(token ? { token } : { tokenMasked: true }), ...(note ? { note } : {}) }
203
+ : { type: "public" };
204
+ // A curl line per route (and, engine v2, per resource endpoint and sign-in endpoint).
205
+ export const mockCalls = (mock, token) => definitionCalls(mock.publicUrl, { routes: mock.routes ?? [], resources: mock.resources ?? [], userAuth: mock.userAuth }, mock.auth.type === "token" ? (token ?? null) : undefined);
206
+ // login / register / me of the mock's user sign-in (register with an example
207
+ // user of the users resource).
208
+ export const userAuthCalls = (baseUrl, userAuth, resources, token) => {
209
+ if (!userAuth || userAuth.enabled === false)
210
+ return [];
211
+ const endpoints = { ...defaultUserAuth(userAuth.usersResource).endpoints, ...(userAuth.endpoints ?? {}) };
212
+ const identity = userAuth.identityField ?? "email";
213
+ const password = userAuth.passwordField ?? "password";
214
+ const credentials = { [identity]: identity === "email" ? "ada@example.com" : "ada", [password]: "secret123" };
215
+ const users = resources.find((resource) => resource.name === userAuth.usersResource);
216
+ const newUser = { ...(users ? (exampleBodyForEndpoint(normalizeResource(users), "create", 1) ?? {}) : {}), ...credentials };
217
+ return ["register", "login", "me"]
218
+ .filter((key) => endpoints[key]?.enabled !== false)
219
+ .map((key) => {
220
+ const method = key === "me" ? "GET" : "POST";
221
+ const route = { method, path: endpoints[key].path, ...(key === "me" ? { bearer: true } : { body: key === "register" ? newUser : credentials }) };
222
+ return { signIn: key, route: `${method} ${endpoints[key].path}`, curl: curlLine(baseUrl, route, token) };
223
+ });
224
+ };
225
+ //# sourceMappingURL=mockEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockEngine.js","sourceRoot":"","sources":["../../src/tools/mockEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ToolContext } from "../context.js";
3
+ export declare const isPrivateAddress: (raw: string) => boolean;
4
+ export declare const registerMockImportTool: (server: McpServer, ctx: ToolContext) => void;
5
+ //# sourceMappingURL=mockImport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockImport.d.ts","sourceRoot":"","sources":["../../src/tools/mockImport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA6BjD,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,OAS9C,CAAC;AAiIF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IA0I5E,CAAC"}