@agent-inspect/mcp-server 6.31.5 → 6.31.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-FUNPQPC3.mjs → chunk-J2LULLKC.mjs} +202 -53
- package/dist/chunk-J2LULLKC.mjs.map +1 -0
- package/dist/cli.cjs +200 -51
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/index.cjs +200 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
- package/dist/chunk-FUNPQPC3.mjs.map +0 -1
package/dist/cli.cjs
CHANGED
|
@@ -218,7 +218,7 @@ var Redactor = class {
|
|
|
218
218
|
};
|
|
219
219
|
|
|
220
220
|
// packages/core/src/safety/credential-value-patterns.ts
|
|
221
|
-
var KEY_VALUE_SECRET_PATTERN = /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'
|
|
221
|
+
var KEY_VALUE_SECRET_PATTERN = /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'\\&#?]))([^\s"'\\]{8,})/i;
|
|
222
222
|
var HIGH_CONFIDENCE_CREDENTIAL_PATTERNS = [
|
|
223
223
|
/^(?:basic|bearer|digest|apikey)\s+[a-z0-9._~+/=-]+$/i,
|
|
224
224
|
/\bbearer\s+[a-z0-9._~+/=-]{12,}\b/i,
|
|
@@ -1498,6 +1498,8 @@ function filterTraces(traces, options) {
|
|
|
1498
1498
|
}
|
|
1499
1499
|
|
|
1500
1500
|
// packages/core/src/timeline.ts
|
|
1501
|
+
var ROOT_TIMELINE_DEPTH = 0;
|
|
1502
|
+
var MAX_TIMELINE_DEPTH = 1e3;
|
|
1501
1503
|
function finite(n) {
|
|
1502
1504
|
return typeof n === "number" && Number.isFinite(n);
|
|
1503
1505
|
}
|
|
@@ -1568,16 +1570,51 @@ function buildRunTimeline(events, options = {}) {
|
|
|
1568
1570
|
const computeDepth = (stepId) => {
|
|
1569
1571
|
const cached = depthCache.get(stepId);
|
|
1570
1572
|
if (cached !== void 0) return cached;
|
|
1571
|
-
const
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1573
|
+
const ancestry = [];
|
|
1574
|
+
const ancestryIndexes = /* @__PURE__ */ new Map();
|
|
1575
|
+
let currentStepId = stepId;
|
|
1576
|
+
let resolvedDepth;
|
|
1577
|
+
while (resolvedDepth === void 0) {
|
|
1578
|
+
const cachedDepth = depthCache.get(currentStepId);
|
|
1579
|
+
if (cachedDepth !== void 0) {
|
|
1580
|
+
resolvedDepth = cachedDepth;
|
|
1581
|
+
continue;
|
|
1582
|
+
}
|
|
1583
|
+
const cycleStart = ancestryIndexes.get(currentStepId);
|
|
1584
|
+
if (cycleStart !== void 0) {
|
|
1585
|
+
const cycleStepIds = ancestry.splice(cycleStart);
|
|
1586
|
+
for (const cycleStepId of cycleStepIds) {
|
|
1587
|
+
depthCache.set(cycleStepId, ROOT_TIMELINE_DEPTH);
|
|
1588
|
+
}
|
|
1589
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
1590
|
+
continue;
|
|
1591
|
+
}
|
|
1592
|
+
const currentStep = steps.get(currentStepId);
|
|
1593
|
+
if (!currentStep) {
|
|
1594
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
1595
|
+
continue;
|
|
1596
|
+
}
|
|
1597
|
+
ancestryIndexes.set(currentStepId, ancestry.length);
|
|
1598
|
+
ancestry.push(currentStepId);
|
|
1599
|
+
const parentId = currentStep.parentId;
|
|
1600
|
+
if (typeof parentId !== "string" || parentId.trim() === "" || !steps.has(parentId)) {
|
|
1601
|
+
ancestry.pop();
|
|
1602
|
+
depthCache.set(currentStepId, ROOT_TIMELINE_DEPTH);
|
|
1603
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
1604
|
+
continue;
|
|
1605
|
+
}
|
|
1606
|
+
currentStepId = parentId;
|
|
1577
1607
|
}
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1608
|
+
ancestry.reverse();
|
|
1609
|
+
for (const ancestorStepId of ancestry) {
|
|
1610
|
+
resolvedDepth = Math.min(MAX_TIMELINE_DEPTH, resolvedDepth + 1);
|
|
1611
|
+
depthCache.set(ancestorStepId, resolvedDepth);
|
|
1612
|
+
}
|
|
1613
|
+
const resolvedStepDepth = depthCache.get(stepId);
|
|
1614
|
+
if (resolvedStepDepth === void 0) {
|
|
1615
|
+
throw new Error(`Failed to resolve timeline depth for step "${stepId}"`);
|
|
1616
|
+
}
|
|
1617
|
+
return resolvedStepDepth;
|
|
1581
1618
|
};
|
|
1582
1619
|
const entries = [];
|
|
1583
1620
|
for (const [stepId, s] of steps.entries()) {
|
|
@@ -3361,7 +3398,7 @@ var DEFAULT_SECRET_PATTERNS = [
|
|
|
3361
3398
|
// Keep in sync with packages/redact/src/key-value-secret.ts (KEY_VALUE_SECRET_PATTERN_SOURCE).
|
|
3362
3399
|
{
|
|
3363
3400
|
id: "key-value-secret",
|
|
3364
|
-
pattern: /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'
|
|
3401
|
+
pattern: /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'\\&#?]))([^\s"'\\]{8,})/i
|
|
3365
3402
|
}
|
|
3366
3403
|
];
|
|
3367
3404
|
function compareStrings(a, b) {
|
|
@@ -3676,9 +3713,6 @@ function limitFindings(findings, maxFindings) {
|
|
|
3676
3713
|
if (maxFindings === void 0 || findings.length <= maxFindings) return findings;
|
|
3677
3714
|
return findings.slice(0, Math.max(0, maxFindings));
|
|
3678
3715
|
}
|
|
3679
|
-
function hasRedactionMarker(value, markers) {
|
|
3680
|
-
return markers.some((marker) => value.includes(marker)) || /^\[HASH:[A-Za-z0-9_-]+\]$/.test(value);
|
|
3681
|
-
}
|
|
3682
3716
|
function isFullyRedactedValue(value, markers = ["[REDACTED]", "[REDACTED:"]) {
|
|
3683
3717
|
if (typeof value !== "string") return false;
|
|
3684
3718
|
const trimmed = value.trim();
|
|
@@ -3763,7 +3797,7 @@ function createSafetyRedactionRule(options = {}) {
|
|
|
3763
3797
|
for (const event of context.events) {
|
|
3764
3798
|
for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {
|
|
3765
3799
|
if (!isSensitiveKey(entry.key ?? lastPathSegment(entry.path), sensitiveKeys)) continue;
|
|
3766
|
-
if (
|
|
3800
|
+
if (isFullyRedactedValue(entry.value, markers)) continue;
|
|
3767
3801
|
findings.push(
|
|
3768
3802
|
failFinding(
|
|
3769
3803
|
"safety.redaction",
|
|
@@ -5055,6 +5089,23 @@ function persistedInspectEventToInspectEvent(event) {
|
|
|
5055
5089
|
if (event.durationMs !== void 0 && Number.isFinite(event.durationMs) && event.durationMs >= 0) {
|
|
5056
5090
|
out.durationMs = event.durationMs;
|
|
5057
5091
|
}
|
|
5092
|
+
if (event.startedAt !== void 0) {
|
|
5093
|
+
const started = parseIsoToMs3(event.startedAt);
|
|
5094
|
+
if (!started.invalidTimestamp) {
|
|
5095
|
+
attrs2.startedAtMs = started.ms;
|
|
5096
|
+
out.timestamp = started.ms;
|
|
5097
|
+
}
|
|
5098
|
+
}
|
|
5099
|
+
if (event.endedAt !== void 0) {
|
|
5100
|
+
const ended = parseIsoToMs3(event.endedAt);
|
|
5101
|
+
if (!ended.invalidTimestamp) {
|
|
5102
|
+
attrs2.endedAtMs = ended.ms;
|
|
5103
|
+
if (out.durationMs === void 0 && typeof attrs2.startedAtMs === "number" && ended.ms >= attrs2.startedAtMs) {
|
|
5104
|
+
out.durationMs = ended.ms - attrs2.startedAtMs;
|
|
5105
|
+
}
|
|
5106
|
+
}
|
|
5107
|
+
}
|
|
5108
|
+
out.attributes = compactAttributes3(attrs2);
|
|
5058
5109
|
return out;
|
|
5059
5110
|
}
|
|
5060
5111
|
function persistedInspectEventsToInspectEvents(events, options) {
|
|
@@ -6116,20 +6167,38 @@ function extractOtlpDocument(root) {
|
|
|
6116
6167
|
function mapOtlpStatus(status) {
|
|
6117
6168
|
if (!isRecord10(status)) return void 0;
|
|
6118
6169
|
const rawCode = status.code;
|
|
6119
|
-
if (typeof rawCode
|
|
6120
|
-
|
|
6121
|
-
|
|
6122
|
-
|
|
6123
|
-
|
|
6124
|
-
|
|
6125
|
-
|
|
6126
|
-
|
|
6127
|
-
|
|
6128
|
-
|
|
6129
|
-
|
|
6130
|
-
|
|
6131
|
-
|
|
6170
|
+
if (typeof rawCode === "number" && Number.isFinite(rawCode)) {
|
|
6171
|
+
switch (rawCode) {
|
|
6172
|
+
case 0:
|
|
6173
|
+
return "unknown";
|
|
6174
|
+
case 1:
|
|
6175
|
+
return "ok";
|
|
6176
|
+
case 2:
|
|
6177
|
+
return "error";
|
|
6178
|
+
default:
|
|
6179
|
+
return "unknown";
|
|
6180
|
+
}
|
|
6181
|
+
}
|
|
6182
|
+
if (typeof rawCode === "string") {
|
|
6183
|
+
const trimmed = rawCode.trim();
|
|
6184
|
+
if (/^\d+$/.test(trimmed)) {
|
|
6185
|
+
return mapOtlpStatus({ code: Number(trimmed) });
|
|
6186
|
+
}
|
|
6187
|
+
switch (trimmed.toUpperCase()) {
|
|
6188
|
+
case "STATUS_CODE_OK":
|
|
6189
|
+
case "OK":
|
|
6190
|
+
return "ok";
|
|
6191
|
+
case "STATUS_CODE_ERROR":
|
|
6192
|
+
case "ERROR":
|
|
6193
|
+
return "error";
|
|
6194
|
+
case "STATUS_CODE_UNSET":
|
|
6195
|
+
case "UNSET":
|
|
6196
|
+
return "unknown";
|
|
6197
|
+
default:
|
|
6198
|
+
return "unknown";
|
|
6199
|
+
}
|
|
6132
6200
|
}
|
|
6201
|
+
return void 0;
|
|
6133
6202
|
}
|
|
6134
6203
|
function readOtlpKind(attributes, pathPrefix) {
|
|
6135
6204
|
const warnings = [];
|
|
@@ -6717,6 +6786,8 @@ var CONNECTION_PROTOCOLS = /* @__PURE__ */ new Set([
|
|
|
6717
6786
|
"amqps:"
|
|
6718
6787
|
]);
|
|
6719
6788
|
var CONNECTION_URI = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^\s]+$/i;
|
|
6789
|
+
var CONNECTION_USERINFO = /^(postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/([^@/?#]+)@(.+)$/i;
|
|
6790
|
+
var CONNECTION_HAS_USERINFO = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^@/?#]+@/i;
|
|
6720
6791
|
var UUID_SEGMENT = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
6721
6792
|
var HEX_SEGMENT = /^[0-9a-f]{12,}$/i;
|
|
6722
6793
|
var NUMERIC_SEGMENT = /^\d{5,}$/;
|
|
@@ -6740,6 +6811,28 @@ function parseRedactableUrl(value) {
|
|
|
6740
6811
|
return void 0;
|
|
6741
6812
|
}
|
|
6742
6813
|
}
|
|
6814
|
+
function redactConnectionUserinfoFallback(value, replacement) {
|
|
6815
|
+
const trimmed = value.trim();
|
|
6816
|
+
const match = CONNECTION_USERINFO.exec(trimmed);
|
|
6817
|
+
if (match) {
|
|
6818
|
+
const [, scheme, , rest] = match;
|
|
6819
|
+
if (scheme && rest && rest.length > 0) {
|
|
6820
|
+
return {
|
|
6821
|
+
value: `${scheme}://${rest}`,
|
|
6822
|
+
credentialRedacted: true,
|
|
6823
|
+
identifiersMasked: false
|
|
6824
|
+
};
|
|
6825
|
+
}
|
|
6826
|
+
}
|
|
6827
|
+
if (looksLikeConnectionUri(trimmed) && CONNECTION_HAS_USERINFO.test(trimmed)) {
|
|
6828
|
+
return {
|
|
6829
|
+
value: replacement,
|
|
6830
|
+
credentialRedacted: true,
|
|
6831
|
+
identifiersMasked: false
|
|
6832
|
+
};
|
|
6833
|
+
}
|
|
6834
|
+
return void 0;
|
|
6835
|
+
}
|
|
6743
6836
|
function isHttpProtocol(protocol) {
|
|
6744
6837
|
return protocol === "http:" || protocol === "https:";
|
|
6745
6838
|
}
|
|
@@ -6781,9 +6874,11 @@ function redactUrlString(value, options) {
|
|
|
6781
6874
|
identifiersMasked: false
|
|
6782
6875
|
};
|
|
6783
6876
|
if (!looksLikeUrlForRedaction(value)) return unchanged;
|
|
6784
|
-
const url = parseRedactableUrl(value);
|
|
6785
|
-
if (!url) return unchanged;
|
|
6786
6877
|
const replacement = options.replacement ?? "[REDACTED]";
|
|
6878
|
+
const url = parseRedactableUrl(value);
|
|
6879
|
+
if (!url) {
|
|
6880
|
+
return redactConnectionUserinfoFallback(value, replacement) ?? unchanged;
|
|
6881
|
+
}
|
|
6787
6882
|
const idPlaceholder = options.idPlaceholder ?? "[id]";
|
|
6788
6883
|
const http = isHttpProtocol(url.protocol);
|
|
6789
6884
|
let credentialRedacted = url.username.length > 0 || url.password.length > 0;
|
|
@@ -7355,6 +7450,10 @@ function exportOpenInference(tree, options) {
|
|
|
7355
7450
|
warnings
|
|
7356
7451
|
};
|
|
7357
7452
|
}
|
|
7453
|
+
var OTLP_STATUS_CODE_UNSET = 0;
|
|
7454
|
+
var OTLP_STATUS_CODE_OK = 1;
|
|
7455
|
+
var OTLP_STATUS_CODE_ERROR = 2;
|
|
7456
|
+
var OTLP_SPAN_KIND_INTERNAL = 1;
|
|
7358
7457
|
function hexFrom2(seed, byteLen) {
|
|
7359
7458
|
return crypto__default.default.createHash("sha256").update(seed, "utf8").digest("hex").slice(0, byteLen * 2);
|
|
7360
7459
|
}
|
|
@@ -7367,7 +7466,19 @@ function stringAttr2(key, value) {
|
|
|
7367
7466
|
return { key, value: { stringValue: value } };
|
|
7368
7467
|
}
|
|
7369
7468
|
function intAttr(key, value) {
|
|
7370
|
-
return { key, value: { intValue: String(value) } };
|
|
7469
|
+
return { key, value: { intValue: String(Math.trunc(value)) } };
|
|
7470
|
+
}
|
|
7471
|
+
function doubleAttr(key, value) {
|
|
7472
|
+
return { key, value: { doubleValue: value } };
|
|
7473
|
+
}
|
|
7474
|
+
function boolAttr(key, value) {
|
|
7475
|
+
return { key, value: { boolValue: value } };
|
|
7476
|
+
}
|
|
7477
|
+
function numberAttr(key, value) {
|
|
7478
|
+
if (Number.isFinite(value) && !Number.isInteger(value)) {
|
|
7479
|
+
return doubleAttr(key, value);
|
|
7480
|
+
}
|
|
7481
|
+
return intAttr(key, value);
|
|
7371
7482
|
}
|
|
7372
7483
|
function genAiOperationName(kind) {
|
|
7373
7484
|
switch (kind) {
|
|
@@ -7381,10 +7492,27 @@ function genAiOperationName(kind) {
|
|
|
7381
7492
|
return void 0;
|
|
7382
7493
|
}
|
|
7383
7494
|
}
|
|
7495
|
+
function resolveSpanTimes(ev) {
|
|
7496
|
+
const startedAtMs = typeof ev.attributes?.startedAtMs === "number" && Number.isFinite(ev.attributes.startedAtMs) ? ev.attributes.startedAtMs : void 0;
|
|
7497
|
+
const endedAtMs = typeof ev.attributes?.endedAtMs === "number" && Number.isFinite(ev.attributes.endedAtMs) ? ev.attributes.endedAtMs : void 0;
|
|
7498
|
+
const startMs = startedAtMs ?? ev.timestamp;
|
|
7499
|
+
const startNs = String(unixNano2(startMs));
|
|
7500
|
+
if (endedAtMs !== void 0) {
|
|
7501
|
+
return { startNs, endNs: String(unixNano2(endedAtMs)) };
|
|
7502
|
+
}
|
|
7503
|
+
if (ev.durationMs !== void 0 && Number.isFinite(ev.durationMs)) {
|
|
7504
|
+
return {
|
|
7505
|
+
startNs,
|
|
7506
|
+
endNs: String(unixNano2(startMs) + unixNano2(ev.durationMs))
|
|
7507
|
+
};
|
|
7508
|
+
}
|
|
7509
|
+
return { startNs };
|
|
7510
|
+
}
|
|
7384
7511
|
function exportOtlpJson(tree, options) {
|
|
7385
7512
|
const warnings = [
|
|
7386
7513
|
"OTLP JSON export uses OTel GenAI-aligned attributes where applicable; experimental until verified against specific collectors.",
|
|
7387
|
-
"Not OTLP gRPC/protobuf \u2014 JSON mapping only. Generated locally; no network upload."
|
|
7514
|
+
"Not OTLP gRPC/protobuf \u2014 JSON mapping only. Generated locally; no network upload.",
|
|
7515
|
+
"Status and span kind use OTLP numeric enums (StatusCode 0/1/2, SpanKind INTERNAL=1)."
|
|
7388
7516
|
];
|
|
7389
7517
|
const traceId = hexFrom2(`trace:${tree.runId}`, 16);
|
|
7390
7518
|
const includeAttributes = options?.includeAttributes ?? false;
|
|
@@ -7396,11 +7524,7 @@ function exportOtlpJson(tree, options) {
|
|
|
7396
7524
|
const ev = n.event;
|
|
7397
7525
|
const spanId = hexFrom2(`${tree.runId}:${ev.eventId}`, 8);
|
|
7398
7526
|
const parentSpanId = ev.parentId ? hexFrom2(`${tree.runId}:${ev.parentId}`, 8) : void 0;
|
|
7399
|
-
const startNs =
|
|
7400
|
-
let endNs;
|
|
7401
|
-
if (ev.durationMs !== void 0 && Number.isFinite(ev.durationMs)) {
|
|
7402
|
-
endNs = String(unixNano2(ev.timestamp) + unixNano2(ev.durationMs));
|
|
7403
|
-
}
|
|
7527
|
+
const { startNs, endNs } = resolveSpanTimes(ev);
|
|
7404
7528
|
const attrs2 = [
|
|
7405
7529
|
stringAttr2("agent_inspect.kind", ev.kind),
|
|
7406
7530
|
stringAttr2("agent_inspect.confidence", ev.confidence),
|
|
@@ -7430,29 +7554,28 @@ function exportOtlpJson(tree, options) {
|
|
|
7430
7554
|
if (includeAttributes && meta && typeof meta === "object") {
|
|
7431
7555
|
for (const [k, v] of Object.entries(meta)) {
|
|
7432
7556
|
if (k === "tokens" || k === "model") continue;
|
|
7433
|
-
if (typeof v === "string"
|
|
7434
|
-
attrs2.push(
|
|
7435
|
-
|
|
7436
|
-
|
|
7437
|
-
|
|
7438
|
-
|
|
7439
|
-
);
|
|
7557
|
+
if (typeof v === "string") {
|
|
7558
|
+
attrs2.push(stringAttr2(`agent_inspect.preview.${k}`, v.slice(0, maxLen)));
|
|
7559
|
+
} else if (typeof v === "number" && Number.isFinite(v)) {
|
|
7560
|
+
attrs2.push(numberAttr(`agent_inspect.preview.${k}`, v));
|
|
7561
|
+
} else if (typeof v === "boolean") {
|
|
7562
|
+
attrs2.push(boolAttr(`agent_inspect.preview.${k}`, v));
|
|
7440
7563
|
}
|
|
7441
7564
|
}
|
|
7442
7565
|
}
|
|
7443
|
-
let statusCode =
|
|
7566
|
+
let statusCode = OTLP_STATUS_CODE_UNSET;
|
|
7444
7567
|
let statusMessage;
|
|
7445
7568
|
if (ev.status === "error") {
|
|
7446
|
-
statusCode =
|
|
7569
|
+
statusCode = OTLP_STATUS_CODE_ERROR;
|
|
7447
7570
|
statusMessage = meta && typeof meta.error === "object" && meta.error !== null ? String(meta.error.message ?? "error").slice(0, maxLen) : "error";
|
|
7448
7571
|
} else if (ev.status === "ok") {
|
|
7449
|
-
statusCode =
|
|
7572
|
+
statusCode = OTLP_STATUS_CODE_OK;
|
|
7450
7573
|
}
|
|
7451
7574
|
const spanJson = {
|
|
7452
7575
|
traceId,
|
|
7453
7576
|
spanId,
|
|
7454
7577
|
name: ev.name,
|
|
7455
|
-
kind:
|
|
7578
|
+
kind: OTLP_SPAN_KIND_INTERNAL,
|
|
7456
7579
|
startTimeUnixNano: startNs,
|
|
7457
7580
|
attributes: attrs2,
|
|
7458
7581
|
status: {
|
|
@@ -7575,7 +7698,7 @@ function isCredentialSensitiveKey2(key, sensitiveKeys) {
|
|
|
7575
7698
|
}
|
|
7576
7699
|
|
|
7577
7700
|
// packages/redact/src/key-value-secret.ts
|
|
7578
|
-
var KEY_VALUE_SECRET_PATTERN_SOURCE = String.raw`\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'
|
|
7701
|
+
var KEY_VALUE_SECRET_PATTERN_SOURCE = String.raw`\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'\\&#?]))([^\s"'\\]{8,})`;
|
|
7579
7702
|
var KEY_VALUE_SECRET_PATTERN2 = new RegExp(
|
|
7580
7703
|
KEY_VALUE_SECRET_PATTERN_SOURCE,
|
|
7581
7704
|
"i"
|
|
@@ -7600,6 +7723,8 @@ var CONNECTION_PROTOCOLS2 = /* @__PURE__ */ new Set([
|
|
|
7600
7723
|
"amqps:"
|
|
7601
7724
|
]);
|
|
7602
7725
|
var CONNECTION_URI2 = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^\s]+$/i;
|
|
7726
|
+
var CONNECTION_USERINFO2 = /^(postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/([^@/?#]+)@(.+)$/i;
|
|
7727
|
+
var CONNECTION_HAS_USERINFO2 = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^@/?#]+@/i;
|
|
7603
7728
|
var UUID_SEGMENT2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
7604
7729
|
var HEX_SEGMENT2 = /^[0-9a-f]{12,}$/i;
|
|
7605
7730
|
var NUMERIC_SEGMENT2 = /^\d{5,}$/;
|
|
@@ -7623,6 +7748,28 @@ function parseRedactableUrl2(value) {
|
|
|
7623
7748
|
return void 0;
|
|
7624
7749
|
}
|
|
7625
7750
|
}
|
|
7751
|
+
function redactConnectionUserinfoFallback2(value, replacement) {
|
|
7752
|
+
const trimmed = value.trim();
|
|
7753
|
+
const match = CONNECTION_USERINFO2.exec(trimmed);
|
|
7754
|
+
if (match) {
|
|
7755
|
+
const [, scheme, , rest] = match;
|
|
7756
|
+
if (scheme && rest && rest.length > 0) {
|
|
7757
|
+
return {
|
|
7758
|
+
value: `${scheme}://${rest}`,
|
|
7759
|
+
credentialRedacted: true,
|
|
7760
|
+
identifiersMasked: false
|
|
7761
|
+
};
|
|
7762
|
+
}
|
|
7763
|
+
}
|
|
7764
|
+
if (looksLikeConnectionUri2(trimmed) && CONNECTION_HAS_USERINFO2.test(trimmed)) {
|
|
7765
|
+
return {
|
|
7766
|
+
value: replacement,
|
|
7767
|
+
credentialRedacted: true,
|
|
7768
|
+
identifiersMasked: false
|
|
7769
|
+
};
|
|
7770
|
+
}
|
|
7771
|
+
return void 0;
|
|
7772
|
+
}
|
|
7626
7773
|
function isHttpProtocol2(protocol) {
|
|
7627
7774
|
return protocol === "http:" || protocol === "https:";
|
|
7628
7775
|
}
|
|
@@ -7664,9 +7811,11 @@ function redactUrlString2(value, options) {
|
|
|
7664
7811
|
identifiersMasked: false
|
|
7665
7812
|
};
|
|
7666
7813
|
if (!looksLikeUrlForRedaction2(value)) return unchanged;
|
|
7667
|
-
const url = parseRedactableUrl2(value);
|
|
7668
|
-
if (!url) return unchanged;
|
|
7669
7814
|
const replacement = options.replacement ?? "[REDACTED]";
|
|
7815
|
+
const url = parseRedactableUrl2(value);
|
|
7816
|
+
if (!url) {
|
|
7817
|
+
return redactConnectionUserinfoFallback2(value, replacement) ?? unchanged;
|
|
7818
|
+
}
|
|
7670
7819
|
const idPlaceholder = options.idPlaceholder ?? "[id]";
|
|
7671
7820
|
const http = isHttpProtocol2(url.protocol);
|
|
7672
7821
|
let credentialRedacted = url.username.length > 0 || url.password.length > 0;
|