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,210 @@
|
|
|
1
|
+
export const MOCKS_DOC = `# Mock APIs through MCP
|
|
2
|
+
|
|
3
|
+
A mock API is a fake HTTP API that answers with the responses you describe. Use it when a user says
|
|
4
|
+
*"I need an API that returns …"* — to build a front end before the backend exists, to test a client
|
|
5
|
+
against errors and slow answers, or to give a test a stable dependency. You create it with a few tool
|
|
6
|
+
calls and hand the user a URL.
|
|
7
|
+
|
|
8
|
+
## Two places a mock can live (\`target\`)
|
|
9
|
+
|
|
10
|
+
| | \`target: "server"\` (default) | \`target: "desktop"\` |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Where | On the Callman server | Inside the user's Callman desktop app |
|
|
13
|
+
| URL | \`<server>/mock/<slug>/…\` — public, reachable by anyone with the URL (or the token) | \`http://127.0.0.1:<port>/…\` — this computer only |
|
|
14
|
+
| Responses | static, **template** ({{…}}), **builder** presets, **variants**, request validation, delay | **static only** + delay |
|
|
15
|
+
| State | yes (builder routes read and write it) | no |
|
|
16
|
+
| Lifetime | expires after 1 / 6 / 24 / 48 h (default 48) | until deleted; lives while the app is open |
|
|
17
|
+
| Needs | token with \`mocks:*\` | token with \`mocks:*\` **and** the desktop app open, signed in, with Settings → AI tools → "Let AI tools manage local mock APIs on this computer" on |
|
|
18
|
+
| Routes are edited with | add_mock_route / update_mock_route / delete_mock_route | \`update_mock { routes }\` — REPLACES all routes |
|
|
19
|
+
| Always on? | yes (no start/stop) | start_mock / stop_mock |
|
|
20
|
+
|
|
21
|
+
If the server's \`publicUrl\` does not answer from your machine (an installation that never set its public address announces a host nobody can reach), use \`alternativeUrl\` from the same result — it is the API address plus \`/mock/<slug>\`.
|
|
22
|
+
|
|
23
|
+
Pick **server** unless the user wants it on their own machine, needs no network exposure, or a tool on
|
|
24
|
+
their computer must call it at localhost. Desktop calls go through a relay: the app picks the request up
|
|
25
|
+
within a few seconds. If it answers \`LOCAL_MOCK_DESKTOP_OFFLINE\`, tell the user to open the app and
|
|
26
|
+
switch the setting on (or fall back to a server mock).
|
|
27
|
+
|
|
28
|
+
## From a user's request to routes
|
|
29
|
+
|
|
30
|
+
1. List first (\`list_mocks\`) — reuse or extend a mock that already fits instead of creating a duplicate.
|
|
31
|
+
2. For each endpoint the user needs, decide: **method + path**, the **status code** and the **body**.
|
|
32
|
+
Use real-looking data; ask only when the contract is truly unknown.
|
|
33
|
+
3. A fixed answer → a static response. Values taken from the request (the id in the path, a field of the
|
|
34
|
+
body) or random data → a template. A small CRUD API that remembers what was created → builder
|
|
35
|
+
routes over state. Different answers for different inputs (a 401 for a bad header, a 404 for one id)
|
|
36
|
+
→ variants.
|
|
37
|
+
4. Call \`create_mock\` with all routes at once. The result has the URL and a \`curl\` line per route —
|
|
38
|
+
give them to the user, and try one if you can.
|
|
39
|
+
5. Iterate with \`update_mock_route\` / \`add_mock_route\`; read what real clients sent with \`get_mock_logs\`.
|
|
40
|
+
|
|
41
|
+
\`\`\`json
|
|
42
|
+
create_mock {
|
|
43
|
+
"name": "Orders API", "slug": "orders-api", "ttlHours": 24,
|
|
44
|
+
"routes": [
|
|
45
|
+
{ "method": "GET", "path": "/orders", "statusCode": 200, "body": [{ "id": 1, "status": "NEW" }, { "id": 2, "status": "PAID" }] },
|
|
46
|
+
{ "method": "GET", "path": "/orders/:id", "response": { "type": "template", "statusCode": 200, "body": { "id": "{{request.params.id}}", "status": "NEW", "createdAt": "{{now}}" } } },
|
|
47
|
+
{ "method": "POST", "path": "/orders", "statusCode": 201, "body": { "id": "{{faker.uuid}}" }, "delay": { "mode": "fixed", "ms": 300 } }
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
## A route
|
|
53
|
+
|
|
54
|
+
\`\`\`
|
|
55
|
+
{ method, path, name?, response | (statusCode?, headers?, body?), variants?, delay?, requestValidation? }
|
|
56
|
+
\`\`\`
|
|
57
|
+
|
|
58
|
+
- **method**: GET POST PUT DELETE PATCH or ANY (any method that no specific route takes).
|
|
59
|
+
- **path**: starts with \`/\`; letters, digits and \`/ _ - : * .\`; no \`..\`; at most 256 characters.
|
|
60
|
+
\`:name\` is a path parameter (letters, digits, underscore: \`:userId\`, not \`:user-id\`). A trailing
|
|
61
|
+
\`/*\` (or a \`*\` segment) matches everything below. The most specific route wins (literal segment >
|
|
62
|
+
parameter > wildcard); a trailing slash is ignored. One route per method + path.
|
|
63
|
+
- **response**: the full shape below. **Shorthand** for the common case: \`statusCode\` (default 200),
|
|
64
|
+
\`headers\`, \`body\` directly on the route = a static response. Don't mix the two.
|
|
65
|
+
- **name**: a label (shown in lists; usable as a reference).
|
|
66
|
+
- **delay**: \`{ mode: "none" }\`, \`{ mode: "fixed", ms }\` or \`{ mode: "random", minMs, maxMs }\` — the
|
|
67
|
+
answer is held back that long (server ≤ 60 000 ms, desktop ≤ 30 000 ms). Use it to test timeouts and spinners.
|
|
68
|
+
|
|
69
|
+
### Responses (server)
|
|
70
|
+
|
|
71
|
+
\`\`\`
|
|
72
|
+
{ "type": "static", "statusCode": 200, "headers": { "X-Foo": "1" }, "body": <any JSON> }
|
|
73
|
+
{ "type": "template", "statusCode": 200, "headers": {}, "body": <JSON with {{expressions}}> }
|
|
74
|
+
{ "type": "builder", "preset": "list|detail|create|update|delete|echo|custom", "config": { "preset": <same>, … } }
|
|
75
|
+
\`\`\`
|
|
76
|
+
|
|
77
|
+
- **body**: any JSON value. An object/array is sent as JSON (\`content-type: application/json\` unless you
|
|
78
|
+
set one); a *string* is sent as is (\`text/plain\` unless you set a content type — for XML/HTML put
|
|
79
|
+
the text in \`body\` and set \`headers\`). No body = empty response (use for 204).
|
|
80
|
+
- **template** — every string in the body may contain \`{{expression}}\`. A string that is *only* one
|
|
81
|
+
expression keeps its type (number, boolean, object); inside longer text the value becomes text.
|
|
82
|
+
Unknown expressions become \`null\` (whole) or empty (inline).
|
|
83
|
+
- \`request.params.<name>\`, \`request.query.<name>\`, \`request.headers.<name>\` (case-insensitive),
|
|
84
|
+
\`request.body.<dotted.path>\`, \`request.method\`
|
|
85
|
+
- \`state.<key>\` — the mock's state (see below)
|
|
86
|
+
- \`faker.email|uuid|fullName|firstName|lastName|phone|address|company|lorem|boolean|int\`
|
|
87
|
+
- \`random.int(min,max)\`, \`random.float(min,max)\`, \`random.boolean\`
|
|
88
|
+
- \`now\`, \`now+5m\`, \`now-2d\` (units s m h d) → ISO timestamps
|
|
89
|
+
- Example: \`{ "id": "{{request.params.id}}", "email": "{{faker.email}}", "age": "{{random.int(18,65)}}" }\`
|
|
90
|
+
(\`age\` becomes a number).
|
|
91
|
+
|
|
92
|
+
### Builder presets (server)
|
|
93
|
+
|
|
94
|
+
A builder route does the work of a REST endpoint over **state** (arrays of objects, stored per mock).
|
|
95
|
+
\`config.preset\` must equal \`preset\`. Required keys are marked; the rest have defaults.
|
|
96
|
+
|
|
97
|
+
| preset | config | what it does |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| \`list\` | **source**: \`{kind:"static",data:[…]}\` or \`{kind:"state",stateKey}\`; \`filtering:{enabled,rules:[{queryParam,field,operator:equals\\|contains\\|startsWith\\|in}]}\`; \`sorting:{enabled,sortByParam:"sortBy",orderParam:"order",allowedFields:[…]}\`; \`pagination:{enabled,strategy:page\\|offset\\|cursor,defaultPageSize:20,maxPageSize:100,envelope:standard\\|data-meta\\|raw}\`; \`statusCode\`, \`headers\` | filter by query params, sort, paginate (\`?page=&limit=\`, \`?offset=&limit=\`, \`?cursor=<last id>&limit=\`). Envelopes: standard \`{items,total,page,totalPages}\`, data-meta \`{data,meta:{total,page,limit}}\`, raw array |
|
|
100
|
+
| \`detail\` | **source**, **notFoundBehavior**:\`{statusCode:404,body?}\`, \`paramName:"id"\`, \`lookupField:"id"\` | the item whose \`lookupField\` equals the path parameter; otherwise the not-found answer |
|
|
101
|
+
| \`create\` | **stateKey**, \`autoGenerate:{id:"uuid"\\|"incremental",createdAt,updatedAt}\`, \`requiredFields:[…]\` (missing → 400), \`responseBehavior:return-created\\|return-id\\|status-only\`, \`statusCode:201\` | appends the request body (plus generated fields) to \`state[stateKey]\` |
|
|
102
|
+
| \`update\` | **stateKey**, **notFoundBehavior**, \`paramName\`, \`lookupField\`, \`mergeStrategy:partial\\|full\`, \`autoUpdateUpdatedAt:true\`, \`statusCode:200\` | replaces/merges the matching item with the request body |
|
|
103
|
+
| \`delete\` | **stateKey**, **notFoundBehavior**, \`paramName\`, \`lookupField\`, \`responseBehavior:204\\|return-deleted\\|success-message\`, \`statusCode:204\` | removes the matching item |
|
|
104
|
+
| \`echo\` | \`statusCode\`, \`headers\` | answers with the request: \`{method,params,query,headers,body}\` — handy to see what a client sends |
|
|
105
|
+
| \`custom\` | \`statusCode\`, \`headers\`, \`body\` | a fixed answer through the builder |
|
|
106
|
+
|
|
107
|
+
A full CRUD mock over one \`users\` collection (the path parameter name must match \`paramName\`):
|
|
108
|
+
|
|
109
|
+
\`\`\`json
|
|
110
|
+
create_mock { "name": "Users", "slug": "users-api", "routes": [
|
|
111
|
+
{ "method": "GET", "path": "/users", "response": { "type": "builder", "preset": "list", "config": { "preset": "list", "source": { "kind": "state", "stateKey": "users" }, "pagination": { "enabled": true } } } },
|
|
112
|
+
{ "method": "GET", "path": "/users/:id", "response": { "type": "builder", "preset": "detail", "config": { "preset": "detail", "source": { "kind": "state", "stateKey": "users" }, "notFoundBehavior": { "statusCode": 404 } } } },
|
|
113
|
+
{ "method": "POST", "path": "/users", "response": { "type": "builder", "preset": "create", "config": { "preset": "create", "stateKey": "users", "autoGenerate": { "id": "incremental", "createdAt": true }, "requiredFields": ["name"] } } },
|
|
114
|
+
{ "method": "PATCH", "path": "/users/:id", "response": { "type": "builder", "preset": "update", "config": { "preset": "update", "stateKey": "users", "notFoundBehavior": { "statusCode": 404 } } } },
|
|
115
|
+
{ "method": "DELETE", "path": "/users/:id", "response": { "type": "builder", "preset": "delete", "config": { "preset": "delete", "stateKey": "users", "notFoundBehavior": { "statusCode": 404 } } } }
|
|
116
|
+
] }
|
|
117
|
+
set_mock_state { "mock": "users-api", "initialState": { "users": [{ "id": 1, "name": "Ada" }] }, "state": { "users": [{ "id": 1, "name": "Ada" }] } }
|
|
118
|
+
\`\`\`
|
|
119
|
+
|
|
120
|
+
### State
|
|
121
|
+
|
|
122
|
+
State is a JSON object per mock (limit 1 MB). Builder \`create\`/\`update\`/\`delete\` change it as requests
|
|
123
|
+
arrive (a missing array is created by the first \`create\`); \`list\`/\`detail\` with \`source.kind: "state"\` and
|
|
124
|
+
\`{{state.key}}\` templates read it. \`get_mock_state\` shows \`state\` (live) and \`initialState\`;
|
|
125
|
+
\`set_mock_state\` replaces either wholesale; \`reset_mock_state\` copies \`initialState\` back into \`state\`
|
|
126
|
+
(do that between test runs). Seed *both* when you want a reset to return to the seed data.
|
|
127
|
+
|
|
128
|
+
### Variants — different answers for different requests (server)
|
|
129
|
+
|
|
130
|
+
A route can carry up to 20 variants. Each has \`priority\` (lower is checked first), a \`condition\` and a
|
|
131
|
+
\`response\` (same shapes as above). The first variant whose condition matches answers; otherwise the
|
|
132
|
+
route's own \`response\` does.
|
|
133
|
+
|
|
134
|
+
\`\`\`json
|
|
135
|
+
{ "method": "GET", "path": "/profile",
|
|
136
|
+
"response": { "type": "static", "statusCode": 200, "body": { "name": "Ada" } },
|
|
137
|
+
"variants": [
|
|
138
|
+
{ "priority": 1, "condition": { "type": "all", "rules": [{ "field": "headers.authorization", "operator": "not-exists" }] },
|
|
139
|
+
"response": { "type": "static", "statusCode": 401, "body": { "error": "unauthorized" } } },
|
|
140
|
+
{ "priority": 2, "condition": { "type": "any", "rules": [{ "field": "query.fail", "operator": "equals", "value": "1" }] },
|
|
141
|
+
"response": { "type": "static", "statusCode": 500, "body": { "error": "boom" } } } ] }
|
|
142
|
+
\`\`\`
|
|
143
|
+
|
|
144
|
+
- \`condition.type\`: \`all\` (every rule) or \`any\` (at least one); 1–20 rules.
|
|
145
|
+
- \`field\`: \`headers.<name>\`, \`params.<name>\`, \`query.<name>\`, \`body.<dotted.path>\`.
|
|
146
|
+
- \`operator\`: exists, not-exists (null and empty count as missing), equals, not-equals, contains,
|
|
147
|
+
starts-with, matches (a regular expression in \`value\`; an invalid one never matches). Values are compared as text.
|
|
148
|
+
|
|
149
|
+
### Request validation (server)
|
|
150
|
+
|
|
151
|
+
\`requestValidation: { "mode": "schema", "schema": { …JSON Schema draft-07… } }\` makes the route reject a
|
|
152
|
+
body that does not match with **400** and the list of invalid fields — to let a client team verify what
|
|
153
|
+
they send. Checked on POST, PUT and PATCH requests. \`mode: "any"\` (default) accepts anything. An invalid
|
|
154
|
+
schema is refused when you save the route. \`update_mock_route\` with \`requestValidation: null\` removes the gate.
|
|
155
|
+
|
|
156
|
+
### Auth (server)
|
|
157
|
+
|
|
158
|
+
\`auth: "public"\` (default) — anyone with the URL. \`auth: "token"\` — callers must send
|
|
159
|
+
\`X-Mock-Token: <token>\` (else 401). The token is generated by the server and returned **once**, in the
|
|
160
|
+
create_mock / update_mock result; \`get_mock\` keeps it masked unless the token holds \`environments:reveal\`
|
|
161
|
+
and you pass \`reveal: true\`. Never put it into places the user did not ask for.
|
|
162
|
+
|
|
163
|
+
## Limits (server defaults; an installation may change them)
|
|
164
|
+
|
|
165
|
+
20 mocks per workspace · 50 routes per mock · response body ≤ 100 KB · request body ≤ 1 MB ·
|
|
166
|
+
state ≤ 1 MB · 20 000 requests in total per mock, then 429 · 30 requests per second per mock, then 429 ·
|
|
167
|
+
the 500 newest request logs are kept · slugs: 3–48 chars, lowercase letters/digits/single dashes, start
|
|
168
|
+
with a letter, a few reserved words (api, mock, admin …) refused · lifetime 1/6/24/48 h, then **410 Gone**.
|
|
169
|
+
Local (desktop): response body ≤ 256 KB, ports 1024–65535 (omit \`port\` and the app picks a free one),
|
|
170
|
+
the mock listens on 127.0.0.1 only.
|
|
171
|
+
|
|
172
|
+
## Desktop (local) mocks
|
|
173
|
+
|
|
174
|
+
\`create_mock { target: "desktop", name, port?, autoStart?, routes? }\` creates a local mock in the user's
|
|
175
|
+
app and starts it (\`start: false\` to skip). Routes are static: \`{ method, path, name?, statusCode, headers, body, delay }\`
|
|
176
|
+
(or \`response: { type: "static", … }\` — the same route object you would give a server mock works as
|
|
177
|
+
long as it is static; \`variants\`, \`requestValidation\`, template and builder responses are refused
|
|
178
|
+
with LOCAL_MOCK_FEATURE_UNSUPPORTED). \`body\` is text: a string is sent verbatim, anything else is
|
|
179
|
+
sent as formatted JSON. \`:param\` segments and a trailing \`/*\` work; every request is logged
|
|
180
|
+
(\`get_mock_logs { target: "desktop" }\`, the latest requests only, kept until the app quits).
|
|
181
|
+
To change routes: \`get_mock { target: "desktop" }\`, edit, \`update_mock { routes: [...all of them] }\`.
|
|
182
|
+
\`start_mock\` / \`stop_mock\` / \`delete_mock\` act on one by name or id. Mocks the AI created carry an "AI"
|
|
183
|
+
badge in the app. The mock is only reachable from the user's computer — don't hand out the URL to others.
|
|
184
|
+
|
|
185
|
+
## Tools
|
|
186
|
+
|
|
187
|
+
| Tool | Scope | |
|
|
188
|
+
|---|---|---|
|
|
189
|
+
| list_mocks, get_mock, get_mock_logs | mocks:read | \`target\` server/desktop |
|
|
190
|
+
| get_mock_stats, get_mock_state | mocks:read | server |
|
|
191
|
+
| create_mock, update_mock | mocks:write | \`target\` server/desktop |
|
|
192
|
+
| add_mock_route, update_mock_route, reorder_mock_routes, set_mock_state, reset_mock_state | mocks:write | server |
|
|
193
|
+
| start_mock, stop_mock | mocks:write | desktop |
|
|
194
|
+
| delete_mock | mocks:delete (+ \`confirm: true\`) | \`target\` server/desktop |
|
|
195
|
+
| delete_mock_route | mocks:delete (+ \`confirm: true\`) | server |
|
|
196
|
+
|
|
197
|
+
\`mock\` is the name, the slug or the id. A route is referenced by routeId, \`"GET /users/:id"\`, its path
|
|
198
|
+
(when unique) or its name. If \`create_mock\` fails on a route, the new mock is deleted again (needs
|
|
199
|
+
mocks:delete; otherwise the result says it is kept) and the error names the failing route and why.
|
|
200
|
+
|
|
201
|
+
## Errors you may meet
|
|
202
|
+
|
|
203
|
+
\`PAT_SCOPE_MISSING\` (token lacks mocks:read/write/delete) · \`FEATURE_DISABLED\` (mocks switched off for the
|
|
204
|
+
account) · \`MOCK_SLUG_TAKEN\` (pick another slug) · \`MOCK_LIMIT_REACHED\` (delete an old mock) ·
|
|
205
|
+
\`ROUTE_PATH_CONFLICT\` (the method + path exists) · \`MOCK_ROUTE_LIMIT_REACHED\` · \`VALIDATION_ERROR\`
|
|
206
|
+
(details name the field) · \`LOCAL_MOCK_DESKTOP_OFFLINE\` (open the desktop app and switch the setting on) ·
|
|
207
|
+
\`LOCAL_MOCK_TIMEOUT\` (the app did not answer; check with list_mocks before repeating a create) ·
|
|
208
|
+
\`LOCAL_MOCK_FEATURE_UNSUPPORTED\` (use a server mock).
|
|
209
|
+
`;
|
|
210
|
+
//# sourceMappingURL=mocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/resources/docs/mocks.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgNxB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const OVERVIEW_DOC = "# Working with Callman through MCP\n\nCallman is an API client and test platform (collections of HTTP requests, environments,\nmulti-step API test scenarios, UI tests for web / Android / iOS, system-design diagrams). This\nserver exposes it to you through tools; everything you do goes to the same server the Callman desktop app uses, as the user\nwhose token is configured, limited to that token's permissions and the user's workspace role.\n\n## Start here\n1. `whoami` \u2014 proves the connection and tells you the workspaces, features and which tools\n this token can use.\n2. Look before you create: `list_collections` / `get_collection_tree` / `search_requests`.\n Creating a collection whose name exists is refused on purpose.\n3. Arguments are strict: a misspelled or unknown argument is an error that lists the valid\n ones \u2014 read it and retry; nothing is silently ignored.\n4. Names work as references everywhere an id does (collection, folder, request, environment,\n scenario, UI test, diagram, workspace). Ambiguous names come back as a candidate list \u2014 pick one.\n5. Preview big writes with `dryRun: true` (bulk create, imports, scenarios, diagrams).\n6. Deletions need `confirm: true` and an exact name or id. Ask the user unless they explicitly\n requested the deletion.\n\n## Workspaces\nThe token works in EVERY workspace the user belongs to (with their role in each):\n- Lists and searches (`list_collections`, `search_requests`, `list_environments`,\n `list_connections`, `list_scenarios`) cover all workspaces unless you pass `workspace`;\n every row says which workspace it is in.\n- A name (collection, request, environment) is looked up in the default workspace first, then\n in all others; a unique match anywhere is used and the result says where it was found. The\n same name in several workspaces comes back as candidates tagged with their workspace \u2014 pass\n `workspace` or the id.\n- Creating needs one target: `workspace`, or the collection it goes into, or the session\n default. `use_workspace` changes the default for the session (it never hides the others).\n- Environments, connections and global variables belong to one workspace: a request uses the\n ones of its own workspace.\n\n## Requests\n- Use `{{variable}}` for hosts and secrets (`{{baseUrl}}/users`) and put the values in an\n environment (`create_environment` / `set_environment_variables`). Use `:id` for path\n variables. See `callman://docs/request-schema`.\n- get_request returns a request in the same shape create/update take \u2014 read, change, send back.\n- Bodies: a JSON value, a raw string, or `{ mode: raw|formdata|urlencoded|json }`.\n- Database / Redis steps and DB assertions are request fields; connections are\n referenced by id or name (`list_connections`). Put assertions (`pm.test`) in the\n post-response script; `testsScript` is a legacy slot kept for existing requests.\n- Temporal.io workflows are tested with the scenario `temporal` node (and the UI-test\n `temporal*` steps) on a connection of type `temporal` \u2014 `callman://docs/scenario-nodes`.\n- Contract checks (field rules, data-driven rows) \u2014 `callman://docs/contracts`.\n- Scripts run in a sandbox with the `pm.*` API \u2014 `callman://docs/scripting/pm-api`.\n- Collections and folders have their own documentation and scripts that run around every\n request inside them (`get_collection` / `update_collection`, `get_folder` /\n `update_folder`) \u2014 `callman://docs/collection-scripts`.\n- `run_request` / `run_collection` execute on the user's machine with real variable values;\n you only get results and the names of variables scripts changed.\n\n## Secrets\nEnvironment values come back masked (`\u2022\u2022\u2022\u2022ab`) unless the token holds `environments:reveal`\nand you ask for `reveal: true`. Never write a masked environment value back \u2014 it is refused.\nRequest auth secrets and sensitive headers are masked the same way; sending a masked request\nsecret back UNCHANGED keeps the stored one, anything else masked is refused.\n\n## Scenarios\nMulti-step flows as a graph of typed nodes (request, condition, assertion, set-vars, poll,\ndb, kafka, script, wait, end \u2026). Read `callman://docs/scenario-nodes` before building one;\npartial node configs are merged over defaults. Runs happen on the server (`run_scenario`).\n\n## UI tests\nBrowser and mobile-app flows (YAML: header, `---`, steps) \u2014 the desktop app's UI Testing area.\nRead `callman://docs/ui-tests` first and `callman://docs/ui-test-steps` for every step. Flows are\nlinted before they are saved (`validate_ui_test`); edit steps by number with\n`patch_ui_test_steps`. Web flows run on the server runner when there is one; Android, iOS (and\nweb without a runner) run on the user's own Callman desktop app, which must be open with\n\"Let AI tools run UI tests on this computer\" on \u2014 `list_ui_test_devices` shows what is\navailable. Runs return per-step results; screenshots come back as images on request.\n\n## Diagrams\nSystem-design diagrams use a fixed component catalog \u2014 `callman://diagram/components`.\nBuild with `create_diagram` (auto layout), edit with `patch_diagram`, share with\n`share_diagram`. See `callman://docs/diagram-schema`.\n\n## After writing\nThe desktop app refreshes when the user switches back to it. Tell the user what you created\nand where (collection / folder names).\n";
|
|
1
|
+
export declare const OVERVIEW_DOC = "# Working with Callman through MCP\n\nCallman is an API client and test platform (collections of HTTP requests, environments,\nmulti-step API test scenarios, UI tests for web / Android / iOS, system-design diagrams, mock APIs). This\nserver exposes it to you through tools; everything you do goes to the same server the Callman desktop app uses, as the user\nwhose token is configured, limited to that token's permissions and the user's workspace role.\n\n## Start here\n1. `whoami` \u2014 proves the connection and tells you the workspaces, features and which tools\n this token can use.\n2. Look before you create: `list_collections` / `get_collection_tree` / `search_requests`.\n Creating a collection whose name exists is refused on purpose.\n3. Arguments are strict: a misspelled or unknown argument is an error that lists the valid\n ones \u2014 read it and retry; nothing is silently ignored.\n4. Names work as references everywhere an id does (collection, folder, request, environment,\n scenario, UI test, diagram, workspace). Ambiguous names come back as a candidate list \u2014 pick one.\n5. Preview big writes with `dryRun: true` (bulk create, imports, scenarios, diagrams).\n6. Deletions need `confirm: true` and an exact name or id. Ask the user unless they explicitly\n requested the deletion.\n\n## Workspaces\nThe token works in EVERY workspace the user belongs to (with their role in each):\n- Lists and searches (`list_collections`, `search_requests`, `list_environments`,\n `list_connections`, `list_scenarios`) cover all workspaces unless you pass `workspace`;\n every row says which workspace it is in.\n- A name (collection, request, environment) is looked up in the default workspace first, then\n in all others; a unique match anywhere is used and the result says where it was found. The\n same name in several workspaces comes back as candidates tagged with their workspace \u2014 pass\n `workspace` or the id.\n- Creating needs one target: `workspace`, or the collection it goes into, or the session\n default. `use_workspace` changes the default for the session (it never hides the others).\n- Environments, connections and global variables belong to one workspace: a request uses the\n ones of its own workspace.\n\n## Requests\n- Use `{{variable}}` for hosts and secrets (`{{baseUrl}}/users`) and put the values in an\n environment (`create_environment` / `set_environment_variables`). Use `:id` for path\n variables. See `callman://docs/request-schema`.\n- get_request returns a request in the same shape create/update take \u2014 read, change, send back.\n- Bodies: a JSON value, a raw string, or `{ mode: raw|formdata|urlencoded|json }`.\n- Database / Redis steps and DB assertions are request fields; connections are\n referenced by id or name (`list_connections`). Put assertions (`pm.test`) in the\n post-response script; `testsScript` is a legacy slot kept for existing requests.\n- Temporal.io workflows are tested with the scenario `temporal` node (and the UI-test\n `temporal*` steps) on a connection of type `temporal` \u2014 `callman://docs/scenario-nodes`.\n- Contract checks (field rules, data-driven rows) \u2014 `callman://docs/contracts`.\n- Scripts run in a sandbox with the `pm.*` API \u2014 `callman://docs/scripting/pm-api`.\n- Collections and folders have their own documentation and scripts that run around every\n request inside them (`get_collection` / `update_collection`, `get_folder` /\n `update_folder`) \u2014 `callman://docs/collection-scripts`.\n- `run_request` / `run_collection` execute on the user's machine with real variable values;\n you only get results and the names of variables scripts changed.\n\n## Secrets\nEnvironment values come back masked (`\u2022\u2022\u2022\u2022ab`) unless the token holds `environments:reveal`\nand you ask for `reveal: true`. Never write a masked environment value back \u2014 it is refused.\nRequest auth secrets and sensitive headers are masked the same way; sending a masked request\nsecret back UNCHANGED keeps the stored one, anything else masked is refused.\n\n## Scenarios\nMulti-step flows as a graph of typed nodes (request, condition, assertion, set-vars, poll,\ndb, kafka, script, wait, end \u2026). Read `callman://docs/scenario-nodes` before building one;\npartial node configs are merged over defaults. Runs happen on the server (`run_scenario`).\n\n## UI tests\nBrowser and mobile-app flows (YAML: header, `---`, steps) \u2014 the desktop app's UI Testing area.\nRead `callman://docs/ui-tests` first and `callman://docs/ui-test-steps` for every step. Flows are\nlinted before they are saved (`validate_ui_test`); edit steps by number with\n`patch_ui_test_steps`. Web flows run on the server runner when there is one; Android, iOS (and\nweb without a runner) run on the user's own Callman desktop app, which must be open with\n\"Let AI tools run UI tests on this computer\" on \u2014 `list_ui_test_devices` shows what is\navailable. Runs return per-step results; screenshots come back as images on request.\n\n## Mock APIs\nWhen a user needs an API that does not exist (yet), create a mock: `create_mock` with its routes gives a\npublic URL (`target: \"server\"`, default) or a local one on the user's computer (`target: \"desktop\"`, needs\nthe desktop app open with \"Let AI tools manage local mock APIs on this computer\" on). Responses can be\nstatic, templated or backed by state; read `callman://docs/mocks` first. Server mocks expire (1\u201348 h).\n\n## Diagrams\nSystem-design diagrams use a fixed component catalog \u2014 `callman://diagram/components`.\nBuild with `create_diagram` (auto layout), edit with `patch_diagram`, share with\n`share_diagram`. See `callman://docs/diagram-schema`.\n\n## After writing\nThe desktop app refreshes when the user switches back to it. Tell the user what you created\nand where (collection / folder names).\n";
|
|
2
2
|
//# sourceMappingURL=overview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,4wLAuFxB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const OVERVIEW_DOC = `# Working with Callman through MCP
|
|
2
2
|
|
|
3
3
|
Callman is an API client and test platform (collections of HTTP requests, environments,
|
|
4
|
-
multi-step API test scenarios, UI tests for web / Android / iOS, system-design diagrams). This
|
|
4
|
+
multi-step API test scenarios, UI tests for web / Android / iOS, system-design diagrams, mock APIs). This
|
|
5
5
|
server exposes it to you through tools; everything you do goes to the same server the Callman desktop app uses, as the user
|
|
6
6
|
whose token is configured, limited to that token's permissions and the user's workspace role.
|
|
7
7
|
|
|
@@ -71,6 +71,12 @@ web without a runner) run on the user's own Callman desktop app, which must be o
|
|
|
71
71
|
"Let AI tools run UI tests on this computer" on — \`list_ui_test_devices\` shows what is
|
|
72
72
|
available. Runs return per-step results; screenshots come back as images on request.
|
|
73
73
|
|
|
74
|
+
## Mock APIs
|
|
75
|
+
When a user needs an API that does not exist (yet), create a mock: \`create_mock\` with its routes gives a
|
|
76
|
+
public URL (\`target: "server"\`, default) or a local one on the user's computer (\`target: "desktop"\`, needs
|
|
77
|
+
the desktop app open with "Let AI tools manage local mock APIs on this computer" on). Responses can be
|
|
78
|
+
static, templated or backed by state; read \`callman://docs/mocks\` first. Server mocks expire (1–48 h).
|
|
79
|
+
|
|
74
80
|
## Diagrams
|
|
75
81
|
System-design diagrams use a fixed component catalog — \`callman://diagram/components\`.
|
|
76
82
|
Build with \`create_diagram\` (auto layout), edit with \`patch_diagram\`, share with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuF3B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// GENERATED by scripts/build-static-resources.mjs from callman-core@1.
|
|
2
|
-
export const AI_PACKS_CORE_VERSION = "1.
|
|
1
|
+
// GENERATED by scripts/build-static-resources.mjs from callman-core@1.38.0 ai-packs — do not edit.
|
|
2
|
+
export const AI_PACKS_CORE_VERSION = "1.38.0";
|
|
3
3
|
export const AI_PACKS = {
|
|
4
4
|
"db-queries": "<!-- GENERATED FILE — do not edit by hand. Source: callman_core (npm run ai:packs). -->\n\n# Callman data access from scripts (`pm.db.query` / `pm.redis.command`)\n\n`pm.db.query({ connectionId, query })` — ALWAYS `await`. `query` is coerced to a string, `{{tokens}}` are resolved, then dispatched by the connection's type. `connectionId` may be omitted to use the request's configured DB connection. IMPORTANT: `pm.db.query` does NOT accept a `params`/bind array — inline values (quote strings) or use `{{env.X}}` tokens; SQL placeholders like `$1` or `?` are NOT bound.\n\n## MongoDB\n`query` MUST be a JSON STRING of a command object (use `JSON.stringify`), NOT a `db.coll.find(...)` shell string. The match key is `filter` (a top-level `query` key is rejected).\n\n```js\nconst body = pm.response.json();\nconst res = await pm.db.query({\n connectionId: \"…\",\n query: JSON.stringify({\n collection: \"users\",\n operation: \"findOne\", // find | findOne | aggregate | countDocuments | insertOne | insertMany | updateOne | updateMany | deleteOne | deleteMany | findOneAndUpdate | findOneAndReplace | findOneAndDelete\n filter: { email: body.data.user.email },\n }),\n});\npm.expect(res.rowCount).to.be.above(0); // existence check\n```\n\nPer-operation fields: `find`/`findOne` use `filter` (+ optional `projection`,`sort`,`limit`,`skip`); `aggregate` uses `pipeline` (array); `insertOne` uses `document`, `insertMany` uses `documents`; `updateOne`/`updateMany`/`findOneAndUpdate` use `filter`+`update` (Mongo update operators, e.g. `{ $set: { … } }`); `deleteOne`/`deleteMany` use `filter`; `findOneAndUpdate`/`findOneAndReplace` accept `returnDocument: \"before\"|\"after\"`. The command text is MongoDB Extended JSON (relaxed): `{ \"$oid\": \"…\" }`, `{ \"$date\": \"2026-01-01T00:00:00Z\" }`, `{ \"$numberDecimal\": \"9.99\" }` and `{ \"$numberLong\": \"…\" }` become real BSON values anywhere in the command; a 24-hex string in a filter is also coerced to ObjectId. Rows are in `res.rows`; write ops surface counts in `res.rowCount`.\n\n## PostgreSQL / MySQL / Oracle (SQL)\n`query` is plain SQL text. Because `pm.db.query` binds no params, inline the value and quote strings yourself (or use a `{{token}}`):\n\n```js\nconst email = pm.response.json().data.user.email;\nconst res = await pm.db.query({\n connectionId: \"…\",\n query: `SELECT id FROM users WHERE email = '${email}'`,\n});\npm.expect(res.rowCount).to.be.above(0);\n```\n\nNotes: a trailing `;` is stripped (except Oracle PL/SQL blocks, which keep it). **Oracle** returns column names UPPERCASE — read `res.rows[0].EMAIL`, not `.email`. `res.rowCount` is the row count for SELECT and the affected-row count for INSERT/UPDATE/DELETE.\n\n## SQL Server (mssql)\nSingle statement per query; a trailing `;` is stripped; `GO` batch separators are REJECTED (client-tool syntax, not T-SQL). Positional params bind as named inputs: `params[0]` → `@p1`, `params[1]` → `@p2`… (scenario db node only — `pm.db.query` has no params).\n\n```sql\nSELECT TOP 1 id, amount FROM dbo.orders WHERE customer_id = @p1 ORDER BY created_at DESC\n```\n\n## Redis (`pm.redis.command`)\n`command` is a single string. Supported commands: **GET, SET, DEL, EXISTS, TTL, HGET, HSET, HGETALL, HDEL, LPUSH, RPUSH, LRANGE, LLEN, SADD, SMEMBERS, SISMEMBER, INCR, DECR, INCRBY, EXPIRE, PERSIST, TYPE, ZADD, ZRANGE, ZSCORE, SCAN**. Quote a value that contains spaces.\n\nStructured replies land in `res.result` as real values: `HGETALL` → object, `LRANGE`/`SMEMBERS`/`ZRANGE` → array, `EXISTS`/`SISMEMBER`/`EXPIRE`/`PERSIST` → boolean; `res.resultText` is the stringified form. `SCAN pattern [count]` is Callman-managed: the cursor loop runs internally (capped at 1000 keys / 100 iterations) and returns `{ keys, count, truncated }` — no raw cursors.\n\n```js\nconst res = await pm.redis.command({ connectionId: \"…\", command: `GET session:${id}` });\npm.expect(res.success).to.be.true;\n// res.result / res.resultText hold the value; res.commandName, res.key are set.\n```\n",
|
|
5
5
|
"diagram-components": "<!-- GENERATED FILE — do not edit by hand. Source: callman_core (npm run ai:packs). -->\n\n# Diagram components and edge notation\n\nA diagram node's `type` MUST be one of the keys below (`callman-core` `DIAGRAM_COMPONENT_CATALOG`). Sizes are the defaults the studio uses; `container` types hold children via `parentId`.\n\n## Edge notation\n\n| Semantic | Meaning | Style tuple |\n| --- | --- | --- |\n| `sync` | Request / response call | dashed=false, strokeWidth=1.5 |\n| `async` | Fire-and-forget, event or callback | dashed=true, dashPattern=\"6 4\", strokeWidth=1.5 |\n| `fallback` | Retry, fallback or optional path | dashed=true, dashPattern=\"1 3\", strokeWidth=1.25 |\n| `bus` | Message bus or stream | dashed=false, strokeWidth=3 |\n\n## Generic (`generic`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `line` | Line | 160×0 | connector, edge, link |\n| `arrow` | Arrow | 160×0 | connector, directed, link |\n| `line.dashed` | Dashed Line | 160×0 | dotted, connector |\n| `rect` | Rectangle | 140×64 | box, card |\n| `square` | Square | 90×90 | |\n| `ellipse` | Ellipse | 140×64 | oval |\n| `circle` | Circle | 90×90 | |\n| `diamond` | Diamond | 140×64 | rhombus |\n| `triangle` | Triangle | 140×64 | |\n| `hexagon` | Hexagon | 140×64 | |\n| `pentagon` | Pentagon | 140×64 | |\n| `octagon` | Octagon | 140×64 | |\n| `parallelogram` | Parallelogram | 140×64 | |\n| `trapezoid` | Trapezoid | 140×64 | |\n| `cylinder` | Cylinder | 140×64 | can, tube |\n| `cloud-shape` | Cloud | 140×64 | |\n| `callout` | Callout | 140×64 | speech, bubble |\n| `text` | Text | 120×36 | |\n| `sticky` | Sticky note | 140×100 | postit, comment |\n| `card` | Card | 140×64 | |\n| `frame` | Frame / Container (container) | 220×160 | group, container, boundary |\n| `pool.horizontal` | Pool (horizontal) (swimlane) | 360×220 | swimlane, lane, container, subsystem |\n| `pool.vertical` | Pool (vertical) (swimlane) | 220×360 | swimlane, lane, container, subsystem |\n| `image` | Image | 140×64 | picture |\n\n## Flowchart (`flowchart`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `flow.process` | Process | 140×64 | step, action |\n| `flow.alt-process` | Alternate Process | 140×64 | |\n| `flow.decision` | Decision | 140×100 | if, branch |\n| `flow.terminator` | Start / End | 130×56 | terminator, begin, stop |\n| `flow.data` | Data (I/O) | 140×64 | input, output, io |\n| `flow.document` | Document | 140×64 | |\n| `flow.multi-document` | Multi-Document | 140×64 | |\n| `flow.predefined` | Predefined Process | 140×64 | subroutine |\n| `flow.manual-input` | Manual Input | 140×64 | |\n| `flow.manual-op` | Manual Operation | 140×64 | |\n| `flow.preparation` | Preparation | 140×64 | |\n| `flow.stored-data` | Stored Data | 140×64 | |\n| `flow.database` | Database | 140×64 | db, store |\n| `flow.display` | Display | 140×64 | |\n| `flow.delay` | Delay | 140×64 | |\n| `flow.merge` | Merge | 140×64 | |\n| `flow.or` | Or | 140×64 | |\n| `flow.connector` | On-page Connector | 48×48 | |\n| `flow.off-page` | Off-page Connector | 140×64 | |\n| `flow.annotation` | Annotation | 140×64 | |\n\n## UML (`uml`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `uml.class` | Class | 140×64 | entity |\n| `uml.abstract` | Abstract Class | 140×64 | |\n| `uml.interface` | Interface | 140×64 | |\n| `uml.enum` | Enum | 140×64 | |\n| `uml.object` | Object | 140×64 | |\n| `uml.package` | Package | 140×64 | |\n| `uml.component` | Component | 140×64 | |\n| `uml.node` | Node / Deployment | 140×64 | |\n| `uml.actor` | Actor | 60×100 | user, role |\n| `uml.usecase` | Use Case | 140×64 | |\n| `uml.boundary` | Boundary | 140×64 | |\n| `uml.control` | Control | 140×64 | |\n| `uml.entity` | Entity | 140×64 | |\n| `uml.state` | State | 140×64 | |\n| `uml.initial` | Initial State | 36×36 | |\n| `uml.final` | Final State | 40×40 | |\n| `uml.decision` | Decision | 60×60 | |\n| `uml.note` | Note / Comment | 140×64 | comment |\n\n## ERD (`erd`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `erd.entity` | Entity | 140×64 | table |\n| `erd.weak-entity` | Weak Entity | 140×64 | |\n| `erd.attribute` | Attribute | 140×64 | |\n| `erd.key-attribute` | Key Attribute | 140×64 | pk, primary key |\n| `erd.multivalued` | Multivalued Attribute | 140×64 | |\n| `erd.derived` | Derived Attribute | 140×64 | |\n| `erd.relationship` | Relationship | 140×64 | |\n| `erd.identifying` | Identifying Relationship | 140×64 | |\n\n## Architecture (`networking`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `net.user` | User / Client | 60×100 | client, person |\n| `net.admin` | Admin | 60×100 | |\n| `net.browser` | Browser | 140×64 | |\n| `net.mobile` | Mobile Device | 90×130 | phone |\n| `net.desktop` | Desktop | 140×64 | |\n| `net.iot` | IoT Device | 140×64 | |\n| `net.server` | Server | 140×64 | |\n| `net.service` | Service | 140×64 | microservice |\n| `net.monolith` | Monolith | 140×64 | |\n| `net.api-gateway` | API Gateway | 140×64 | api, gateway |\n| `net.load-balancer` | Load Balancer | 140×64 | lb |\n| `net.reverse-proxy` | Reverse Proxy | 140×64 | proxy |\n| `net.firewall` | Firewall | 140×64 | waf |\n| `net.router` | Router | 140×64 | |\n| `net.switch` | Switch | 140×64 | |\n| `net.dns` | DNS | 140×64 | |\n| `net.cdn` | CDN | 140×64 | edge |\n| `net.cache` | Cache | 140×64 | |\n| `net.queue` | Queue | 140×64 | mq |\n| `net.websocket` | Web Socket | 140×64 | ws |\n| `net.rest` | REST endpoint | 140×64 | http, api |\n| `net.internet` | Internet / Cloud | 140×64 | wan |\n| `net.datacenter` | Datacenter | 140×64 | |\n| `net.container` | Container | 140×64 | |\n| `net.pod` | Pod | 140×64 | |\n| `net.vm` | Virtual Machine | 140×64 | vm |\n\n## Databases (`database`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `db.postgres` | PostgreSQL | 176×56 | postgres, pg |\n| `db.mysql` | MySQL | 176×56 | |\n| `db.mariadb` | MariaDB | 176×56 | |\n| `db.mongodb` | MongoDB | 176×56 | mongo |\n| `db.redis` | Redis | 176×56 | |\n| `db.sqlite` | SQLite | 176×56 | |\n| `db.mssql` | MS SQL Server | 176×56 | sqlserver, mssql |\n| `db.oracle` | Oracle | 176×56 | |\n| `db.cassandra` | Cassandra | 176×56 | |\n| `db.elasticsearch` | Elasticsearch | 176×56 | elastic, es |\n| `db.neo4j` | Neo4j | 176×56 | graph |\n| `db.couchdb` | CouchDB | 176×56 | couch |\n| `db.couchbase` | Couchbase | 176×56 | |\n| `db.clickhouse` | ClickHouse | 176×56 | |\n| `db.cockroachdb` | CockroachDB | 176×56 | cockroach |\n| `db.influxdb` | InfluxDB | 176×56 | influx, tsdb |\n| `db.snowflake` | Snowflake | 176×56 | |\n| `db.supabase` | Supabase | 176×56 | |\n\n## Messaging (`messaging`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `mq.kafka` | Apache Kafka | 176×56 | kafka |\n| `mq.rabbitmq` | RabbitMQ | 176×56 | rabbit, amqp |\n| `mq.nats` | NATS | 176×56 | |\n| `mq.pulsar` | Apache Pulsar | 176×56 | pulsar |\n| `mq.mqtt` | MQTT | 176×56 | |\n| `mq.pubsub` | Pub/Sub | 176×56 | pubsub |\n| `mq.activemq` | ActiveMQ | 176×56 | jms |\n\n## Languages (`language`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `lang.node` | Node.js | 176×56 | node, js runtime |\n| `lang.python` | Python | 176×56 | py |\n| `lang.java` | Java | 176×56 | jvm |\n| `lang.go` | Go | 176×56 | golang |\n| `lang.rust` | Rust | 176×56 | |\n| `lang.dotnet` | C# / .NET | 176×56 | csharp, c# |\n| `lang.typescript` | TypeScript | 176×56 | ts |\n| `lang.javascript` | JavaScript | 176×56 | js |\n| `lang.ruby` | Ruby | 176×56 | |\n| `lang.php` | PHP | 176×56 | |\n| `lang.kotlin` | Kotlin | 176×56 | |\n| `lang.swift` | Swift | 176×56 | |\n| `lang.scala` | Scala | 176×56 | |\n| `lang.elixir` | Elixir | 176×56 | |\n| `lang.cpp` | C++ | 176×56 | cpp |\n\n## Frameworks (`framework`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `fw.express` | Express | 176×56 | |\n| `fw.nestjs` | NestJS | 176×56 | nest |\n| `fw.spring` | Spring Boot | 176×56 | spring |\n| `fw.django` | Django | 176×56 | |\n| `fw.flask` | Flask | 176×56 | |\n| `fw.fastapi` | FastAPI | 176×56 | |\n| `fw.rails` | Rails | 176×56 | ruby on rails |\n| `fw.laravel` | Laravel | 176×56 | |\n| `fw.dotnet` | .NET | 176×56 | |\n| `fw.react` | React | 176×56 | |\n| `fw.vue` | Vue | 176×56 | vuejs |\n| `fw.angular` | Angular | 176×56 | |\n| `fw.next` | Next.js | 176×56 | nextjs |\n| `fw.nuxt` | Nuxt | 176×56 | nuxtjs |\n| `fw.svelte` | Svelte | 176×56 | sveltekit |\n| `fw.electron` | Electron | 176×56 | |\n| `fw.tailwind` | Tailwind | 176×56 | tailwindcss |\n| `fw.graphql` | GraphQL | 176×56 | |\n\n## DevOps / CI-CD (`devops`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `ops.docker` | Docker | 176×56 | |\n| `ops.k8s` | Kubernetes | 176×56 | k8s |\n| `ops.nginx` | Nginx | 176×56 | |\n| `ops.haproxy` | HAProxy | 176×56 | lb |\n| `ops.traefik` | Traefik | 176×56 | traefik |\n| `ops.terraform` | Terraform | 176×56 | iac |\n| `ops.ansible` | Ansible | 176×56 | |\n| `ops.jenkins` | Jenkins | 176×56 | ci |\n| `ops.gha` | GitHub Actions | 176×56 | ci, actions |\n| `ops.gitlab` | GitLab CI | 176×56 | ci |\n| `ops.argocd` | ArgoCD | 176×56 | gitops |\n| `ops.helm` | Helm | 176×56 | |\n| `ops.istio` | Istio | 176×56 | service mesh |\n| `ops.envoy` | Envoy | 176×56 | proxy |\n| `ops.consul` | Consul | 176×56 | |\n| `ops.vault` | Vault | 176×56 | secrets |\n| `ops.pm2` | PM2 | 176×56 | |\n| `ops.maven` | Maven | 176×56 | build |\n\n## Auth / Identity (`auth`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `auth.oidc` | OpenID Connect | 176×56 | oidc |\n| `auth.jwt` | JWT | 176×56 | token |\n| `auth.keycloak` | Keycloak | 176×56 | |\n| `auth.auth0` | Auth0 | 176×56 | |\n| `auth.okta` | Okta | 176×56 | |\n| `auth.firebase` | Firebase Auth | 176×56 | firebase |\n| `auth.oauth` | OAuth 2.0 | 176×56 | oauth |\n| `auth.saml` | SAML | 176×56 | |\n| `auth.ldap` | LDAP | 176×56 | |\n\n## Observability (`observability`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `obs.prometheus` | Prometheus | 176×56 | metrics |\n| `obs.grafana` | Grafana | 176×56 | dashboard |\n| `obs.datadog` | Datadog | 176×56 | |\n| `obs.sentry` | Sentry | 176×56 | errors |\n| `obs.elasticsearch` | Elasticsearch | 176×56 | elk |\n| `obs.logstash` | Logstash | 176×56 | elk |\n| `obs.kibana` | Kibana | 176×56 | elk |\n| `obs.jaeger` | Jaeger | 176×56 | tracing |\n| `obs.otel` | OpenTelemetry | 176×56 | otel, tracing |\n| `obs.newrelic` | New Relic | 176×56 | |\n\n## AWS (`aws`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `aws.ec2` | EC2 | 176×56 | aws |\n| `aws.lambda` | Lambda | 176×56 | aws |\n| `aws.s3` | S3 | 176×56 | aws |\n| `aws.ebs` | EBS | 176×56 | aws |\n| `aws.efs` | EFS | 176×56 | aws |\n| `aws.rds` | RDS | 176×56 | aws |\n| `aws.aurora` | Aurora | 176×56 | aws |\n| `aws.dynamodb` | DynamoDB | 176×56 | aws |\n| `aws.elasticache` | ElastiCache | 176×56 | aws |\n| `aws.redshift` | Redshift | 176×56 | aws |\n| `aws.vpc` | VPC | 176×56 | aws |\n| `aws.subnet` | Subnet | 176×56 | aws |\n| `aws.internet-gateway` | Internet Gateway | 176×56 | aws |\n| `aws.nat-gateway` | NAT Gateway | 176×56 | aws |\n| `aws.elb` | ELB | 176×56 | aws |\n| `aws.alb` | ALB | 176×56 | aws |\n| `aws.nlb` | NLB | 176×56 | aws |\n| `aws.api-gateway` | API Gateway | 176×56 | aws |\n| `aws.cloudfront` | CloudFront | 176×56 | aws |\n| `aws.route-53` | Route 53 | 176×56 | aws |\n| `aws.sqs` | SQS | 176×56 | aws |\n| `aws.sns` | SNS | 176×56 | aws |\n| `aws.eventbridge` | EventBridge | 176×56 | aws |\n| `aws.kinesis` | Kinesis | 176×56 | aws |\n| `aws.step-functions` | Step Functions | 176×56 | aws |\n| `aws.ecs` | ECS | 176×56 | aws |\n| `aws.eks` | EKS | 176×56 | aws |\n| `aws.fargate` | Fargate | 176×56 | aws |\n| `aws.ecr` | ECR | 176×56 | aws |\n| `aws.iam` | IAM | 176×56 | aws |\n| `aws.cognito` | Cognito | 176×56 | aws |\n| `aws.secrets-manager` | Secrets Manager | 176×56 | aws |\n| `aws.kms` | KMS | 176×56 | aws |\n| `aws.cloudwatch` | CloudWatch | 176×56 | aws |\n| `aws.cloudtrail` | CloudTrail | 176×56 | aws |\n| `aws.glue` | Glue | 176×56 | aws |\n| `aws.athena` | Athena | 176×56 | aws |\n| `aws.sagemaker` | SageMaker | 176×56 | aws |\n| `aws.appsync` | AppSync | 176×56 | aws |\n| `aws.amplify` | Amplify | 176×56 | aws |\n\n## Azure (`azure`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `azure.virtual-machine` | Virtual Machine | 176×56 | azure |\n| `azure.vm-scale-set` | VM Scale Set | 176×56 | azure |\n| `azure.app-service` | App Service | 176×56 | azure |\n| `azure.functions` | Functions | 176×56 | azure |\n| `azure.container-instances` | Container Instances | 176×56 | azure |\n| `azure.aks` | AKS | 176×56 | azure |\n| `azure.container-registry` | Container Registry | 176×56 | azure |\n| `azure.blob-storage` | Blob Storage | 176×56 | azure |\n| `azure.files` | Files | 176×56 | azure |\n| `azure.disk` | Disk | 176×56 | azure |\n| `azure.sql-database` | SQL Database | 176×56 | azure |\n| `azure.cosmos-db` | Cosmos DB | 176×56 | azure |\n| `azure.cache-for-redis` | Cache for Redis | 176×56 | azure |\n| `azure.synapse` | Synapse | 176×56 | azure |\n| `azure.virtual-network` | Virtual Network | 176×56 | azure |\n| `azure.load-balancer` | Load Balancer | 176×56 | azure |\n| `azure.application-gateway` | Application Gateway | 176×56 | azure |\n| `azure.front-door` | Front Door | 176×56 | azure |\n| `azure.service-bus` | Service Bus | 176×56 | azure |\n| `azure.event-hub` | Event Hub | 176×56 | azure |\n| `azure.event-grid` | Event Grid | 176×56 | azure |\n| `azure.key-vault` | Key Vault | 176×56 | azure |\n| `azure.entra-id` | Entra ID | 176×56 | azure |\n| `azure.monitor` | Monitor | 176×56 | azure |\n| `azure.application-insights` | Application Insights | 176×56 | azure |\n| `azure.logic-apps` | Logic Apps | 176×56 | azure |\n| `azure.api-management` | API Management | 176×56 | azure |\n\n## GCP (`gcp`)\n\n| Type | Label | Default size | Aliases |\n| --- | --- | --- | --- |\n| `gcp.compute-engine` | Compute Engine | 176×56 | gcp, google |\n| `gcp.app-engine` | App Engine | 176×56 | gcp, google |\n| `gcp.cloud-functions` | Cloud Functions | 176×56 | gcp, google |\n| `gcp.cloud-run` | Cloud Run | 176×56 | gcp, google |\n| `gcp.gke` | GKE | 176×56 | gcp, google |\n| `gcp.artifact-registry` | Artifact Registry | 176×56 | gcp, google |\n| `gcp.cloud-storage` | Cloud Storage | 176×56 | gcp, google |\n| `gcp.persistent-disk` | Persistent Disk | 176×56 | gcp, google |\n| `gcp.cloud-sql` | Cloud SQL | 176×56 | gcp, google |\n| `gcp.cloud-spanner` | Cloud Spanner | 176×56 | gcp, google |\n| `gcp.firestore` | Firestore | 176×56 | gcp, google |\n| `gcp.bigtable` | Bigtable | 176×56 | gcp, google |\n| `gcp.bigquery` | BigQuery | 176×56 | gcp, google |\n| `gcp.memorystore` | Memorystore | 176×56 | gcp, google |\n| `gcp.vpc` | VPC | 176×56 | gcp, google |\n| `gcp.cloud-load-balancing` | Cloud Load Balancing | 176×56 | gcp, google |\n| `gcp.cloud-cdn` | Cloud CDN | 176×56 | gcp, google |\n| `gcp.cloud-dns` | Cloud DNS | 176×56 | gcp, google |\n| `gcp.pub-sub` | Pub/Sub | 176×56 | gcp, google |\n| `gcp.dataflow` | Dataflow | 176×56 | gcp, google |\n| `gcp.cloud-tasks` | Cloud Tasks | 176×56 | gcp, google |\n| `gcp.iam` | IAM | 176×56 | gcp, google |\n| `gcp.secret-manager` | Secret Manager | 176×56 | gcp, google |\n| `gcp.cloud-kms` | Cloud KMS | 176×56 | gcp, google |\n| `gcp.cloud-monitoring` | Cloud Monitoring | 176×56 | gcp, google |\n| `gcp.vertex-ai` | Vertex AI | 176×56 | gcp, google |\n",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAc3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAc3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAsCjD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IA4JvE,CAAC"}
|
package/dist/resources/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { findCollection, findEnvironment, findRequest, loadTree, resolveDiagram,
|
|
|
8
8
|
import { flowDetailView, lintContext, lintFlow } from "../tools/uiTestShared.js";
|
|
9
9
|
import { CONTRACTS_DOC } from "./docs/contracts.js";
|
|
10
10
|
import { DIAGRAM_SCHEMA_DOC } from "./docs/diagramSchema.js";
|
|
11
|
+
import { MOCKS_DOC } from "./docs/mocks.js";
|
|
11
12
|
import { OVERVIEW_DOC } from "./docs/overview.js";
|
|
12
13
|
import { REQUEST_SCHEMA_DOC } from "./docs/requestSchema.js";
|
|
13
14
|
import { COLLECTION_SCRIPTS_DOC } from "./docs/collectionScripts.js";
|
|
@@ -46,6 +47,7 @@ export const registerResources = (server, ctx) => {
|
|
|
46
47
|
{ name: "docs-scripting-sandbox", uri: "callman://docs/scripting/sandbox", title: "Scripting: sandbox and feature policy", description: "Globals available in the script sandbox and the feature policy for DB/Kafka capabilities.", body: () => `${AI_PACKS["sandbox-globals"] ?? ""}\n\n${AI_PACKS["feature-policy"] ?? ""}` },
|
|
47
48
|
{ name: "docs-ui-tests", uri: "callman://docs/ui-tests", title: "UI tests", description: "UI-test concepts: platforms, header, preconditions and sub-flows, datasets and DB sources, hybrid data steps, settings, where runs happen (server runner vs your desktop app), reports and screenshots, schedules, review, masked secrets, and the recommended workflow.", body: () => UI_TESTS_DOC },
|
|
48
49
|
{ name: "docs-ui-test-steps", uri: "callman://docs/ui-test-steps", title: "UI-test step reference", description: "Every UI-test step (web / Android / iOS / hybrid data steps): aliases, platforms, forms, arguments and an example — generated from callman-core, the same catalog the linter uses.", body: () => renderUiTestCommandReference() },
|
|
50
|
+
{ name: "docs-mocks", uri: "callman://docs/mocks", title: "Mock APIs", description: "Mock APIs from an AI tool: server mocks (public URL; static, template and builder responses, variants, request validation, delay, state, auth) vs local mocks on the user's desktop app (static, 127.0.0.1), how to turn a user's request into routes, limits, errors.", body: () => MOCKS_DOC },
|
|
49
51
|
{ name: "docs-diagram-schema", uri: "callman://docs/diagram-schema", title: "Diagram schema", description: "Every node and edge field, styling (colors, borders, fonts), containers, edge semantics and colors, patch operations and merge rules, and the stored DiagramDocument.", body: () => DIAGRAM_SCHEMA_DOC },
|
|
50
52
|
];
|
|
51
53
|
for (const doc of staticDocs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3F,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,wBAAwB,GAEzB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3J,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,sEAAsE;AACtE,4EAA4E;AAC5E,6EAA6E;AAC7E,4CAA4C;AAE5C,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAE,IAAY,EAAE,QAAQ,GAAG,eAAe,EAAsB,EAAE,CAAC,CAAC;IACxF,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAE,IAAa,EAAsB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAEpH,+EAA+E;AAC/E,yCAAyC;AACzC,MAAM,QAAQ,GAAG,CAAC,KAAoC,EAAU,EAAE;IAChE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAiB,EAAE,GAAgB,EAAQ,EAAE;IAC7E,wEAAwE;IACxE,MAAM,UAAU,GAAiG;QAC/G,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,0BAA0B,EAAE,WAAW,EAAE,gGAAgG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE;QACrO,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,oPAAoP,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;QACjY,EAAE,IAAI,EAAE,yBAAyB,EAAE,GAAG,EAAE,mCAAmC,EAAE,KAAK,EAAE,sCAAsC,EAAE,WAAW,EAAE,6KAA6K,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAC5V,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,uHAAuH,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE;QACtP,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,kNAAkN,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,2BAA2B,EAAE,EAAE;QACnX,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,EAAE,iCAAiC,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,kFAAkF,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,EAAE;QAC5O,EAAE,IAAI,EAAE,2BAA2B,EAAE,GAAG,EAAE,qCAAqC,EAAE,KAAK,EAAE,6BAA6B,EAAE,WAAW,EAAE,iDAAiD,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE,EAAE;QAC7N,EAAE,IAAI,EAAE,2BAA2B,EAAE,GAAG,EAAE,qCAAqC,EAAE,KAAK,EAAE,0CAA0C,EAAE,WAAW,EAAE,iFAAiF,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,EAAE;QAC3Q,EAAE,IAAI,EAAE,wBAAwB,EAAE,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,uCAAuC,EAAE,WAAW,EAAE,2FAA2F,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE;QAChU,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,0QAA0Q,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE;QAC/X,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,8BAA8B,EAAE,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,oLAAoL,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,4BAA4B,EAAE,EAAE;QACnV,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,uKAAuK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;KACrT,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClK,CAAC;IAED,wEAAwE;IACxE,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,2BAA2B,EAAE,CAAC;QAC9C,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/C,QAAQ;YACR,KAAK,EAAE,uBAAuB,CAAC,QAAQ,CAAC;YACxC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAChD,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IACN,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CACrB,oBAAoB,EACpB,8BAA8B,EAC9B,EAAE,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,qHAAqH,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACxM,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,6OAA6O,EAAE,CAAC,CACzS,CAAC;IACF,MAAM,CAAC,gBAAgB,CACrB,6BAA6B,EAC7B,IAAI,gBAAgB,CAAC,yCAAyC,EAAE;QAC9D,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,sBAAsB,CAAC,EAAE;KAC1D,CAAC,EACF,EAAE,KAAK,EAAE,oCAAoC,EAAE,WAAW,EAAE,0CAA0C,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAC1K,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAA6B,CAAC;QAC1E,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,aAAa,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3G,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC,CACF,CAAC;IAEF,wEAAwE;IACxE,MAAM,CAAC,gBAAgB,CACrB,YAAY,EACZ,sBAAsB,EACtB,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sDAAsD,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAC/H,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CACrE,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,uBAAuB,EACvB,IAAI,gBAAgB,CAAC,6CAA6C,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACxF,EAAE,KAAK,EAAE,4BAA4B,EAAE,WAAW,EAAE,8DAA8D,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAClJ,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1P,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,wBAAwB,EACxB,IAAI,gBAAgB,CAAC,8CAA8C,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACzF,EAAE,KAAK,EAAE,6BAA6B,EAAE,WAAW,EAAE,sEAAsE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAC3J,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3N,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,iBAAiB,EACjB,IAAI,gBAAgB,CAAC,wCAAwC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACnF,EAAE,KAAK,EAAE,qCAAqC,EAAE,WAAW,EAAE,8EAA8E,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAC3K,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAChG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC5L,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,SAAS,EACT,IAAI,gBAAgB,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACxE,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,4EAA4E,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACrJ,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,aAAa,EACb,IAAI,gBAAgB,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAChF,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,sFAAsF,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAC9J,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QAClG,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjI,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,UAAU,EACV,IAAI,gBAAgB,CAAC,+BAA+B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC1E,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,oFAAoF,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACxJ,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,SAAS,EACT,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACrE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,oHAAoH,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACvL,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvJ,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5H,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,SAAS,EACT,IAAI,gBAAgB,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACxE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,8DAA8D,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACjI,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1J,CAAC,CACF,CAAC;AAEJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeCollection.d.ts","sourceRoot":"","sources":["../../src/run/executeCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/I,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQlF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAGvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,KAAK,IAAI,CAAC;CACnH;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,eAAe,KAAG,
|
|
1
|
+
{"version":3,"file":"executeCollection.d.ts","sourceRoot":"","sources":["../../src/run/executeCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/I,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQlF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAGvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,KAAK,IAAI,CAAC;CACnH;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,eAAe,KAAG,OAWvD,CAAC;AASF,eAAO,MAAM,iBAAiB,GAAU,iGAUrC,cAAc,KAAG,OAAO,CAAC,UAAU,CAyGrC,CAAC"}
|
|
@@ -6,7 +6,9 @@ export const requestFailed = (result) => {
|
|
|
6
6
|
return (result.status === 0 ||
|
|
7
7
|
result.status >= 400 ||
|
|
8
8
|
result.scriptResults.some((test) => test.status === "FAIL") ||
|
|
9
|
-
result.contractResults.some((test) => test.status === "FAIL")
|
|
9
|
+
result.contractResults.some((test) => test.status === "FAIL") ||
|
|
10
|
+
(result.dbAssertionResults ?? []).some((assertion) => assertion.status === "FAIL") ||
|
|
11
|
+
(result.redisAssertionResults ?? []).some((assertion) => assertion.status === "FAIL"));
|
|
10
12
|
};
|
|
11
13
|
const diffEnv = (before, after, set, unset) => {
|
|
12
14
|
for (const key of Object.keys(after)) {
|
|
@@ -73,6 +75,8 @@ export const executeCollection = async ({ collection, env, globals = {}, connect
|
|
|
73
75
|
request: iteration.request,
|
|
74
76
|
scriptResults: iteration.scriptResults,
|
|
75
77
|
contractResults: iteration.contractResults,
|
|
78
|
+
...(iteration.dbAssertionResults ? { dbAssertionResults: iteration.dbAssertionResults } : {}),
|
|
79
|
+
...(iteration.redisAssertionResults ? { redisAssertionResults: iteration.redisAssertionResults } : {}),
|
|
76
80
|
passed: iteration.passed,
|
|
77
81
|
};
|
|
78
82
|
results.push(result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeCollection.js","sourceRoot":"","sources":["../../src/run/executeCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,qBAAqB,EAAmD,MAAM,cAAc,CAAC;AA2B/I,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAuB,EAAW,EAAE;IAChE,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9D,sEAAsE;IACtE,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,MAAM,CAAC,MAAM,IAAI,GAAG;QACpB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QAC3D,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"executeCollection.js","sourceRoot":"","sources":["../../src/run/executeCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadBundle.d.ts","sourceRoot":"","sources":["../../src/run/loadBundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,oBAAoB,
|
|
1
|
+
{"version":3,"file":"loadBundle.d.ts","sourceRoot":"","sources":["../../src/run/loadBundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,oBAAoB,EAQrB,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAmB,MAAM,YAAY,CAAC;AAqNtE,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,kBAiEnD,CAAC;AAkBF,eAAO,MAAM,yBAAyB,GACpC,aAAa,cAAc,CAAC,aAAa,CAAC,KACzC;IAAE,GAAG,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAgDhD,CAAC"}
|
package/dist/run/loadBundle.js
CHANGED
|
@@ -119,15 +119,60 @@ const commandStrings = (value) => Array.isArray(value)
|
|
|
119
119
|
.map((entry) => (typeof entry === "string" ? entry : isRecord(entry) && typeof entry.command === "string" ? entry.command : ""))
|
|
120
120
|
.filter((command) => command.trim().length > 0)
|
|
121
121
|
: [];
|
|
122
|
+
const DB_ASSERTION_SOURCES = ["db_pre", "db_post"];
|
|
123
|
+
const DB_ASSERTION_OPERATORS = ["equals", "not_equals", "exists", "gt", "lt"];
|
|
124
|
+
const REDIS_ASSERTION_OPERATORS = ["equals", "contains", "exists", "not_exists", "gt"];
|
|
125
|
+
// Expected values are strings in the editor; a hand-written bundle may carry a
|
|
126
|
+
// number or boolean, and the evaluators compare strings.
|
|
127
|
+
const assertionText = (value) => typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? String(value) : "";
|
|
128
|
+
// A malformed assertion is dropped rather than failing the whole bundle.
|
|
129
|
+
const dbAssertionsOf = (request) => {
|
|
130
|
+
if (!Array.isArray(request.dbAssertions))
|
|
131
|
+
return undefined;
|
|
132
|
+
const assertions = request.dbAssertions.flatMap((entry, index) => isRecord(entry) && typeof entry.field === "string"
|
|
133
|
+
? [
|
|
134
|
+
{
|
|
135
|
+
id: typeof entry.id === "string" && entry.id ? entry.id : `db-assertion-${index + 1}`,
|
|
136
|
+
name: typeof entry.name === "string" && entry.name.trim() ? entry.name : `DB assertion ${index + 1}`,
|
|
137
|
+
source: DB_ASSERTION_SOURCES.includes(entry.source) ? entry.source : "db_post",
|
|
138
|
+
field: entry.field,
|
|
139
|
+
operator: DB_ASSERTION_OPERATORS.includes(entry.operator) ? entry.operator : "equals",
|
|
140
|
+
valueType: entry.valueType === "response" ? "response" : "static",
|
|
141
|
+
value: assertionText(entry.value),
|
|
142
|
+
},
|
|
143
|
+
]
|
|
144
|
+
: []);
|
|
145
|
+
return assertions.length > 0 ? assertions : undefined;
|
|
146
|
+
};
|
|
147
|
+
const redisAssertionsOf = (redis) => Array.isArray(redis.assertions)
|
|
148
|
+
? redis.assertions.flatMap((entry, index) => isRecord(entry) && typeof entry.key === "string"
|
|
149
|
+
? [
|
|
150
|
+
{
|
|
151
|
+
id: typeof entry.id === "string" && entry.id ? entry.id : `redis-assertion-${index + 1}`,
|
|
152
|
+
name: typeof entry.name === "string" && entry.name.trim() ? entry.name : `Redis assertion ${index + 1}`,
|
|
153
|
+
key: entry.key,
|
|
154
|
+
operator: REDIS_ASSERTION_OPERATORS.includes(entry.operator) ? entry.operator : "equals",
|
|
155
|
+
value: assertionText(entry.value),
|
|
156
|
+
},
|
|
157
|
+
]
|
|
158
|
+
: [])
|
|
159
|
+
: [];
|
|
122
160
|
const redisOf = (request) => {
|
|
123
161
|
if (!isRecord(request.redis))
|
|
124
162
|
return undefined;
|
|
125
163
|
const preCommands = commandStrings(request.redis.preCommands);
|
|
126
164
|
const postCommands = commandStrings(request.redis.postCommands);
|
|
165
|
+
const assertions = redisAssertionsOf(request.redis);
|
|
127
166
|
const connectionId = typeof request.redis.connectionId === "string" ? request.redis.connectionId : null;
|
|
128
|
-
if (!connectionId && preCommands.length === 0 && postCommands.length === 0)
|
|
167
|
+
if (!connectionId && preCommands.length === 0 && postCommands.length === 0 && assertions.length === 0)
|
|
129
168
|
return undefined;
|
|
130
|
-
return {
|
|
169
|
+
return {
|
|
170
|
+
enabled: request.redis.enabled === true,
|
|
171
|
+
connectionId,
|
|
172
|
+
preCommands,
|
|
173
|
+
postCommands,
|
|
174
|
+
...(assertions.length > 0 ? { assertions } : {}),
|
|
175
|
+
};
|
|
131
176
|
};
|
|
132
177
|
const dataContractOf = (request) => {
|
|
133
178
|
const raw = request.dataContract;
|
|
@@ -162,6 +207,7 @@ export const validateCollection = (input) => {
|
|
|
162
207
|
const contracts = Array.isArray(request.contracts) ? request.contracts : Array.isArray(request.contractRules) ? request.contractRules : undefined;
|
|
163
208
|
const database = databaseOf(request);
|
|
164
209
|
const redis = redisOf(request);
|
|
210
|
+
const dbAssertions = dbAssertionsOf(request);
|
|
165
211
|
const dataContract = dataContractOf(request);
|
|
166
212
|
return {
|
|
167
213
|
id: request.id.trim(),
|
|
@@ -180,6 +226,7 @@ export const validateCollection = (input) => {
|
|
|
180
226
|
contracts,
|
|
181
227
|
...(database ? { database } : {}),
|
|
182
228
|
...(redis ? { redis } : {}),
|
|
229
|
+
...(dbAssertions ? { dbAssertions } : {}),
|
|
183
230
|
...(dataContract ? { dataContract } : {}),
|
|
184
231
|
};
|
|
185
232
|
});
|