podwatch 1.1.0 → 1.1.2
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/hooks/budget.d.ts +6 -11
- package/dist/hooks/budget.d.ts.map +1 -1
- package/dist/hooks/budget.js +6 -103
- package/dist/hooks/budget.js.map +1 -1
- package/dist/redact.d.ts +20 -1
- package/dist/redact.d.ts.map +1 -1
- package/dist/redact.js +116 -4
- package/dist/redact.js.map +1 -1
- package/package.json +1 -1
package/dist/hooks/budget.d.ts
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Budget hard stop hooks —
|
|
2
|
+
* Budget hard stop hooks — before_prompt_build + before_tool_call.
|
|
3
3
|
*
|
|
4
4
|
* When the server signals a hard stop (budget exceeded + hard stop enabled),
|
|
5
5
|
* these hooks:
|
|
6
|
-
* 1.
|
|
7
|
-
* 2.
|
|
6
|
+
* 1. Prepend context telling the LLM to inform the user about the budget limit
|
|
7
|
+
* 2. Block all tool calls (via before_tool_call in security.ts)
|
|
8
|
+
*
|
|
9
|
+
* No model downgrade — we can't know what providers the user has configured,
|
|
10
|
+
* so forcing a "cheaper" model would break setups with a single provider.
|
|
8
11
|
*/
|
|
9
12
|
import type { PodwatchConfig } from "../index.js";
|
|
10
13
|
import type { PluginApi } from "../types.js";
|
|
11
|
-
/**
|
|
12
|
-
* Find the cheapest available model from the gateway config.
|
|
13
|
-
* Returns { model, provider } or null if only one model is configured.
|
|
14
|
-
*/
|
|
15
|
-
export declare function findCheapestModel(config: Record<string, unknown>): {
|
|
16
|
-
model: string;
|
|
17
|
-
provider: string;
|
|
18
|
-
} | null;
|
|
19
14
|
export declare function registerBudgetHooks(api: PluginApi, config: PodwatchConfig): void;
|
|
20
15
|
//# sourceMappingURL=budget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/hooks/budget.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/hooks/budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAuBhF"}
|
package/dist/hooks/budget.js
CHANGED
|
@@ -1,119 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Budget hard stop hooks —
|
|
3
|
+
* Budget hard stop hooks — before_prompt_build + before_tool_call.
|
|
4
4
|
*
|
|
5
5
|
* When the server signals a hard stop (budget exceeded + hard stop enabled),
|
|
6
6
|
* these hooks:
|
|
7
|
-
* 1.
|
|
8
|
-
* 2.
|
|
7
|
+
* 1. Prepend context telling the LLM to inform the user about the budget limit
|
|
8
|
+
* 2. Block all tool calls (via before_tool_call in security.ts)
|
|
9
|
+
*
|
|
10
|
+
* No model downgrade — we can't know what providers the user has configured,
|
|
11
|
+
* so forcing a "cheaper" model would break setups with a single provider.
|
|
9
12
|
*/
|
|
10
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.findCheapestModel = findCheapestModel;
|
|
12
14
|
exports.registerBudgetHooks = registerBudgetHooks;
|
|
13
15
|
const transmitter_js_1 = require("../transmitter.js");
|
|
14
16
|
// ---------------------------------------------------------------------------
|
|
15
|
-
// Model cost heuristic — cheaper models first
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
|
-
/** Known cheap model patterns (ordered cheapest first). */
|
|
18
|
-
const CHEAP_MODEL_PATTERNS = [
|
|
19
|
-
"haiku",
|
|
20
|
-
"flash",
|
|
21
|
-
"mini",
|
|
22
|
-
"nano",
|
|
23
|
-
"lite",
|
|
24
|
-
"sonnet",
|
|
25
|
-
];
|
|
26
|
-
/**
|
|
27
|
-
* Score a model name by cost (lower = cheaper).
|
|
28
|
-
* Known cheap patterns get low scores, unknown models get a high default.
|
|
29
|
-
*/
|
|
30
|
-
function modelCostScore(modelName) {
|
|
31
|
-
const lower = modelName.toLowerCase();
|
|
32
|
-
for (let i = 0; i < CHEAP_MODEL_PATTERNS.length; i++) {
|
|
33
|
-
if (lower.includes(CHEAP_MODEL_PATTERNS[i]))
|
|
34
|
-
return i;
|
|
35
|
-
}
|
|
36
|
-
return 100; // unknown = expensive
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Find the cheapest available model from the gateway config.
|
|
40
|
-
* Returns { model, provider } or null if only one model is configured.
|
|
41
|
-
*/
|
|
42
|
-
function findCheapestModel(config) {
|
|
43
|
-
const candidates = [];
|
|
44
|
-
// Check models.providers for available models
|
|
45
|
-
const providers = config?.models?.providers;
|
|
46
|
-
if (providers && typeof providers === "object") {
|
|
47
|
-
for (const [providerName, providerCfg] of Object.entries(providers)) {
|
|
48
|
-
const cfg = providerCfg;
|
|
49
|
-
const models = cfg.models;
|
|
50
|
-
if (Array.isArray(models)) {
|
|
51
|
-
for (const m of models) {
|
|
52
|
-
if (typeof m === "string") {
|
|
53
|
-
candidates.push({
|
|
54
|
-
model: `${providerName}/${m}`,
|
|
55
|
-
provider: providerName,
|
|
56
|
-
score: modelCostScore(m),
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Also check agents.defaults.models for configured model aliases
|
|
64
|
-
const agentModels = config?.agents?.defaults?.models;
|
|
65
|
-
if (agentModels && typeof agentModels === "object") {
|
|
66
|
-
for (const modelId of Object.keys(agentModels)) {
|
|
67
|
-
if (typeof modelId === "string") {
|
|
68
|
-
const parts = modelId.split("/");
|
|
69
|
-
const modelName = parts[parts.length - 1] ?? modelId;
|
|
70
|
-
const provider = parts.length > 1 ? parts[0] : "";
|
|
71
|
-
candidates.push({
|
|
72
|
-
model: modelId,
|
|
73
|
-
provider,
|
|
74
|
-
score: modelCostScore(modelName),
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// Deduplicate by model name
|
|
80
|
-
const seen = new Set();
|
|
81
|
-
const unique = candidates.filter((c) => {
|
|
82
|
-
if (seen.has(c.model))
|
|
83
|
-
return false;
|
|
84
|
-
seen.add(c.model);
|
|
85
|
-
return true;
|
|
86
|
-
});
|
|
87
|
-
if (unique.length <= 1)
|
|
88
|
-
return null;
|
|
89
|
-
// Sort by score (cheapest first) and pick the cheapest
|
|
90
|
-
unique.sort((a, b) => a.score - b.score);
|
|
91
|
-
// Get the current primary model to avoid returning the same one
|
|
92
|
-
const primaryModel = config?.agents?.defaults?.model?.primary;
|
|
93
|
-
const cheapest = unique.find((c) => c.model !== primaryModel) ?? unique[0];
|
|
94
|
-
return { model: cheapest.model, provider: cheapest.provider };
|
|
95
|
-
}
|
|
96
|
-
// ---------------------------------------------------------------------------
|
|
97
17
|
// Hook registration
|
|
98
18
|
// ---------------------------------------------------------------------------
|
|
99
19
|
function registerBudgetHooks(api, config) {
|
|
100
|
-
// -----------------------------------------------------------------------
|
|
101
|
-
// before_model_resolve — downgrade to cheaper model on hard stop
|
|
102
|
-
// -----------------------------------------------------------------------
|
|
103
|
-
api.registerHook("before_model_resolve", async () => {
|
|
104
|
-
if (!config.enableBudgetEnforcement)
|
|
105
|
-
return;
|
|
106
|
-
const budget = transmitter_js_1.transmitter.getCachedBudget();
|
|
107
|
-
if (!budget?.hardStopActive)
|
|
108
|
-
return;
|
|
109
|
-
const cheaper = findCheapestModel(api.config);
|
|
110
|
-
if (!cheaper)
|
|
111
|
-
return; // only one model configured, skip
|
|
112
|
-
return {
|
|
113
|
-
modelOverride: cheaper.model,
|
|
114
|
-
providerOverride: cheaper.provider,
|
|
115
|
-
};
|
|
116
|
-
}, { name: "podwatch-budget-model-resolve" });
|
|
117
20
|
// -----------------------------------------------------------------------
|
|
118
21
|
// before_prompt_build — inject budget warning into prompt
|
|
119
22
|
// -----------------------------------------------------------------------
|
package/dist/hooks/budget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/hooks/budget.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/hooks/budget.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAUH,kDAuBC;AA7BD,sDAAgD;AAEhD,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,SAAgB,mBAAmB,CAAC,GAAc,EAAE,MAAsB;IACxE,0EAA0E;IAC1E,0DAA0D;IAC1D,0EAA0E;IAC1E,GAAG,CAAC,YAAY,CACd,qBAAqB,EACrB,KAAK,IAAiD,EAAE;QACtD,IAAI,CAAC,MAAM,CAAC,uBAAuB;YAAE,OAAO;QAE5C,MAAM,MAAM,GAAG,4BAAW,CAAC,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,cAAc;YAAE,OAAO;QAEpC,OAAO;YACL,cAAc,EACZ,iEAAiE;gBACjE,4EAA4E;gBAC5E,+FAA+F;SAClG,CAAC;IACJ,CAAC,EACD,EAAE,IAAI,EAAE,8BAA8B,EAAE,CACzC,CAAC;IAEF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;AAClE,CAAC"}
|
package/dist/redact.d.ts
CHANGED
|
@@ -22,6 +22,25 @@ declare function looksLikeToken(s: string): boolean;
|
|
|
22
22
|
*/
|
|
23
23
|
declare function getEntropyThreshold(length: number): number;
|
|
24
24
|
declare function isHighEntropySecret(s: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Replace sensitive patterns *inline* within a string value.
|
|
27
|
+
*
|
|
28
|
+
* Strategy:
|
|
29
|
+
* 1. Collect all regex match ranges across every INLINE_PATTERN.
|
|
30
|
+
* 2. Extend each range bidirectionally to the nearest "token boundary"
|
|
31
|
+
* (whitespace, quotes, brackets, etc.) so partial regex matches still
|
|
32
|
+
* cover the full secret token.
|
|
33
|
+
* 3. Merge overlapping/adjacent ranges.
|
|
34
|
+
* 4. Replace each merged range with [REDACTED].
|
|
35
|
+
*
|
|
36
|
+
* Returns the (possibly modified) string and how many distinct secrets were
|
|
37
|
+
* redacted. Does NOT check Shannon entropy — callers should use
|
|
38
|
+
* `isHighEntropySecret()` as a fallback when `count === 0`.
|
|
39
|
+
*/
|
|
40
|
+
declare function inlineRedactSensitiveValues(s: string): {
|
|
41
|
+
value: string;
|
|
42
|
+
count: number;
|
|
43
|
+
};
|
|
25
44
|
export interface RedactResult {
|
|
26
45
|
result: Record<string, unknown>;
|
|
27
46
|
redactedCount: number;
|
|
@@ -31,5 +50,5 @@ export interface RedactResult {
|
|
|
31
50
|
* Returns the scrubbed object and a count of how many values were redacted.
|
|
32
51
|
*/
|
|
33
52
|
export declare function redactParams(params: Record<string, unknown>): RedactResult;
|
|
34
|
-
export { shannonEntropy, looksLikeToken, isHighEntropySecret, getEntropyThreshold, SENSITIVE_VALUE_PATTERNS, SENSITIVE_KEYS };
|
|
53
|
+
export { shannonEntropy, looksLikeToken, isHighEntropySecret, getEntropyThreshold, inlineRedactSensitiveValues, SENSITIVE_VALUE_PATTERNS, SENSITIVE_KEYS };
|
|
35
54
|
//# sourceMappingURL=redact.d.ts.map
|
package/dist/redact.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,QAAA,MAAM,cAAc,aAgFlB,CAAC;AAMH,QAAA,MAAM,wBAAwB,EAAE,MAAM,EAmGrC,CAAC;AAMF;;;GAGG;AACH,iBAAS,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAYzC;AAcD,iBAAS,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAY1C;AAID;;;;GAIG;AACH,iBAAS,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,iBAAS,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/C;AAaD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;CACvB;AA4CD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAK1E;
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,QAAA,MAAM,cAAc,aAgFlB,CAAC;AAMH,QAAA,MAAM,wBAAwB,EAAE,MAAM,EAmGrC,CAAC;AAMF;;;GAGG;AACH,iBAAS,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAYzC;AAcD,iBAAS,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAY1C;AAID;;;;GAIG;AACH,iBAAS,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,iBAAS,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/C;AAiDD;;;;;;;;;;;;;;GAcG;AACH,iBAAS,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgDhF;AAaD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;CACvB;AA4CD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAK1E;AA6FD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/redact.js
CHANGED
|
@@ -15,6 +15,7 @@ exports.shannonEntropy = shannonEntropy;
|
|
|
15
15
|
exports.looksLikeToken = looksLikeToken;
|
|
16
16
|
exports.isHighEntropySecret = isHighEntropySecret;
|
|
17
17
|
exports.getEntropyThreshold = getEntropyThreshold;
|
|
18
|
+
exports.inlineRedactSensitiveValues = inlineRedactSensitiveValues;
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
19
20
|
// Sensitive key patterns (normalized: lowercase, no hyphens/underscores)
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
@@ -249,6 +250,102 @@ function isHighEntropySecret(s) {
|
|
|
249
250
|
return shannonEntropy(s) >= getEntropyThreshold(s.length);
|
|
250
251
|
}
|
|
251
252
|
// ---------------------------------------------------------------------------
|
|
253
|
+
// Inline-safe patterns (derived from SENSITIVE_VALUE_PATTERNS)
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
255
|
+
/**
|
|
256
|
+
* Build regex variants suitable for inline (substring) replacement.
|
|
257
|
+
* - Strip `^` / `$` anchors so patterns can match mid-string.
|
|
258
|
+
* - PEM header patterns are replaced by a single block-level pattern that
|
|
259
|
+
* captures from `-----BEGIN …` through `-----END …-----` (or end-of-string).
|
|
260
|
+
* - The `g` flag is added so `.matchAll()` can find all occurrences.
|
|
261
|
+
*/
|
|
262
|
+
function buildInlinePatterns() {
|
|
263
|
+
const out = [];
|
|
264
|
+
for (const pattern of SENSITIVE_VALUE_PATTERNS) {
|
|
265
|
+
// Skip individual PEM header patterns — replaced by unified block pattern below
|
|
266
|
+
if (pattern.source.includes('BEGIN'))
|
|
267
|
+
continue;
|
|
268
|
+
let source = pattern.source;
|
|
269
|
+
if (source.startsWith('^'))
|
|
270
|
+
source = source.slice(1);
|
|
271
|
+
if (source.endsWith('$'))
|
|
272
|
+
source = source.slice(0, -1);
|
|
273
|
+
const flags = pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g';
|
|
274
|
+
out.push(new RegExp(source, flags));
|
|
275
|
+
}
|
|
276
|
+
// Unified PEM block pattern: matches from -----BEGIN ... through -----END ...-----
|
|
277
|
+
// or through end-of-string when no END marker exists.
|
|
278
|
+
out.push(/-----BEGIN\s+(?:(?:RSA|OPENSSH|EC|DSA|ENCRYPTED)\s+)?(?:PRIVATE\s+KEY|CERTIFICATE)[\s\S]*?(?:-----END[^\n]*-----|$)/g);
|
|
279
|
+
return out;
|
|
280
|
+
}
|
|
281
|
+
const INLINE_PATTERNS = buildInlinePatterns();
|
|
282
|
+
/**
|
|
283
|
+
* Characters that are typically part of a secret token or credential string.
|
|
284
|
+
* Anything NOT matching this is treated as a word boundary for match extension.
|
|
285
|
+
*/
|
|
286
|
+
const INLINE_TOKEN_CHAR_RE = /[a-zA-Z0-9_\-.+\/=:@]/;
|
|
287
|
+
// ---------------------------------------------------------------------------
|
|
288
|
+
// Inline redaction
|
|
289
|
+
// ---------------------------------------------------------------------------
|
|
290
|
+
/**
|
|
291
|
+
* Replace sensitive patterns *inline* within a string value.
|
|
292
|
+
*
|
|
293
|
+
* Strategy:
|
|
294
|
+
* 1. Collect all regex match ranges across every INLINE_PATTERN.
|
|
295
|
+
* 2. Extend each range bidirectionally to the nearest "token boundary"
|
|
296
|
+
* (whitespace, quotes, brackets, etc.) so partial regex matches still
|
|
297
|
+
* cover the full secret token.
|
|
298
|
+
* 3. Merge overlapping/adjacent ranges.
|
|
299
|
+
* 4. Replace each merged range with [REDACTED].
|
|
300
|
+
*
|
|
301
|
+
* Returns the (possibly modified) string and how many distinct secrets were
|
|
302
|
+
* redacted. Does NOT check Shannon entropy — callers should use
|
|
303
|
+
* `isHighEntropySecret()` as a fallback when `count === 0`.
|
|
304
|
+
*/
|
|
305
|
+
function inlineRedactSensitiveValues(s) {
|
|
306
|
+
// 1. Collect all match ranges
|
|
307
|
+
const ranges = [];
|
|
308
|
+
for (const pattern of INLINE_PATTERNS) {
|
|
309
|
+
for (const match of s.matchAll(pattern)) {
|
|
310
|
+
let start = match.index;
|
|
311
|
+
let end = start + match[0].length;
|
|
312
|
+
// Extend backward to token boundary
|
|
313
|
+
while (start > 0 && INLINE_TOKEN_CHAR_RE.test(s[start - 1])) {
|
|
314
|
+
start--;
|
|
315
|
+
}
|
|
316
|
+
// Extend forward to token boundary
|
|
317
|
+
while (end < s.length && INLINE_TOKEN_CHAR_RE.test(s[end])) {
|
|
318
|
+
end++;
|
|
319
|
+
}
|
|
320
|
+
ranges.push({ start, end });
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (ranges.length === 0)
|
|
324
|
+
return { value: s, count: 0 };
|
|
325
|
+
// 2. Sort by start position, then by longest range first
|
|
326
|
+
ranges.sort((a, b) => a.start - b.start || b.end - a.end);
|
|
327
|
+
// 3. Merge overlapping / adjacent ranges
|
|
328
|
+
const merged = [{ ...ranges[0] }];
|
|
329
|
+
for (let i = 1; i < ranges.length; i++) {
|
|
330
|
+
const last = merged[merged.length - 1];
|
|
331
|
+
if (ranges[i].start <= last.end) {
|
|
332
|
+
last.end = Math.max(last.end, ranges[i].end);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
merged.push({ ...ranges[i] });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// 4. Build result string
|
|
339
|
+
let result = '';
|
|
340
|
+
let pos = 0;
|
|
341
|
+
for (const { start, end } of merged) {
|
|
342
|
+
result += s.slice(pos, start) + REDACTED;
|
|
343
|
+
pos = end;
|
|
344
|
+
}
|
|
345
|
+
result += s.slice(pos);
|
|
346
|
+
return { value: result, count: merged.length };
|
|
347
|
+
}
|
|
348
|
+
// ---------------------------------------------------------------------------
|
|
252
349
|
// Constants
|
|
253
350
|
// ---------------------------------------------------------------------------
|
|
254
351
|
const MAX_VALUE_LENGTH = 500;
|
|
@@ -325,9 +422,17 @@ function redactObject(obj, depth, counter) {
|
|
|
325
422
|
counter.count++;
|
|
326
423
|
continue;
|
|
327
424
|
}
|
|
328
|
-
// Value-based redaction + truncation
|
|
425
|
+
// Value-based redaction + truncation (inline — only matched portions replaced)
|
|
329
426
|
if (typeof value === "string") {
|
|
330
|
-
|
|
427
|
+
const { value: redacted, count: inlineCount } = inlineRedactSensitiveValues(value);
|
|
428
|
+
if (inlineCount > 0) {
|
|
429
|
+
counter.count += inlineCount;
|
|
430
|
+
result[key] = redacted.length > MAX_VALUE_LENGTH
|
|
431
|
+
? redacted.slice(0, MAX_VALUE_LENGTH) + `… [${redacted.length} chars]`
|
|
432
|
+
: redacted;
|
|
433
|
+
}
|
|
434
|
+
else if (isHighEntropySecret(value)) {
|
|
435
|
+
// Fallback: entire value looks like a random token
|
|
331
436
|
result[key] = REDACTED;
|
|
332
437
|
counter.count++;
|
|
333
438
|
}
|
|
@@ -344,11 +449,18 @@ function redactObject(obj, depth, counter) {
|
|
|
344
449
|
result[key] = redactObject(value, depth + 1, counter);
|
|
345
450
|
continue;
|
|
346
451
|
}
|
|
347
|
-
// Arrays — redact string elements, recurse into objects
|
|
452
|
+
// Arrays — inline-redact string elements, recurse into objects
|
|
348
453
|
if (Array.isArray(value)) {
|
|
349
454
|
result[key] = value.map((item) => {
|
|
350
455
|
if (typeof item === "string") {
|
|
351
|
-
|
|
456
|
+
const { value: redacted, count: inlineCount } = inlineRedactSensitiveValues(item);
|
|
457
|
+
if (inlineCount > 0) {
|
|
458
|
+
counter.count += inlineCount;
|
|
459
|
+
return redacted.length > MAX_VALUE_LENGTH
|
|
460
|
+
? redacted.slice(0, MAX_VALUE_LENGTH) + `… [${redacted.length} chars]`
|
|
461
|
+
: redacted;
|
|
462
|
+
}
|
|
463
|
+
if (isHighEntropySecret(item)) {
|
|
352
464
|
counter.count++;
|
|
353
465
|
return REDACTED;
|
|
354
466
|
}
|
package/dist/redact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"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"}
|