@softprobe/softprobe-js 2.0.4 → 2.0.6
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/README.md +6 -1
- package/dist/cli/diff.d.ts.map +1 -1
- package/dist/cli/diff.js +6 -1
- package/dist/cli/diff.js.map +1 -1
- package/dist/core/runtime/architecture-guard.js +13 -13
- package/dist/core/runtime/architecture-guard.js.map +1 -1
- package/dist/core/runtime/http-body.d.ts +5 -0
- package/dist/core/runtime/http-body.d.ts.map +1 -0
- package/dist/core/runtime/http-body.js +20 -0
- package/dist/core/runtime/http-body.js.map +1 -0
- package/dist/instrumentations/common/http/inbound-capture.d.ts +4 -0
- package/dist/instrumentations/common/http/inbound-capture.d.ts.map +1 -1
- package/dist/instrumentations/common/http/inbound-capture.js +5 -2
- package/dist/instrumentations/common/http/inbound-capture.js.map +1 -1
- package/dist/instrumentations/common/http/inbound-path.d.ts +16 -0
- package/dist/instrumentations/common/http/inbound-path.d.ts.map +1 -0
- package/dist/instrumentations/common/http/inbound-path.js +33 -0
- package/dist/instrumentations/common/http/inbound-path.js.map +1 -0
- package/dist/instrumentations/common/http/inbound-record.d.ts +4 -0
- package/dist/instrumentations/common/http/inbound-record.d.ts.map +1 -1
- package/dist/instrumentations/common/http/inbound-record.js +8 -4
- package/dist/instrumentations/common/http/inbound-record.js.map +1 -1
- package/dist/instrumentations/express/capture.d.ts +9 -6
- package/dist/instrumentations/express/capture.d.ts.map +1 -1
- package/dist/instrumentations/express/capture.js +4 -1
- package/dist/instrumentations/express/capture.js.map +1 -1
- package/dist/instrumentations/fastify/capture.d.ts.map +1 -1
- package/dist/instrumentations/fastify/capture.js +2 -1
- package/dist/instrumentations/fastify/capture.js.map +1 -1
- package/package.json +3 -2
- package/dist/bindings/http-span.d.ts +0 -6
- package/dist/bindings/http-span.d.ts.map +0 -1
- package/dist/bindings/http-span.js +0 -11
- package/dist/bindings/http-span.js.map +0 -1
- package/dist/bindings/postgres-span.d.ts +0 -6
- package/dist/bindings/postgres-span.d.ts.map +0 -1
- package/dist/bindings/postgres-span.js +0 -11
- package/dist/bindings/postgres-span.js.map +0 -1
- package/dist/bindings/redis-span.d.ts +0 -6
- package/dist/bindings/redis-span.d.ts.map +0 -1
- package/dist/bindings/redis-span.js +0 -11
- package/dist/bindings/redis-span.js.map +0 -1
- package/dist/bindings/test-span.d.ts +0 -6
- package/dist/bindings/test-span.d.ts.map +0 -1
- package/dist/bindings/test-span.js +0 -9
- package/dist/bindings/test-span.js.map +0 -1
- package/dist/capture/express.d.ts +0 -6
- package/dist/capture/express.d.ts.map +0 -1
- package/dist/capture/express.js +0 -11
- package/dist/capture/express.js.map +0 -1
- package/dist/capture/fastify.d.ts +0 -5
- package/dist/capture/fastify.d.ts.map +0 -1
- package/dist/capture/fastify.js +0 -9
- package/dist/capture/fastify.js.map +0 -1
- package/dist/capture/framework-mutator.d.ts +0 -20
- package/dist/capture/framework-mutator.d.ts.map +0 -1
- package/dist/capture/framework-mutator.js +0 -144
- package/dist/capture/framework-mutator.js.map +0 -1
- package/dist/capture/http-inbound.d.ts +0 -28
- package/dist/capture/http-inbound.d.ts.map +0 -1
- package/dist/capture/http-inbound.js +0 -40
- package/dist/capture/http-inbound.js.map +0 -1
- package/dist/capture/inject.d.ts +0 -17
- package/dist/capture/inject.d.ts.map +0 -1
- package/dist/capture/inject.js +0 -28
- package/dist/capture/inject.js.map +0 -1
- package/dist/capture/mutator.d.ts +0 -17
- package/dist/capture/mutator.d.ts.map +0 -1
- package/dist/capture/mutator.js +0 -51
- package/dist/capture/mutator.js.map +0 -1
- package/dist/capture/postgres.d.ts +0 -6
- package/dist/capture/postgres.d.ts.map +0 -1
- package/dist/capture/postgres.js +0 -11
- package/dist/capture/postgres.js.map +0 -1
- package/dist/capture/redis.d.ts +0 -5
- package/dist/capture/redis.d.ts.map +0 -1
- package/dist/capture/redis.js +0 -10
- package/dist/capture/redis.js.map +0 -1
- package/dist/capture/store-accessor.d.ts +0 -11
- package/dist/capture/store-accessor.d.ts.map +0 -1
- package/dist/capture/store-accessor.js +0 -19
- package/dist/capture/store-accessor.js.map +0 -1
- package/dist/capture/stream-tap.d.ts +0 -5
- package/dist/capture/stream-tap.d.ts.map +0 -1
- package/dist/capture/stream-tap.js +0 -9
- package/dist/capture/stream-tap.js.map +0 -1
- package/dist/identifier.d.ts +0 -5
- package/dist/identifier.d.ts.map +0 -1
- package/dist/identifier.js +0 -11
- package/dist/identifier.js.map +0 -1
- package/dist/replay/express.d.ts +0 -5
- package/dist/replay/express.d.ts.map +0 -1
- package/dist/replay/express.js +0 -9
- package/dist/replay/express.js.map +0 -1
- package/dist/replay/extract-key.d.ts +0 -41
- package/dist/replay/extract-key.d.ts.map +0 -1
- package/dist/replay/extract-key.js +0 -80
- package/dist/replay/extract-key.js.map +0 -1
- package/dist/replay/fastify.d.ts +0 -5
- package/dist/replay/fastify.d.ts.map +0 -1
- package/dist/replay/fastify.js +0 -9
- package/dist/replay/fastify.js.map +0 -1
- package/dist/replay/http.d.ts +0 -5
- package/dist/replay/http.d.ts.map +0 -1
- package/dist/replay/http.js +0 -10
- package/dist/replay/http.js.map +0 -1
- package/dist/replay/matcher.d.ts +0 -25
- package/dist/replay/matcher.d.ts.map +0 -1
- package/dist/replay/matcher.js +0 -83
- package/dist/replay/matcher.js.map +0 -1
- package/dist/replay/postgres.d.ts +0 -5
- package/dist/replay/postgres.d.ts.map +0 -1
- package/dist/replay/postgres.js +0 -10
- package/dist/replay/postgres.js.map +0 -1
- package/dist/replay/redis.d.ts +0 -5
- package/dist/replay/redis.d.ts.map +0 -1
- package/dist/replay/redis.js +0 -10
- package/dist/replay/redis.js.map +0 -1
- package/dist/replay/softprobe-matcher.d.ts +0 -41
- package/dist/replay/softprobe-matcher.d.ts.map +0 -1
- package/dist/replay/softprobe-matcher.js +0 -92
- package/dist/replay/softprobe-matcher.js.map +0 -1
- package/dist/replay/store-accessor.d.ts +0 -14
- package/dist/replay/store-accessor.d.ts.map +0 -1
- package/dist/replay/store-accessor.js +0 -26
- package/dist/replay/store-accessor.js.map +0 -1
- package/dist/replay/topology.d.ts +0 -37
- package/dist/replay/topology.d.ts.map +0 -1
- package/dist/replay/topology.js +0 -72
- package/dist/replay/topology.js.map +0 -1
package/README.md
CHANGED
|
@@ -202,7 +202,11 @@ Reference:
|
|
|
202
202
|
Release flow:
|
|
203
203
|
|
|
204
204
|
1. Merge changes to `main`.
|
|
205
|
-
2.
|
|
205
|
+
2. Run one command to bump version, push commit, and push matching tag:
|
|
206
|
+
- Patch release: `npm run release:create`
|
|
207
|
+
- Explicit bump: `npm run release:create -- --bump minor`
|
|
208
|
+
- Explicit version: `npm run release:create -- --set-version 2.1.0`
|
|
209
|
+
This keeps `package.json` and tag `v*` consistent because the tag is derived from the new `package.json` version.
|
|
206
210
|
3. GitHub Action builds and publishes automatically.
|
|
207
211
|
|
|
208
212
|
Manual validation flow:
|
|
@@ -218,6 +222,7 @@ This repo ships a ready-to-use Cursor Skill at:
|
|
|
218
222
|
- `cursor-skills/softprobe/SKILL.md`
|
|
219
223
|
- `cursor-skills/softprobe/docs/softprobe-spec.md`
|
|
220
224
|
- `cursor-skills/softprobe/docs/architecture-contract.md`
|
|
225
|
+
- `cursor-skills/softprobe/docs/integration-runbook.md`
|
|
221
226
|
- `cursor-skills/softprobe/docs/workflow-contract.md`
|
|
222
227
|
- `cursor-skills/softprobe/docs/compatibility-matrix.md`
|
|
223
228
|
- `cursor-skills/softprobe/docs/do-not-infer.md`
|
package/dist/cli/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AA2B/D,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAErF;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsClF"}
|
package/dist/cli/diff.js
CHANGED
|
@@ -64,6 +64,11 @@ function parseHttpIdentifier(identifier) {
|
|
|
64
64
|
url: identifier.slice(idx + 1),
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
|
+
/** GET/HEAD requests cannot include body in undici/fetch. */
|
|
68
|
+
function methodAllowsBody(method) {
|
|
69
|
+
const normalized = method.trim().toUpperCase();
|
|
70
|
+
return normalized !== 'GET' && normalized !== 'HEAD';
|
|
71
|
+
}
|
|
67
72
|
/**
|
|
68
73
|
* Loads cassette, finds inbound record, sends request to target with coordination headers.
|
|
69
74
|
* Returns the fetch Response and the inbound record so caller can compare recorded vs live.
|
|
@@ -83,7 +88,7 @@ async function runDiff(file, target) {
|
|
|
83
88
|
const { method, url } = parseHttpIdentifier(inbound.identifier);
|
|
84
89
|
const requestUrl = `${target.replace(/\/$/, '')}${url.startsWith('/') ? url : '/' + url}`;
|
|
85
90
|
const requestPayload = inbound.requestPayload;
|
|
86
|
-
const body = requestPayload?.body !== undefined
|
|
91
|
+
const body = methodAllowsBody(method) && requestPayload?.body !== undefined
|
|
87
92
|
? (typeof requestPayload.body === 'string'
|
|
88
93
|
? requestPayload.body
|
|
89
94
|
: JSON.stringify(requestPayload.body))
|
package/dist/cli/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCH,0BAsCC;AAzED,gDAAwB;AACxB,wCAA8C;AAG9C,0GAA0G;AAC1G,SAAS,sBAAsB,CAAC,OAAgC;IAC9D,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjG,OAAO,MAAM,OAAO,IAAI,MAAM,KAAK,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IACvD,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAChC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,OAAO,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,MAAM,CAAC;AACvD,CAAC;AAID;;;GAGG;AACI,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,MAAc;IACxD,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,4BAA4B,YAAY,sIAAsI,CAC/K,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,cAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,0BAAgB,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACrF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACnF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAEpE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;IAE1F,MAAM,cAAc,GAAG,OAAO,CAAC,cAAgD,CAAC;IAChF,MAAM,IAAI,GACR,gBAAgB,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,IAAI,KAAK,SAAS;QAC5D,CAAC,CAAC,CAAC,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ;YACtC,CAAC,CAAC,cAAc,CAAC,IAAI;YACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,OAAO,GAA2B;QACtC,kBAAkB,EAAE,QAAQ;QAC5B,sBAAsB,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;QAC7C,WAAW,EAAE,sBAAsB,CAAC,OAAO,CAAC;KAC7C,CAAC;IACF,IAAI,IAAI;QAAE,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;QACvC,MAAM;QACN,OAAO;QACP,IAAI;KACL,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -36,16 +36,15 @@ function collectArchitectureViolations() {
|
|
|
36
36
|
if (!specifier.startsWith('.'))
|
|
37
37
|
continue;
|
|
38
38
|
const resolved = resolveToTsPath(file, specifier);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
39
|
+
const candidatePath = normalized(node_path_1.default.resolve(node_path_1.default.dirname(file), specifier));
|
|
40
|
+
const normalizedPath = normalized(resolved ?? candidatePath);
|
|
41
|
+
if (normalizedPath.includes('/src/instrumentations/')) {
|
|
42
|
+
violations.push(`core-imports-instrumentation: ${relative(file)} -> ${specifier}`);
|
|
43
|
+
}
|
|
44
|
+
else if (normalizedPath.includes('/src/capture/')
|
|
45
|
+
|| normalizedPath.includes('/src/replay/')
|
|
46
|
+
|| normalizedPath.includes('/src/bindings/')) {
|
|
47
|
+
violations.push(`core-imports-legacy: ${relative(file)} -> ${specifier}`);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
}
|
|
@@ -62,15 +61,16 @@ function collectArchitectureViolations() {
|
|
|
62
61
|
if (!specifier.startsWith('.'))
|
|
63
62
|
continue;
|
|
64
63
|
const resolved = resolveToTsPath(file, specifier);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const normalizedPath = normalized(resolved);
|
|
64
|
+
const candidatePath = normalized(node_path_1.default.resolve(node_path_1.default.dirname(file), specifier));
|
|
65
|
+
const normalizedPath = normalized(resolved ?? candidatePath);
|
|
68
66
|
if (normalizedPath.includes('/src/bindings/')
|
|
69
67
|
|| normalizedPath.includes('/src/capture/')
|
|
70
68
|
|| normalizedPath.includes('/src/replay/')) {
|
|
71
69
|
violations.push(`instrumentation-imports-legacy-helper: ${relative(file)} -> ${specifier}`);
|
|
72
70
|
continue;
|
|
73
71
|
}
|
|
72
|
+
if (!resolved)
|
|
73
|
+
continue;
|
|
74
74
|
if (!normalizedPath.includes('/src/instrumentations/'))
|
|
75
75
|
continue;
|
|
76
76
|
if (normalizedPath.includes('/src/instrumentations/common/'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architecture-guard.js","sourceRoot":"","sources":["../../../src/core/runtime/architecture-guard.ts"],"names":[],"mappings":";;;;;AAgBA,gDAKC;AAKD,sEA+DC;AAzFD,sDAAyB;AACzB,0DAA6B;AAE7B,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,MAAM,qBAAqB,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACtE,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,sBAAsB,GAAG;IAC7B,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC/B,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC9B,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAAc,EAAE,KAAiC;IAClF,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,uEAAuE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,mDAAmD,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,SAAgB,6BAA6B;IAC3C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,uBAAuB,CAAC,iBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAClD,IAAI,
|
|
1
|
+
{"version":3,"file":"architecture-guard.js","sourceRoot":"","sources":["../../../src/core/runtime/architecture-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Keep it simple: ignore body only when content size is explicitly zero. */
|
|
2
|
+
export declare function shouldCaptureBody(body: unknown, bodyBytes?: number): boolean;
|
|
3
|
+
/** Parses content-length from incoming headers; returns undefined for absent/invalid values. */
|
|
4
|
+
export declare function parseContentLengthHeader(headers?: Record<string, string | string[] | undefined>): number | undefined;
|
|
5
|
+
//# sourceMappingURL=http-body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-body.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/http-body.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED,gGAAgG;AAChG,wBAAgB,wBAAwB,CACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACtD,MAAM,GAAG,SAAS,CAMpB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldCaptureBody = shouldCaptureBody;
|
|
4
|
+
exports.parseContentLengthHeader = parseContentLengthHeader;
|
|
5
|
+
/** Keep it simple: ignore body only when content size is explicitly zero. */
|
|
6
|
+
function shouldCaptureBody(body, bodyBytes) {
|
|
7
|
+
if (bodyBytes === 0)
|
|
8
|
+
return false;
|
|
9
|
+
return body !== undefined && body !== null;
|
|
10
|
+
}
|
|
11
|
+
/** Parses content-length from incoming headers; returns undefined for absent/invalid values. */
|
|
12
|
+
function parseContentLengthHeader(headers) {
|
|
13
|
+
const raw = headers?.['content-length'];
|
|
14
|
+
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
15
|
+
if (value === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
const parsed = Number.parseInt(value, 10);
|
|
18
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=http-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-body.js","sourceRoot":"","sources":["../../../src/core/runtime/http-body.ts"],"names":[],"mappings":";;AACA,8CAGC;AAGD,4DAQC;AAfD,6EAA6E;AAC7E,SAAgB,iBAAiB,CAAC,IAAa,EAAE,SAAkB;IACjE,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC;AAC7C,CAAC;AAED,gGAAgG;AAChG,SAAgB,wBAAwB,CACtC,OAAuD;IAEvD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC"}
|
|
@@ -4,6 +4,10 @@ export type QueueInboundResponsePayload = {
|
|
|
4
4
|
identifier: string;
|
|
5
5
|
/** Parsed request body when middleware is placed after body-parser (Task 14.3.1). */
|
|
6
6
|
requestBody?: unknown;
|
|
7
|
+
/** Request body size in bytes when known from transport headers. */
|
|
8
|
+
requestBodyBytes?: number;
|
|
9
|
+
/** Response body size in bytes when known from transport headers. */
|
|
10
|
+
responseBodyBytes?: number;
|
|
7
11
|
};
|
|
8
12
|
/**
|
|
9
13
|
* Queues an inbound HTTP response for capture. Writes one NDJSON record via the capture store.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-capture.d.ts","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-capture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inbound-capture.d.ts","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-capture.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,2BAA2B,GACnC,IAAI,CA0BN;AAED,uEAAuE;AACvE,eAAO,MAAM,aAAa;;CAEzB,CAAC"}
|
|
@@ -5,6 +5,7 @@ exports.queueInboundResponse = queueInboundResponse;
|
|
|
5
5
|
const api_1 = require("@opentelemetry/api");
|
|
6
6
|
const context_1 = require("../../../context");
|
|
7
7
|
const identifier_1 = require("../../../core/identifier");
|
|
8
|
+
const http_body_1 = require("../../../core/runtime/http-body");
|
|
8
9
|
/**
|
|
9
10
|
* Queues an inbound HTTP response for capture. Writes one NDJSON record via the capture store.
|
|
10
11
|
* Uses active span context for traceId/spanId when not provided in payload.
|
|
@@ -27,9 +28,11 @@ function queueInboundResponse(traceId, payload) {
|
|
|
27
28
|
identifier: (0, identifier_1.httpIdentifier)(method, url),
|
|
28
29
|
responsePayload: {
|
|
29
30
|
statusCode: payload.status,
|
|
30
|
-
body: payload.body,
|
|
31
|
+
...((0, http_body_1.shouldCaptureBody)(payload.body, payload.responseBodyBytes) && { body: payload.body }),
|
|
31
32
|
},
|
|
32
|
-
...(payload.requestBody
|
|
33
|
+
...((0, http_body_1.shouldCaptureBody)(payload.requestBody, payload.requestBodyBytes) && {
|
|
34
|
+
requestPayload: { body: payload.requestBody },
|
|
35
|
+
}),
|
|
33
36
|
};
|
|
34
37
|
const tid = context_1.SoftprobeContext.getTraceId();
|
|
35
38
|
void cassette.saveRecord(tid ? { ...record, traceId: tid } : record).catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-capture.js","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-capture.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"inbound-capture.js","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-capture.ts"],"names":[],"mappings":";;;AAsBA,oDA6BC;AAnDD,4CAA2C;AAE3C,8CAAoD;AACpD,yDAA0D;AAC1D,+DAAoE;AAcpE;;;GAGG;AACH,SAAgB,oBAAoB,CAClC,OAAe,EACf,OAAoC;IAEpC,MAAM,IAAI,GAAG,WAAK,CAAC,aAAa,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC;IAEhD,MAAM,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IACtC,MAAM,QAAQ,GAAG,0BAAgB,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,0BAAgB,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,CAAC,QAAQ;QAAE,OAAO;IAClE,MAAM,MAAM,GAA4B;QACtC,OAAO,EAAE,KAAK;QACd,OAAO;QACP,MAAM;QACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,IAAA,2BAAc,EAAC,MAAM,EAAE,GAAG,CAAC;QACvC,eAAe,EAAE;YACf,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,GAAG,CAAC,IAAA,6BAAiB,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;SAC1F;QACD,GAAG,CAAC,IAAA,6BAAiB,EAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI;YACtE,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE;SAC9C,CAAC;KACH,CAAC;IACF,MAAM,GAAG,GAAG,0BAAgB,CAAC,UAAU,EAAE,CAAC;IAC1C,KAAK,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,uEAAuE;AAC1D,QAAA,aAAa,GAAG;IAC3B,oBAAoB;CACrB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared inbound request path resolver for HTTP framework adapters.
|
|
3
|
+
* Normalizes to path-only form so capture/replay identifiers stay deterministic.
|
|
4
|
+
*/
|
|
5
|
+
export type InboundPathSource = {
|
|
6
|
+
originalUrl?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
path?: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Resolve canonical inbound path from framework request objects.
|
|
12
|
+
* Priority is originalUrl -> url -> path. Preserves query string, drops fragments,
|
|
13
|
+
* normalizes absolute URLs to path+query, and guarantees a rooted path.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveInboundPath(source: InboundPathSource): string;
|
|
16
|
+
//# sourceMappingURL=inbound-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-path.d.ts","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-path.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAwBpE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveInboundPath = resolveInboundPath;
|
|
4
|
+
/**
|
|
5
|
+
* Resolve canonical inbound path from framework request objects.
|
|
6
|
+
* Priority is originalUrl -> url -> path. Preserves query string, drops fragments,
|
|
7
|
+
* normalizes absolute URLs to path+query, and guarantees a rooted path.
|
|
8
|
+
*/
|
|
9
|
+
function resolveInboundPath(source) {
|
|
10
|
+
const preferred = source.originalUrl ?? source.url ?? source.path ?? '/';
|
|
11
|
+
const trimmed = preferred.trim();
|
|
12
|
+
if (!trimmed)
|
|
13
|
+
return '/';
|
|
14
|
+
// Normalize absolute URL inputs to path+query only.
|
|
15
|
+
if (/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//.test(trimmed)) {
|
|
16
|
+
try {
|
|
17
|
+
const parsed = new URL(trimmed);
|
|
18
|
+
const normalized = `${parsed.pathname || '/'}${parsed.search}`;
|
|
19
|
+
return normalized || '/';
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Fall through to plain-path normalization.
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const withoutFragment = trimmed.split('#')[0] || '';
|
|
26
|
+
const rooted = withoutFragment.startsWith('/')
|
|
27
|
+
? withoutFragment
|
|
28
|
+
: withoutFragment.startsWith('?')
|
|
29
|
+
? `/${withoutFragment}`
|
|
30
|
+
: `/${withoutFragment}`;
|
|
31
|
+
return rooted || '/';
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=inbound-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-path.js","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-path.ts"],"names":[],"mappings":";;AAeA,gDAwBC;AA7BD;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,MAAyB;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;IACzE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IAEzB,oDAAoD;IACpD,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC/D,OAAO,UAAU,IAAI,GAAG,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,MAAM,GACV,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC;QAC7B,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC;YAC/B,CAAC,CAAC,IAAI,eAAe,EAAE;YACvB,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC;IAC9B,OAAO,MAAM,IAAI,GAAG,CAAC;AACvB,CAAC"}
|
|
@@ -15,10 +15,14 @@ export type WriteInboundHttpOptions = {
|
|
|
15
15
|
url: string;
|
|
16
16
|
/** Request body (optional). */
|
|
17
17
|
requestBody?: unknown;
|
|
18
|
+
/** Request body size in bytes when known from transport headers. */
|
|
19
|
+
requestBodyBytes?: number;
|
|
18
20
|
/** Response status code (optional). */
|
|
19
21
|
statusCode?: number;
|
|
20
22
|
/** Response body (optional). */
|
|
21
23
|
responseBody?: unknown;
|
|
24
|
+
/** Response body size in bytes when known from transport headers. */
|
|
25
|
+
responseBodyBytes?: number;
|
|
22
26
|
};
|
|
23
27
|
/**
|
|
24
28
|
* Writes one inbound HTTP cassette record. Include requestBody for request capture,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-record.d.ts","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-record.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"inbound-record.d.ts","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-record.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKnE,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,uBAAuB,GAC/B,IAAI,CAyCN"}
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.writeInboundHttpRecord = writeInboundHttpRecord;
|
|
11
11
|
const identifier_1 = require("../../../core/identifier");
|
|
12
|
+
const http_body_1 = require("../../../core/runtime/http-body");
|
|
12
13
|
/**
|
|
13
14
|
* Writes one inbound HTTP cassette record. Include requestBody for request capture,
|
|
14
15
|
* and statusCode/responseBody when the response is available (same record).
|
|
15
16
|
*/
|
|
16
17
|
function writeInboundHttpRecord(store, options) {
|
|
17
|
-
const { traceId, spanId, parentSpanId, spanName, method, url, requestBody, statusCode, responseBody, } = options;
|
|
18
|
+
const { traceId, spanId, parentSpanId, spanName, method, url, requestBody, requestBodyBytes, statusCode, responseBody, responseBodyBytes, } = options;
|
|
18
19
|
const record = {
|
|
19
20
|
version: '4.1',
|
|
20
21
|
traceId,
|
|
@@ -26,14 +27,17 @@ function writeInboundHttpRecord(store, options) {
|
|
|
26
27
|
protocol: 'http',
|
|
27
28
|
identifier: (0, identifier_1.httpIdentifier)(method, url),
|
|
28
29
|
};
|
|
29
|
-
if (requestBody
|
|
30
|
+
if ((0, http_body_1.shouldCaptureBody)(requestBody, requestBodyBytes)) {
|
|
30
31
|
record.requestPayload = { body: requestBody };
|
|
31
32
|
}
|
|
32
33
|
if (statusCode !== undefined) {
|
|
33
|
-
|
|
34
|
+
const responsePayload = {
|
|
34
35
|
statusCode,
|
|
35
|
-
body: responseBody,
|
|
36
36
|
};
|
|
37
|
+
if ((0, http_body_1.shouldCaptureBody)(responseBody, responseBodyBytes)) {
|
|
38
|
+
responsePayload.body = responseBody;
|
|
39
|
+
}
|
|
40
|
+
record.responsePayload = responsePayload;
|
|
37
41
|
}
|
|
38
42
|
store.saveRecord(record);
|
|
39
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-record.js","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-record.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"inbound-record.js","sourceRoot":"","sources":["../../../../src/instrumentations/common/http/inbound-record.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA8BH,wDA4CC;AAtED,yDAA0D;AAC1D,+DAAoE;AAqBpE;;;GAGG;AACH,SAAgB,sBAAsB,CACpC,KAAoB,EACpB,OAAgC;IAEhC,MAAM,EACJ,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,GAAG,EACH,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAA4B;QACtC,OAAO,EAAE,KAAK;QACd,OAAO;QACP,MAAM;QACN,YAAY;QACZ,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,IAAA,2BAAc,EAAC,MAAM,EAAE,GAAG,CAAC;KACxC,CAAC;IAEF,IAAI,IAAA,6BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,cAAc,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,eAAe,GAA2C;YAC9D,UAAU;SACX,CAAC;QACF,IAAI,IAAA,6BAAiB,EAAC,YAAY,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACvD,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
import { CaptureEngine, queueInboundResponse, type QueueInboundResponsePayload } from '../common/http/inbound-capture';
|
|
7
7
|
export { CaptureEngine, queueInboundResponse };
|
|
8
8
|
export type { QueueInboundResponsePayload };
|
|
9
|
+
type ExpressInboundRequest = {
|
|
10
|
+
method: string;
|
|
11
|
+
path: string;
|
|
12
|
+
originalUrl?: string;
|
|
13
|
+
url?: string;
|
|
14
|
+
body?: unknown;
|
|
15
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
16
|
+
};
|
|
9
17
|
/**
|
|
10
18
|
* Environment-aware Express middleware. Replay uses cassetteDirectory + traceId (from context/headers);
|
|
11
19
|
* storage is resolved per request and SoftprobeContext.run loads the cassette in REPLAY mode.
|
|
@@ -14,12 +22,7 @@ export type { QueueInboundResponsePayload };
|
|
|
14
22
|
* Task 17.3.2: Runs the whole request inside OTel context and does not return until res.end() so
|
|
15
23
|
* downstream code (route handlers, MSW fetch listener) sees the same SoftprobeContext state.
|
|
16
24
|
*/
|
|
17
|
-
export declare function softprobeExpressMiddleware(req: {
|
|
18
|
-
method: string;
|
|
19
|
-
path: string;
|
|
20
|
-
body?: unknown;
|
|
21
|
-
headers?: Record<string, string | string[] | undefined>;
|
|
22
|
-
}, res: {
|
|
25
|
+
export declare function softprobeExpressMiddleware(req: ExpressInboundRequest, res: {
|
|
23
26
|
statusCode: number;
|
|
24
27
|
send: (body?: unknown) => unknown;
|
|
25
28
|
}, next: (err?: unknown) => void): void | Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/instrumentations/express/capture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/instrumentations/express/capture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,KAAK,2BAA2B,EACjC,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC;AAC/C,YAAY,EAAE,2BAA2B,EAAE,CAAC;AAE5C,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACzD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,qBAAqB,EAC1B,GAAG,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CAAE,EAC9D,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,GAC5B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DtB"}
|
|
@@ -11,10 +11,12 @@ const api_1 = require("@opentelemetry/api");
|
|
|
11
11
|
const replay_1 = require("./replay");
|
|
12
12
|
const context_1 = require("../../context");
|
|
13
13
|
const context_request_storage_1 = require("../../core/cassette/context-request-storage");
|
|
14
|
+
const http_body_1 = require("../../core/runtime/http-body");
|
|
14
15
|
const inbound_capture_1 = require("../common/http/inbound-capture");
|
|
15
16
|
Object.defineProperty(exports, "CaptureEngine", { enumerable: true, get: function () { return inbound_capture_1.CaptureEngine; } });
|
|
16
17
|
Object.defineProperty(exports, "queueInboundResponse", { enumerable: true, get: function () { return inbound_capture_1.queueInboundResponse; } });
|
|
17
18
|
const span_adapter_1 = require("../common/http/span-adapter");
|
|
19
|
+
const inbound_path_1 = require("../common/http/inbound-path");
|
|
18
20
|
/**
|
|
19
21
|
* Environment-aware Express middleware. Replay uses cassetteDirectory + traceId (from context/headers);
|
|
20
22
|
* storage is resolved per request and SoftprobeContext.run loads the cassette in REPLAY mode.
|
|
@@ -67,8 +69,9 @@ function softprobeExpressMiddleware(req, res, next) {
|
|
|
67
69
|
inbound_capture_1.CaptureEngine.queueInboundResponse(ctxTraceId, {
|
|
68
70
|
status: res.statusCode,
|
|
69
71
|
body,
|
|
70
|
-
identifier: (0, span_adapter_1.buildInboundHttpIdentifier)(req.method,
|
|
72
|
+
identifier: (0, span_adapter_1.buildInboundHttpIdentifier)(req.method, (0, inbound_path_1.resolveInboundPath)(req)),
|
|
71
73
|
requestBody: req.body,
|
|
74
|
+
requestBodyBytes: (0, http_body_1.parseContentLengthHeader)(req.headers),
|
|
72
75
|
});
|
|
73
76
|
return originalSend.apply(res, arguments);
|
|
74
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/instrumentations/express/capture.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/instrumentations/express/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/instrumentations/fastify/capture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/instrumentations/fastify/capture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAkD7E;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpF"}
|
|
@@ -9,6 +9,7 @@ exports.softprobeFastifyPlugin = softprobeFastifyPlugin;
|
|
|
9
9
|
const api_1 = require("@opentelemetry/api");
|
|
10
10
|
const inbound_capture_1 = require("../common/http/inbound-capture");
|
|
11
11
|
const span_adapter_1 = require("../common/http/span-adapter");
|
|
12
|
+
const inbound_path_1 = require("../common/http/inbound-path");
|
|
12
13
|
const replay_1 = require("./replay");
|
|
13
14
|
const context_1 = require("../../context");
|
|
14
15
|
const context_request_storage_1 = require("../../core/cassette/context-request-storage");
|
|
@@ -56,7 +57,7 @@ async function softprobeFastifyPlugin(fastify) {
|
|
|
56
57
|
inbound_capture_1.CaptureEngine.queueInboundResponse(traceId, {
|
|
57
58
|
status: reply.statusCode,
|
|
58
59
|
body: payload,
|
|
59
|
-
identifier: (0, span_adapter_1.buildInboundHttpIdentifier)(request.method, request.url),
|
|
60
|
+
identifier: (0, span_adapter_1.buildInboundHttpIdentifier)(request.method, (0, inbound_path_1.resolveInboundPath)({ url: request.url })),
|
|
60
61
|
});
|
|
61
62
|
return payload;
|
|
62
63
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/instrumentations/fastify/capture.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/instrumentations/fastify/capture.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softprobe/softprobe-js",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"description": "Topology-aware record & replay testing framework via OpenTelemetry",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"softprobe",
|
|
@@ -55,7 +55,8 @@
|
|
|
55
55
|
"example:kill": "(lsof -ti :3000; lsof -ti :3010) 2>/dev/null | xargs kill -9 2>/dev/null; echo Done",
|
|
56
56
|
"example:kill-e2e": "pkill -f 'express-inbound-worker|fastify-inbound-worker|diff-headers-server' 2>/dev/null; echo Done",
|
|
57
57
|
"diff": "node dist/cli.js diff",
|
|
58
|
-
"diff:dev": "npx ts-node --transpile-only src/cli.ts diff"
|
|
58
|
+
"diff:dev": "npx ts-node --transpile-only src/cli.ts diff",
|
|
59
|
+
"release:create": "bash scripts/create-release.sh"
|
|
59
60
|
},
|
|
60
61
|
"dependencies": {
|
|
61
62
|
"@mswjs/interceptors": "^0.39.8",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-span.d.ts","sourceRoot":"","sources":["../../src/bindings/http-span.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tagRequest = exports.fromSpan = exports.HttpSpan = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Legacy compatibility re-export for HTTP span helpers.
|
|
6
|
-
*/
|
|
7
|
-
var http_span_1 = require("../core/bindings/http-span");
|
|
8
|
-
Object.defineProperty(exports, "HttpSpan", { enumerable: true, get: function () { return http_span_1.HttpSpan; } });
|
|
9
|
-
Object.defineProperty(exports, "fromSpan", { enumerable: true, get: function () { return http_span_1.fromSpan; } });
|
|
10
|
-
Object.defineProperty(exports, "tagRequest", { enumerable: true, get: function () { return http_span_1.tagRequest; } });
|
|
11
|
-
//# sourceMappingURL=http-span.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-span.js","sourceRoot":"","sources":["../../src/bindings/http-span.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,wDAA4E;AAAnE,qGAAA,QAAQ,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAAE,uGAAA,UAAU,OAAA"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Legacy compatibility re-export for Postgres span helpers.
|
|
3
|
-
*/
|
|
4
|
-
export { PostgresSpan, fromSpan, tagQuery } from '../core/bindings/postgres-span';
|
|
5
|
-
export type { PostgresSpanData } from '../core/bindings/postgres-span';
|
|
6
|
-
//# sourceMappingURL=postgres-span.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-span.d.ts","sourceRoot":"","sources":["../../src/bindings/postgres-span.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAClF,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tagQuery = exports.fromSpan = exports.PostgresSpan = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Legacy compatibility re-export for Postgres span helpers.
|
|
6
|
-
*/
|
|
7
|
-
var postgres_span_1 = require("../core/bindings/postgres-span");
|
|
8
|
-
Object.defineProperty(exports, "PostgresSpan", { enumerable: true, get: function () { return postgres_span_1.PostgresSpan; } });
|
|
9
|
-
Object.defineProperty(exports, "fromSpan", { enumerable: true, get: function () { return postgres_span_1.fromSpan; } });
|
|
10
|
-
Object.defineProperty(exports, "tagQuery", { enumerable: true, get: function () { return postgres_span_1.tagQuery; } });
|
|
11
|
-
//# sourceMappingURL=postgres-span.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-span.js","sourceRoot":"","sources":["../../src/bindings/postgres-span.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,gEAAkF;AAAzE,6GAAA,YAAY,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAAE,yGAAA,QAAQ,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redis-span.d.ts","sourceRoot":"","sources":["../../src/bindings/redis-span.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tagCommand = exports.fromSpan = exports.RedisSpan = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Legacy compatibility re-export for Redis span helpers.
|
|
6
|
-
*/
|
|
7
|
-
var redis_span_1 = require("../core/bindings/redis-span");
|
|
8
|
-
Object.defineProperty(exports, "RedisSpan", { enumerable: true, get: function () { return redis_span_1.RedisSpan; } });
|
|
9
|
-
Object.defineProperty(exports, "fromSpan", { enumerable: true, get: function () { return redis_span_1.fromSpan; } });
|
|
10
|
-
Object.defineProperty(exports, "tagCommand", { enumerable: true, get: function () { return redis_span_1.tagCommand; } });
|
|
11
|
-
//# sourceMappingURL=redis-span.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redis-span.js","sourceRoot":"","sources":["../../src/bindings/redis-span.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,0DAA8E;AAArE,uGAAA,SAAS,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,wGAAA,UAAU,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-span.d.ts","sourceRoot":"","sources":["../../src/bindings/test-span.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.testSpan = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Legacy compatibility re-export for test span helper.
|
|
6
|
-
*/
|
|
7
|
-
var test_span_1 = require("../core/bindings/test-span");
|
|
8
|
-
Object.defineProperty(exports, "testSpan", { enumerable: true, get: function () { return test_span_1.testSpan; } });
|
|
9
|
-
//# sourceMappingURL=test-span.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-span.js","sourceRoot":"","sources":["../../src/bindings/test-span.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,wDAAsD;AAA7C,qGAAA,QAAQ,OAAA"}
|