@spool-lab/redact 0.0.1 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAA;AAoL/D;;;;6DAI6D;AAC7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,SAAU,GAAG,cAAc,EAAE,CAsCtF"}
1
+ {"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAA;AAgV/D;;;;6DAI6D;AAC7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,SAAU,GAAG,cAAc,EAAE,CAsCtF"}
package/dist/detectors.js CHANGED
@@ -13,7 +13,7 @@
13
13
  // bare vendor api-keys so the whole assignment is masked, not just
14
14
  // the secret value. JWT runs before `Bearer` so a JWT-shaped bearer
15
15
  // surfaces as a JWT rather than a generic bearer wrapping a JWT.
16
- import { hasQuotedEntropy, luhnOk } from './validators.js';
16
+ import { hasNonAsciiContent, hasPublicEnvPrefix, hasQuotedEntropy, isObviouslyNonSecretValue, isReservedDomain, isReservedIp, isVendorExampleKey, looksLikeImageAsset, looksLikePlaceholder, luhnOk, shannon, } from './validators.js';
17
17
  // ── Credential blocks (multi-line, highest specificity) ───────────
18
18
  // PEM-armoured key: header + base64 body + footer. Match runs to the
19
19
  // END footer (non-greedy across newlines) so the whole block — armor
@@ -101,7 +101,10 @@ const URL_CREDS_RX = /\b[a-z][a-z0-9+\-.]*:\/\/[^\s/@:"'`<>]+:[^\s/@:"'`<>]+@[A-
101
101
  const ENV_VAR_RX = /\b[A-Z][A-Z0-9_]{2,}(?:_KEY|_SECRET|_TOKEN|_PASSWORD|_PASSWD|_PWD|_API_?KEY|_DSN|_URL)\s*=\s*\S+/g;
102
102
  const GENERIC_SECRET_RX = /\b(?:api[_-]?key|secret|token|password|passwd|auth|access[_-]?key|client[_-]?secret|webhook)\b\s*[:=]\s*["']([A-Za-z0-9+/=_\-]{20,})["']/gi;
103
103
  // ── Identity ─────────────────────────────────────────────────────
104
- const CC_RX = /\b(?:4\d{3}|5[1-5]\d{2}|6(?:011|5\d{2})|3[47]\d{2}|3(?:0[0-5]|[68]\d)\d|(?:2131|1800|35\d{3}))[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{3,4}\b/g;
104
+ // Lookbehind `(?<!\d\.)` rejects the fractional part of a decimal
105
+ // number — e.g. `confidence: 0.5227687358856201` happens to be 16
106
+ // digits starting with 5 and Luhn-valid, but it's a float, not a card.
107
+ const CC_RX = /(?<!\d\.)\b(?:4\d{3}|5[1-5]\d{2}|6(?:011|5\d{2})|3[47]\d{2}|3(?:0[0-5]|[68]\d)\d|(?:2131|1800|35\d{3}))[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{3,4}\b/g;
105
108
  const SSN_RX = /\b(?!000|666|9\d{2})\d{3}-(?!00)\d{2}-(?!0000)\d{4}\b/g;
106
109
  const EMAIL_RX = /\b[A-Za-z0-9](?:[A-Za-z0-9._+-]*[A-Za-z0-9])?@[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?\.[A-Za-z]{2,}\b/g;
107
110
  const PHONE_RX = /(?:\+\d[\d .\-()]{7,16}\d|\(\d{2,4}\)[\d .\-]{6,14}\d)/g;
@@ -109,7 +112,12 @@ const IPV4_RX = /\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[
109
112
  // Permissive match; `validIPv6` below rejects look-alikes (timestamps,
110
113
  // short colon-separated number strings). Real IPv6 either uses the
111
114
  // compressed `::` marker or contains the full 8 groups.
112
- const IPV6_RX = /\b(?:[0-9a-fA-F]{1,4}:){2,7}[0-9a-fA-F]{1,4}\b|\b(?:[0-9a-fA-F]{1,4}:){1,7}:|\b(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}\b/g;
115
+ //
116
+ // Alternation order matters: try compressed forms (`hex:hex::hex`,
117
+ // `hex:hex::`) FIRST so the greedy first alt doesn't gobble a 3-group
118
+ // prefix of `2606:4700:4700::1111` and orphan the `::1111` tail. The
119
+ // uncompressed full form goes last.
120
+ const IPV6_RX = /\b(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}\b|\b(?:[0-9a-fA-F]{1,4}:){1,7}:|\b(?:[0-9a-fA-F]{1,4}:){2,7}[0-9a-fA-F]{1,4}\b/g;
113
121
  /** Distinguishes real IPv6 addresses from look-alikes the broad
114
122
  * regex above also accepts. Timestamps like `12:22:57` and other
115
123
  * short colon-separated decimal sequences must be rejected:
@@ -134,29 +142,175 @@ const ABSOLUTE_PATH_RX = /(?:\/Users\/|\/home\/|\/var\/|\/etc\/|\/opt\/|[A-Z]:\\
134
142
  // false-positive rate from a real-world scan with `.local` enabled.
135
143
  // The remaining TLDs (`.internal`, `.corp`, `.lan`, `.intra`,
136
144
  // `.home`, `.prod.*`, `.stg.*`) are unambiguous internal-DNS markers.
137
- const INTERNAL_HOST_RX = /\b[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\.(?:internal|corp|lan|intra|home|prod\.[a-z0-9]+|stg\.[a-z0-9]+)\b/gi;
145
+ //
146
+ // Case-sensitive (no `/i`): real DNS labels are conventionally
147
+ // lowercase. Dropping the `i` flag means PascalCase property chains
148
+ // like `SqlParser.internal` no longer match.
149
+ const INTERNAL_HOST_RX = /\b[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\.(?:internal|corp|lan|intra|home|prod\.[a-z0-9]+|stg\.[a-z0-9]+)\b/g;
150
+ // ── Per-rule validators (false-positive filters) ─────────────────
151
+ //
152
+ // Each validator runs after the regex matches. Returning false drops
153
+ // the match before it becomes a finding. Composed from the shared
154
+ // helpers in validators.ts; per-rule logic stays local to capture
155
+ // the kind-specific shape (e.g. env-var has NAME=VALUE structure
156
+ // that needs splitting before checking the value).
157
+ /** env-var: NAME=VALUE assignment. Reject when name is a
158
+ * public-by-convention prefix, value is a placeholder or already
159
+ * redacted, value is a shell substitution (not a literal), or value
160
+ * is a short JS string constant (`const FOO_KEY = 'app.storage.x'`,
161
+ * not an env assignment). */
162
+ function envVarLooksReal(value) {
163
+ const eqIdx = value.indexOf('=');
164
+ if (eqIdx < 0)
165
+ return false;
166
+ const name = value.slice(0, eqIdx).trim();
167
+ if (hasPublicEnvPrefix(name))
168
+ return false;
169
+ const raw = value.slice(eqIdx + 1).trim();
170
+ if (isObviouslyNonSecretValue(raw))
171
+ return false;
172
+ // Strip outer quotes / backticks so the value-only checks aren't
173
+ // fooled by `=""` or `='...'`.
174
+ const stripped = raw.replace(/^[`'"]+|[`'"]+$/g, '').trim();
175
+ if (stripped.length < 8)
176
+ return false;
177
+ // Shell substitution / variable reference — value is computed at
178
+ // runtime, the literal isn't actually leaked.
179
+ if (/^\$[({]|^\$\w/.test(stripped))
180
+ return false;
181
+ // Looks like a JS storage-key string constant: pure letters
182
+ // (any case, supports camelCase / SCREAMING_CASE keys) with
183
+ // dots/underscores/hyphens, NO digits, ≤ 28 chars. Real secrets
184
+ // have digits OR ≥ 32 chars, so the disjoint shape catches values
185
+ // like `'spool.shares.skeletonCount'` / `'theme_editor'` without
186
+ // rejecting a Stripe-style live key (has digits + ≥ 32 chars).
187
+ if (/^[a-zA-Z][a-zA-Z._\-]*$/.test(stripped) && stripped.length < 28)
188
+ return false;
189
+ // Natural-language placeholder text (CJK / Cyrillic / Hangul /
190
+ // Arabic / emoji) in the value. Real env-var secrets are always
191
+ // ASCII; non-ASCII content here is a description like
192
+ // `AGENT_INTERNAL_SECRET='你自己生成的一串随机密钥'`. Scoped to
193
+ // env-var only — see hasNonAsciiContent for why it's not in the
194
+ // shared isObviouslyNonSecretValue.
195
+ if (hasNonAsciiContent(stripped))
196
+ return false;
197
+ return true;
198
+ }
199
+ /** email: reject filenames (icon_16x16@2x.png), reserved/test
200
+ * domains (example.com, RFC 2606). */
201
+ function emailLooksReal(value) {
202
+ if (looksLikeImageAsset(value))
203
+ return false;
204
+ const atIdx = value.lastIndexOf('@');
205
+ if (atIdx < 0)
206
+ return false;
207
+ const domain = value.slice(atIdx + 1);
208
+ if (isReservedDomain(domain))
209
+ return false;
210
+ return true;
211
+ }
212
+ /** phone: country code can't start with 0 (ITU E.164). Digit count
213
+ * in valid E.164 range. Also reject when the digit sequence is just
214
+ * a year (4 digits at the end with year-like prefix). */
215
+ function phoneLooksReal(value) {
216
+ if (/^\+0/.test(value))
217
+ return false;
218
+ const digits = value.replace(/\D/g, '');
219
+ if (digits.length < 7 || digits.length > 15)
220
+ return false;
221
+ return true;
222
+ }
223
+ /** ip: reject loopback, RFC 5737 docs ranges, RFC 3849 IPv6 doc
224
+ * range, unspecified address, link-local. */
225
+ function ipLooksReal(value) {
226
+ return !isReservedIp(value);
227
+ }
228
+ // Common web/build asset extensions that the `prod\.[a-z0-9]+` and
229
+ // `stg\.[a-z0-9]+` alternatives of INTERNAL_HOST_RX collide with —
230
+ // e.g. `runtime.prod.js`, `vendor.prod.css`. Bundler output, not a
231
+ // hostname.
232
+ const HOST_TAIL_FILE_EXTS = new Set([
233
+ 'js', 'ts', 'tsx', 'jsx', 'mjs', 'cjs',
234
+ 'css', 'scss', 'sass', 'less',
235
+ 'json', 'jsonc', 'yaml', 'yml',
236
+ 'html', 'htm', 'xml',
237
+ 'map', 'wasm', 'md', 'txt', 'log',
238
+ 'png', 'jpg', 'jpeg', 'gif', 'svg', 'webp', 'ico',
239
+ ]);
240
+ /** internal-host: reject JS property chains the regex inadvertently
241
+ * matches (`process.env.HOME`, `import.meta.home`) and bundler
242
+ * output filenames matched by the loose `prod.*` / `stg.*` tail
243
+ * (`runtime.prod.js`, `chunk.stg.css`). */
244
+ function internalHostLooksReal(value) {
245
+ if (/^process\.env\./i.test(value))
246
+ return false;
247
+ if (/^import\.meta\./i.test(value))
248
+ return false;
249
+ if (/^window\.location\./i.test(value))
250
+ return false;
251
+ const lastDot = value.lastIndexOf('.');
252
+ if (lastDot >= 0 && HOST_TAIL_FILE_EXTS.has(value.slice(lastDot + 1).toLowerCase()))
253
+ return false;
254
+ return true;
255
+ }
256
+ /** Vendor api-key: AWS docs ship `AKIAIOSFODNN7EXAMPLE` literally —
257
+ * block anything ending in EXAMPLE/SAMPLE/etc. */
258
+ function apiKeyLooksReal(value) {
259
+ return !isVendorExampleKey(value);
260
+ }
261
+ /** Multi-line credential blobs (cloud-cred-ini, kubeconfig, netrc,
262
+ * connection-string, url-creds, basic-auth, bearer) get the
263
+ * generic "obviously non-secret" guard: rejects when the matched
264
+ * block contains a redaction marker, ellipsis, or placeholder. */
265
+ function credentialBlockLooksReal(value) {
266
+ if (isObviouslyNonSecretValue(value))
267
+ return false;
268
+ // AWS docs example key inside an ini block.
269
+ if (/AKIAIOSFODNN7EXAMPLE|wJalrXUtnFEMI/.test(value))
270
+ return false;
271
+ return true;
272
+ }
273
+ /** kubeconfig: token value should be high-entropy. The regex
274
+ * captures `<field>: <value>` — the value is everything after the
275
+ * colon. Reject if entropy is below ~3.5 (placeholder alphabets
276
+ * like `abcdefghi…` clock in around 4.7 BUT have all-distinct chars
277
+ * in a sequence — the entropy floor isn't enough alone). Also
278
+ * block sequential alphabet / numeric placeholder values. */
279
+ function kubeconfigTokenLooksReal(value) {
280
+ if (!credentialBlockLooksReal(value))
281
+ return false;
282
+ const colonIdx = value.indexOf(':');
283
+ if (colonIdx < 0)
284
+ return true;
285
+ const tokenValue = value.slice(colonIdx + 1).trim();
286
+ if (looksLikePlaceholder(tokenValue))
287
+ return false;
288
+ if (shannon(tokenValue) < 3.0)
289
+ return false;
290
+ return true;
291
+ }
138
292
  const RULES = [
139
293
  { kind: 'private-key', rx: PEM_RX, confidence: 1.0 },
140
294
  { kind: 'ssh-key', rx: SSH_KEY_BODY_RX, confidence: 0.95 },
141
- { kind: 'cloud-cred-ini', rx: AWS_INI_RX, confidence: 0.95 },
142
- { kind: 'cloud-cred-ini', rx: GCLOUD_JSON_RX, confidence: 0.9 },
143
- { kind: 'kubeconfig-token', rx: KUBECONFIG_RX, confidence: 0.85 },
144
- { kind: 'netrc', rx: NETRC_RX, confidence: 0.95 },
145
- { kind: 'connection-string', rx: CONN_STRING_RX, confidence: 0.9 },
146
- { kind: 'url-creds', rx: URL_CREDS_RX, confidence: 0.95 },
147
- { kind: 'basic-auth', rx: BASIC_AUTH_RX, confidence: 0.9 },
148
- { kind: 'env-var', rx: ENV_VAR_RX, confidence: 0.9 },
295
+ { kind: 'cloud-cred-ini', rx: AWS_INI_RX, confidence: 0.95, validate: credentialBlockLooksReal },
296
+ { kind: 'cloud-cred-ini', rx: GCLOUD_JSON_RX, confidence: 0.9, validate: credentialBlockLooksReal },
297
+ { kind: 'kubeconfig-token', rx: KUBECONFIG_RX, confidence: 0.85, validate: kubeconfigTokenLooksReal },
298
+ { kind: 'netrc', rx: NETRC_RX, confidence: 0.95, validate: credentialBlockLooksReal },
299
+ { kind: 'connection-string', rx: CONN_STRING_RX, confidence: 0.9, validate: credentialBlockLooksReal },
300
+ { kind: 'url-creds', rx: URL_CREDS_RX, confidence: 0.95, validate: credentialBlockLooksReal },
301
+ { kind: 'basic-auth', rx: BASIC_AUTH_RX, confidence: 0.9, validate: credentialBlockLooksReal },
302
+ { kind: 'env-var', rx: ENV_VAR_RX, confidence: 0.9, validate: envVarLooksReal },
149
303
  { kind: 'generic-secret', rx: GENERIC_SECRET_RX, confidence: 0.6, validate: hasQuotedEntropy(4.0) },
150
304
  { kind: 'jwt', rx: JWT_RX, confidence: 0.95 },
151
- { kind: 'api-key', rx: VENDOR_API_KEY_RX, confidence: 0.98 },
152
- { kind: 'bearer', rx: BEARER_RX, confidence: 0.85 },
305
+ { kind: 'api-key', rx: VENDOR_API_KEY_RX, confidence: 0.98, validate: apiKeyLooksReal },
306
+ { kind: 'bearer', rx: BEARER_RX, confidence: 0.85, validate: credentialBlockLooksReal },
153
307
  { kind: 'credit-card', rx: CC_RX, confidence: 0.95, validate: luhnOk },
154
308
  { kind: 'ssn', rx: SSN_RX, confidence: 0.85 },
155
- { kind: 'email', rx: EMAIL_RX, confidence: 0.85 },
156
- { kind: 'phone', rx: PHONE_RX, confidence: 0.7 },
157
- { kind: 'ip', rx: IPV4_RX, confidence: 0.55 },
158
- { kind: 'ip', rx: IPV6_RX, confidence: 0.6, validate: validIPv6 },
159
- { kind: 'internal-host', rx: INTERNAL_HOST_RX, confidence: 0.55 },
309
+ { kind: 'email', rx: EMAIL_RX, confidence: 0.85, validate: emailLooksReal },
310
+ { kind: 'phone', rx: PHONE_RX, confidence: 0.7, validate: phoneLooksReal },
311
+ { kind: 'ip', rx: IPV4_RX, confidence: 0.55, validate: ipLooksReal },
312
+ { kind: 'ip', rx: IPV6_RX, confidence: 0.6, validate: (v) => validIPv6(v) && ipLooksReal(v) },
313
+ { kind: 'internal-host', rx: INTERNAL_HOST_RX, confidence: 0.55, validate: internalHostLooksReal },
160
314
  { kind: 'absolute-path', rx: ABSOLUTE_PATH_RX, confidence: 0.75 },
161
315
  ];
162
316
  /** Synchronous regex-driven scan. Rules earlier in the priority list
@@ -1 +1 @@
1
- {"version":3,"file":"detectors.js","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detectors.js","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,8 @@ export { detectWithRegex } from './detectors.js';
4
4
  export { regexProvider, analyzeWith, } from './providers.js';
5
5
  export type { RedactProvider } from './providers.js';
6
6
  export { luhnOk, shannon, hashValueForRedactExclude } from './validators.js';
7
- export { maskValueByKind } from './mask.js';
7
+ export { maskValueByKind, detectVendor } from './mask.js';
8
+ export { rotationUrlForVendor, rotationUrlForToken } from './rotation.js';
8
9
  export { HIGH_SEVERITY_KINDS, INFO_SEVERITY_KINDS, severityOf } from './severity.js';
9
10
  export type { Severity } from './severity.js';
10
11
  import type { SensitiveGroup, SensitiveMatch } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,YAAY,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EACL,aAAa,EACb,WAAW,GACZ,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACpF,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAG7C,OAAO,KAAK,EAAE,cAAc,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAA;AAG/E;;4CAE4C;AAC5C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAEnE;AAED;;;;;6CAK6C;AAC7C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CA6BhF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,YAAY,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EACL,aAAa,EACb,WAAW,GACZ,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAE5E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAEzE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACpF,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAG7C,OAAO,KAAK,EAAE,cAAc,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAA;AAG/E;;4CAE4C;AAC5C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAEnE;AAED;;;;;6CAK6C;AAC7C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CA6BhF"}
package/dist/index.js CHANGED
@@ -12,7 +12,8 @@ export { SENSITIVE_KIND_LABEL, SENSITIVE_KIND_ORDER, } from './types.js';
12
12
  export { detectWithRegex } from './detectors.js';
13
13
  export { regexProvider, analyzeWith, } from './providers.js';
14
14
  export { luhnOk, shannon, hashValueForRedactExclude } from './validators.js';
15
- export { maskValueByKind } from './mask.js';
15
+ export { maskValueByKind, detectVendor } from './mask.js';
16
+ export { rotationUrlForVendor, rotationUrlForToken } from './rotation.js';
16
17
  export { HIGH_SEVERITY_KINDS, INFO_SEVERITY_KINDS, severityOf } from './severity.js';
17
18
  import { detectWithRegex } from './detectors.js';
18
19
  import { SENSITIVE_KIND_ORDER } from './types.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/mask.d.ts CHANGED
@@ -3,4 +3,8 @@ import type { SensitiveKind } from './types.js';
3
3
  * `kind` is loosely typed so synthetic categories (author names,
4
4
  * manual entries) also get a sensible default. */
5
5
  export declare function maskValueByKind(value: string, kind: SensitiveKind | string): string;
6
+ /** Recognise the vendor behind a token by its prefix. Returns null
7
+ * when the prefix isn't one we've codified — the caller falls
8
+ * back to a generic `[redacted API key]` mask. */
9
+ export declare function detectVendor(token: string): string | null;
6
10
  //# sourceMappingURL=mask.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mask.d.ts","sourceRoot":"","sources":["../src/mask.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;mDAEmD;AACnD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CA0GnF"}
1
+ {"version":3,"file":"mask.d.ts","sourceRoot":"","sources":["../src/mask.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;mDAEmD;AACnD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CA0GnF;AAED;;mDAEmD;AACnD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BzD"}
package/dist/mask.js CHANGED
@@ -123,7 +123,7 @@ export function maskValueByKind(value, kind) {
123
123
  /** Recognise the vendor behind a token by its prefix. Returns null
124
124
  * when the prefix isn't one we've codified — the caller falls
125
125
  * back to a generic `[redacted API key]` mask. */
126
- function detectVendor(token) {
126
+ export function detectVendor(token) {
127
127
  if (/^sk_(live|test)_/.test(token))
128
128
  return 'Stripe';
129
129
  if (/^(rk|pk)_(live|test)_/.test(token))
package/dist/mask.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mask.js","sourceRoot":"","sources":["../src/mask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mask.js","sourceRoot":"","sources":["../src/mask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { detectVendor } from './mask.js';
2
+ export { detectVendor };
3
+ /** Map a vendor name (as returned by {@link detectVendor}) to the
4
+ * vendor's official key-management / rotation page. Returns null when
5
+ * we don't have a verified URL for that vendor — the caller falls
6
+ * back to the plain rotate reminder. */
7
+ export declare function rotationUrlForVendor(vendor: string | null): string | null;
8
+ /** Convenience: resolve the rotation URL directly from a raw token,
9
+ * combining {@link detectVendor} + {@link rotationUrlForVendor}.
10
+ * Returns null when the vendor is unknown or has no verified URL. */
11
+ export declare function rotationUrlForToken(token: string): string | null;
12
+ //# sourceMappingURL=rotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotation.d.ts","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;;yCAGyC;AACzC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAGzE;AAED;;sEAEsE;AACtE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE"}
@@ -0,0 +1,75 @@
1
+ // Vendor → rotation deep-link registry.
2
+ //
3
+ // When a detected credential resolves to a known vendor, the Security
4
+ // surfaces offer a "Rotate this key ↗" affordance that opens the
5
+ // vendor's own key-management page. Rotating at the SOURCE is the only
6
+ // action that actually closes the leak — Spool's purge merely masks
7
+ // its own copy.
8
+ //
9
+ // URLs drift, so every entry below was verified against the vendor's
10
+ // current official docs (see the inline source on each line). Any
11
+ // vendor `detectVendor` recognises but for which no stable, verified
12
+ // self-service rotation URL exists is deliberately OMITTED — the
13
+ // caller then falls back to the generic rotate-reminder text rather
14
+ // than shipping a guessed (and likely wrong) link.
15
+ import { detectVendor } from './mask.js';
16
+ export { detectVendor };
17
+ /** Map a vendor name (as returned by {@link detectVendor}) to the
18
+ * vendor's official key-management / rotation page. Returns null when
19
+ * we don't have a verified URL for that vendor — the caller falls
20
+ * back to the plain rotate reminder. */
21
+ export function rotationUrlForVendor(vendor) {
22
+ if (!vendor)
23
+ return null;
24
+ return ROTATION_URLS[vendor] ?? null;
25
+ }
26
+ /** Convenience: resolve the rotation URL directly from a raw token,
27
+ * combining {@link detectVendor} + {@link rotationUrlForVendor}.
28
+ * Returns null when the vendor is unknown or has no verified URL. */
29
+ export function rotationUrlForToken(token) {
30
+ return rotationUrlForVendor(detectVendor(token));
31
+ }
32
+ // Verified 2026-05-26 against each vendor's official docs / console.
33
+ const ROTATION_URLS = {
34
+ // docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html
35
+ // → IAM console, user "Security credentials" tab (self-managed keys).
36
+ AWS: 'https://console.aws.amazon.com/iam/home#/security_credentials',
37
+ // docs.github.com/.../managing-your-personal-access-tokens → github.com/settings/tokens
38
+ GitHub: 'https://github.com/settings/tokens',
39
+ // help.openai.com "Where do I find my OpenAI API Key" → platform.openai.com/api-keys
40
+ OpenAI: 'https://platform.openai.com/api-keys',
41
+ // Anthropic Console → Settings → API keys (console.anthropic.com/settings/keys)
42
+ Anthropic: 'https://console.anthropic.com/settings/keys',
43
+ // docs.stripe.com/keys → live-mode API keys tab (dashboard.stripe.com/apikeys)
44
+ Stripe: 'https://dashboard.stripe.com/apikeys',
45
+ // huggingface.co/docs/hub/security-tokens → huggingface.co/settings/tokens
46
+ 'Hugging Face': 'https://huggingface.co/settings/tokens',
47
+ // cloud.google.com/docs/authentication/api-keys → APIs & Services → Credentials
48
+ Google: 'https://console.cloud.google.com/apis/credentials',
49
+ // api.slack.com/apps → Slack "Your Apps" (OAuth & Permissions per app)
50
+ Slack: 'https://api.slack.com/apps',
51
+ // docs.gitlab.com/user/profile/personal_access_tokens/ → User settings → Access tokens
52
+ GitLab: 'https://gitlab.com/-/user_settings/personal_access_tokens',
53
+ // docs.npmjs.com/creating-and-viewing-access-tokens. `~` is npm's
54
+ // username placeholder → resolves to the logged-in user's tokens page.
55
+ // Plain `/settings` lands on the unrelated "settings" PACKAGE.
56
+ npm: 'https://www.npmjs.com/settings/~/tokens',
57
+ // docs.digitalocean.com/reference/api/create-personal-access-token/
58
+ DigitalOcean: 'https://cloud.digitalocean.com/account/api/tokens',
59
+ // vercel.com/kb/guide/how-do-i-use-a-vercel-api-access-token → vercel.com/account/tokens
60
+ Vercel: 'https://vercel.com/account/tokens',
61
+ // developers.cloudflare.com/fundamentals/api/get-started/create-token/ → My Profile → API Tokens
62
+ Cloudflare: 'https://dash.cloudflare.com/profile/api-tokens',
63
+ // twilio.com/docs/iam/api-keys/keys-in-console → Console API keys page
64
+ Twilio: 'https://console.twilio.com/us1/account/keys-credentials/api-keys',
65
+ // twilio.com/docs/sendgrid/ui/account-and-settings/api-keys → app.sendgrid.com/settings/api_keys
66
+ SendGrid: 'https://app.sendgrid.com/settings/api_keys',
67
+ // docs.docker.com/security/access-tokens/ → Account settings → Personal access tokens
68
+ 'Docker Hub': 'https://app.docker.com/settings/personal-access-tokens',
69
+ // pypi.org/help/#apitoken → Account settings → API tokens
70
+ PyPI: 'https://pypi.org/manage/account/token/',
71
+ // OMITTED (no stable verified self-service URL): Mailgun, Square,
72
+ // Databricks (per-workspace host). detectVendor still recognises
73
+ // them for masking; rotation falls back to the reminder text.
74
+ };
75
+ //# sourceMappingURL=rotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,sEAAsE;AACtE,iEAAiE;AACjE,uEAAuE;AACvE,oEAAoE;AACpE,gBAAgB;AAChB,EAAE;AACF,qEAAqE;AACrE,kEAAkE;AAClE,qEAAqE;AACrE,iEAAiE;AACjE,oEAAoE;AACpE,mDAAmD;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;;yCAGyC;AACzC,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAA;AACtC,CAAC;AAED;;sEAEsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,oBAAoB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,qEAAqE;AACrE,MAAM,aAAa,GAA2B;IAC5C,2EAA2E;IAC3E,sEAAsE;IACtE,GAAG,EAAE,+DAA+D;IACpE,wFAAwF;IACxF,MAAM,EAAE,oCAAoC;IAC5C,qFAAqF;IACrF,MAAM,EAAE,sCAAsC;IAC9C,gFAAgF;IAChF,SAAS,EAAE,6CAA6C;IACxD,+EAA+E;IAC/E,MAAM,EAAE,sCAAsC;IAC9C,2EAA2E;IAC3E,cAAc,EAAE,wCAAwC;IACxD,gFAAgF;IAChF,MAAM,EAAE,mDAAmD;IAC3D,uEAAuE;IACvE,KAAK,EAAE,4BAA4B;IACnC,uFAAuF;IACvF,MAAM,EAAE,2DAA2D;IACnE,kEAAkE;IAClE,uEAAuE;IACvE,+DAA+D;IAC/D,GAAG,EAAE,yCAAyC;IAC9C,oEAAoE;IACpE,YAAY,EAAE,mDAAmD;IACjE,yFAAyF;IACzF,MAAM,EAAE,mCAAmC;IAC3C,iGAAiG;IACjG,UAAU,EAAE,gDAAgD;IAC5D,uEAAuE;IACvE,MAAM,EAAE,kEAAkE;IAC1E,iGAAiG;IACjG,QAAQ,EAAE,4CAA4C;IACtD,sFAAsF;IACtF,YAAY,EAAE,wDAAwD;IACtE,0DAA0D;IAC1D,IAAI,EAAE,wCAAwC;IAC9C,kEAAkE;IAClE,iEAAiE;IACjE,8DAA8D;CAC/D,CAAA"}
@@ -22,4 +22,29 @@ export declare function shannon(s: string): number;
22
22
  * string is expected to be a "keyword = value" capture; we pull the
23
23
  * quoted body so we don't include the key name in the entropy. */
24
24
  export declare function hasQuotedEntropy(min: number): (value: string) => boolean;
25
+ export declare function containsRedactionMarker(value: string): boolean;
26
+ /** Visual ellipsis (`…` or `...`) — the original value was truncated
27
+ * in the middle, so the substring we're holding isn't actually the
28
+ * secret even if the surrounding shape looks credential-like. */
29
+ export declare function containsEllipsis(value: string): boolean;
30
+ export declare function looksLikePlaceholder(value: string): boolean;
31
+ export declare function isReservedDomain(domain: string): boolean;
32
+ /** macOS icon assets (`icon_16x16@2x.png`), Sketch / Figma exports,
33
+ * Slack emoji files — all contain `@N x` style suffixes that the
34
+ * email regex matches. Reject when the trailing token is a known
35
+ * image extension. */
36
+ export declare function looksLikeImageAsset(value: string): boolean;
37
+ export declare function hasPublicEnvPrefix(name: string): boolean;
38
+ /** AWS / vendor "this is the documentation key" patterns. AWS' own
39
+ * IAM docs use `AKIAIOSFODNN7EXAMPLE` + `wJalrXUtnFEMI/K7MDENG/…EXAMPLEKEY`
40
+ * literally in every tutorial. Treat any vendor key ending in
41
+ * EXAMPLE / SAMPLE / DEMO / YOUR_KEY as a non-secret. */
42
+ export declare function isVendorExampleKey(value: string): boolean;
43
+ /** Composite filter used by every text-credential rule. */
44
+ export declare function isObviouslyNonSecretValue(value: string): boolean;
45
+ export declare function hasNonAsciiContent(value: string): boolean;
46
+ /** Non-routable / documentation IP ranges that aren't real network
47
+ * endpoints — loopback, RFC 5737 doc ranges, RFC 3849 IPv6 doc
48
+ * range, unspecified address, link-local. */
49
+ export declare function isReservedIp(value: string): boolean;
25
50
  //# sourceMappingURL=validators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AASA;;iDAEiD;AACjD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAe7C;AAED;;;;;;;;;;iDAUiD;AACjD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED;;4DAE4D;AAC5D,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAWzC;AAED;;mEAEmE;AACnE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAKxE"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AASA;;iDAEiD;AACjD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAe7C;AAED;;;;;;;;;;iDAUiD;AACjD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED;;4DAE4D;AAC5D,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAWzC;AAED;;mEAEmE;AACnE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAKxE;AAkBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;kEAEkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAeD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAYD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;uBAGuB;AACvB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAQD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;0DAG0D;AAC1D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,2DAA2D;AAC3D,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIhE;AAWD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;8CAE8C;AAC9C,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBnD"}
@@ -75,4 +75,122 @@ export function hasQuotedEntropy(min) {
75
75
  return shannon(inner) >= min;
76
76
  };
77
77
  }
78
+ // ── Shared false-positive filters ─────────────────────────────────
79
+ //
80
+ // Every regex below is a "this string says I am NOT a real secret"
81
+ // signal — extracted into one place so per-rule validators read as a
82
+ // composition of intent ("env-var that isn't placeholder, redacted,
83
+ // or a public-prefix") instead of bespoke patchwork. Empirical: most
84
+ // scan-induced noise on real chat content is one of these four:
85
+ // 1. user manually redacted before paste (`[redacted]`, `…`)
86
+ // 2. vendor docs example (AWS `AKIAIOSFODNN7EXAMPLE`)
87
+ // 3. JS code matching the env shape (`const FOO_KEY = 'string'`)
88
+ // 4. value is a placeholder (`xxxx`, `your_token`, `password`)
89
+ /** "[redacted]" / "<redacted>" / "[SECRET:…]" / "【已隐藏】" — set by a
90
+ * user or an upstream tool to flag the literal was scrubbed. */
91
+ const REDACTION_MARKER_RX = /\[(?:redacted|hidden|secret|removed|masked)(?::[^\]]*)?\]|<(?:redacted|hidden)>|【已?隐藏】/i;
92
+ export function containsRedactionMarker(value) {
93
+ return REDACTION_MARKER_RX.test(value);
94
+ }
95
+ /** Visual ellipsis (`…` or `...`) — the original value was truncated
96
+ * in the middle, so the substring we're holding isn't actually the
97
+ * secret even if the surrounding shape looks credential-like. */
98
+ export function containsEllipsis(value) {
99
+ return /…|\.\.\./.test(value);
100
+ }
101
+ /** Self-evidently-fake placeholder values: `xxxx-xxxx-xxxx`, repeated
102
+ * chars, `<your-key>`, `letmein`, `hunter2`, alphabet-sequence dumps. */
103
+ const PLACEHOLDER_PATTERNS = [
104
+ /^[xX]+(?:[-_ ][xX]+)*$/, // xxxx, xxxx-xxxx
105
+ /^(.)\1{4,}$/, // 5+ repeats: aaaaa, 00000
106
+ /^<[a-zA-Z0-9_\-\s]+>$/, // <YOUR_TOKEN>
107
+ /\byour[_-]?(?:secret|key|token|password|api[_-]?key)\b/i,
108
+ /\b(?:placeholder|todo|fixme|example|sample|dummy|fake|test[_-]?value)\b/i,
109
+ /^(?:letmein|changeme|password|passwd|hunter2|123456|qwerty|abc123|admin)$/i,
110
+ /^abcdefghijklmnopqrstuvwxyz/, // alphabet dumps
111
+ /^0?123456789/, // sequential digits
112
+ ];
113
+ export function looksLikePlaceholder(value) {
114
+ return PLACEHOLDER_PATTERNS.some((rx) => rx.test(value));
115
+ }
116
+ /** Strict union of (a) IETF/IANA reserved example/test labels and
117
+ * (b) generic "fake company" domains that show up constantly in
118
+ * documentation. Source: RFC 2606 + RFC 6761. */
119
+ const RESERVED_DOMAINS = new Set([
120
+ 'example.com', 'example.net', 'example.org', 'example.edu',
121
+ 'test.com', 'test.net', 'test.org', 'invalid', 'localhost', 'example', 'test',
122
+ 'company.com', 'mycompany.com', 'yourcompany.com', 'yourdomain.com', 'mydomain.com',
123
+ 'domain.com', 'domain.net', 'foo.com', 'bar.com', 'foobar.com',
124
+ ]);
125
+ export function isReservedDomain(domain) {
126
+ return RESERVED_DOMAINS.has(domain.toLowerCase());
127
+ }
128
+ /** macOS icon assets (`icon_16x16@2x.png`), Sketch / Figma exports,
129
+ * Slack emoji files — all contain `@N x` style suffixes that the
130
+ * email regex matches. Reject when the trailing token is a known
131
+ * image extension. */
132
+ export function looksLikeImageAsset(value) {
133
+ return /\.(?:png|jpe?g|gif|webp|svg|bmp|ico|tiff?|heic|avif)$/i.test(value);
134
+ }
135
+ /** Public-by-convention env-var prefixes. Frameworks intentionally
136
+ * bundle these to the client / commit them to repos:
137
+ * NEXT_PUBLIC_*, VITE_*, REACT_APP_*, NUXT_PUBLIC_*, EXPO_PUBLIC_*,
138
+ * GATSBY_*, VUE_APP_*, STORYBOOK_* */
139
+ const PUBLIC_ENV_PREFIX_RX = /^(?:NEXT_PUBLIC|REACT_APP|VITE|PUBLIC|VUE_APP|GATSBY|EXPO_PUBLIC|NUXT_PUBLIC|STORYBOOK)_/;
140
+ export function hasPublicEnvPrefix(name) {
141
+ return PUBLIC_ENV_PREFIX_RX.test(name);
142
+ }
143
+ /** AWS / vendor "this is the documentation key" patterns. AWS' own
144
+ * IAM docs use `AKIAIOSFODNN7EXAMPLE` + `wJalrXUtnFEMI/K7MDENG/…EXAMPLEKEY`
145
+ * literally in every tutorial. Treat any vendor key ending in
146
+ * EXAMPLE / SAMPLE / DEMO / YOUR_KEY as a non-secret. */
147
+ export function isVendorExampleKey(value) {
148
+ return /(?:EXAMPLE|SAMPLE|DEMO|YOUR_?(?:KEY|TOKEN|SECRET)?)(?:KEY)?$/i.test(value);
149
+ }
150
+ /** Composite filter used by every text-credential rule. */
151
+ export function isObviouslyNonSecretValue(value) {
152
+ return containsRedactionMarker(value)
153
+ || containsEllipsis(value)
154
+ || looksLikePlaceholder(value);
155
+ }
156
+ /** Any non-ASCII character. Used by detectors whose regex would
157
+ * otherwise accept natural-language placeholder text (CJK, Cyrillic,
158
+ * Hangul, Arabic, emoji, …) — real secrets in those detectors are
159
+ * always ASCII so non-ASCII content is a placeholder description.
160
+ * Do NOT compose this into the shared isObviouslyNonSecretValue:
161
+ * connection-string / url-creds / netrc legitimately allow unicode
162
+ * passwords and would regress to false negatives. */
163
+ const NON_ASCII_RX = /[^\x00-\x7F]/;
164
+ export function hasNonAsciiContent(value) {
165
+ return NON_ASCII_RX.test(value);
166
+ }
167
+ /** Non-routable / documentation IP ranges that aren't real network
168
+ * endpoints — loopback, RFC 5737 doc ranges, RFC 3849 IPv6 doc
169
+ * range, unspecified address, link-local. */
170
+ export function isReservedIp(value) {
171
+ // Loopback
172
+ if (value === '127.0.0.1' || value === '::1')
173
+ return true;
174
+ if (value.startsWith('127.'))
175
+ return true;
176
+ // RFC 5737 IPv4 documentation
177
+ if (value.startsWith('192.0.2.'))
178
+ return true;
179
+ if (value.startsWith('198.51.100.'))
180
+ return true;
181
+ if (value.startsWith('203.0.113.'))
182
+ return true;
183
+ // RFC 3849 IPv6 documentation
184
+ if (/^2001:0?db8/i.test(value))
185
+ return true;
186
+ // Unspecified / wildcard
187
+ if (value === '0.0.0.0' || value === '::')
188
+ return true;
189
+ // Link-local (RFC 3927 / RFC 4291)
190
+ if (value.startsWith('169.254.'))
191
+ return true;
192
+ if (/^fe80:/i.test(value))
193
+ return true;
194
+ return false;
195
+ }
78
196
  //# sourceMappingURL=validators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,gEAAgE;AAChE,4DAA4D;AAC5D,EAAE;AACF,gEAAgE;AAChE,+DAA+D;AAC/D,iEAAiE;AACjE,yDAAyD;AAEzD;;iDAEiD;AACjD,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAA;IAC1D,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,GAAG,GAAG,KAAK,CAAA;IACf,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QACjC,IAAI,GAAG,EAAE,CAAC;YACR,CAAC,IAAI,CAAC,CAAA;YACN,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;QACD,GAAG,IAAI,CAAC,CAAA;QACR,GAAG,GAAG,CAAC,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,GAAG,GAAG,EAAE,KAAK,CAAC,CAAA;AACvB,CAAC;AAED;;;;;;;;;;iDAUiD;AACjD,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,4DAA4D;IAC5D,IAAI,CAAC,GAAG,UAAU,CAAA;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACxB,4DAA4D;QAC5D,4DAA4D;QAC5D,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AACxC,CAAC;AAED;;4DAE4D;AAC5D,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1D,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAA;IACpB,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;QACjB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;mEAEmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,CAAC,KAAa,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAA;QAC9D,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA;IAC9B,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spool-lab/redact",
3
- "version": "0.0.1",
3
+ "version": "0.5.1",
4
4
  "description": "Local, pure-TS sensitive-data detection for Spool sessions. Pattern + checksum + entropy pipeline today; pluggable provider boundary for future on-device ML (e.g. OpenAI Privacy Filter via transformers.js).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",