elasticdash-sdk 0.2.0 → 0.2.5
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/dist/cli.js +86 -1
- package/dist/cli.js.map +1 -1
- package/dist/execution/tool-runner.d.ts.map +1 -1
- package/dist/execution/tool-runner.js +16 -7
- package/dist/execution/tool-runner.js.map +1 -1
- package/dist/index.cjs +161 -11
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/http.d.ts.map +1 -1
- package/dist/interceptors/http.js +75 -2
- package/dist/interceptors/http.js.map +1 -1
- package/dist/interceptors/telemetry-push.d.ts +22 -0
- package/dist/interceptors/telemetry-push.d.ts.map +1 -1
- package/dist/interceptors/telemetry-push.js +81 -0
- package/dist/interceptors/telemetry-push.js.map +1 -1
- package/dist/interceptors/tool.d.ts.map +1 -1
- package/dist/interceptors/tool.js +35 -1
- package/dist/interceptors/tool.js.map +1 -1
- package/dist/internals/errors.d.ts +10 -0
- package/dist/internals/errors.d.ts.map +1 -0
- package/dist/internals/errors.js +14 -0
- package/dist/internals/errors.js.map +1 -0
- package/dist/internals/mock-resolver.d.ts +5 -0
- package/dist/internals/mock-resolver.d.ts.map +1 -1
- package/dist/internals/mock-resolver.js +26 -3
- package/dist/internals/mock-resolver.js.map +1 -1
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +9 -0
- package/dist/observability.js.map +1 -1
- package/dist/workflow-runner-worker.js +16 -3
- package/dist/workflow-runner-worker.js.map +1 -1
- package/dist/workflow-runner.d.ts.map +1 -1
- package/dist/workflow-runner.js +11 -0
- package/dist/workflow-runner.js.map +1 -1
- package/docs/partial-mocking.md +191 -0
- package/package.json +1 -1
- package/src/cli.ts +87 -2
- package/src/execution/tool-runner.ts +16 -7
- package/src/index.ts +4 -0
- package/src/interceptors/http.ts +66 -1
- package/src/interceptors/telemetry-push.ts +80 -0
- package/src/interceptors/tool.ts +33 -1
- package/src/internals/errors.ts +14 -0
- package/src/internals/mock-resolver.ts +25 -3
- package/src/observability.ts +10 -0
- package/src/workflow-runner-worker.ts +18 -2
- package/src/workflow-runner.ts +9 -0
|
@@ -23,6 +23,7 @@ import { interceptFetch, restoreFetch } from './interceptors/http.js';
|
|
|
23
23
|
import { interceptRandom, restoreRandom, interceptDateNow, restoreDateNow, rawDateNow } from './interceptors/side-effects.js';
|
|
24
24
|
import { installDBAutoInterceptor, uninstallDBAutoInterceptor } from './interceptors/db-auto.js';
|
|
25
25
|
import { pathToFileURL } from 'node:url';
|
|
26
|
+
import { ElasticdashStrictModeError } from './internals/errors.js';
|
|
26
27
|
import fs from 'node:fs';
|
|
27
28
|
const TOOL_WRAPPER_ACTIVE_KEY = '__elasticdash_tool_wrapper_active__';
|
|
28
29
|
async function readStdin() {
|
|
@@ -60,7 +61,7 @@ function writeResult(result) {
|
|
|
60
61
|
});
|
|
61
62
|
}
|
|
62
63
|
/** Minimal inline tool-wrapping — records each tool call to the trace. */
|
|
63
|
-
async function loadAndWrapTools(toolsModulePath, trace, toolMockConfig) {
|
|
64
|
+
async function loadAndWrapTools(toolsModulePath, trace, toolMockConfig, strict) {
|
|
64
65
|
try {
|
|
65
66
|
// Use absolute file URL for ESM import
|
|
66
67
|
const toolsMod = await import(pathToFileURL(toolsModulePath).href);
|
|
@@ -122,6 +123,16 @@ async function loadAndWrapTools(toolsModulePath, trace, toolMockConfig) {
|
|
|
122
123
|
toolCallCounters[name] = 0;
|
|
123
124
|
toolCallCounters[name]++;
|
|
124
125
|
}
|
|
126
|
+
// Strict mode: no replay match, no mock hit → fail closed and
|
|
127
|
+
// record the failed call so envelopes/trace surfaces show why.
|
|
128
|
+
if (strict) {
|
|
129
|
+
const err = new ElasticdashStrictModeError(name);
|
|
130
|
+
const durationMs = rawDateNow() - start;
|
|
131
|
+
if (ctx)
|
|
132
|
+
ctx.recorder.record({ id, type: 'tool', name, input: recordedArgs, output: { error: err.message }, timestamp: start, durationMs });
|
|
133
|
+
trace.recordToolCall({ name, args: recordedArgs, result: { error: err.message }, workflowEventId: id, durationMs });
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
125
136
|
const g = globalThis;
|
|
126
137
|
const prev = g[TOOL_WRAPPER_ACTIVE_KEY];
|
|
127
138
|
const restoreWrapperFlag = () => {
|
|
@@ -184,7 +195,7 @@ async function main() {
|
|
|
184
195
|
originalExit(1);
|
|
185
196
|
return;
|
|
186
197
|
}
|
|
187
|
-
const { workflowsModulePath, toolsModulePath, workflowName, args, input, replayMode = false, checkpoint = 0, history = [], agentState, toolMockConfig, aiMockConfig, promptMockConfig, userPromptMockConfig } = payload;
|
|
198
|
+
const { workflowsModulePath, toolsModulePath, workflowName, args, input, replayMode = false, checkpoint = 0, history = [], agentState, toolMockConfig, aiMockConfig, promptMockConfig, userPromptMockConfig, strict } = payload;
|
|
188
199
|
const { context, finalise } = startTraceSession();
|
|
189
200
|
setCurrentTrace(context.trace);
|
|
190
201
|
const recorder = new TraceRecorder();
|
|
@@ -198,7 +209,7 @@ async function main() {
|
|
|
198
209
|
const originalValues = {};
|
|
199
210
|
let wrappedTools = {};
|
|
200
211
|
if (toolsModulePath) {
|
|
201
|
-
wrappedTools = await loadAndWrapTools(toolsModulePath, context.trace, toolMockConfig);
|
|
212
|
+
wrappedTools = await loadAndWrapTools(toolsModulePath, context.trace, toolMockConfig, strict);
|
|
202
213
|
for (const [name, fn] of Object.entries(wrappedTools)) {
|
|
203
214
|
originalValues[name] = globals[name];
|
|
204
215
|
globals[name] = fn;
|
|
@@ -226,6 +237,7 @@ async function main() {
|
|
|
226
237
|
globalThis.__ELASTICDASH_PROMPT_CALL_COUNTERS__ = {};
|
|
227
238
|
globalThis.__ELASTICDASH_USER_PROMPT_MOCKS__ = userPromptMockConfig ?? {};
|
|
228
239
|
globalThis.__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__ = {};
|
|
240
|
+
globalThis.__ELASTICDASH_STRICT__ = strict === true;
|
|
229
241
|
await installDBAutoInterceptor();
|
|
230
242
|
installAIInterceptor();
|
|
231
243
|
interceptFetch();
|
|
@@ -295,6 +307,7 @@ async function main() {
|
|
|
295
307
|
delete globalThis.__ELASTICDASH_PROMPT_CALL_COUNTERS__;
|
|
296
308
|
delete globalThis.__ELASTICDASH_USER_PROMPT_MOCKS__;
|
|
297
309
|
delete globalThis.__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__;
|
|
310
|
+
delete globalThis.__ELASTICDASH_STRICT__;
|
|
298
311
|
}
|
|
299
312
|
await recorder.flush();
|
|
300
313
|
const traceData = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-runner-worker.js","sourceRoot":"","sources":["../src/workflow-runner-worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-runner-worker.js","sourceRoot":"","sources":["../src/workflow-runner-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-runner.d.ts","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"workflow-runner.d.ts","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CA2C/B"}
|
package/dist/workflow-runner.js
CHANGED
|
@@ -21,6 +21,17 @@ export async function runWorkflow(workflowFn, options = {}) {
|
|
|
21
21
|
await maybeCaptureTrace(trace.events, trace.traceId);
|
|
22
22
|
return { result, trace };
|
|
23
23
|
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
// Attach the partial trace so the caller can include any events recorded
|
|
26
|
+
// before the throw (e.g. strict-mode tool calls that fail-closed).
|
|
27
|
+
try {
|
|
28
|
+
await recorder.flush();
|
|
29
|
+
const trace = recorder.toTrace();
|
|
30
|
+
e.trace = trace;
|
|
31
|
+
}
|
|
32
|
+
catch { /* best-effort */ }
|
|
33
|
+
throw e;
|
|
34
|
+
}
|
|
24
35
|
finally {
|
|
25
36
|
if (interceptHttp)
|
|
26
37
|
restoreFetch();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-runner.js","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACjH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAgBxD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA4B,EAC5B,UAA8B,EAAE;IAEhC,MAAM,EACJ,UAAU,GAAG,KAAK,EAClB,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,EACpB,oBAAoB,GAAG,IAAI,GAC5B,GAAG,OAAO,CAAA;IAEX,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAEpE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvC,IAAI,aAAa;QAAE,cAAc,EAAE,CAAA;IACnC,IAAI,oBAAoB,EAAE,CAAC;QACzB,eAAe,EAAE,CAAA;QACjB,gBAAgB,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;QACjC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;QAChC,MAAM,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACpD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC1B,CAAC;YAAS,CAAC;QACT,IAAI,aAAa;YAAE,YAAY,EAAE,CAAA;QACjC,IAAI,oBAAoB,EAAE,CAAC;YACzB,aAAa,EAAE,CAAA;YACf,cAAc,EAAE,CAAA;QAClB,CAAC;QACD,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"workflow-runner.js","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACjH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAgBxD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA4B,EAC5B,UAA8B,EAAE;IAEhC,MAAM,EACJ,UAAU,GAAG,KAAK,EAClB,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,EACpB,oBAAoB,GAAG,IAAI,GAC5B,GAAG,OAAO,CAAA;IAEX,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAEpE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvC,IAAI,aAAa;QAAE,cAAc,EAAE,CAAA;IACnC,IAAI,oBAAoB,EAAE,CAAC;QACzB,eAAe,EAAE,CAAA;QACjB,gBAAgB,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;QACjC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;QAChC,MAAM,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACpD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yEAAyE;QACzE,mEAAmE;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;YACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,CAC/B;YAAC,CAA+B,CAAC,KAAK,GAAG,KAAK,CAAA;QACjD,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAA;IACT,CAAC;YAAS,CAAC;QACT,IAAI,aAAa;YAAE,YAAY,EAAE,CAAA;QACjC,IAAI,oBAAoB,EAAE,CAAC;YACzB,aAAa,EAAE,CAAA;YACf,cAAc,EAAE,CAAA;QAClB,CAAC;QACD,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Partial Mocking (SDK)
|
|
2
|
+
|
|
3
|
+
This is the SDK-side reference. For the user-facing surface (how to actually request a partial-mock rerun via the MCP), see the [MCP partial-mocking guide](https://github.com/jiangjiahao/ElasticDash-MCP/blob/main/docs/partial-mocking.md).
|
|
4
|
+
|
|
5
|
+
The SDK provides three pieces:
|
|
6
|
+
|
|
7
|
+
1. **`--mock-config-file <path>`** on `elasticdash run-workflow` — feeds the CLI subprocess with a mock config.
|
|
8
|
+
2. **`ElasticdashStrictModeError`** — thrown by `wrapTool` when strict mode is on and a tool call isn't covered by a mock.
|
|
9
|
+
3. **`applyInboundMockConfig(req)`** — exported helper for **HTTP-mode workflows**: reads the `x-elasticdash-mock-config` header set by the CLI's `fetch` interceptor and seeds per-request mocks inside the receiving server process.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Mock config file shape
|
|
14
|
+
|
|
15
|
+
The MCP writes this for you. You only hand-write it for ad-hoc CLI testing.
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"default_mode": "mockAll",
|
|
20
|
+
"strict": true,
|
|
21
|
+
"toolMockConfig": {
|
|
22
|
+
"searchPokemon": {
|
|
23
|
+
"mode": "mock-all",
|
|
24
|
+
"mockData": {
|
|
25
|
+
"1": { "results": [...] },
|
|
26
|
+
"2": { "results": [...] }
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"sendEmail": { "mode": "live" }
|
|
30
|
+
},
|
|
31
|
+
"aiMockConfig": {
|
|
32
|
+
"claude-sonnet-4-5": {
|
|
33
|
+
"mode": "mock-all",
|
|
34
|
+
"mockData": { "1": "<recorded response text>" }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
| Field | Meaning |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `default_mode: "mockAll"` | Implies `strict: true`. Anything not covered by `toolMockConfig` throws. |
|
|
43
|
+
| `default_mode: "liveAll"` | Inverse: live by default, mock only what's listed. `strict` defaults to `false`. |
|
|
44
|
+
| `mode: "mock-all"` + `mockData["N"]` | The Nth call to this tool returns `mockData["N"]`. 1-based call index. |
|
|
45
|
+
| `mode: "live"` | Explicit allowlist marker. Tool runs live AND bypasses strict mode. |
|
|
46
|
+
| `mode: "mock-specific"` + `callIndices: [...]` | Only mock specific indices; others run live. |
|
|
47
|
+
|
|
48
|
+
**Important**: `mockData["N"]` is returned verbatim. The caller usually destructures fields. If your mock is missing fields the downstream code reads, you'll see confusing behavior — not a mock failure, just incomplete mock data. Mirror your tool's real return type. Or use the MCP, which auto-fills every field from a trace.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Pattern A — In-process workflows
|
|
53
|
+
|
|
54
|
+
If your workflow body imports and calls wrapped tools directly:
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import { searchPokemon } from './ed_tools';
|
|
58
|
+
|
|
59
|
+
export async function lookupFlow(input: { name: string }) {
|
|
60
|
+
return await searchPokemon({ searchterm: input.name });
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
…then `--mock-config-file` Just Works. The CLI seeds `globalThis.__ELASTICDASH_TOOL_MOCKS__`; `wrapTool`'s capture-context branch consults them via the internal `resolveMock` helper. Strict mode: any tool that isn't in `toolMockConfig` and isn't marked `mode: "live"` throws `ElasticdashStrictModeError`, captured as a tool event with `has_error: true` so the envelope still surfaces the halt.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Pattern B — HTTP-mode workflows (the bridge)
|
|
69
|
+
|
|
70
|
+
If your workflow body makes an HTTP request into a separate server process:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
export const chatHandler = async (input) => {
|
|
74
|
+
const res = await fetch(`${APP_URL}/api/chat`, { ... });
|
|
75
|
+
return res.json();
|
|
76
|
+
};
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
…the tools execute inside the dev server, not the CLI subprocess. Mock globals don't cross process boundaries. You need one line at the receiving handler's entry.
|
|
80
|
+
|
|
81
|
+
### Outbound (automatic)
|
|
82
|
+
|
|
83
|
+
When `--mock-config-file` is in effect, the CLI's `fetch` interceptor (`src/interceptors/http.ts`) reads `__ELASTICDASH_TOOL_MOCKS__` / `__ELASTICDASH_AI_MOCKS__` / `__ELASTICDASH_STRICT__`, encodes them as base64 JSON, and attaches an `x-elasticdash-mock-config` header on every outbound fetch. Zero user code.
|
|
84
|
+
|
|
85
|
+
### Inbound (one line)
|
|
86
|
+
|
|
87
|
+
In your route / request handler:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { applyInboundMockConfig } from 'elasticdash-sdk';
|
|
91
|
+
|
|
92
|
+
export async function POST(request) {
|
|
93
|
+
applyInboundMockConfig(request);
|
|
94
|
+
// ... rest of your handler unchanged ...
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
That's it. The helper:
|
|
99
|
+
|
|
100
|
+
1. Reads the `x-elasticdash-mock-config` header from `request.headers`.
|
|
101
|
+
2. Base64-decodes the JSON payload.
|
|
102
|
+
3. Builds an `HttpRunContext` with the decoded mocks (merging into any context already present from `initHttpRunContext` / dashboard mode).
|
|
103
|
+
4. Calls `httpRunAls.enterWith(ctx)` — scopes the context to the current request's async chain via AsyncLocalStorage.
|
|
104
|
+
5. Returns. Every `wrapTool` / `wrapAI` call inside the handler sees the mocks via `getHttpToolMock` / `getHttpAIMock`.
|
|
105
|
+
|
|
106
|
+
Concurrent requests with different mock configs (or no mocks at all) run in parallel without interfering. No file is read, no env var consulted, no global state polluted.
|
|
107
|
+
|
|
108
|
+
#### Next.js + Turbopack note
|
|
109
|
+
|
|
110
|
+
If Turbopack flags `elasticdash-sdk` as "Module not found" at build time (some configs do this for `serverExternalPackages`), use `eval('require')`:
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
try {
|
|
114
|
+
const { applyInboundMockConfig } = (eval('require') as any)('elasticdash-sdk');
|
|
115
|
+
applyInboundMockConfig(request);
|
|
116
|
+
} catch { /* SDK not installed — proceed live */ }
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This is the same pattern users already use for `initHttpRunContext` for dashboard mode. The `try/catch` makes the SDK a soft dependency: if it's not present in prod, the route still works.
|
|
120
|
+
|
|
121
|
+
#### Polymorphic input
|
|
122
|
+
|
|
123
|
+
`applyInboundMockConfig` accepts anything with `headers.get(name)` or `headers[name]`:
|
|
124
|
+
|
|
125
|
+
| Framework | Pass |
|
|
126
|
+
|---|---|
|
|
127
|
+
| Next.js | `NextRequest` |
|
|
128
|
+
| Express / Hono / Fastify / Polka | the request object |
|
|
129
|
+
| Plain Node `http` | the `IncomingMessage` |
|
|
130
|
+
| Whatwg `Request` (Cloudflare Workers, Deno) | the `Request` |
|
|
131
|
+
|
|
132
|
+
No adapter needed.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## What `ElasticdashStrictModeError` looks like
|
|
137
|
+
|
|
138
|
+
```ts
|
|
139
|
+
class ElasticdashStrictModeError extends Error {
|
|
140
|
+
name = 'ElasticdashStrictModeError'
|
|
141
|
+
tool_name: string
|
|
142
|
+
// message: `tool "<name>" called but no mock entry. Add it to live_tools or to mocked_tools.`
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Captured into the trace as a tool event with `has_error: true` and the message in `output.error`. The MCP `rerun_workflow_mocked` finds these by regex on the output preview and surfaces them as `in_neither_halt` findings in its report.
|
|
147
|
+
|
|
148
|
+
If you want to handle strict-mode failures yourself (e.g. log + continue), catch on `instanceof ElasticdashStrictModeError`:
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
import { ElasticdashStrictModeError } from 'elasticdash-sdk';
|
|
152
|
+
|
|
153
|
+
try {
|
|
154
|
+
await someWrappedTool(...);
|
|
155
|
+
} catch (err) {
|
|
156
|
+
if (err instanceof ElasticdashStrictModeError) { /* ... */ }
|
|
157
|
+
else throw err;
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Limitations
|
|
164
|
+
|
|
165
|
+
| | |
|
|
166
|
+
|---|---|
|
|
167
|
+
| **Strict mode is global on the receiver side.** | Concurrent inbound requests with mixed `strict` values currently share a single flag. v1 sets it on; v2 will move it to `HttpRunContext` for per-request scoping. |
|
|
168
|
+
| **Header size.** | Base64 JSON of typical configs is well under 4KB. If you mock 100+ tools each with multi-KB outputs, you may approach HTTP header limits (~8-16KB). Switch to a smaller subset, or wait for v1.1 which will offer compressed encoding. |
|
|
169
|
+
| **Cross-origin leaks.** | The CLI attaches the header to every outbound `fetch`. External APIs (PokéAPI, OpenAI) see it. They'll ignore unknown headers, but if your tools call sensitive third parties, audit your mock contents. |
|
|
170
|
+
| **In-process strict checks read globals; HTTP-mode strict reads context.** | Both work, just via different mechanisms. The MCP-generated config produces identical envelopes for both paths. |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Quick reference
|
|
175
|
+
|
|
176
|
+
| API | Module | Used by |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| `applyInboundMockConfig(req)` | `'elasticdash-sdk'` | Route handlers receiving mocked workflow runs |
|
|
179
|
+
| `ElasticdashStrictModeError` | `'elasticdash-sdk'` | Catch-and-handle strict halts |
|
|
180
|
+
| `wrapTool` | `'elasticdash-sdk'` | Tool registration (existing — no change) |
|
|
181
|
+
| `wrapAI` | `'elasticdash-sdk'` | AI call wrapping (existing — no change) |
|
|
182
|
+
| `setHttpRunContext` / `initHttpRunContext` | `'elasticdash-sdk'` | Dashboard mode (existing — no change) |
|
|
183
|
+
| `--mock-config-file <path>` | CLI flag on `elasticdash run-workflow` | Direct CLI testing; the MCP uses it under the hood |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Related
|
|
188
|
+
|
|
189
|
+
- [MCP partial-mocking guide](https://github.com/jiangjiahao/ElasticDash-MCP/blob/main/docs/partial-mocking.md) — user-facing flows, profiles, the rerun report
|
|
190
|
+
- [`docs/workflow-modes.md`](./workflow-modes.md) — HTTP-mode vs in-process workflow definitions
|
|
191
|
+
- [`docs/observability_mode.md`](./observability_mode.md) — dashboard-driven telemetry
|
package/package.json
CHANGED
package/src/cli.ts
CHANGED
|
@@ -641,7 +641,15 @@ async function bootstrap(): Promise<void> {
|
|
|
641
641
|
.option('--input <json>', 'JSON input to pass to the workflow')
|
|
642
642
|
.option('--input-file <path>', 'Path to JSON file with input')
|
|
643
643
|
.option('--timeout-seconds <n>', 'Hard cap on a single run in seconds', (v) => Number(v), 300)
|
|
644
|
-
.
|
|
644
|
+
.option('--mock-config-file <path>', 'Path to a JSON file with toolMockConfig / aiMockConfig / strict. Used by the ElasticDash MCP to drive replay-mock-strict runs.')
|
|
645
|
+
.action(async (name: string, options: { input?: string; inputFile?: string; timeoutSeconds: number; mockConfigFile?: string }) => {
|
|
646
|
+
// Propagate the requested workflow name to observability so the trace
|
|
647
|
+
// is tagged correctly. Without this, observability's scanner-based
|
|
648
|
+
// auto-detect could pick a different export when the scanner misses
|
|
649
|
+
// arrow-fn exports with return-type annotations, or when multiple
|
|
650
|
+
// candidates exist. The CLI is the source of truth here.
|
|
651
|
+
process.env.ELASTICDASH_WORKFLOW_NAME = name
|
|
652
|
+
|
|
645
653
|
const workflowsModulePath = resolveRuntimeModule(cwd, 'ed_workflows')
|
|
646
654
|
if (!workflowsModulePath) {
|
|
647
655
|
console.error(`[elasticdash] Error: Could not find ed_workflows.ts or ed_workflows.js in ${cwd}`)
|
|
@@ -681,6 +689,42 @@ async function bootstrap(): Promise<void> {
|
|
|
681
689
|
process.exit(1)
|
|
682
690
|
}
|
|
683
691
|
|
|
692
|
+
// Optional mock config — drives in-process resolveMock/resolveAIMock and
|
|
693
|
+
// wrapTool strict-mode checks via the same __ELASTICDASH_*__ globals the
|
|
694
|
+
// worker subprocess sets.
|
|
695
|
+
let toolMockConfig: Record<string, unknown> | undefined
|
|
696
|
+
let aiMockConfig: Record<string, unknown> | undefined
|
|
697
|
+
let strictMode = false
|
|
698
|
+
if (options.mockConfigFile) {
|
|
699
|
+
let cfg: unknown
|
|
700
|
+
try {
|
|
701
|
+
cfg = JSON.parse(readFileSync(path.resolve(cwd, options.mockConfigFile), 'utf-8'))
|
|
702
|
+
} catch (err) {
|
|
703
|
+
console.error(`[elasticdash] Error: Failed to read --mock-config-file: ${err instanceof Error ? err.message : String(err)}`)
|
|
704
|
+
process.exit(1)
|
|
705
|
+
}
|
|
706
|
+
if (!cfg || typeof cfg !== 'object' || Array.isArray(cfg)) {
|
|
707
|
+
console.error('[elasticdash] Error: --mock-config-file must contain a JSON object with optional toolMockConfig, aiMockConfig, strict.')
|
|
708
|
+
process.exit(1)
|
|
709
|
+
}
|
|
710
|
+
const c = cfg as Record<string, unknown>
|
|
711
|
+
if (c.toolMockConfig !== undefined && (typeof c.toolMockConfig !== 'object' || c.toolMockConfig === null || Array.isArray(c.toolMockConfig))) {
|
|
712
|
+
console.error('[elasticdash] Error: toolMockConfig must be an object keyed by tool name.')
|
|
713
|
+
process.exit(1)
|
|
714
|
+
}
|
|
715
|
+
if (c.aiMockConfig !== undefined && (typeof c.aiMockConfig !== 'object' || c.aiMockConfig === null || Array.isArray(c.aiMockConfig))) {
|
|
716
|
+
console.error('[elasticdash] Error: aiMockConfig must be an object keyed by model name.')
|
|
717
|
+
process.exit(1)
|
|
718
|
+
}
|
|
719
|
+
if (c.strict !== undefined && typeof c.strict !== 'boolean') {
|
|
720
|
+
console.error('[elasticdash] Error: strict must be a boolean.')
|
|
721
|
+
process.exit(1)
|
|
722
|
+
}
|
|
723
|
+
toolMockConfig = (c.toolMockConfig as Record<string, unknown> | undefined) ?? undefined
|
|
724
|
+
aiMockConfig = (c.aiMockConfig as Record<string, unknown> | undefined) ?? undefined
|
|
725
|
+
strictMode = c.strict === true
|
|
726
|
+
}
|
|
727
|
+
|
|
684
728
|
let mod: Record<string, unknown>
|
|
685
729
|
try {
|
|
686
730
|
mod = await import(pathToFileURL(workflowsModulePath).href) as Record<string, unknown>
|
|
@@ -704,6 +748,16 @@ async function bootstrap(): Promise<void> {
|
|
|
704
748
|
let output: unknown = null
|
|
705
749
|
let events: Array<Record<string, unknown>> = []
|
|
706
750
|
|
|
751
|
+
// Mirror the worker's mock-globals contract so module-imported tools and
|
|
752
|
+
// wrapped AI calls reach resolveMock/resolveAIMock with the right state.
|
|
753
|
+
if (toolMockConfig || aiMockConfig || strictMode) {
|
|
754
|
+
;(globalThis as any).__ELASTICDASH_TOOL_MOCKS__ = toolMockConfig ?? {}
|
|
755
|
+
;(globalThis as any).__ELASTICDASH_TOOL_CALL_COUNTERS__ = {}
|
|
756
|
+
;(globalThis as any).__ELASTICDASH_AI_MOCKS__ = aiMockConfig ?? {}
|
|
757
|
+
;(globalThis as any).__ELASTICDASH_AI_CALL_COUNTERS__ = {}
|
|
758
|
+
;(globalThis as any).__ELASTICDASH_STRICT__ = strictMode
|
|
759
|
+
}
|
|
760
|
+
|
|
707
761
|
try {
|
|
708
762
|
const runPromise = runWorkflow(async () => workflowFn(workflowInput))
|
|
709
763
|
const timeoutPromise = new Promise((_, reject) => {
|
|
@@ -730,6 +784,33 @@ async function bootstrap(): Promise<void> {
|
|
|
730
784
|
})
|
|
731
785
|
} catch (err) {
|
|
732
786
|
runError = err instanceof Error ? err.message : String(err)
|
|
787
|
+
// runWorkflow attaches the partial trace to the thrown error so
|
|
788
|
+
// strict-mode failures still surface their tool events in the envelope.
|
|
789
|
+
const partialTrace = (err as { trace?: { traceId: string; events: Array<{ id: number; type: string; name: string; input: unknown; output: unknown; durationMs: number }> } }).trace
|
|
790
|
+
if (partialTrace) {
|
|
791
|
+
traceId = partialTrace.traceId ?? null
|
|
792
|
+
events = (partialTrace.events ?? []).map((e) => {
|
|
793
|
+
const out = e.output as Record<string, unknown> | null | undefined
|
|
794
|
+
const hasError = out !== null && typeof out === 'object' && out !== null && 'error' in out
|
|
795
|
+
return {
|
|
796
|
+
id: e.id,
|
|
797
|
+
type: e.type,
|
|
798
|
+
name: e.name,
|
|
799
|
+
duration_ms: e.durationMs,
|
|
800
|
+
has_error: hasError,
|
|
801
|
+
input_preview: previewify(e.input),
|
|
802
|
+
output_preview: previewify(e.output),
|
|
803
|
+
}
|
|
804
|
+
})
|
|
805
|
+
}
|
|
806
|
+
} finally {
|
|
807
|
+
if (toolMockConfig || aiMockConfig || strictMode) {
|
|
808
|
+
delete (globalThis as any).__ELASTICDASH_TOOL_MOCKS__
|
|
809
|
+
delete (globalThis as any).__ELASTICDASH_TOOL_CALL_COUNTERS__
|
|
810
|
+
delete (globalThis as any).__ELASTICDASH_AI_MOCKS__
|
|
811
|
+
delete (globalThis as any).__ELASTICDASH_AI_CALL_COUNTERS__
|
|
812
|
+
delete (globalThis as any).__ELASTICDASH_STRICT__
|
|
813
|
+
}
|
|
733
814
|
}
|
|
734
815
|
const endedAt = Date.now()
|
|
735
816
|
|
|
@@ -745,8 +826,12 @@ async function bootstrap(): Promise<void> {
|
|
|
745
826
|
...(runError ? { error: runError } : {}),
|
|
746
827
|
}
|
|
747
828
|
|
|
748
|
-
|
|
829
|
+
// Sentinel FIRST, then pretty JSON. If a downstream consumer hits a
|
|
830
|
+
// buffer limit on the pretty-printed output, the sentinel line is
|
|
831
|
+
// already safe in stdout and parseable. The MCP scans from the end
|
|
832
|
+
// backward — it'll find the sentinel either way.
|
|
749
833
|
process.stdout.write('__ED_RUN_WORKFLOW_RESULT__:' + JSON.stringify(envelope) + '\n')
|
|
834
|
+
process.stdout.write(JSON.stringify(envelope, null, 2) + '\n')
|
|
750
835
|
process.exit(runError ? 1 : 0)
|
|
751
836
|
})
|
|
752
837
|
|
|
@@ -233,12 +233,18 @@ function findFunctionInSource(src: string, name: string): { isAsync: boolean; si
|
|
|
233
233
|
lineNumber: lineAt(src, m.index!),
|
|
234
234
|
sourceCode: extractSource(src, m.index!),
|
|
235
235
|
}
|
|
236
|
-
|
|
236
|
+
// Arrow function exports. `(?::[^=]+?)?` matches an optional TypeScript
|
|
237
|
+
// return-type annotation between `)` and `=>` — e.g.
|
|
238
|
+
// export const f = async (input): Promise<X> => { ... }
|
|
239
|
+
// Without it, anything with a return type was silently invisible to
|
|
240
|
+
// scanWorkflows/scanTools, which led to the CLI tagging traces with the
|
|
241
|
+
// wrong workflow name.
|
|
242
|
+
m = src.match(new RegExp(`export\\s+const\\s+${escaped}\\s*=\\s*(async\\s*)?(\\([^)]*\\))\\s*(?::[^=]+?)?\\s*=>`))
|
|
237
243
|
if (m) return { isAsync: !!m[1], signature: m[2], lineNumber: lineAt(src, m.index!) }
|
|
238
|
-
m = src.match(new RegExp(`(?:^|\\n)\\s*const\\s+${escaped}\\s*=\\s*(async\\s*)?(\\([^)]*\\))\\s*=>`, 'm'))
|
|
244
|
+
m = src.match(new RegExp(`(?:^|\\n)\\s*const\\s+${escaped}\\s*=\\s*(async\\s*)?(\\([^)]*\\))\\s*(?::[^=]+?)?\\s*=>`, 'm'))
|
|
239
245
|
if (m) return { isAsync: !!m[1], signature: m[2], lineNumber: lineAt(src, m.index!) }
|
|
240
246
|
// Wrapped: const name = wrapTool('name', [async] (params) => …)
|
|
241
|
-
m = src.match(new RegExp(`(?:export\\s+)?const\\s+${escaped}\\s*=\\s*\\w+\\(\\s*['"][^'"]*['"]\\s*,\\s*(async\\s*)?(\\([^)]*\\))\\s*=>`))
|
|
247
|
+
m = src.match(new RegExp(`(?:export\\s+)?const\\s+${escaped}\\s*=\\s*\\w+\\(\\s*['"][^'"]*['"]\\s*,\\s*(async\\s*)?(\\([^)]*\\))\\s*(?::[^=]+?)?\\s*=>`))
|
|
242
248
|
if (m) return { isAsync: !!m[1], signature: m[2], lineNumber: lineAt(src, m.index!) }
|
|
243
249
|
return { isAsync: false, signature: '()' }
|
|
244
250
|
}
|
|
@@ -261,16 +267,19 @@ function extractExportsFromSource(filePath: string): ParsedExport[] {
|
|
|
261
267
|
})
|
|
262
268
|
}
|
|
263
269
|
|
|
264
|
-
// 2. Direct: export const name = [async] (params) => …
|
|
265
|
-
|
|
270
|
+
// 2. Direct: export const name = [async] (params)[: ReturnType] => …
|
|
271
|
+
// `(?::[^=]+?)?` accepts an optional TypeScript return-type annotation
|
|
272
|
+
// between `)` and `=>`. Without it, arrow exports with return types
|
|
273
|
+
// (very common in real codebases) were invisible to the scanner.
|
|
274
|
+
for (const m of src.matchAll(/export\s+const\s+(\w+)\s*=\s*(async\s*)?\(([^)]*)\)\s*(?::[^=]+?)?\s*=>/g)) {
|
|
266
275
|
results.push({
|
|
267
276
|
name: m[1], isAsync: !!m[2], signature: `(${m[3]})`, filePath,
|
|
268
277
|
lineNumber: lineAt(src, m.index!), sourceCode: extractSource(src, m.index!),
|
|
269
278
|
})
|
|
270
279
|
}
|
|
271
280
|
|
|
272
|
-
// 3. Wrapped: export const name = wrapTool('name', [async] (params) => …)
|
|
273
|
-
for (const m of src.matchAll(/export\s+const\s+(\w+)\s*=\s*\w+\(\s*['"][^'"]*['"]\s*,\s*(async\s*)?\(([^)]*)\)\s*=>/g)) {
|
|
281
|
+
// 3. Wrapped: export const name = wrapTool('name', [async] (params)[: ReturnType] => …)
|
|
282
|
+
for (const m of src.matchAll(/export\s+const\s+(\w+)\s*=\s*\w+\(\s*['"][^'"]*['"]\s*,\s*(async\s*)?\(([^)]*)\)\s*(?::[^=]+?)?\s*=>/g)) {
|
|
274
283
|
results.push({
|
|
275
284
|
name: m[1], isAsync: !!m[2], signature: `(${m[3]})`, filePath,
|
|
276
285
|
lineNumber: lineAt(src, m.index!), sourceCode: extractSource(src, m.index!),
|
package/src/index.ts
CHANGED
|
@@ -26,10 +26,14 @@ export { wrapAI } from './interceptors/workflow-ai.js'
|
|
|
26
26
|
export { edTool, defineTool, getRegisteredTool, getRegisteredTools, clearToolRegistry } from './tool-registry.js'
|
|
27
27
|
export type { RegisteredTool } from './tool-registry.js'
|
|
28
28
|
|
|
29
|
+
// Strict-mode error (thrown by resolveMock + worker Proxy when fail-closed)
|
|
30
|
+
export { ElasticdashStrictModeError } from './internals/errors.js'
|
|
31
|
+
|
|
29
32
|
// HTTP run context (ALS + global fallback for streaming frameworks)
|
|
30
33
|
export {
|
|
31
34
|
setHttpRunContext,
|
|
32
35
|
initHttpRunContext,
|
|
36
|
+
applyInboundMockConfig,
|
|
33
37
|
getHttpRunContext,
|
|
34
38
|
getHttpFrozenEvent,
|
|
35
39
|
getHttpPromptMock,
|
package/src/interceptors/http.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { gzipSync } from 'node:zlib'
|
|
1
2
|
import { getCaptureContext } from '../capture/recorder.js'
|
|
2
3
|
import { getCurrentTrace } from '../trace-adapter/context.js'
|
|
3
4
|
import { getHttpRunContext, getHttpFrozenEvent, pushTelemetryEvent, tryAutoInitHttpContext, getObservabilityContext } from './telemetry-push.js'
|
|
@@ -271,6 +272,60 @@ async function executeLiveAndRecord(
|
|
|
271
272
|
return { response: res, event }
|
|
272
273
|
}
|
|
273
274
|
|
|
275
|
+
/**
|
|
276
|
+
* When the CLI subprocess seeds mock globals (via `--mock-config-file`),
|
|
277
|
+
* encode them as a base64 JSON string and return the header value. Any
|
|
278
|
+
* outbound fetch that travels into another Node process (e.g. an HTTP-mode
|
|
279
|
+
* workflow calling its own dev server) can carry the mock config along
|
|
280
|
+
* via the `x-elasticdash-mock-config` header. The receiver applies it
|
|
281
|
+
* with `applyInboundMockConfig(req)` and the mocks fire in its process.
|
|
282
|
+
*
|
|
283
|
+
* Returns undefined when no mock state is present.
|
|
284
|
+
*/
|
|
285
|
+
function encodeMockConfigHeader(): string | undefined {
|
|
286
|
+
const g = globalThis as Record<string, unknown>
|
|
287
|
+
const toolMocks = g['__ELASTICDASH_TOOL_MOCKS__'] as Record<string, unknown> | undefined
|
|
288
|
+
const aiMocks = g['__ELASTICDASH_AI_MOCKS__'] as Record<string, unknown> | undefined
|
|
289
|
+
const strict = g['__ELASTICDASH_STRICT__'] === true
|
|
290
|
+
if (!toolMocks && !aiMocks && !strict) return undefined
|
|
291
|
+
const payload: Record<string, unknown> = {}
|
|
292
|
+
if (toolMocks) payload.toolMockConfig = toolMocks
|
|
293
|
+
if (aiMocks) payload.aiMockConfig = aiMocks
|
|
294
|
+
if (strict) payload.strict = true
|
|
295
|
+
try {
|
|
296
|
+
const json = JSON.stringify(payload)
|
|
297
|
+
// Gzip + base64. Real mock configs with trace-derived outputs (full
|
|
298
|
+
// Pokémon details, AI response transcripts, etc.) easily exceed
|
|
299
|
+
// Node's default 8KB HTTP header limit when sent as plain base64.
|
|
300
|
+
// Gzipping shrinks typical configs by ~5-10x and keeps them well
|
|
301
|
+
// under any sane header cap.
|
|
302
|
+
//
|
|
303
|
+
// Magic prefix `gz1:` lets the inbound decoder pick the right path
|
|
304
|
+
// and stay backward-compatible with older SDKs that emit plain base64.
|
|
305
|
+
const gzipped = gzipSync(Buffer.from(json, 'utf-8'))
|
|
306
|
+
return 'gz1:' + gzipped.toString('base64')
|
|
307
|
+
} catch { return undefined }
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/** Attach the mock-config header to an outbound RequestInit without mutating the caller's object. */
|
|
311
|
+
function attachMockConfigHeader(init: RequestInit | undefined, value: string): RequestInit {
|
|
312
|
+
const HEADER = 'x-elasticdash-mock-config'
|
|
313
|
+
const base: RequestInit = init ? { ...init } : {}
|
|
314
|
+
const existing = base.headers
|
|
315
|
+
if (existing instanceof Headers) {
|
|
316
|
+
const h = new Headers(existing)
|
|
317
|
+
h.set(HEADER, value)
|
|
318
|
+
base.headers = h
|
|
319
|
+
} else if (Array.isArray(existing)) {
|
|
320
|
+
base.headers = [...existing.filter(([k]) => k.toLowerCase() !== HEADER), [HEADER, value]]
|
|
321
|
+
} else if (existing && typeof existing === 'object') {
|
|
322
|
+
base.headers = { ...(existing as Record<string, string>), [HEADER]: value }
|
|
323
|
+
} else {
|
|
324
|
+
base.headers = { [HEADER]: value }
|
|
325
|
+
}
|
|
326
|
+
return base
|
|
327
|
+
}
|
|
328
|
+
|
|
274
329
|
export function interceptFetch(): void {
|
|
275
330
|
if (originalFetch) return // already installed
|
|
276
331
|
originalFetch = globalThis.fetch
|
|
@@ -281,7 +336,17 @@ export function interceptFetch(): void {
|
|
|
281
336
|
const httpCtx = getHttpRunContext()
|
|
282
337
|
const obsCtx = getObservabilityContext()
|
|
283
338
|
|
|
284
|
-
|
|
339
|
+
// Option-A passthrough: even when there is no SDK context active, if the
|
|
340
|
+
// CLI seeded mock globals we still attach the header so downstream Node
|
|
341
|
+
// processes (e.g. a Next.js dev server hit by an HTTP-mode workflow) can
|
|
342
|
+
// honor the mocks. This is the bridge that makes partial mocking work
|
|
343
|
+
// without users having to refactor HTTP-mode workflows into in-process
|
|
344
|
+
// ones.
|
|
345
|
+
const mockHeader = encodeMockConfigHeader()
|
|
346
|
+
if (!ctx && !httpCtx && !obsCtx) {
|
|
347
|
+
return originalFetch!(input, mockHeader ? attachMockConfigHeader(init, mockHeader) : init)
|
|
348
|
+
}
|
|
349
|
+
if (mockHeader) init = attachMockConfigHeader(init, mockHeader)
|
|
285
350
|
|
|
286
351
|
const url =
|
|
287
352
|
typeof input === 'string'
|