@mnemonik/shared 7.140.3 → 7.141.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/codeScanner.d.ts +1 -1
- package/dist/codeScanner.d.ts.map +1 -1
- package/dist/codeScanner.js +14 -11
- package/dist/codeScanner.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/redactCredentials.d.ts +28 -0
- package/dist/redactCredentials.d.ts.map +1 -0
- package/dist/redactCredentials.js +491 -0
- package/dist/redactCredentials.js.map +1 -0
- package/dist/secretPatterns.d.ts +3 -0
- package/dist/secretPatterns.d.ts.map +1 -1
- package/dist/secretPatterns.js +85 -6
- package/dist/secretPatterns.js.map +1 -1
- package/dist/sourceRedaction.d.ts +3 -0
- package/dist/sourceRedaction.d.ts.map +1 -0
- package/dist/sourceRedaction.js +143 -0
- package/dist/sourceRedaction.js.map +1 -0
- package/package.json +1 -1
- package/src/codeScanner.ts +20 -12
- package/src/index.ts +6 -0
- package/src/redactCredentials.ts +594 -0
- package/src/secretPatterns.ts +89 -8
- package/src/sourceRedaction.ts +149 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secretPatterns.js","sourceRoot":"","sources":["../src/secretPatterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,YAAY,CAAC;AAEzD,4DAA4D;AAC5D,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,qEAAqE;AACrE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAA0B;IACpD,
|
|
1
|
+
{"version":3,"file":"secretPatterns.js","sourceRoot":"","sources":["../src/secretPatterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceRedaction.d.ts","sourceRoot":"","sources":["../src/sourceRedaction.ts"],"names":[],"mappings":"AAgBA,sGAAsG;AACtG,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BxF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { extname } from 'node:path';
|
|
2
|
+
import { Parser } from 'web-tree-sitter';
|
|
3
|
+
import { loadGrammar } from './ast/grammars.js';
|
|
4
|
+
import { MAX_AST_PARSE_BYTES } from './ast/astChunker.js';
|
|
5
|
+
import { redactCredentials } from './redactCredentials.js';
|
|
6
|
+
import { redactHighEntropyTokens, redactSecretValue, scrubSecrets, SECRET_LABEL_RE, } from './secretPatterns.js';
|
|
7
|
+
function scrubPayload(text) {
|
|
8
|
+
return redactCredentials(scrubSecrets(text), { commandLineOnly: true }).text;
|
|
9
|
+
}
|
|
10
|
+
/** Source syntax stays executable; unsupported or incomplete input uses the conservative scrubber. */
|
|
11
|
+
export async function scrubSourceSecrets(text, filePath) {
|
|
12
|
+
const extension = extname(filePath).toLowerCase();
|
|
13
|
+
const language = ['.ts', '.mts', '.cts'].includes(extension)
|
|
14
|
+
? 'typescript'
|
|
15
|
+
: extension === '.tsx'
|
|
16
|
+
? 'tsx'
|
|
17
|
+
: ['.js', '.jsx', '.mjs', '.cjs'].includes(extension)
|
|
18
|
+
? 'javascript'
|
|
19
|
+
: null;
|
|
20
|
+
if (!text || !language || Buffer.byteLength(text, 'utf8') > MAX_AST_PARSE_BYTES) {
|
|
21
|
+
return scrubPayload(text);
|
|
22
|
+
}
|
|
23
|
+
let parser;
|
|
24
|
+
let tree = null;
|
|
25
|
+
try {
|
|
26
|
+
const grammar = await loadGrammar(language);
|
|
27
|
+
if ('unavailable' in grammar)
|
|
28
|
+
return scrubPayload(text);
|
|
29
|
+
parser = new Parser();
|
|
30
|
+
parser.setLanguage(grammar.ok.language);
|
|
31
|
+
tree = parser.parse(text);
|
|
32
|
+
if (!tree || tree.rootNode.hasError)
|
|
33
|
+
return scrubPayload(text);
|
|
34
|
+
const root = tree.rootNode;
|
|
35
|
+
return text.slice(0, root.startIndex) + redactNode(root) + text.slice(root.endIndex);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return scrubPayload(text);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
tree?.delete();
|
|
42
|
+
parser?.delete();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function secretLabel(node) {
|
|
46
|
+
if (!node)
|
|
47
|
+
return false;
|
|
48
|
+
const property = node.childForFieldName('property') ?? node;
|
|
49
|
+
const name = property.type === 'string' ? property.text.slice(1, -1) : property.text;
|
|
50
|
+
return SECRET_LABEL_RE.test(name);
|
|
51
|
+
}
|
|
52
|
+
function literalPayload(text, sensitive) {
|
|
53
|
+
if (sensitive && /[A-Za-z0-9]/.test(text))
|
|
54
|
+
return redactSecretValue(text);
|
|
55
|
+
// Only the entropy backstop needs an opening quote; labeled values must not consume it.
|
|
56
|
+
return redactHighEntropyTokens('"' + scrubPayload(text) + '"').slice(1, -1);
|
|
57
|
+
}
|
|
58
|
+
function redactNode(node, sensitive = false) {
|
|
59
|
+
const original = node.text;
|
|
60
|
+
if (node.type === 'comment') {
|
|
61
|
+
return original.startsWith('/*')
|
|
62
|
+
? '/*' + scrubPayload(original.slice(2, -2)) + '*/'
|
|
63
|
+
: '//' + scrubPayload(original.slice(2));
|
|
64
|
+
}
|
|
65
|
+
if (node.type === 'string') {
|
|
66
|
+
return original[0] + literalPayload(original.slice(1, -1), sensitive) + original.at(-1);
|
|
67
|
+
}
|
|
68
|
+
if (node.type === 'property_identifier' &&
|
|
69
|
+
node.parent?.type === 'pair' &&
|
|
70
|
+
node.parent.childForFieldName('key')?.id === node.id) {
|
|
71
|
+
const payload = literalPayload(original, false);
|
|
72
|
+
return payload === original ? original : '"' + payload + '"';
|
|
73
|
+
}
|
|
74
|
+
if (node.type === 'number' && sensitive)
|
|
75
|
+
return `'${redactSecretValue(original)}'`;
|
|
76
|
+
if (node.type === 'template_string') {
|
|
77
|
+
let result = '`';
|
|
78
|
+
let offset = node.startIndex + 1;
|
|
79
|
+
for (const child of node.namedChildren) {
|
|
80
|
+
if (child.type !== 'template_substitution')
|
|
81
|
+
continue;
|
|
82
|
+
result += literalPayload(original.slice(offset - node.startIndex, child.startIndex - node.startIndex), sensitive);
|
|
83
|
+
result += redactNode(child);
|
|
84
|
+
offset = child.endIndex;
|
|
85
|
+
}
|
|
86
|
+
return result + literalPayload(original.slice(offset - node.startIndex, -1), sensitive) + '`';
|
|
87
|
+
}
|
|
88
|
+
if (node.type === 'regex_pattern' || node.type === 'jsx_text')
|
|
89
|
+
return scrubPayload(original);
|
|
90
|
+
// A bare `token: value` fragment is also a valid JS labeled statement.
|
|
91
|
+
if (node.type === 'labeled_statement' && secretLabel(node.childForFieldName('label'))) {
|
|
92
|
+
const body = node.childForFieldName('body');
|
|
93
|
+
if (body?.firstNamedChild?.type === 'identifier')
|
|
94
|
+
return scrubPayload(original);
|
|
95
|
+
}
|
|
96
|
+
let value = null;
|
|
97
|
+
let key = null;
|
|
98
|
+
if ([
|
|
99
|
+
'variable_declarator',
|
|
100
|
+
'pair',
|
|
101
|
+
'public_field_definition',
|
|
102
|
+
'assignment_pattern',
|
|
103
|
+
'required_parameter',
|
|
104
|
+
].includes(node.type)) {
|
|
105
|
+
key =
|
|
106
|
+
node.childForFieldName('name') ??
|
|
107
|
+
node.childForFieldName('key') ??
|
|
108
|
+
node.childForFieldName('pattern') ??
|
|
109
|
+
node.childForFieldName('left');
|
|
110
|
+
value = node.childForFieldName('value') ?? node.childForFieldName('right');
|
|
111
|
+
}
|
|
112
|
+
else if (node.type === 'assignment_expression') {
|
|
113
|
+
key = node.childForFieldName('left');
|
|
114
|
+
value = node.childForFieldName('right');
|
|
115
|
+
}
|
|
116
|
+
else if (node.type === 'jsx_attribute') {
|
|
117
|
+
[key = null, value = null] = node.namedChildren;
|
|
118
|
+
}
|
|
119
|
+
const labeled = secretLabel(key);
|
|
120
|
+
let result = '';
|
|
121
|
+
let offset = node.startIndex;
|
|
122
|
+
for (const child of node.namedChildren) {
|
|
123
|
+
result += original.slice(offset - node.startIndex, child.startIndex - node.startIndex);
|
|
124
|
+
// Carry labels through value wrappers, never through call arguments or conditions.
|
|
125
|
+
const carry = sensitive &&
|
|
126
|
+
(([
|
|
127
|
+
'parenthesized_expression',
|
|
128
|
+
'as_expression',
|
|
129
|
+
'satisfies_expression',
|
|
130
|
+
'non_null_expression',
|
|
131
|
+
].includes(node.type) &&
|
|
132
|
+
child.id === node.firstNamedChild?.id) ||
|
|
133
|
+
(node.type === 'type_assertion' && child.id === node.lastNamedChild?.id) ||
|
|
134
|
+
(node.type === 'binary_expression' &&
|
|
135
|
+
['+', '||', '&&', '??'].includes(node.childForFieldName('operator')?.text ?? '')) ||
|
|
136
|
+
(node.type === 'ternary_expression' &&
|
|
137
|
+
child.id !== node.childForFieldName('condition')?.id));
|
|
138
|
+
result += redactNode(child, carry || (labeled && child.id === value?.id));
|
|
139
|
+
offset = child.endIndex;
|
|
140
|
+
}
|
|
141
|
+
return result + original.slice(offset - node.startIndex);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=sourceRedaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceRedaction.js","sourceRoot":"","sources":["../src/sourceRedaction.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/codeScanner.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { createHash } from 'crypto';
|
|
|
9
9
|
import ignore, { type Ignore } from 'ignore';
|
|
10
10
|
import { debug as logDebug, info as logInfo, warn as logWarn } from './logger.js';
|
|
11
11
|
import { withTimeout } from './asyncUtils.js';
|
|
12
|
-
import {
|
|
12
|
+
import { scrubSourceSecrets } from './sourceRedaction.js';
|
|
13
13
|
import { isProtectedLocalPath, protectedLocalPaths } from './protectedPaths.js';
|
|
14
14
|
import { readIdentityFile } from './projectIdentityFile.js';
|
|
15
15
|
import {
|
|
@@ -1274,7 +1274,7 @@ export class CodeScanner {
|
|
|
1274
1274
|
const excluded: IndexExcludedFile[] = [];
|
|
1275
1275
|
const walk: WalkState = { complete: true };
|
|
1276
1276
|
await this.traverseDirectory(rootPath, rootPath, chunks, 0, walk, [], chunkless, excluded);
|
|
1277
|
-
return { chunks: this.scrubChunks(chunks), complete: walk.complete, chunkless, excluded };
|
|
1277
|
+
return { chunks: await this.scrubChunks(chunks), complete: walk.complete, chunkless, excluded };
|
|
1278
1278
|
}
|
|
1279
1279
|
|
|
1280
1280
|
/**
|
|
@@ -1499,18 +1499,22 @@ export class CodeScanner {
|
|
|
1499
1499
|
* before they leave this process. contentHash is recomputed from the
|
|
1500
1500
|
* scrubbed content so the server-side dedup cache (which keys on
|
|
1501
1501
|
* contentHash) hits when team members push the same scrubbed text.
|
|
1502
|
-
* Server still re-applies
|
|
1502
|
+
* Server still re-applies source sanitation in the /scan/push handler as
|
|
1503
1503
|
* defense in depth (idempotent). Shared by `scanFiles` (watcher path)
|
|
1504
1504
|
* and `scanDirectoryWithStatus` (initial/full-rescan path) so both
|
|
1505
1505
|
* honor the same redaction guarantee.
|
|
1506
1506
|
*/
|
|
1507
|
-
private scrubChunks(chunks: CodeChunk[]): CodeChunk[] {
|
|
1508
|
-
|
|
1509
|
-
|
|
1507
|
+
private async scrubChunks(chunks: CodeChunk[]): Promise<CodeChunk[]> {
|
|
1508
|
+
const result: CodeChunk[] = [];
|
|
1509
|
+
for (const chunk of chunks) {
|
|
1510
|
+
const scrubbed = await scrubSourceSecrets(chunk.content.replace(/\0/g, ''), chunk.filePath);
|
|
1510
1511
|
if (scrubbed.length <= MAX_PUSH_CHUNK_CONTENT_LENGTH) {
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1512
|
+
result.push(
|
|
1513
|
+
...(scrubbed === chunk.content
|
|
1514
|
+
? [chunk]
|
|
1515
|
+
: [{ ...chunk, content: scrubbed, contentHash: this.hash(scrubbed) }])
|
|
1516
|
+
);
|
|
1517
|
+
continue;
|
|
1514
1518
|
}
|
|
1515
1519
|
const pieces: CodeChunk[] = [];
|
|
1516
1520
|
let startLine = chunk.startLine;
|
|
@@ -1533,8 +1537,9 @@ export class CodeScanner {
|
|
|
1533
1537
|
startLine = endLine;
|
|
1534
1538
|
offset = end;
|
|
1535
1539
|
}
|
|
1536
|
-
|
|
1537
|
-
}
|
|
1540
|
+
result.push(...pieces);
|
|
1541
|
+
}
|
|
1542
|
+
return result;
|
|
1538
1543
|
}
|
|
1539
1544
|
|
|
1540
1545
|
/**
|
|
@@ -1716,7 +1721,10 @@ export class CodeScanner {
|
|
|
1716
1721
|
// the first 8,000 bytes now means "binary, skip" (git's heuristic)
|
|
1717
1722
|
// instead of strip-and-index.
|
|
1718
1723
|
if (contentGate.applyContentRules) {
|
|
1719
|
-
const byContent = softDefaultForContent(
|
|
1724
|
+
const byContent = softDefaultForContent(
|
|
1725
|
+
relativePath,
|
|
1726
|
+
await scrubSourceSecrets(content, relativePath)
|
|
1727
|
+
);
|
|
1720
1728
|
if (byContent) {
|
|
1721
1729
|
contentGate.excluded?.push({
|
|
1722
1730
|
path: relativePath.split(sep).join('/'),
|
package/src/index.ts
CHANGED
|
@@ -92,6 +92,12 @@ export {
|
|
|
92
92
|
scrubSecrets,
|
|
93
93
|
redactHighEntropyTokens,
|
|
94
94
|
} from './secretPatterns.js';
|
|
95
|
+
export { scrubSourceSecrets } from './sourceRedaction.js';
|
|
96
|
+
export {
|
|
97
|
+
redactCredentials,
|
|
98
|
+
credentialValues,
|
|
99
|
+
type RedactCredentialsOptions,
|
|
100
|
+
} from './redactCredentials.js';
|
|
95
101
|
export {
|
|
96
102
|
FETCH_TIMEOUT_MS,
|
|
97
103
|
TELEMETRY_TIMEOUT_MS,
|