@agentvault/agentvault 0.15.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/_cp.d.ts +12 -0
  2. package/dist/_cp.d.ts.map +1 -0
  3. package/dist/cli.js +72035 -253
  4. package/dist/cli.js.map +7 -1
  5. package/dist/index.js +76351 -24
  6. package/dist/index.js.map +7 -1
  7. package/dist/openclaw-entry.js +1443 -1201
  8. package/dist/openclaw-entry.js.map +7 -1
  9. package/package.json +1 -1
  10. package/dist/__tests__/crypto-helpers.test.d.ts +0 -2
  11. package/dist/__tests__/crypto-helpers.test.d.ts.map +0 -1
  12. package/dist/__tests__/functional.test.d.ts +0 -21
  13. package/dist/__tests__/functional.test.d.ts.map +0 -1
  14. package/dist/__tests__/install-plugin.test.d.ts +0 -2
  15. package/dist/__tests__/install-plugin.test.d.ts.map +0 -1
  16. package/dist/__tests__/multi-session.test.d.ts +0 -2
  17. package/dist/__tests__/multi-session.test.d.ts.map +0 -1
  18. package/dist/__tests__/state.test.d.ts +0 -2
  19. package/dist/__tests__/state.test.d.ts.map +0 -1
  20. package/dist/__tests__/transport.test.d.ts +0 -2
  21. package/dist/__tests__/transport.test.d.ts.map +0 -1
  22. package/dist/account-config.js +0 -60
  23. package/dist/account-config.js.map +0 -1
  24. package/dist/channel.js +0 -3411
  25. package/dist/channel.js.map +0 -1
  26. package/dist/create-agent.js +0 -314
  27. package/dist/create-agent.js.map +0 -1
  28. package/dist/crypto-helpers.js +0 -4
  29. package/dist/crypto-helpers.js.map +0 -1
  30. package/dist/doctor.js +0 -415
  31. package/dist/doctor.js.map +0 -1
  32. package/dist/fetch-interceptor.js +0 -213
  33. package/dist/fetch-interceptor.js.map +0 -1
  34. package/dist/gateway-send.js +0 -114
  35. package/dist/gateway-send.js.map +0 -1
  36. package/dist/http-handlers.js +0 -131
  37. package/dist/http-handlers.js.map +0 -1
  38. package/dist/mcp-handlers.js +0 -48
  39. package/dist/mcp-handlers.js.map +0 -1
  40. package/dist/mcp-server.js +0 -192
  41. package/dist/mcp-server.js.map +0 -1
  42. package/dist/openclaw-compat.js +0 -94
  43. package/dist/openclaw-compat.js.map +0 -1
  44. package/dist/openclaw-plugin.js +0 -297
  45. package/dist/openclaw-plugin.js.map +0 -1
  46. package/dist/openclaw-types.js +0 -13
  47. package/dist/openclaw-types.js.map +0 -1
  48. package/dist/setup.js +0 -460
  49. package/dist/setup.js.map +0 -1
  50. package/dist/skill-invoker.js +0 -100
  51. package/dist/skill-invoker.js.map +0 -1
  52. package/dist/skill-manifest.js +0 -249
  53. package/dist/skill-manifest.js.map +0 -1
  54. package/dist/skill-telemetry.js +0 -146
  55. package/dist/skill-telemetry.js.map +0 -1
  56. package/dist/skills-publish.js +0 -133
  57. package/dist/skills-publish.js.map +0 -1
  58. package/dist/state.js +0 -178
  59. package/dist/state.js.map +0 -1
  60. package/dist/transport.js +0 -43
  61. package/dist/transport.js.map +0 -1
  62. package/dist/types.js +0 -2
  63. package/dist/types.js.map +0 -1
  64. package/dist/workspace-handlers.js +0 -177
  65. package/dist/workspace-handlers.js.map +0 -1
package/dist/doctor.js DELETED
@@ -1,415 +0,0 @@
1
- /**
2
- * AgentVault "doctor" command — diagnostic checks and plist fixer.
3
- *
4
- * Detects stale macOS LaunchAgent plist paths (common after pnpm updates)
5
- * and offers to install a stable wrapper script so future updates don't
6
- * break the gateway.
7
- *
8
- * Usage: npx @agentvault/agentvault doctor [--fix]
9
- */
10
- import { execSync } from "node:child_process";
11
- import { existsSync, readFileSync, writeFileSync, chmodSync } from "node:fs";
12
- import { join } from "node:path";
13
- import { createInterface } from "node:readline";
14
- import { openclawHome, readOpenClawConfig } from "./create-agent.js";
15
- const PLIST_FILENAME = "ai.openclaw.gateway.plist";
16
- const WRAPPER_SCRIPT_NAME = "start-gateway.sh";
17
- /* ── Individual check functions ────────────────────────────────────────── */
18
- export function checkOpenClawInstalled() {
19
- try {
20
- const out = execSync("openclaw --version", { stdio: "pipe", timeout: 10000 });
21
- const version = out.toString().trim();
22
- return { name: "OpenClaw installed", status: "pass", message: version };
23
- }
24
- catch {
25
- return {
26
- name: "OpenClaw installed",
27
- status: "fail",
28
- message: "'openclaw' not found in PATH",
29
- };
30
- }
31
- }
32
- export function checkConfigExists(home) {
33
- const configPath = join(home, "openclaw.json");
34
- if (!existsSync(configPath)) {
35
- return {
36
- name: "Config exists",
37
- status: "fail",
38
- message: `Not found: ${configPath}`,
39
- };
40
- }
41
- try {
42
- JSON.parse(readFileSync(configPath, "utf-8"));
43
- return { name: "Config exists", status: "pass", message: configPath };
44
- }
45
- catch {
46
- return {
47
- name: "Config exists",
48
- status: "fail",
49
- message: `Invalid JSON: ${configPath}`,
50
- };
51
- }
52
- }
53
- export function checkAgentVaultChannel(config) {
54
- if (!config) {
55
- return {
56
- name: "AgentVault channel",
57
- status: "fail",
58
- message: "Config is null",
59
- };
60
- }
61
- if (config.channels?.agentvault) {
62
- return { name: "AgentVault channel", status: "pass", message: "channels.agentvault present" };
63
- }
64
- return {
65
- name: "AgentVault channel",
66
- status: "fail",
67
- message: "channels.agentvault not found in config",
68
- };
69
- }
70
- export function checkPluginsAllow(config) {
71
- if (!config) {
72
- return { name: "Plugin allow-listed", status: "warn", message: "Config is null" };
73
- }
74
- const allow = config.plugins?.allow;
75
- if (!Array.isArray(allow)) {
76
- return {
77
- name: "Plugin allow-listed",
78
- status: "warn",
79
- message: "plugins.allow not defined",
80
- };
81
- }
82
- if (allow.includes("agentvault")) {
83
- return { name: "Plugin allow-listed", status: "pass", message: "agentvault in plugins.allow" };
84
- }
85
- return {
86
- name: "Plugin allow-listed",
87
- status: "warn",
88
- message: "'agentvault' not in plugins.allow list",
89
- };
90
- }
91
- export function checkPlist() {
92
- if (process.platform !== "darwin") {
93
- return { name: "macOS LaunchAgent plist", status: "skip", message: "Not macOS" };
94
- }
95
- const result = validatePlist();
96
- switch (result.status) {
97
- case "ok":
98
- return { name: "macOS LaunchAgent plist", status: "pass", message: "Plist paths valid" };
99
- case "already-fixed":
100
- return { name: "macOS LaunchAgent plist", status: "pass", message: "Wrapper script already configured" };
101
- case "stale":
102
- return {
103
- name: "macOS LaunchAgent plist",
104
- status: "fail",
105
- message: `Stale path: ${result.stalePaths?.[0] ?? "unknown"}`,
106
- };
107
- case "missing":
108
- return {
109
- name: "macOS LaunchAgent plist",
110
- status: "warn",
111
- message: `Plist not found: ${result.plistPath ?? PLIST_FILENAME}`,
112
- };
113
- default:
114
- return { name: "macOS LaunchAgent plist", status: "skip", message: "Skipped" };
115
- }
116
- }
117
- export function checkGatewayPort() {
118
- try {
119
- execSync("curl -sf --max-time 3 http://127.0.0.1:18789/", { stdio: "pipe" });
120
- return { name: "Gateway port (18789)", status: "pass", message: "Responding" };
121
- }
122
- catch {
123
- return {
124
- name: "Gateway port (18789)",
125
- status: "fail",
126
- message: "No response on 127.0.0.1:18789",
127
- };
128
- }
129
- }
130
- export function checkAgentDataDirs(config) {
131
- if (!config) {
132
- return { name: "Agent data dirs", status: "warn", message: "Config is null" };
133
- }
134
- const home = process.env.HOME ?? "";
135
- const warnings = [];
136
- // Single-account mode
137
- const av = config.channels?.agentvault;
138
- if (!av) {
139
- return { name: "Agent data dirs", status: "warn", message: "No agentvault channel" };
140
- }
141
- const checkDir = (label, dataDir) => {
142
- const resolved = dataDir.replace(/^~/, home);
143
- if (!existsSync(resolved)) {
144
- warnings.push(`${label}: dir missing (${resolved})`);
145
- return;
146
- }
147
- const statePath = join(resolved, "agentvault.json");
148
- if (!existsSync(statePath)) {
149
- warnings.push(`${label}: no agentvault.json`);
150
- }
151
- };
152
- if (av.accounts && typeof av.accounts === "object") {
153
- for (const [id, acct] of Object.entries(av.accounts)) {
154
- if (acct.dataDir)
155
- checkDir(id, acct.dataDir);
156
- }
157
- }
158
- else if (av.dataDir) {
159
- checkDir("default", av.dataDir);
160
- }
161
- if (warnings.length > 0) {
162
- return { name: "Agent data dirs", status: "warn", message: warnings.join("; ") };
163
- }
164
- return { name: "Agent data dirs", status: "pass", message: "All data dirs valid" };
165
- }
166
- export function checkPm2Status() {
167
- try {
168
- execSync("pm2 --version", { stdio: "pipe", timeout: 5000 });
169
- }
170
- catch {
171
- return { name: "pm2 status", status: "skip", message: "pm2 not installed" };
172
- }
173
- try {
174
- const info = execSync("pm2 describe openclaw-gateway", { stdio: "pipe", timeout: 5000 });
175
- const out = info.toString();
176
- if (out.includes("online")) {
177
- return { name: "pm2 status", status: "pass", message: "openclaw-gateway: online" };
178
- }
179
- if (out.includes("stopped")) {
180
- return { name: "pm2 status", status: "warn", message: "openclaw-gateway: stopped" };
181
- }
182
- return { name: "pm2 status", status: "warn", message: "openclaw-gateway: unknown state" };
183
- }
184
- catch {
185
- return { name: "pm2 status", status: "warn", message: "openclaw-gateway not registered in pm2" };
186
- }
187
- }
188
- /* ── Plist parsing / validation ────────────────────────────────────────── */
189
- export function plistPath() {
190
- const home = process.env.HOME ?? "";
191
- return join(home, "Library", "LaunchAgents", PLIST_FILENAME);
192
- }
193
- export function parsePlist(plistFile) {
194
- if (!existsSync(plistFile))
195
- return null;
196
- try {
197
- const json = execSync(`plutil -convert json -o - "${plistFile}"`, {
198
- stdio: "pipe",
199
- timeout: 5000,
200
- }).toString();
201
- const parsed = JSON.parse(json);
202
- const programArgs = parsed.ProgramArguments ?? [];
203
- const stalePaths = [];
204
- const wrapperPath = join(process.env.HOME ?? "", ".openclaw", WRAPPER_SCRIPT_NAME);
205
- for (const arg of programArgs) {
206
- // Check absolute paths (skip flags and relative args)
207
- if (arg.startsWith("/") && arg !== "/bin/bash" && arg !== wrapperPath) {
208
- if (!existsSync(arg)) {
209
- stalePaths.push(arg);
210
- }
211
- }
212
- }
213
- return { plistPath: plistFile, programArgs, stalePaths };
214
- }
215
- catch {
216
- return null;
217
- }
218
- }
219
- export function validatePlist() {
220
- if (process.platform !== "darwin") {
221
- return { status: "skip" };
222
- }
223
- const path = plistPath();
224
- if (!existsSync(path)) {
225
- return { status: "missing", plistPath: path };
226
- }
227
- const info = parsePlist(path);
228
- if (!info) {
229
- return { status: "missing", plistPath: path };
230
- }
231
- // Check if already using our wrapper script
232
- const home = process.env.HOME ?? "";
233
- const wrapperPath = join(home, ".openclaw", WRAPPER_SCRIPT_NAME);
234
- if (info.programArgs.includes(wrapperPath)) {
235
- return { status: "already-fixed", plistPath: path };
236
- }
237
- if (info.stalePaths.length > 0) {
238
- return { status: "stale", plistPath: path, stalePaths: info.stalePaths };
239
- }
240
- return { status: "ok", plistPath: path };
241
- }
242
- /* ── Plist fix ─────────────────────────────────────────────────────────── */
243
- export function applyPlistFix(info) {
244
- const home = process.env.HOME ?? "";
245
- const openclawDir = join(home, ".openclaw");
246
- const wrapperPath = join(openclawDir, WRAPPER_SCRIPT_NAME);
247
- // 1. Create wrapper script (PATH needed for launchd's minimal environment)
248
- const wrapperContent = `#!/bin/bash
249
- export PATH="$HOME/.local/bin:$HOME/.pnpm/bin:$HOME/Library/pnpm/bin:$HOME/Library/pnpm:/opt/homebrew/bin:/usr/local/bin:$PATH"
250
- exec "$(which openclaw)" gateway start "$@"
251
- `;
252
- try {
253
- writeFileSync(wrapperPath, wrapperContent, "utf-8");
254
- chmodSync(wrapperPath, 0o755);
255
- console.log(` Created wrapper: ${wrapperPath}`);
256
- }
257
- catch (err) {
258
- console.error(` Failed to create wrapper script: ${err.message}`);
259
- return false;
260
- }
261
- // 2. Update plist via PlistBuddy
262
- const plistBuddy = "/usr/libexec/PlistBuddy";
263
- const plist = info.plistPath;
264
- try {
265
- // Set ProgramArguments:0 = /bin/bash
266
- execSync(`${plistBuddy} -c "Set :ProgramArguments:0 /bin/bash" "${plist}"`, { stdio: "pipe" });
267
- // Set ProgramArguments:1 = wrapper path
268
- try {
269
- execSync(`${plistBuddy} -c "Set :ProgramArguments:1 ${wrapperPath}" "${plist}"`, { stdio: "pipe" });
270
- }
271
- catch {
272
- // Index 1 might not exist — add it
273
- execSync(`${plistBuddy} -c "Add :ProgramArguments:1 string ${wrapperPath}" "${plist}"`, { stdio: "pipe" });
274
- }
275
- // Delete extra args (index 2+) — loop in reverse to avoid index shifts
276
- // First, count how many args there are
277
- let argCount = info.programArgs.length;
278
- for (let i = argCount - 1; i >= 2; i--) {
279
- try {
280
- execSync(`${plistBuddy} -c "Delete :ProgramArguments:${i}" "${plist}"`, { stdio: "pipe" });
281
- }
282
- catch {
283
- // Already gone
284
- }
285
- }
286
- console.log(" Updated plist ProgramArguments.");
287
- }
288
- catch (err) {
289
- console.error(` Failed to update plist: ${err.message}`);
290
- return false;
291
- }
292
- // 3. Reload launchd
293
- try {
294
- execSync(`launchctl unload "${plist}"`, { stdio: "pipe" });
295
- }
296
- catch {
297
- // May not be loaded — that's fine
298
- }
299
- try {
300
- execSync(`launchctl load "${plist}"`, { stdio: "pipe" });
301
- console.log(" Reloaded LaunchAgent.");
302
- }
303
- catch (err) {
304
- console.error(` Failed to reload LaunchAgent: ${err.message}`);
305
- console.log(` Try manually: launchctl load "${plist}"`);
306
- return false;
307
- }
308
- return true;
309
- }
310
- /* ── Main doctor command ───────────────────────────────────────────────── */
311
- export async function runDoctorCommand(options) {
312
- const home = openclawHome();
313
- console.log(`
314
- ╔══════════════════════════════════════════════╗
315
- ║ AgentVault — Doctor Diagnostics ║
316
- ╚══════════════════════════════════════════════╝
317
- `);
318
- const results = [];
319
- // 1. OpenClaw installed
320
- results.push(checkOpenClawInstalled());
321
- // 2. Config exists
322
- results.push(checkConfigExists(home));
323
- // 3-4. Parse config for channel/plugin checks
324
- let config = null;
325
- try {
326
- config = readOpenClawConfig(home);
327
- }
328
- catch {
329
- // Config unreadable — already captured by check #2
330
- }
331
- results.push(checkAgentVaultChannel(config));
332
- results.push(checkPluginsAllow(config));
333
- // 5. Plist (macOS only)
334
- results.push(checkPlist());
335
- // 6. Gateway port
336
- results.push(checkGatewayPort());
337
- // 7. Agent data dirs
338
- results.push(checkAgentDataDirs(config));
339
- // 8. pm2 status
340
- results.push(checkPm2Status());
341
- // Print results
342
- const statusLabels = {
343
- pass: "pass",
344
- warn: "WARN",
345
- fail: "FAIL",
346
- skip: "skip",
347
- };
348
- for (const r of results) {
349
- const label = `[${statusLabels[r.status]}]`;
350
- console.log(` ${label.padEnd(6)} ${r.name} — ${r.message}`);
351
- }
352
- const passed = results.filter((r) => r.status === "pass").length;
353
- const warnings = results.filter((r) => r.status === "warn").length;
354
- const failed = results.filter((r) => r.status === "fail").length;
355
- console.log(`
356
- ─────────────────────────────────────────────
357
- ${passed} passed ${warnings} warnings ${failed} failed
358
- ─────────────────────────────────────────────
359
- `);
360
- if (failed > 0) {
361
- process.exitCode = 1;
362
- }
363
- // Offer plist fix if stale
364
- const plistResult = validatePlist();
365
- if (plistResult.status === "stale") {
366
- const plistInfo = parsePlist(plistResult.plistPath);
367
- if (!plistInfo)
368
- return;
369
- if (options?.fix) {
370
- console.log(" Applying plist fix (--fix)...\n");
371
- const ok = applyPlistFix(plistInfo);
372
- if (ok) {
373
- console.log("\n ✅ Plist fixed. Gateway should start cleanly now.\n");
374
- }
375
- else {
376
- console.log("\n ❌ Plist fix failed. See errors above.\n");
377
- }
378
- }
379
- else {
380
- // Interactive prompt
381
- const answer = await ask(" Stale plist detected. Apply wrapper script fix? [y/N] ");
382
- if (answer.trim().toLowerCase() === "y") {
383
- console.log("");
384
- const ok = applyPlistFix(plistInfo);
385
- if (ok) {
386
- console.log("\n ✅ Plist fixed. Gateway should start cleanly now.\n");
387
- }
388
- else {
389
- console.log("\n ❌ Plist fix failed. See errors above.\n");
390
- }
391
- }
392
- else {
393
- console.log(`
394
- To fix later, run:
395
- npx @agentvault/agentvault doctor --fix
396
- `);
397
- }
398
- }
399
- }
400
- }
401
- /* ── Helpers ───────────────────────────────────────────────────────────── */
402
- function ask(question) {
403
- return new Promise((resolve) => {
404
- const rl = createInterface({
405
- input: process.stdin,
406
- output: process.stdout,
407
- terminal: true,
408
- });
409
- rl.question(question, (answer) => {
410
- rl.close();
411
- resolve(answer);
412
- });
413
- });
414
- }
415
- //# sourceMappingURL=doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,213 +0,0 @@
1
- /**
2
- * HTTP interceptor for capturing outbound HTTP calls during message handling.
3
- *
4
- * Uses Node.js diagnostics_channel to subscribe to undici request events,
5
- * capturing ALL outbound HTTP from the process (including LLM SDKs, Playwright
6
- * navigations, and any library that uses undici under the hood).
7
- *
8
- * Also monkey-patches globalThis.fetch as a fallback for non-undici HTTP.
9
- *
10
- * Uses AsyncLocalStorage to associate intercepted calls with the active
11
- * message's traceId/parentSpanId.
12
- *
13
- * Built-in skip patterns prevent capturing internal infrastructure requests
14
- * (localhost, AgentVault API, Clerk auth).
15
- */
16
- import { AsyncLocalStorage } from "node:async_hooks";
17
- import diagnosticsChannel from "node:diagnostics_channel";
18
- // ── Internal state ────────────────────────────────────────────────────
19
- const traceStore = new AsyncLocalStorage();
20
- const DEFAULT_SKIP_PATTERNS = [
21
- /^https?:\/\/localhost(:\d+)?/,
22
- /^https?:\/\/127\.0\.0\.1(:\d+)?/,
23
- /\.agentvault\.chat/,
24
- /\.agentvault\.dev/,
25
- /\.clerk\./,
26
- ];
27
- let installed = false;
28
- let originalFetch;
29
- // Track in-flight undici requests: request → { url, method, startTime }
30
- const inflightRequests = new WeakMap();
31
- // Diagnostics channel subscriptions
32
- let unsubCreate;
33
- let unsubHeaders;
34
- let unsubError;
35
- // ── Helpers ───────────────────────────────────────────────────────────
36
- function shouldSkip(url, extraPatterns) {
37
- const allPatterns = [...DEFAULT_SKIP_PATTERNS, ...extraPatterns];
38
- return allPatterns.some((p) => p.test(url));
39
- }
40
- function extractUrl(origin, path) {
41
- // undici gives us origin (e.g., "https://api.openai.com") and path (e.g., "/v1/chat/completions")
42
- return `${origin}${path}`;
43
- }
44
- // ── Public API ────────────────────────────────────────────────────────
45
- /**
46
- * Install HTTP interceptor using both undici diagnostics channels and
47
- * globalThis.fetch monkey-patching. Idempotent.
48
- */
49
- export function installFetchInterceptor(opts) {
50
- if (installed)
51
- return;
52
- installed = true;
53
- const skipPatterns = [
54
- ...DEFAULT_SKIP_PATTERNS,
55
- ...(opts.skipPatterns ?? []),
56
- ];
57
- // ── 1. Undici diagnostics channel ──────────────────────────────────
58
- // undici publishes events for every HTTP request it makes.
59
- // This captures LLM SDK calls, playwright navigations, etc.
60
- try {
61
- const createChannel = diagnosticsChannel.channel("undici:request:create");
62
- const headersChannel = diagnosticsChannel.channel("undici:request:headers");
63
- const errorChannel = diagnosticsChannel.channel("undici:request:error");
64
- const onRequestCreate = (message) => {
65
- try {
66
- const msg = message;
67
- const req = msg.request;
68
- if (!req)
69
- return;
70
- const origin = String(req.origin ?? "");
71
- const path = String(req.path ?? "/");
72
- const url = extractUrl(origin, path);
73
- if (shouldSkip(url, skipPatterns))
74
- return;
75
- inflightRequests.set(req, {
76
- url,
77
- method: String(req.method ?? "GET").toUpperCase(),
78
- startTime: Date.now(),
79
- });
80
- }
81
- catch { /* best-effort */ }
82
- };
83
- const onRequestHeaders = (message) => {
84
- try {
85
- const msg = message;
86
- const tracked = inflightRequests.get(msg.request);
87
- if (!tracked)
88
- return;
89
- inflightRequests.delete(msg.request);
90
- const latencyMs = Date.now() - tracked.startTime;
91
- const ctx = traceStore.getStore();
92
- opts.onHttpCall({
93
- method: tracked.method,
94
- url: tracked.url,
95
- statusCode: msg.response?.statusCode ?? 0,
96
- latencyMs,
97
- traceId: ctx?.traceId,
98
- parentSpanId: ctx?.parentSpanId,
99
- });
100
- }
101
- catch { /* best-effort */ }
102
- };
103
- const onRequestError = (message) => {
104
- try {
105
- const msg = message;
106
- const tracked = inflightRequests.get(msg.request);
107
- if (!tracked)
108
- return;
109
- inflightRequests.delete(msg.request);
110
- const latencyMs = Date.now() - tracked.startTime;
111
- const ctx = traceStore.getStore();
112
- opts.onHttpCall({
113
- method: tracked.method,
114
- url: tracked.url,
115
- statusCode: 0,
116
- latencyMs,
117
- traceId: ctx?.traceId,
118
- parentSpanId: ctx?.parentSpanId,
119
- });
120
- }
121
- catch { /* best-effort */ }
122
- };
123
- createChannel.subscribe(onRequestCreate);
124
- headersChannel.subscribe(onRequestHeaders);
125
- errorChannel.subscribe(onRequestError);
126
- unsubCreate = () => createChannel.unsubscribe(onRequestCreate);
127
- unsubHeaders = () => headersChannel.unsubscribe(onRequestHeaders);
128
- unsubError = () => errorChannel.unsubscribe(onRequestError);
129
- }
130
- catch {
131
- // diagnostics_channel not available or undici not loaded — fall through to fetch-only
132
- }
133
- // ── 2. globalThis.fetch monkey-patch (fallback) ────────────────────
134
- // Catches any HTTP that doesn't go through undici (e.g., native fetch
135
- // in newer Node.js, or custom HTTP implementations).
136
- originalFetch = globalThis.fetch;
137
- const savedOriginal = originalFetch;
138
- globalThis.fetch = async (input, init) => {
139
- const url = input instanceof Request
140
- ? input.url
141
- : input instanceof URL
142
- ? input.href
143
- : String(input);
144
- if (shouldSkip(url, skipPatterns)) {
145
- return savedOriginal(input, init);
146
- }
147
- const method = input instanceof Request
148
- ? input.method
149
- : init?.method ?? "GET";
150
- const ctx = traceStore.getStore();
151
- const start = Date.now();
152
- try {
153
- const response = await savedOriginal(input, init);
154
- const latencyMs = Date.now() - start;
155
- try {
156
- opts.onHttpCall({
157
- method,
158
- url,
159
- statusCode: response.status,
160
- latencyMs,
161
- traceId: ctx?.traceId,
162
- parentSpanId: ctx?.parentSpanId,
163
- });
164
- }
165
- catch { /* best-effort */ }
166
- return response;
167
- }
168
- catch (err) {
169
- const latencyMs = Date.now() - start;
170
- try {
171
- opts.onHttpCall({
172
- method,
173
- url,
174
- statusCode: 0,
175
- latencyMs,
176
- traceId: ctx?.traceId,
177
- parentSpanId: ctx?.parentSpanId,
178
- });
179
- }
180
- catch { /* best-effort */ }
181
- throw err;
182
- }
183
- };
184
- }
185
- /**
186
- * Uninstall all interceptors. Safe to call even if not installed.
187
- */
188
- export function uninstallFetchInterceptor() {
189
- if (!installed)
190
- return;
191
- // Restore fetch
192
- if (originalFetch) {
193
- globalThis.fetch = originalFetch;
194
- originalFetch = undefined;
195
- }
196
- // Unsubscribe from diagnostics channels
197
- unsubCreate?.();
198
- unsubHeaders?.();
199
- unsubError?.();
200
- unsubCreate = undefined;
201
- unsubHeaders = undefined;
202
- unsubError = undefined;
203
- installed = false;
204
- }
205
- /**
206
- * Run an async function with trace context attached via AsyncLocalStorage.
207
- * Any HTTP calls made within `fn` (via undici or fetch) will include
208
- * traceId/parentSpanId in their HttpCallReport.
209
- */
210
- export function runWithTraceContext(ctx, fn) {
211
- return traceStore.run(ctx, fn);
212
- }
213
- //# sourceMappingURL=fetch-interceptor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-interceptor.js","sourceRoot":"","sources":["../src/fetch-interceptor.ts"],"names":[],"mappings":"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"}