@substrat-run/vertical-host 0.148.0 → 0.150.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.
@@ -57,9 +57,11 @@
57
57
  // The subpath, not the root: this module is bundled into every vertical's upload (the
58
58
  // platform entry, #1893), and the root carries every schema in the vocabulary.
59
59
  // The same holds for the kernel, whose two zero-import subpaths this reaches it through.
60
- import { encodeInvocationRecord, FIELD_COVERAGE_HEADER, INVOCATION_RECORD_HEADER, invocationLevelOf, REQUEST_ID_HEADER, } from '@substrat-run/contracts/invocation-record';
60
+ import { encodeInvocationRecord, FIELD_COVERAGE_HEADER, INVOCATION_RECORD_HEADER, invocationLevelOf, parentRequestIdOf, REQUEST_ID_HEADER, } from '@substrat-run/contracts/invocation-record';
61
+ import { forgetTraceStart, installedTraceSink, markTraceStart } from '@substrat-run/contracts/trace-sink';
61
62
  import { invocationLine, STORE_CALL_LOG_CAP, STORE_CALL_SINK_KEY, tallyStoreCall, } from '@substrat-run/kernel/invocation-line';
62
63
  import { ulid } from '@substrat-run/kernel/ulid';
64
+ import { installOutboundRecorder, markRequestStart } from './outbound-calls.js';
63
65
  import { readRoutedNode, ROUTED_ID, RouterAssertionError } from './routed-node.js';
64
66
  /**
65
67
  * The per-request store key the middleware parks its {@link InvocationRecord} under (#1746).
@@ -115,10 +117,12 @@ function storeCallSlot(provided) {
115
117
  const storage = new Als();
116
118
  const slot = {
117
119
  current() {
118
- const tally = storage.getStore();
120
+ const tally = storage.getStore()?.tally;
119
121
  return tally ? (call) => tallyStoreCall(tally, call) : undefined;
120
122
  },
121
- run: (tally, fn) => storage.run(tally, fn),
123
+ invocationId: () => storage.getStore()?.invocationId,
124
+ run: (tally, fn, invocationId) => storage.run({ tally, invocationId }, fn),
125
+ recording: () => storage.getStore()?.tally,
122
126
  };
123
127
  g[key] = slot;
124
128
  return slot;
@@ -127,14 +131,24 @@ function storeCallSlot(provided) {
127
131
  return undefined;
128
132
  }
129
133
  }
134
+ /** #2192: the recording of the request now running, read from the isolate's slot at call time. */
135
+ function currentRecording() {
136
+ const slot = globalThis[Symbol.for(STORE_CALL_SINK_KEY)];
137
+ return typeof slot?.recording === 'function' ? slot.recording() : undefined;
138
+ }
130
139
  /**
131
140
  * Run a request's handler with its record current (#2245, RFC §6), so a store call made
132
- * while it runs lands on this request's line with no observer from the vertical. With no
133
- * `AsyncLocalStorage` available the handler simply runs.
141
+ * while it runs lands on this request's line with no observer from the vertical — and, since
142
+ * #2192, so does every outbound `fetch` (the recorder is put in front of `fetch` here, once
143
+ * per isolate). With no `AsyncLocalStorage` available the handler simply runs.
134
144
  */
135
- function runRecordingStoreCalls(record, provided, fn) {
145
+ function runRecording(stamp, started, provided, fn) {
136
146
  const slot = storeCallSlot(provided);
137
- return slot ? slot.run(record, fn) : fn();
147
+ if (!slot)
148
+ return fn();
149
+ markRequestStart(stamp.record, started);
150
+ installOutboundRecorder(currentRecording);
151
+ return slot.run(stamp.record, fn, stamp.invocationId);
138
152
  }
139
153
  /**
140
154
  * The platform's version binding, read straight off the env.
@@ -155,10 +169,18 @@ function versionIdOf(env) {
155
169
  * prefix is spelled here rather than imported: this module is bundled into every vertical's
156
170
  * upload and takes only the zero-import contract subpaths (a test holds it equal to
157
171
  * `UPLOAD_LINK_PATH_PREFIX`).
172
+ *
173
+ * Two rules, so neither is the only thing standing between a secret and the log: the last
174
+ * segment under the prefix, whatever it holds, and ANY segment that starts with the secret's
175
+ * own prefix, wherever the path puts it — a vertical that hands the bytes on from a route of
176
+ * its own is covered too (a test holds `UPLOAD_LINK_LOG_SECRET_PREFIX` equal to
177
+ * `UPLOAD_LINK_SECRET_PREFIX`).
158
178
  */
159
179
  export const UPLOAD_LINK_LOG_PREFIX = '/api/attachment-uploads';
180
+ export const UPLOAD_LINK_LOG_SECRET_PREFIX = 'sbup_';
160
181
  const UPLOAD_LINK_SECRET_SEGMENT = /^(\/api\/attachment-uploads\/[^/]+\/[^/]+\/)[^/]+/;
161
- export const redactUploadLinkSecret = (pathname) => pathname.replace(UPLOAD_LINK_SECRET_SEGMENT, '$1[redacted]');
182
+ const SECRET_SHAPED_SEGMENT = new RegExp(`(^|/)${UPLOAD_LINK_LOG_SECRET_PREFIX}[^/]*`, 'g');
183
+ export const redactUploadLinkSecret = (pathname) => pathname.replace(UPLOAD_LINK_SECRET_SEGMENT, '$1[redacted]').replace(SECRET_SHAPED_SEGMENT, '$1[redacted]');
162
184
  /**
163
185
  * The path, with the query string DISCARDED.
164
186
  *
@@ -257,6 +279,10 @@ export function fieldCoverageArmed(request) {
257
279
  }
258
280
  function beginStamp(request, env, options) {
259
281
  const stamp = { invocationId: ulid(), record: {} };
282
+ // #2358: the request's zero on the trace's shared time axis. Every step the scope host records
283
+ // counts from here, so an outbound call recorded below and a check recorded there agree.
284
+ if (installedTraceSink())
285
+ markTraceStart(stamp.invocationId);
260
286
  const fieldCoverageId = armedFieldCoverageId(request.headers, env, options);
261
287
  if (fieldCoverageId)
262
288
  stamp.fieldCoverageId = fieldCoverageId;
@@ -301,6 +327,9 @@ function writeInvocationLine(stamp, done, options) {
301
327
  // Called from a `finally`: a throw here would replace the vertical's answer, or its own
302
328
  // error, with a logging failure. The platform wraps every uploaded script in this (#1893),
303
329
  // so nothing in it may escape — a line that cannot be written is one missing line.
330
+ // #2358 first, and outside the gate below: a local request carries no router assertion, and
331
+ // that is exactly where a trace is wanted. A no-op unless `substrat dev` installed a sink.
332
+ traceRequest(stamp, done);
304
333
  try {
305
334
  writeLineOrThrow(stamp, done, options);
306
335
  }
@@ -313,6 +342,77 @@ function writeInvocationLine(stamp, done, options) {
313
342
  }
314
343
  }
315
344
  }
345
+ /**
346
+ * #2358: the HTTP half of a request trace — method, path, status, duration, what the operation
347
+ * emitted, and the outbound calls — handed to the installed sink, which then writes the trace.
348
+ *
349
+ * The event fields are the line's own, built by the same `invocationLine`, so a local trace and a
350
+ * hosted line cannot disagree about what "eventTypes" means. The scope host sends the other half
351
+ * (operation, principal, the steps inside the call). Nothing here may fail a request.
352
+ */
353
+ function traceRequest(stamp, done) {
354
+ const sink = installedTraceSink();
355
+ if (!sink)
356
+ return;
357
+ try {
358
+ const { record, invocationId } = stamp;
359
+ const durationMs = Date.now() - done.started;
360
+ const line = invocationLine({
361
+ tenantId: '',
362
+ scopeId: null,
363
+ vertical: null,
364
+ surface: null,
365
+ method: done.request.method,
366
+ path: pathOf(done.request.url),
367
+ status: done.status,
368
+ threw: done.threw,
369
+ durationMs,
370
+ invocationId,
371
+ level: invocationLevelOf(done.status, done.threw, record.problemCode),
372
+ operation: record.operation,
373
+ problemCode: record.problemCode,
374
+ principalKind: record.principalKind,
375
+ ...(record.emitted ? { emitted: record.emitted } : {}),
376
+ versionId: versionIdOf(done.env),
377
+ });
378
+ sink.head(invocationId, {
379
+ startedAt: new Date(done.started).toISOString(),
380
+ method: line.method,
381
+ path: line.path,
382
+ status: line.status,
383
+ threw: line.threw,
384
+ durationMs: line.durationMs,
385
+ level: line.level,
386
+ operation: line.operation,
387
+ problemCode: line.problemCode,
388
+ principalKind: line.principalKind,
389
+ eventCount: line.eventCount,
390
+ eventTypes: line.eventTypes,
391
+ entities: line.entities,
392
+ versionId: line.versionId,
393
+ // Calls the record kept no room for: a truncated list must read as truncated.
394
+ ...(record.outboundCallsDropped ? { stepsDropped: record.outboundCallsDropped } : {}),
395
+ });
396
+ for (const call of record.outboundCalls ?? []) {
397
+ sink.step(invocationId, {
398
+ type: 'outbound',
399
+ atMs: call.atMs,
400
+ durationMs: call.durationMs,
401
+ host: call.host,
402
+ path: call.path,
403
+ method: call.method,
404
+ status: call.status,
405
+ outcome: call.outcome,
406
+ ...(call.reason ? { reason: call.reason } : {}),
407
+ });
408
+ }
409
+ sink.end(invocationId);
410
+ forgetTraceStart(invocationId);
411
+ }
412
+ catch {
413
+ /* a trace is a convenience; the request it describes is already answered */
414
+ }
415
+ }
316
416
  function writeLineOrThrow(stamp, done, options) {
317
417
  const node = routedNodeOrNull(done.request.headers, done.env, options);
318
418
  if (!node)
@@ -339,9 +439,47 @@ function writeLineOrThrow(stamp, done, options) {
339
439
  ...(stamp.fieldCoverageId ? { fieldCoverageId: stamp.fieldCoverageId } : {}),
340
440
  ...(record.storeCalls && record.storeCalls.length > 0 ? { storeCalls: record.storeCalls } : {}),
341
441
  ...(record.storeCallsDropped ? { storeCallsDropped: record.storeCallsDropped } : {}),
442
+ ...(record.outboundCalls && record.outboundCalls.length > 0 ? { outboundCalls: record.outboundCalls } : {}),
443
+ ...(record.outboundCallsDropped ? { outboundCallsDropped: record.outboundCallsDropped } : {}),
342
444
  });
343
445
  console.log(JSON.stringify(line));
344
446
  }
447
+ /**
448
+ * #2192: the line for a call the PLATFORM made into this worker behind its secret — a peer
449
+ * call's `/internal/vertical-invoke` — where no router assertion names a tenant, so the stamp's
450
+ * own writer stays silent. Called by the route, after the `/internal/*` gate verified the
451
+ * secret, with the tenant and scope of the body that gate admitted: one line per call, the same
452
+ * grammar as every other, carrying the calling request's id as `parentInvocationId`. Never a
453
+ * throw, like the stamp's writer.
454
+ */
455
+ export function writePlatformCallLine(call) {
456
+ try {
457
+ const parent = parentRequestIdOf(call.parentInvocationId);
458
+ // The same one-ULID check: a scope id is a ULID too, and this is only where to look.
459
+ const parentScope = parentRequestIdOf(call.parentScopeId);
460
+ console.log(JSON.stringify(invocationLine({
461
+ tenantId: call.tenantId,
462
+ scopeId: call.scopeId,
463
+ vertical: call.vertical,
464
+ method: call.method,
465
+ path: pathOf(call.url),
466
+ status: call.status,
467
+ threw: false,
468
+ durationMs: Date.now() - call.started,
469
+ invocationId: call.invocationId,
470
+ level: invocationLevelOf(call.status, false, call.problemCode),
471
+ operation: call.operation,
472
+ problemCode: call.problemCode,
473
+ principalKind: call.principalKind,
474
+ ...(call.emitted ? { emitted: call.emitted } : {}),
475
+ versionId: versionIdOf(call.env),
476
+ ...(parent ? { parentInvocationId: parent, ...(parentScope ? { parentScopeId: parentScope } : {}) } : {}),
477
+ })));
478
+ }
479
+ catch {
480
+ /* one missing line, never a failed call */
481
+ }
482
+ }
345
483
  /**
346
484
  * Mount as the FIRST middleware on a vertical's app, with the same two answers the
347
485
  * vertical gives `readRoutedNode` in its own `nodeFor`:
@@ -390,7 +528,7 @@ export function invocationLog(options = {}) {
390
528
  c.set?.(INVOCATION_RECORD_KEY, stamp.record);
391
529
  let threw = false;
392
530
  try {
393
- await runRecordingStoreCalls(stamp.record, options.asyncLocalStorage, next);
531
+ await runRecording(stamp, started, options.asyncLocalStorage, next);
394
532
  // #2192: after the handler, so whatever answered — a route's own `Response`, the
395
533
  // `onError` envelope — carries it. Set before, Hono would keep it only on a response it
396
534
  // built itself. Hono's `c.header` on an answered context COPIES the response (every one,
@@ -443,7 +581,7 @@ export function withInvocationLog(worker, options = {}) {
443
581
  let status = null;
444
582
  let threw = false;
445
583
  try {
446
- const response = withRequestId(await runRecordingStoreCalls(stamp.record, options.asyncLocalStorage, () => inner.call(worker, request, env, ctx)), stamp.invocationId);
584
+ const response = withRequestId(await runRecording(stamp, started, options.asyncLocalStorage, () => inner.call(worker, request, env, ctx)), stamp.invocationId);
447
585
  status = response.status;
448
586
  handRecordToRouter(response, stamp.record, request, env, options);
449
587
  return response;
@@ -1 +1 @@
1
- {"version":3,"file":"invocation-log.js","sourceRoot":"","sources":["../src/invocation-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,sFAAsF;AACtF,+EAA+E;AAC/E,yFAAyF;AACzF,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GAIf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAOnF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAsChE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAwB;IACnE,OAAO,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AACrE,CAAC;AAcD;;;;;GAKG;AACH,SAAS,wBAAwB;IAC/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAI,UAA2E,CAAC,OAAO,CAAC;QAClG,MAAM,GAAG,GAAG,IAAI,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAgD,CAAC;QACxG,OAAO,OAAO,GAAG,EAAE,iBAAiB,KAAK,UAAU,CAAC,CAAC,CAAE,GAAG,CAAC,iBAA4C,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,QAA4C;IACjE,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,UAA2E,CAAC;QACtF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,OAAO,QAAQ,EAAE,GAAG,KAAK,UAAU,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU;YAAE,OAAO,QAAyB,CAAC;QACpH,MAAM,GAAG,GAAG,QAAQ,IAAI,wBAAwB,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,MAAM,IAAI,GAAkB;YAC1B,OAAO;gBACL,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,CAAC;YACD,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;SAC3C,CAAC;QACF,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAI,MAAwB,EAAE,QAA4C,EAAE,EAAW;IACpH,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5C,CAAC;AA2ED;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,CAAC,GAAI,GAA4D,EAAE,mBAAmB,CAAC;IAC7F,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAChE,MAAM,0BAA0B,GAAG,mDAAmD,CAAC;AACvF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAU,EAAE,CACjE,QAAQ,CAAC,OAAO,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAC;AAE/D;;;;;;;;;;GAUG;AACH,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,CAAC;QACH,OAAO,sBAAsB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,iFAAiF;QACjF,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAiBD;;;;;;;GAOG;AACH,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAEvD,SAAS,MAAM;IACb,MAAM,CAAC,GAAG,UAAqF,CAAC;IAChG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,CAA0C;IACpE,MAAM,GAAG,GAAG,CAAC,CAAC,GAA6C,CAAC;IAC5D,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChG,OAAO,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC;AACpG,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAI,QAAW,EAAE,EAAU;IAC/C,MAAM,OAAO,GAAI,QAAiF,EAAE,OAAO,CAAC;IAC5G,IAAI,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,QAA+B,CAAC;QAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,IAAoB,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,QAAQ,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAM,OAAkC,EAAE,GAAQ,EAAE,OAAkC;IACvG,MAAM,KAAK,GAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpE,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5E,IAAI,eAAe;QAAE,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;IAC7D,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,oBAAoB,CAC3B,OAAqB,EACrB,GAAQ,EACR,OAAkC;IAElC,IAAI,EAAiB,CAAC;IACtB,IAAI,CAAC;QACH,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACzD,OAAO,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAWD;;;;;;;;;GASG;AACH,SAAS,mBAAmB,CAAM,KAAsB,EAAE,IAAmB,EAAE,OAAkC;IAC/G,wFAAwF;IACxF,2FAA2F;IAC3F,mFAAmF;IACnF,IAAI,CAAC;QACH,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAM,KAAsB,EAAE,IAAmB,EAAE,OAAkC;IAC5G,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvE,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,cAAc,CAAC;QAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,YAAY;QAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO;QACrC,YAAY;QACZ,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;QACrE,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrF,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAO,GAA8B,EAAE;IAEvC,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC,GAAG,EAAE,CAAC,sBAAsB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACvD,CAAC,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,oFAAoF;QACpF,gEAAgE;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,gFAAgF;QAChF,+BAA+B;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,GAAG,EAAE,CAAC,sBAAsB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YAC5E,iFAAiF;YACjF,wFAAwF;YACxF,yFAAyF;YACzF,uFAAuF;YACvF,yFAAyF;YACzF,4BAA4B;YAC5B,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG;gBAAE,CAAC,CAAC,MAAM,EAAE,CAAC,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,CAAC;YACb,iFAAiF;YACjF,wEAAwE;YACxE,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,mBAAmB,CACjB,KAAK,EACL,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EACjK,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAmBD,yFAAyF;AACzF,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAElG;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAyB,EACzB,OAAO,GAA8B,EAAE;IAEvC,0FAA0F;IAC1F,2EAA2E;IAC3E,MAAM,KAAK,GAAI,MAAwC,EAAE,KAAK,CAAC;IAC/D,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IAC/C,MAAM,OAAO,GAAsB;QACjC,KAAK,CAAC,KAAK,CAAC,OAAwB,EAAE,GAAQ,EAAE,GAAY;YAC1D,IAAI,iBAAiB,CAAC,OAAO,CAAC;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,MAAM,GAAkB,IAAI,CAAC;YACjC,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,aAAa,CAC5B,MAAM,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAClH,KAAK,CAAC,YAAY,CACnB,CAAC;gBACF,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACzB,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBAClE,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM,CAAC,CAAC;YACV,CAAC;oBAAS,CAAC;gBACT,mBAAmB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;KACF,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,IAAI,CAAC,GAAI,CAAkC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CACzB,QAAiB,EACjB,MAAwB,EACxB,OAAwB,EACxB,GAAQ,EACR,OAAkC;IAElC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC;YAAE,OAAO;QAC9E,QAA0E,CAAC,OAAO,EAAE,GAAG,EAAE,CACxF,wBAAwB,EACxB,KAAK,CACN,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CAAM,OAAqB,EAAE,GAAQ,EAAE,OAAkC;IAChG,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,OAAO,EAAE;YAC7B,cAAc,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC;YAC3C,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;SACrD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,gFAAgF;QAChF,oFAAoF;QACpF,sDAAsD;QACtD,IAAI,CAAC,CAAC,CAAC,YAAY,oBAAoB,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/H,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"invocation-log.js","sourceRoot":"","sources":["../src/invocation-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * The outbound calls a request made, on its invocation line (#2192).
3
+ *
4
+ * A request that failed BECAUSE of an upstream answer — an OAuth callback whose token
5
+ * exchange was refused — used to show a single `request` span: the call that actually
6
+ * failed was nowhere on the timeline. So the platform's entry records every `fetch` the
7
+ * request makes, the way it records its store calls (#2245): the request runs in an
8
+ * `AsyncLocalStorage` holding its record, and a wrapped `globalThis.fetch` adds each call to
9
+ * whichever record is current. Module code cannot fetch (boundary-lint R3); what is recorded
10
+ * is the vertical's host code — its connectors and harness routes.
11
+ *
12
+ * ## What is written, and what never is
13
+ *
14
+ * The host, the method, the status, the time to the response headers, when in the request
15
+ * the call started, and how it ended. Never a header, a body, a query string, a fragment or
16
+ * userinfo, and the path only after {@link redactOutboundPath}: a path segment can be a
17
+ * credential (an API key, a bot token), and a log line is read by a wider audience, for
18
+ * longer, than the call ever had.
19
+ *
20
+ * A refusal by the PLATFORM — the egress worker answering a host the vertical never declared —
21
+ * is recorded as `refused`, read off `x-substrat-egress: refused`. To the vertical's code it is
22
+ * a bare 403, the same as the destination's own; on the line the two read differently.
23
+ *
24
+ * ## What it does not see
25
+ *
26
+ * - A `fetch` made inside a Durable Object (a consumer, a schedule, the drain): no request's
27
+ * record is current there.
28
+ * - A `fetch` still running after the line was written (`waitUntil` work).
29
+ * - A reference to `fetch` a bundle captured while its modules were evaluated: the entry
30
+ * installs the wrapper after that, because the vertical's import is evaluated first.
31
+ *
32
+ * And one property to know: a call is attributed to the request whose `AsyncLocalStorage`
33
+ * context it runs in, as a store call is. A call a promise shared across requests makes lands on
34
+ * the line of the request it runs under.
35
+ *
36
+ * ## It cannot fail the call
37
+ *
38
+ * Outside a request the wrapper hands the call straight to the runtime's `fetch`, and inside
39
+ * one it passes the arguments on untouched — the body is never read, the signal never
40
+ * replaced — and hands back the runtime's own response or rejection. Recording is advisory: a
41
+ * throw from it is swallowed, never the call's.
42
+ */
43
+ import { type OutboundCallTally } from '@substrat-run/kernel/invocation-line';
44
+ /**
45
+ * The response header the egress worker marks its own refusals with — its `EGRESS_HEADER`
46
+ * (`apps/vertical-egress/src/worker.ts`). Spelled twice, because the worker is not a package
47
+ * this one can import; `outbound-calls.test.ts` holds the two equal.
48
+ */
49
+ export declare const EGRESS_REFUSAL_HEADER = "x-substrat-egress";
50
+ /**
51
+ * Whether one path segment is kept as it is. Default-deny: a segment of at most 40 characters
52
+ * is kept ONLY when it is lowercase words (at most 4, each at most 16 letters, joined by `-` or
53
+ * `_`), optionally with a short file extension, an integer of at most 10 digits, or a version token (`v1`, `v2.1`). Everything else
54
+ * is redacted — every UUID and ULID, any segment mixing letters and digits (`oauth2`, `abc1234`),
55
+ * anything with an uppercase letter (an owner or a repository named `Acme`), and any longer
56
+ * number. An id in a path is not needed to diagnose a failed call: the host, the method, the
57
+ * status, the outcome and the path's shape are.
58
+ *
59
+ * What still survives, stated: a lowercase-letter word of up to 16 letters (per part) and an
60
+ * integer of up to 10 digits are written as they are, whatever they mean to the destination.
61
+ */
62
+ export declare function keepsSegment(segment: string): boolean;
63
+ /**
64
+ * The path of an outbound URL as the line writes it: each segment that {@link keepsSegment}
65
+ * does not keep is `[redacted]`, and the result is cut at {@link PATH_MAX} characters. The
66
+ * query string and fragment are not part of a pathname and so never reach it.
67
+ */
68
+ export declare function redactOutboundPath(pathname: string): string;
69
+ /** The tally a request's calls go on: the invocation record, or anything shaped like it. */
70
+ export type OutboundRecording = OutboundCallTally;
71
+ /** Note when the request a recording belongs to started. Never throws. */
72
+ export declare function markRequestStart(recording: OutboundRecording, started: number): void;
73
+ /** What the wrapper needs from the platform: the recording of the request now running. */
74
+ export type CurrentRecording = () => OutboundRecording | undefined;
75
+ type FetchFn = (input: unknown, init?: unknown) => Promise<{
76
+ status: number;
77
+ headers?: {
78
+ get?(name: string): string | null;
79
+ };
80
+ }>;
81
+ /**
82
+ * Wrap `fetch` so each call made while a request's recording is current is added to it.
83
+ * Exported for the tests; the platform installs it with {@link installOutboundRecorder}.
84
+ */
85
+ export declare function recordingFetch<F extends FetchFn>(original: F, current: CurrentRecording): F;
86
+ /**
87
+ * Put the recorder in front of the isolate's `fetch`, once. A `fetch` that already carries the
88
+ * mark — installed by this request's entry, a previous one, or another copy of this module — is
89
+ * left as it is, so evaluating the entry again never wraps twice. Something that replaced
90
+ * `globalThis.fetch` since (a test's mock) is wrapped in turn. Never throws.
91
+ */
92
+ export declare function installOutboundRecorder(current: CurrentRecording): void;
93
+ export {};
94
+ //# sourceMappingURL=outbound-calls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-calls.d.ts","sourceRoot":"","sources":["../src/outbound-calls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,sCAAsC,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAyBzD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM3D;AAiCD,4FAA4F;AAC5F,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAelD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMpF;AAED,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,GAAG,SAAS,CAAC;AA0CnE,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC;AAiBhI;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,CAAC,CAsD3F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CASvE"}