opencode-rehydra-core 0.14.0

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.
Files changed (432) hide show
  1. package/LICENSE +22 -0
  2. package/README.en.md +191 -0
  3. package/README.md +191 -0
  4. package/dist/browser.d.ts +54 -0
  5. package/dist/browser.d.ts.map +1 -0
  6. package/dist/browser.js +74 -0
  7. package/dist/browser.js.map +1 -0
  8. package/dist/core/anonymizer.d.ts +309 -0
  9. package/dist/core/anonymizer.d.ts.map +1 -0
  10. package/dist/core/anonymizer.js +555 -0
  11. package/dist/core/anonymizer.js.map +1 -0
  12. package/dist/core/index.d.ts +6 -0
  13. package/dist/core/index.d.ts.map +1 -0
  14. package/dist/core/index.js +6 -0
  15. package/dist/core/index.js.map +1 -0
  16. package/dist/crypto/index.d.ts +6 -0
  17. package/dist/crypto/index.d.ts.map +1 -0
  18. package/dist/crypto/index.js +6 -0
  19. package/dist/crypto/index.js.map +1 -0
  20. package/dist/crypto/pii-map-crypto.d.ts +114 -0
  21. package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
  22. package/dist/crypto/pii-map-crypto.js +228 -0
  23. package/dist/crypto/pii-map-crypto.js.map +1 -0
  24. package/dist/index.d.ts +53 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +72 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/ner/bio-decoder.d.ts +64 -0
  29. package/dist/ner/bio-decoder.d.ts.map +1 -0
  30. package/dist/ner/bio-decoder.js +218 -0
  31. package/dist/ner/bio-decoder.js.map +1 -0
  32. package/dist/ner/index.d.ts +12 -0
  33. package/dist/ner/index.d.ts.map +1 -0
  34. package/dist/ner/index.js +12 -0
  35. package/dist/ner/index.js.map +1 -0
  36. package/dist/ner/inference-server-client.d.ts +81 -0
  37. package/dist/ner/inference-server-client.d.ts.map +1 -0
  38. package/dist/ner/inference-server-client.js +120 -0
  39. package/dist/ner/inference-server-client.js.map +1 -0
  40. package/dist/ner/inference-server-ner-model.d.ts +43 -0
  41. package/dist/ner/inference-server-ner-model.d.ts.map +1 -0
  42. package/dist/ner/inference-server-ner-model.js +119 -0
  43. package/dist/ner/inference-server-ner-model.js.map +1 -0
  44. package/dist/ner/model-manager.d.ts +111 -0
  45. package/dist/ner/model-manager.d.ts.map +1 -0
  46. package/dist/ner/model-manager.js +334 -0
  47. package/dist/ner/model-manager.js.map +1 -0
  48. package/dist/ner/ner-model.d.ts +172 -0
  49. package/dist/ner/ner-model.d.ts.map +1 -0
  50. package/dist/ner/ner-model.js +514 -0
  51. package/dist/ner/ner-model.js.map +1 -0
  52. package/dist/ner/onnx-runtime.browser.d.ts +46 -0
  53. package/dist/ner/onnx-runtime.browser.d.ts.map +1 -0
  54. package/dist/ner/onnx-runtime.browser.js +90 -0
  55. package/dist/ner/onnx-runtime.browser.js.map +1 -0
  56. package/dist/ner/onnx-runtime.d.ts +72 -0
  57. package/dist/ner/onnx-runtime.d.ts.map +1 -0
  58. package/dist/ner/onnx-runtime.js +132 -0
  59. package/dist/ner/onnx-runtime.js.map +1 -0
  60. package/dist/ner/token-window.d.ts +19 -0
  61. package/dist/ner/token-window.d.ts.map +1 -0
  62. package/dist/ner/token-window.js +101 -0
  63. package/dist/ner/token-window.js.map +1 -0
  64. package/dist/ner/tokenizer.d.ts +142 -0
  65. package/dist/ner/tokenizer.d.ts.map +1 -0
  66. package/dist/ner/tokenizer.js +362 -0
  67. package/dist/ner/tokenizer.js.map +1 -0
  68. package/dist/opencode-plugin/git-identity.d.ts +3 -0
  69. package/dist/opencode-plugin/git-identity.d.ts.map +1 -0
  70. package/dist/opencode-plugin/git-identity.js +37 -0
  71. package/dist/opencode-plugin/git-identity.js.map +1 -0
  72. package/dist/opencode-plugin/github-username.d.ts +3 -0
  73. package/dist/opencode-plugin/github-username.d.ts.map +1 -0
  74. package/dist/opencode-plugin/github-username.js +41 -0
  75. package/dist/opencode-plugin/github-username.js.map +1 -0
  76. package/dist/opencode-plugin/identity-recognizer.d.ts +5 -0
  77. package/dist/opencode-plugin/identity-recognizer.d.ts.map +1 -0
  78. package/dist/opencode-plugin/identity-recognizer.js +21 -0
  79. package/dist/opencode-plugin/identity-recognizer.js.map +1 -0
  80. package/dist/opencode-plugin/index.d.ts +7 -0
  81. package/dist/opencode-plugin/index.d.ts.map +1 -0
  82. package/dist/opencode-plugin/index.js +6 -0
  83. package/dist/opencode-plugin/index.js.map +1 -0
  84. package/dist/opencode-plugin/plugin.d.ts +39 -0
  85. package/dist/opencode-plugin/plugin.d.ts.map +1 -0
  86. package/dist/opencode-plugin/plugin.js +294 -0
  87. package/dist/opencode-plugin/plugin.js.map +1 -0
  88. package/dist/opencode-plugin/types.d.ts +33 -0
  89. package/dist/opencode-plugin/types.d.ts.map +1 -0
  90. package/dist/opencode-plugin/types.js +5 -0
  91. package/dist/opencode-plugin/types.js.map +1 -0
  92. package/dist/opencode-plugin/v2/anon-state.d.ts +12 -0
  93. package/dist/opencode-plugin/v2/anon-state.d.ts.map +1 -0
  94. package/dist/opencode-plugin/v2/anon-state.js +14 -0
  95. package/dist/opencode-plugin/v2/anon-state.js.map +1 -0
  96. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts +13 -0
  97. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts.map +1 -0
  98. package/dist/opencode-plugin/v2/deep-rehydrate.js +33 -0
  99. package/dist/opencode-plugin/v2/deep-rehydrate.js.map +1 -0
  100. package/dist/opencode-plugin/v2/index.d.ts +17 -0
  101. package/dist/opencode-plugin/v2/index.d.ts.map +1 -0
  102. package/dist/opencode-plugin/v2/index.js +17 -0
  103. package/dist/opencode-plugin/v2/index.js.map +1 -0
  104. package/dist/opencode-plugin/v2/logger.d.ts +24 -0
  105. package/dist/opencode-plugin/v2/logger.d.ts.map +1 -0
  106. package/dist/opencode-plugin/v2/logger.js +73 -0
  107. package/dist/opencode-plugin/v2/logger.js.map +1 -0
  108. package/dist/opencode-plugin/v2/options.d.ts +40 -0
  109. package/dist/opencode-plugin/v2/options.d.ts.map +1 -0
  110. package/dist/opencode-plugin/v2/options.js +132 -0
  111. package/dist/opencode-plugin/v2/options.js.map +1 -0
  112. package/dist/opencode-plugin/v2/register-hooks.d.ts +43 -0
  113. package/dist/opencode-plugin/v2/register-hooks.d.ts.map +1 -0
  114. package/dist/opencode-plugin/v2/register-hooks.js +160 -0
  115. package/dist/opencode-plugin/v2/register-hooks.js.map +1 -0
  116. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts +101 -0
  117. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts.map +1 -0
  118. package/dist/opencode-plugin/v2/rehydrate-tail.js +147 -0
  119. package/dist/opencode-plugin/v2/rehydrate-tail.js.map +1 -0
  120. package/dist/opencode-plugin/v2/response-rehydrate.d.ts +78 -0
  121. package/dist/opencode-plugin/v2/response-rehydrate.d.ts.map +1 -0
  122. package/dist/opencode-plugin/v2/response-rehydrate.js +210 -0
  123. package/dist/opencode-plugin/v2/response-rehydrate.js.map +1 -0
  124. package/dist/opencode-plugin/v2/scrub-messages.d.ts +39 -0
  125. package/dist/opencode-plugin/v2/scrub-messages.d.ts.map +1 -0
  126. package/dist/opencode-plugin/v2/scrub-messages.js +260 -0
  127. package/dist/opencode-plugin/v2/scrub-messages.js.map +1 -0
  128. package/dist/opencode-plugin/v2/sessions.d.ts +17 -0
  129. package/dist/opencode-plugin/v2/sessions.d.ts.map +1 -0
  130. package/dist/opencode-plugin/v2/sessions.js +23 -0
  131. package/dist/opencode-plugin/v2/sessions.js.map +1 -0
  132. package/dist/opencode-plugin/v2/sse.d.ts +101 -0
  133. package/dist/opencode-plugin/v2/sse.d.ts.map +1 -0
  134. package/dist/opencode-plugin/v2/sse.js +235 -0
  135. package/dist/opencode-plugin/v2/sse.js.map +1 -0
  136. package/dist/opencode-plugin/v2/types.d.ts +188 -0
  137. package/dist/opencode-plugin/v2/types.d.ts.map +1 -0
  138. package/dist/opencode-plugin/v2/types.js +10 -0
  139. package/dist/opencode-plugin/v2/types.js.map +1 -0
  140. package/dist/opencode-plugin/vcs-command.d.ts +3 -0
  141. package/dist/opencode-plugin/vcs-command.d.ts.map +1 -0
  142. package/dist/opencode-plugin/vcs-command.js +34 -0
  143. package/dist/opencode-plugin/vcs-command.js.map +1 -0
  144. package/dist/pipeline/index.d.ts +12 -0
  145. package/dist/pipeline/index.d.ts.map +1 -0
  146. package/dist/pipeline/index.js +12 -0
  147. package/dist/pipeline/index.js.map +1 -0
  148. package/dist/pipeline/prenormalize.d.ts +48 -0
  149. package/dist/pipeline/prenormalize.d.ts.map +1 -0
  150. package/dist/pipeline/prenormalize.js +94 -0
  151. package/dist/pipeline/prenormalize.js.map +1 -0
  152. package/dist/pipeline/resolver.d.ts +56 -0
  153. package/dist/pipeline/resolver.d.ts.map +1 -0
  154. package/dist/pipeline/resolver.js +239 -0
  155. package/dist/pipeline/resolver.js.map +1 -0
  156. package/dist/pipeline/semantic-data-loader.d.ts +171 -0
  157. package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
  158. package/dist/pipeline/semantic-data-loader.js +677 -0
  159. package/dist/pipeline/semantic-data-loader.js.map +1 -0
  160. package/dist/pipeline/semantic-enricher.d.ts +112 -0
  161. package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
  162. package/dist/pipeline/semantic-enricher.js +322 -0
  163. package/dist/pipeline/semantic-enricher.js.map +1 -0
  164. package/dist/pipeline/tagger.d.ts +121 -0
  165. package/dist/pipeline/tagger.d.ts.map +1 -0
  166. package/dist/pipeline/tagger.js +545 -0
  167. package/dist/pipeline/tagger.js.map +1 -0
  168. package/dist/pipeline/title-extractor.d.ts +79 -0
  169. package/dist/pipeline/title-extractor.d.ts.map +1 -0
  170. package/dist/pipeline/title-extractor.js +801 -0
  171. package/dist/pipeline/title-extractor.js.map +1 -0
  172. package/dist/pipeline/validator.d.ts +65 -0
  173. package/dist/pipeline/validator.d.ts.map +1 -0
  174. package/dist/pipeline/validator.js +292 -0
  175. package/dist/pipeline/validator.js.map +1 -0
  176. package/dist/proxy/index.d.ts +13 -0
  177. package/dist/proxy/index.d.ts.map +1 -0
  178. package/dist/proxy/index.js +12 -0
  179. package/dist/proxy/index.js.map +1 -0
  180. package/dist/proxy/providers/anthropic.d.ts +28 -0
  181. package/dist/proxy/providers/anthropic.d.ts.map +1 -0
  182. package/dist/proxy/providers/anthropic.js +265 -0
  183. package/dist/proxy/providers/anthropic.js.map +1 -0
  184. package/dist/proxy/providers/index.d.ts +19 -0
  185. package/dist/proxy/providers/index.d.ts.map +1 -0
  186. package/dist/proxy/providers/index.js +41 -0
  187. package/dist/proxy/providers/index.js.map +1 -0
  188. package/dist/proxy/providers/openai.d.ts +27 -0
  189. package/dist/proxy/providers/openai.d.ts.map +1 -0
  190. package/dist/proxy/providers/openai.js +203 -0
  191. package/dist/proxy/providers/openai.js.map +1 -0
  192. package/dist/proxy/providers/streaming-tool-loop.d.ts +12 -0
  193. package/dist/proxy/providers/streaming-tool-loop.d.ts.map +1 -0
  194. package/dist/proxy/providers/streaming-tool-loop.js +223 -0
  195. package/dist/proxy/providers/streaming-tool-loop.js.map +1 -0
  196. package/dist/proxy/providers/types.d.ts +109 -0
  197. package/dist/proxy/providers/types.d.ts.map +1 -0
  198. package/dist/proxy/providers/types.js +2 -0
  199. package/dist/proxy/providers/types.js.map +1 -0
  200. package/dist/proxy/proxy-server.d.ts +61 -0
  201. package/dist/proxy/proxy-server.d.ts.map +1 -0
  202. package/dist/proxy/proxy-server.js +146 -0
  203. package/dist/proxy/proxy-server.js.map +1 -0
  204. package/dist/proxy/rehydra-fetch.d.ts +35 -0
  205. package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
  206. package/dist/proxy/rehydra-fetch.js +631 -0
  207. package/dist/proxy/rehydra-fetch.js.map +1 -0
  208. package/dist/proxy/rehydra-proxy.d.ts +40 -0
  209. package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
  210. package/dist/proxy/rehydra-proxy.js +150 -0
  211. package/dist/proxy/rehydra-proxy.js.map +1 -0
  212. package/dist/proxy/sse-parser.d.ts +59 -0
  213. package/dist/proxy/sse-parser.d.ts.map +1 -0
  214. package/dist/proxy/sse-parser.js +112 -0
  215. package/dist/proxy/sse-parser.js.map +1 -0
  216. package/dist/proxy/system-instruction.d.ts +19 -0
  217. package/dist/proxy/system-instruction.d.ts.map +1 -0
  218. package/dist/proxy/system-instruction.js +33 -0
  219. package/dist/proxy/system-instruction.js.map +1 -0
  220. package/dist/proxy/tool-loop-stream.d.ts +7 -0
  221. package/dist/proxy/tool-loop-stream.d.ts.map +1 -0
  222. package/dist/proxy/tool-loop-stream.js +65 -0
  223. package/dist/proxy/tool-loop-stream.js.map +1 -0
  224. package/dist/proxy/types.d.ts +138 -0
  225. package/dist/proxy/types.d.ts.map +1 -0
  226. package/dist/proxy/types.js +5 -0
  227. package/dist/proxy/types.js.map +1 -0
  228. package/dist/proxy/wrap-client.d.ts +47 -0
  229. package/dist/proxy/wrap-client.d.ts.map +1 -0
  230. package/dist/proxy/wrap-client.js +70 -0
  231. package/dist/proxy/wrap-client.js.map +1 -0
  232. package/dist/recognizers/address.d.ts +2 -0
  233. package/dist/recognizers/address.d.ts.map +1 -0
  234. package/dist/recognizers/address.js +23 -0
  235. package/dist/recognizers/address.js.map +1 -0
  236. package/dist/recognizers/base.d.ts +78 -0
  237. package/dist/recognizers/base.d.ts.map +1 -0
  238. package/dist/recognizers/base.js +100 -0
  239. package/dist/recognizers/base.js.map +1 -0
  240. package/dist/recognizers/bic-swift.d.ts +10 -0
  241. package/dist/recognizers/bic-swift.d.ts.map +1 -0
  242. package/dist/recognizers/bic-swift.js +107 -0
  243. package/dist/recognizers/bic-swift.js.map +1 -0
  244. package/dist/recognizers/credit-card.d.ts +32 -0
  245. package/dist/recognizers/credit-card.d.ts.map +1 -0
  246. package/dist/recognizers/credit-card.js +160 -0
  247. package/dist/recognizers/credit-card.js.map +1 -0
  248. package/dist/recognizers/custom-id.d.ts +28 -0
  249. package/dist/recognizers/custom-id.d.ts.map +1 -0
  250. package/dist/recognizers/custom-id.js +116 -0
  251. package/dist/recognizers/custom-id.js.map +1 -0
  252. package/dist/recognizers/date.d.ts +10 -0
  253. package/dist/recognizers/date.d.ts.map +1 -0
  254. package/dist/recognizers/date.js +228 -0
  255. package/dist/recognizers/date.js.map +1 -0
  256. package/dist/recognizers/email.d.ts +10 -0
  257. package/dist/recognizers/email.d.ts.map +1 -0
  258. package/dist/recognizers/email.js +75 -0
  259. package/dist/recognizers/email.js.map +1 -0
  260. package/dist/recognizers/iban.d.ts +14 -0
  261. package/dist/recognizers/iban.d.ts.map +1 -0
  262. package/dist/recognizers/iban.js +67 -0
  263. package/dist/recognizers/iban.js.map +1 -0
  264. package/dist/recognizers/index.d.ts +25 -0
  265. package/dist/recognizers/index.d.ts.map +1 -0
  266. package/dist/recognizers/index.js +53 -0
  267. package/dist/recognizers/index.js.map +1 -0
  268. package/dist/recognizers/ip-address.d.ts +14 -0
  269. package/dist/recognizers/ip-address.d.ts.map +1 -0
  270. package/dist/recognizers/ip-address.js +183 -0
  271. package/dist/recognizers/ip-address.js.map +1 -0
  272. package/dist/recognizers/phone.d.ts +10 -0
  273. package/dist/recognizers/phone.d.ts.map +1 -0
  274. package/dist/recognizers/phone.js +145 -0
  275. package/dist/recognizers/phone.js.map +1 -0
  276. package/dist/recognizers/postal-code.d.ts +16 -0
  277. package/dist/recognizers/postal-code.d.ts.map +1 -0
  278. package/dist/recognizers/postal-code.js +42 -0
  279. package/dist/recognizers/postal-code.js.map +1 -0
  280. package/dist/recognizers/registry.d.ts +59 -0
  281. package/dist/recognizers/registry.d.ts.map +1 -0
  282. package/dist/recognizers/registry.js +113 -0
  283. package/dist/recognizers/registry.js.map +1 -0
  284. package/dist/recognizers/secrets/api-key.d.ts +6 -0
  285. package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
  286. package/dist/recognizers/secrets/api-key.js +40 -0
  287. package/dist/recognizers/secrets/api-key.js.map +1 -0
  288. package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
  289. package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
  290. package/dist/recognizers/secrets/aws-credentials.js +68 -0
  291. package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
  292. package/dist/recognizers/secrets/config-secret.d.ts +8 -0
  293. package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
  294. package/dist/recognizers/secrets/config-secret.js +59 -0
  295. package/dist/recognizers/secrets/config-secret.js.map +1 -0
  296. package/dist/recognizers/secrets/connection-string.d.ts +6 -0
  297. package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
  298. package/dist/recognizers/secrets/connection-string.js +40 -0
  299. package/dist/recognizers/secrets/connection-string.js.map +1 -0
  300. package/dist/recognizers/secrets/env-var.d.ts +8 -0
  301. package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
  302. package/dist/recognizers/secrets/env-var.js +54 -0
  303. package/dist/recognizers/secrets/env-var.js.map +1 -0
  304. package/dist/recognizers/secrets/index.d.ts +22 -0
  305. package/dist/recognizers/secrets/index.d.ts.map +1 -0
  306. package/dist/recognizers/secrets/index.js +41 -0
  307. package/dist/recognizers/secrets/index.js.map +1 -0
  308. package/dist/recognizers/secrets/jwt.d.ts +6 -0
  309. package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
  310. package/dist/recognizers/secrets/jwt.js +47 -0
  311. package/dist/recognizers/secrets/jwt.js.map +1 -0
  312. package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
  313. package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
  314. package/dist/recognizers/secrets/key-patterns.js +15 -0
  315. package/dist/recognizers/secrets/key-patterns.js.map +1 -0
  316. package/dist/recognizers/secrets/literal-value.d.ts +10 -0
  317. package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
  318. package/dist/recognizers/secrets/literal-value.js +48 -0
  319. package/dist/recognizers/secrets/literal-value.js.map +1 -0
  320. package/dist/recognizers/secrets/private-key.d.ts +6 -0
  321. package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
  322. package/dist/recognizers/secrets/private-key.js +16 -0
  323. package/dist/recognizers/secrets/private-key.js.map +1 -0
  324. package/dist/recognizers/url.d.ts +14 -0
  325. package/dist/recognizers/url.d.ts.map +1 -0
  326. package/dist/recognizers/url.js +121 -0
  327. package/dist/recognizers/url.js.map +1 -0
  328. package/dist/storage/browser.d.ts +13 -0
  329. package/dist/storage/browser.d.ts.map +1 -0
  330. package/dist/storage/browser.js +13 -0
  331. package/dist/storage/browser.js.map +1 -0
  332. package/dist/storage/in-memory.d.ts +60 -0
  333. package/dist/storage/in-memory.d.ts.map +1 -0
  334. package/dist/storage/in-memory.js +108 -0
  335. package/dist/storage/in-memory.js.map +1 -0
  336. package/dist/storage/index.d.ts +11 -0
  337. package/dist/storage/index.d.ts.map +1 -0
  338. package/dist/storage/index.js +11 -0
  339. package/dist/storage/index.js.map +1 -0
  340. package/dist/storage/indexeddb.d.ts +69 -0
  341. package/dist/storage/indexeddb.d.ts.map +1 -0
  342. package/dist/storage/indexeddb.js +274 -0
  343. package/dist/storage/indexeddb.js.map +1 -0
  344. package/dist/storage/session-base.d.ts +34 -0
  345. package/dist/storage/session-base.d.ts.map +1 -0
  346. package/dist/storage/session-base.js +122 -0
  347. package/dist/storage/session-base.js.map +1 -0
  348. package/dist/storage/session.d.ts +19 -0
  349. package/dist/storage/session.d.ts.map +1 -0
  350. package/dist/storage/session.js +31 -0
  351. package/dist/storage/session.js.map +1 -0
  352. package/dist/storage/sqlite.d.ts +80 -0
  353. package/dist/storage/sqlite.d.ts.map +1 -0
  354. package/dist/storage/sqlite.js +255 -0
  355. package/dist/storage/sqlite.js.map +1 -0
  356. package/dist/storage/types.d.ts +208 -0
  357. package/dist/storage/types.d.ts.map +1 -0
  358. package/dist/storage/types.js +6 -0
  359. package/dist/storage/types.js.map +1 -0
  360. package/dist/streaming/anonymizer-stream.d.ts +63 -0
  361. package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
  362. package/dist/streaming/anonymizer-stream.js +184 -0
  363. package/dist/streaming/anonymizer-stream.js.map +1 -0
  364. package/dist/streaming/index.d.ts +9 -0
  365. package/dist/streaming/index.d.ts.map +1 -0
  366. package/dist/streaming/index.js +8 -0
  367. package/dist/streaming/index.js.map +1 -0
  368. package/dist/streaming/sentence-buffer.d.ts +78 -0
  369. package/dist/streaming/sentence-buffer.d.ts.map +1 -0
  370. package/dist/streaming/sentence-buffer.js +239 -0
  371. package/dist/streaming/sentence-buffer.js.map +1 -0
  372. package/dist/streaming/stream-factory.d.ts +38 -0
  373. package/dist/streaming/stream-factory.d.ts.map +1 -0
  374. package/dist/streaming/stream-factory.js +69 -0
  375. package/dist/streaming/stream-factory.js.map +1 -0
  376. package/dist/streaming/types.d.ts +121 -0
  377. package/dist/streaming/types.d.ts.map +1 -0
  378. package/dist/streaming/types.js +5 -0
  379. package/dist/streaming/types.js.map +1 -0
  380. package/dist/types/index.d.ts +269 -0
  381. package/dist/types/index.d.ts.map +1 -0
  382. package/dist/types/index.js +95 -0
  383. package/dist/types/index.js.map +1 -0
  384. package/dist/types/pii-types.d.ts +64 -0
  385. package/dist/types/pii-types.d.ts.map +1 -0
  386. package/dist/types/pii-types.js +153 -0
  387. package/dist/types/pii-types.js.map +1 -0
  388. package/dist/utils/iban-checksum.d.ts +23 -0
  389. package/dist/utils/iban-checksum.d.ts.map +1 -0
  390. package/dist/utils/iban-checksum.js +106 -0
  391. package/dist/utils/iban-checksum.js.map +1 -0
  392. package/dist/utils/index.d.ts +11 -0
  393. package/dist/utils/index.d.ts.map +1 -0
  394. package/dist/utils/index.js +11 -0
  395. package/dist/utils/index.js.map +1 -0
  396. package/dist/utils/json-walk.d.ts +21 -0
  397. package/dist/utils/json-walk.d.ts.map +1 -0
  398. package/dist/utils/json-walk.js +44 -0
  399. package/dist/utils/json-walk.js.map +1 -0
  400. package/dist/utils/luhn.d.ts +17 -0
  401. package/dist/utils/luhn.d.ts.map +1 -0
  402. package/dist/utils/luhn.js +55 -0
  403. package/dist/utils/luhn.js.map +1 -0
  404. package/dist/utils/offsets.d.ts +86 -0
  405. package/dist/utils/offsets.d.ts.map +1 -0
  406. package/dist/utils/offsets.js +124 -0
  407. package/dist/utils/offsets.js.map +1 -0
  408. package/dist/utils/path.d.ts +34 -0
  409. package/dist/utils/path.d.ts.map +1 -0
  410. package/dist/utils/path.js +96 -0
  411. package/dist/utils/path.js.map +1 -0
  412. package/dist/utils/regex.d.ts +11 -0
  413. package/dist/utils/regex.d.ts.map +1 -0
  414. package/dist/utils/regex.js +14 -0
  415. package/dist/utils/regex.js.map +1 -0
  416. package/dist/utils/storage-browser.d.ts +51 -0
  417. package/dist/utils/storage-browser.d.ts.map +1 -0
  418. package/dist/utils/storage-browser.js +381 -0
  419. package/dist/utils/storage-browser.js.map +1 -0
  420. package/dist/utils/storage-node.d.ts +51 -0
  421. package/dist/utils/storage-node.d.ts.map +1 -0
  422. package/dist/utils/storage-node.js +153 -0
  423. package/dist/utils/storage-node.js.map +1 -0
  424. package/dist/utils/storage.browser.d.ts +75 -0
  425. package/dist/utils/storage.browser.d.ts.map +1 -0
  426. package/dist/utils/storage.browser.js +69 -0
  427. package/dist/utils/storage.browser.js.map +1 -0
  428. package/dist/utils/storage.d.ts +73 -0
  429. package/dist/utils/storage.d.ts.map +1 -0
  430. package/dist/utils/storage.js +69 -0
  431. package/dist/utils/storage.js.map +1 -0
  432. package/package.json +148 -0
@@ -0,0 +1,16 @@
1
+ /**
2
+ * UK Postal Code Recognizer
3
+ * Detects syntactically valid UK unit postcodes.
4
+ */
5
+ export declare const UK_POSTAL_CODE_PATTERN: RegExp;
6
+ /**
7
+ * Checks UK postcode syntax. This does not verify that Royal Mail currently
8
+ * assigns the postcode.
9
+ */
10
+ export declare function isValidUKPostalCode(postalCode: string): boolean;
11
+ /**
12
+ * Converts a UK postcode to uppercase with one space before the inward code.
13
+ */
14
+ export declare function normalizeUKPostalCode(postalCode: string): string;
15
+ export declare const ukPostalCodeRecognizer: import("./base.js").Recognizer;
16
+ //# sourceMappingURL=postal-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postal-code.d.ts","sourceRoot":"","sources":["../../src/recognizers/postal-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,eAAO,MAAM,sBAAsB,QAGlC,CAAC;AAOF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,eAAO,MAAM,sBAAsB,gCAOjC,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * UK Postal Code Recognizer
3
+ * Detects syntactically valid UK unit postcodes.
4
+ */
5
+ import { PIIType } from '../types/index.js';
6
+ import { createRegexRecognizer } from './base.js';
7
+ /**
8
+ * UK postcode syntax, including the exceptional GIR 0AA postcode.
9
+ *
10
+ * The outward code uses the letter restrictions from UK government postcode
11
+ * validation guidance. The inward code excludes C, I, K, M, O, and V.
12
+ * Horizontal whitespace is optional so normalized forms such as N164HY are
13
+ * detected without allowing a match to cross a line boundary.
14
+ */
15
+ const UK_POSTAL_CODE_BODY = '(?:GIR[\\t ]*0AA|(?:[A-PR-UWYZ][0-9]{1,2}|[A-PR-UWYZ][A-HK-Y][0-9]{1,2}|[A-PR-UWYZ][0-9][A-HJKPSTUW]|[A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])[\\t ]*[0-9][ABD-HJLNP-UW-Z]{2})';
16
+ export const UK_POSTAL_CODE_PATTERN = new RegExp(`(?<![A-Z0-9])${UK_POSTAL_CODE_BODY}(?![A-Z0-9])`, 'gi');
17
+ const UK_POSTAL_CODE_VALIDATION_PATTERN = new RegExp(`^${UK_POSTAL_CODE_BODY}$`, 'i');
18
+ /**
19
+ * Checks UK postcode syntax. This does not verify that Royal Mail currently
20
+ * assigns the postcode.
21
+ */
22
+ export function isValidUKPostalCode(postalCode) {
23
+ return UK_POSTAL_CODE_VALIDATION_PATTERN.test(postalCode.trim());
24
+ }
25
+ /**
26
+ * Converts a UK postcode to uppercase with one space before the inward code.
27
+ */
28
+ export function normalizeUKPostalCode(postalCode) {
29
+ const compact = postalCode.trim().replace(/[\t ]+/g, '').toUpperCase();
30
+ if (compact.length <= 3)
31
+ return compact;
32
+ return `${compact.slice(0, -3)} ${compact.slice(-3)}`;
33
+ }
34
+ export const ukPostalCodeRecognizer = createRegexRecognizer({
35
+ type: PIIType.POSTAL_CODE,
36
+ name: 'UK Postal Code',
37
+ patterns: [UK_POSTAL_CODE_PATTERN],
38
+ defaultConfidence: 0.95,
39
+ validate: isValidUKPostalCode,
40
+ normalize: normalizeUKPostalCode,
41
+ });
42
+ //# sourceMappingURL=postal-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postal-code.js","sourceRoot":"","sources":["../../src/recognizers/postal-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,mBAAmB,GACvB,8KAA8K,CAAC;AAEjL,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAC9C,gBAAgB,mBAAmB,cAAc,EACjD,IAAI,CACL,CAAC;AAEF,MAAM,iCAAiC,GAAG,IAAI,MAAM,CAClD,IAAI,mBAAmB,GAAG,EAC1B,GAAG,CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;IAC1D,IAAI,EAAE,OAAO,CAAC,WAAW;IACzB,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,CAAC,sBAAsB,CAAC;IAClC,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,qBAAqB;CACjC,CAAC,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Recognizer Registry
3
+ * Central registry for all PII recognizers
4
+ */
5
+ import { PIIType, SpanMatch, AnonymizationPolicy } from '../types/index.js';
6
+ import type { Recognizer } from './base.js';
7
+ /**
8
+ * Registry for managing PII recognizers
9
+ */
10
+ export declare class RecognizerRegistry {
11
+ private recognizers;
12
+ /**
13
+ * Registers a recognizer for a PII type
14
+ */
15
+ register(recognizer: Recognizer): void;
16
+ /**
17
+ * Registers multiple recognizers
18
+ */
19
+ registerAll(recognizers: Recognizer[]): void;
20
+ /**
21
+ * Gets all recognizers for a specific type
22
+ */
23
+ getRecognizers(type: PIIType): Recognizer[];
24
+ /**
25
+ * Gets all registered recognizers
26
+ */
27
+ getAllRecognizers(): Recognizer[];
28
+ /**
29
+ * Gets all registered PII types
30
+ */
31
+ getRegisteredTypes(): PIIType[];
32
+ /**
33
+ * Checks if a recognizer is registered for a type
34
+ */
35
+ hasRecognizer(type: PIIType): boolean;
36
+ /**
37
+ * Removes all recognizers for a type
38
+ */
39
+ unregister(type: PIIType): void;
40
+ /**
41
+ * Clears all recognizers
42
+ */
43
+ clear(): void;
44
+ /**
45
+ * Runs all enabled recognizers on text and returns matches
46
+ * @param text - Text to analyze
47
+ * @param policy - Anonymization policy to determine which types to detect
48
+ */
49
+ findAll(text: string, policy: AnonymizationPolicy): SpanMatch[];
50
+ }
51
+ /**
52
+ * Gets the global recognizer registry (singleton)
53
+ */
54
+ export declare function getGlobalRegistry(): RecognizerRegistry;
55
+ /**
56
+ * Creates a new isolated registry (useful for testing)
57
+ */
58
+ export declare function createRegistry(): RecognizerRegistry;
59
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAyC;IAE5D;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMtC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE;IAI3C;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IAQjC;;OAEG;IACH,kBAAkB,IAAI,OAAO,EAAE;IAI/B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAKrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE;CA0BhE;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,CAKtD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Recognizer Registry
3
+ * Central registry for all PII recognizers
4
+ */
5
+ /**
6
+ * Registry for managing PII recognizers
7
+ */
8
+ export class RecognizerRegistry {
9
+ recognizers = new Map();
10
+ /**
11
+ * Registers a recognizer for a PII type
12
+ */
13
+ register(recognizer) {
14
+ const existing = this.recognizers.get(recognizer.type) ?? [];
15
+ existing.push(recognizer);
16
+ this.recognizers.set(recognizer.type, existing);
17
+ }
18
+ /**
19
+ * Registers multiple recognizers
20
+ */
21
+ registerAll(recognizers) {
22
+ for (const recognizer of recognizers) {
23
+ this.register(recognizer);
24
+ }
25
+ }
26
+ /**
27
+ * Gets all recognizers for a specific type
28
+ */
29
+ getRecognizers(type) {
30
+ return this.recognizers.get(type) ?? [];
31
+ }
32
+ /**
33
+ * Gets all registered recognizers
34
+ */
35
+ getAllRecognizers() {
36
+ const all = [];
37
+ for (const recognizers of this.recognizers.values()) {
38
+ all.push(...recognizers);
39
+ }
40
+ return all;
41
+ }
42
+ /**
43
+ * Gets all registered PII types
44
+ */
45
+ getRegisteredTypes() {
46
+ return Array.from(this.recognizers.keys());
47
+ }
48
+ /**
49
+ * Checks if a recognizer is registered for a type
50
+ */
51
+ hasRecognizer(type) {
52
+ const recognizers = this.recognizers.get(type);
53
+ return recognizers !== undefined && recognizers.length > 0;
54
+ }
55
+ /**
56
+ * Removes all recognizers for a type
57
+ */
58
+ unregister(type) {
59
+ this.recognizers.delete(type);
60
+ }
61
+ /**
62
+ * Clears all recognizers
63
+ */
64
+ clear() {
65
+ this.recognizers.clear();
66
+ }
67
+ /**
68
+ * Runs all enabled recognizers on text and returns matches
69
+ * @param text - Text to analyze
70
+ * @param policy - Anonymization policy to determine which types to detect
71
+ */
72
+ findAll(text, policy) {
73
+ const matches = [];
74
+ for (const [type, recognizers] of this.recognizers) {
75
+ // Skip types not enabled in policy
76
+ if (!policy.enabledTypes.has(type) || !policy.regexEnabledTypes.has(type)) {
77
+ continue;
78
+ }
79
+ // Get confidence threshold for this type
80
+ const threshold = policy.confidenceThresholds.get(type) ?? 0.5;
81
+ for (const recognizer of recognizers) {
82
+ const typeMatches = recognizer.find(text);
83
+ // Filter by confidence threshold
84
+ for (const match of typeMatches) {
85
+ if (match.confidence >= threshold) {
86
+ matches.push(match);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return matches;
92
+ }
93
+ }
94
+ /**
95
+ * Global singleton registry instance
96
+ */
97
+ let globalRegistry = null;
98
+ /**
99
+ * Gets the global recognizer registry (singleton)
100
+ */
101
+ export function getGlobalRegistry() {
102
+ if (globalRegistry === null) {
103
+ globalRegistry = new RecognizerRegistry();
104
+ }
105
+ return globalRegistry;
106
+ }
107
+ /**
108
+ * Creates a new isolated registry (useful for testing)
109
+ */
110
+ export function createRegistry() {
111
+ return new RecognizerRegistry();
112
+ }
113
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API Key Recognizer
3
+ * Detects provider-specific API key patterns
4
+ */
5
+ export declare const apiKeyRecognizer: import("../base.js").Recognizer;
6
+ //# sourceMappingURL=api-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/api-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,gBAAgB,iCA+B3B,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * API Key Recognizer
3
+ * Detects provider-specific API key patterns
4
+ */
5
+ import { createRegexRecognizer } from "../base.js";
6
+ import { PIIType } from "../../types/index.js";
7
+ export const apiKeyRecognizer = createRegexRecognizer({
8
+ type: PIIType.API_KEY,
9
+ name: "API Key",
10
+ defaultConfidence: 0.97,
11
+ patterns: [
12
+ // OpenAI
13
+ /\bsk-proj-[A-Za-z0-9_-]{20,}\b/g,
14
+ /\bsk-[A-Za-z0-9]{20,}\b/g,
15
+ // Anthropic
16
+ /\bsk-ant-[A-Za-z0-9_-]{20,}\b/g,
17
+ // GitHub (PAT, OAuth, App, Installation, Refresh)
18
+ /\bgh[pousr]_[A-Za-z0-9]{36,}\b/g,
19
+ // Stripe
20
+ /\b[sr]k_(?:live|test)_[A-Za-z0-9]{24,}\b/g,
21
+ // Slack bot/user tokens
22
+ /\bxox[bpas]-[0-9]{10,}-[A-Za-z0-9-]+/g,
23
+ // SendGrid
24
+ /\bSG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}\b/g,
25
+ // Twilio
26
+ /\bSK[a-f0-9]{32}\b/g,
27
+ // Mailgun
28
+ /\bkey-[a-f0-9]{32}\b/g,
29
+ // Heroku
30
+ /\b[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\b/g,
31
+ ],
32
+ validate(match) {
33
+ // Heroku-style UUIDs are too generic without context — skip them
34
+ if (/^[a-f0-9]{8}-[a-f0-9]{4}-/.test(match))
35
+ return false;
36
+ // Must be at least 20 chars for non-prefixed patterns
37
+ return match.length >= 20;
38
+ },
39
+ });
40
+ //# sourceMappingURL=api-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/api-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;IACpD,IAAI,EAAE,OAAO,CAAC,OAAO;IACrB,IAAI,EAAE,SAAS;IACf,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE;QACR,SAAS;QACT,iCAAiC;QACjC,0BAA0B;QAC1B,YAAY;QACZ,gCAAgC;QAChC,kDAAkD;QAClD,iCAAiC;QACjC,SAAS;QACT,2CAA2C;QAC3C,wBAAwB;QACxB,uCAAuC;QACvC,WAAW;QACX,+CAA+C;QAC/C,SAAS;QACT,qBAAqB;QACrB,UAAU;QACV,uBAAuB;QACvB,SAAS;QACT,mEAAmE;KACpE;IACD,QAAQ,CAAC,KAAa;QACpB,iEAAiE;QACjE,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1D,sDAAsD;QACtD,OAAO,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * AWS Credentials Recognizer
3
+ * Detects AWS access key IDs (AKIA prefix) and context-dependent secret keys
4
+ */
5
+ import type { Recognizer } from "../base.js";
6
+ export declare const awsCredentialsRecognizer: Recognizer;
7
+ //# sourceMappingURL=aws-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-credentials.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/aws-credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,eAAO,MAAM,wBAAwB,EAAE,UA2DtC,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * AWS Credentials Recognizer
3
+ * Detects AWS access key IDs (AKIA prefix) and context-dependent secret keys
4
+ */
5
+ import { PIIType, DetectionSource } from "../../types/index.js";
6
+ const AWS_ACCESS_KEY_PATTERN = /\bAKIA[A-Z0-9]{16}\b/g;
7
+ const AWS_SECRET_CONTEXT_KEYWORDS = /(?:aws_secret_access_key|secret_access_key|aws_secret|secretaccesskey)/i;
8
+ const AWS_SECRET_KEY_PATTERN = /\b[A-Za-z0-9/+=]{40}\b/g;
9
+ export const awsCredentialsRecognizer = {
10
+ type: PIIType.AWS_CREDENTIALS,
11
+ name: "AWS Credentials",
12
+ defaultConfidence: 0.98,
13
+ find(text) {
14
+ const matches = [];
15
+ const seen = new Set();
16
+ // Always detect AKIA access key IDs (high confidence, distinctive prefix)
17
+ for (const match of text.matchAll(AWS_ACCESS_KEY_PATTERN)) {
18
+ if (match.index === undefined)
19
+ continue;
20
+ const key = `${match.index}:${match.index + match[0].length}`;
21
+ if (seen.has(key))
22
+ continue;
23
+ seen.add(key);
24
+ matches.push({
25
+ type: PIIType.AWS_CREDENTIALS,
26
+ start: match.index,
27
+ end: match.index + match[0].length,
28
+ confidence: 0.98,
29
+ source: DetectionSource.REGEX,
30
+ text: match[0],
31
+ });
32
+ }
33
+ // Only scan for 40-char secret keys if there's context suggesting AWS secrets
34
+ if (AWS_SECRET_CONTEXT_KEYWORDS.test(text)) {
35
+ for (const match of text.matchAll(AWS_SECRET_KEY_PATTERN)) {
36
+ if (match.index === undefined)
37
+ continue;
38
+ const matchText = match[0];
39
+ const key = `${match.index}:${match.index + matchText.length}`;
40
+ if (seen.has(key))
41
+ continue;
42
+ // Must contain mixed case + digits/special to look like a secret
43
+ if (!/[a-z]/.test(matchText) || !/[A-Z]/.test(matchText))
44
+ continue;
45
+ if (!/[0-9/+=]/.test(matchText))
46
+ continue;
47
+ seen.add(key);
48
+ matches.push({
49
+ type: PIIType.AWS_CREDENTIALS,
50
+ start: match.index,
51
+ end: match.index + matchText.length,
52
+ confidence: 0.85,
53
+ source: DetectionSource.REGEX,
54
+ text: matchText,
55
+ });
56
+ }
57
+ }
58
+ return matches;
59
+ },
60
+ validate(match) {
61
+ // AKIA keys are always valid
62
+ if (match.startsWith("AKIA") && match.length === 20)
63
+ return true;
64
+ // Secret keys must be exactly 40 chars
65
+ return match.length === 40;
66
+ },
67
+ };
68
+ //# sourceMappingURL=aws-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-credentials.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/aws-credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGhF,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAEvD,MAAM,2BAA2B,GAAG,yEAAyE,CAAC;AAE9G,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAEzD,MAAM,CAAC,MAAM,wBAAwB,GAAe;IAClD,IAAI,EAAE,OAAO,CAAC,eAAe;IAC7B,IAAI,EAAE,iBAAiB;IACvB,iBAAiB,EAAE,IAAI;IAEvB,IAAI,CAAC,IAAY;QACf,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,0EAA0E;QAC1E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC1D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gBAAE,SAAS;YACxC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEd,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO,CAAC,eAAe;gBAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBAClC,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,eAAe,CAAC,KAAK;gBAC7B,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aACf,CAAC,CAAC;QACL,CAAC;QAED,8EAA8E;QAC9E,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC1D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAAE,SAAS;gBACxC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAE5B,iEAAiE;gBACjE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;oBAAE,SAAS;gBACnE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;oBAAE,SAAS;gBAE1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO,CAAC,eAAe;oBAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM;oBACnC,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,eAAe,CAAC,KAAK;oBAC7B,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,6BAA6B;QAC7B,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACjE,uCAAuC;QACvC,OAAO,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Config Secret Recognizer
3
+ * Detects key-value secrets in JSON, YAML, and TOML
4
+ */
5
+ import type { Recognizer } from "../base.js";
6
+ export declare function createConfigSecretRecognizer(minValueLength?: number, extraKeyPatterns?: RegExp[]): Recognizer;
7
+ export declare const configSecretRecognizer: Recognizer;
8
+ //# sourceMappingURL=config-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-secret.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/config-secret.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAc7C,wBAAgB,4BAA4B,CAC1C,cAAc,GAAE,MAA2B,EAC3C,gBAAgB,GAAE,MAAM,EAAO,GAC9B,UAAU,CA8CZ;AAED,eAAO,MAAM,sBAAsB,YAAiC,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Config Secret Recognizer
3
+ * Detects key-value secrets in JSON, YAML, and TOML
4
+ */
5
+ import { PIIType, DetectionSource } from "../../types/index.js";
6
+ import { isSecretKeyName } from "./key-patterns.js";
7
+ // JSON: "key": "value" or 'key': 'value'
8
+ const JSON_SECRET = /["']([a-zA-Z_][a-zA-Z0-9_.-]*)["']\s*:\s*["']([^"'\n]{4,})["']/g;
9
+ // YAML: key: value (unquoted or quoted)
10
+ const YAML_SECRET = /^[ \t]*([a-zA-Z_][a-zA-Z0-9_.-]*)\s*:\s*["']?([^\n"'#]{4,})["']?$/gm;
11
+ // TOML: key = "value"
12
+ const TOML_SECRET = /^[ \t]*([a-zA-Z_][a-zA-Z0-9_.-]*)\s*=\s*["']([^"'\n]{4,})["']$/gm;
13
+ const DEFAULT_MIN_LENGTH = 4;
14
+ export function createConfigSecretRecognizer(minValueLength = DEFAULT_MIN_LENGTH, extraKeyPatterns = []) {
15
+ return {
16
+ type: PIIType.CONFIG_SECRET,
17
+ name: "Config Secret",
18
+ defaultConfidence: 0.85,
19
+ find(text) {
20
+ const matches = [];
21
+ const seen = new Set();
22
+ const patterns = [JSON_SECRET, YAML_SECRET, TOML_SECRET];
23
+ for (const pattern of patterns) {
24
+ const p = new RegExp(pattern.source, pattern.flags);
25
+ for (const match of text.matchAll(p)) {
26
+ if (match.index === undefined)
27
+ continue;
28
+ const key = match[1];
29
+ const value = match[2].trim();
30
+ const keyIsSecret = isSecretKeyName(key)
31
+ || extraKeyPatterns.some((pat) => pat.test(key));
32
+ if (!keyIsSecret)
33
+ continue;
34
+ if (value.length < minValueLength)
35
+ continue;
36
+ // Find exact position of value in the matched text
37
+ const fullMatch = match[0];
38
+ const valueStartInMatch = fullMatch.lastIndexOf(value);
39
+ const valueStart = match.index + valueStartInMatch;
40
+ const spanKey = `${valueStart}:${valueStart + value.length}`;
41
+ if (seen.has(spanKey))
42
+ continue;
43
+ seen.add(spanKey);
44
+ matches.push({
45
+ type: PIIType.CONFIG_SECRET,
46
+ start: valueStart,
47
+ end: valueStart + value.length,
48
+ confidence: 0.85,
49
+ source: DetectionSource.REGEX,
50
+ text: value,
51
+ });
52
+ }
53
+ }
54
+ return matches;
55
+ },
56
+ };
57
+ }
58
+ export const configSecretRecognizer = createConfigSecretRecognizer();
59
+ //# sourceMappingURL=config-secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-secret.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/config-secret.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,yCAAyC;AACzC,MAAM,WAAW,GAAG,iEAAiE,CAAC;AAEtF,wCAAwC;AACxC,MAAM,WAAW,GAAG,qEAAqE,CAAC;AAE1F,sBAAsB;AACtB,MAAM,WAAW,GAAG,kEAAkE,CAAC;AAEvF,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,UAAU,4BAA4B,CAC1C,iBAAyB,kBAAkB,EAC3C,mBAA6B,EAAE;IAE/B,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,aAAa;QAC3B,IAAI,EAAE,eAAe;QACrB,iBAAiB,EAAE,IAAI;QAEvB,IAAI,CAAC,IAAY;YACf,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAE/B,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAEzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;wBAAE,SAAS;oBACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;oBAE/B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC;2BACnC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,CAAC,WAAW;wBAAE,SAAS;oBAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc;wBAAE,SAAS;oBAE5C,mDAAmD;oBACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC;oBACnD,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;wBAAE,SAAS;oBAChC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAElB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,OAAO,CAAC,aAAa;wBAC3B,KAAK,EAAE,UAAU;wBACjB,GAAG,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM;wBAC9B,UAAU,EAAE,IAAI;wBAChB,MAAM,EAAE,eAAe,CAAC,KAAK;wBAC7B,IAAI,EAAE,KAAK;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Connection String Recognizer
3
+ * Detects database/service URIs with embedded credentials
4
+ */
5
+ export declare const connectionStringRecognizer: import("../base.js").Recognizer;
6
+ //# sourceMappingURL=connection-string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-string.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/connection-string.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,eAAO,MAAM,0BAA0B,iCA2BrC,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Connection String Recognizer
3
+ * Detects database/service URIs with embedded credentials
4
+ */
5
+ import { createRegexRecognizer } from "../base.js";
6
+ import { PIIType } from "../../types/index.js";
7
+ const PLACEHOLDER_PASSWORDS = new Set([
8
+ "password", "pass", "changeme", "secret", "xxx", "yyy",
9
+ "your-password", "your_password", "example", "<password>",
10
+ ]);
11
+ export const connectionStringRecognizer = createRegexRecognizer({
12
+ type: PIIType.CONNECTION_STRING,
13
+ name: "Connection String",
14
+ defaultConfidence: 0.93,
15
+ patterns: [
16
+ // postgres://user:password@host/db
17
+ /\b(?:postgres(?:ql)?|mysql|mariadb):\/\/[^\s:]+:[^\s@]+@[^\s]+/g,
18
+ // mongodb+srv://user:password@host/db
19
+ /\bmongodb(?:\+srv)?:\/\/[^\s:]+:[^\s@]+@[^\s]+/g,
20
+ // redis://user:password@host:port or redis://:password@host:port
21
+ /\brediss?:\/\/(?:[^\s:]*:)?[^\s@]+@[^\s]+/g,
22
+ // amqp://user:password@host:port
23
+ /\bamqps?:\/\/[^\s:]+:[^\s@]+@[^\s]+/g,
24
+ ],
25
+ validate(match) {
26
+ // Extract password portion (between first : after // and @)
27
+ const credMatch = match.match(/:\/\/[^:]*:([^@]+)@/);
28
+ if (credMatch === null)
29
+ return false;
30
+ const password = credMatch[1];
31
+ // Reject placeholder passwords
32
+ if (PLACEHOLDER_PASSWORDS.has(password.toLowerCase()))
33
+ return false;
34
+ // Reject very short passwords (likely placeholders)
35
+ if (password.length < 4)
36
+ return false;
37
+ return true;
38
+ },
39
+ });
40
+ //# sourceMappingURL=connection-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-string.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/connection-string.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK;IACtD,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;IAC9D,IAAI,EAAE,OAAO,CAAC,iBAAiB;IAC/B,IAAI,EAAE,mBAAmB;IACzB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE;QACR,mCAAmC;QACnC,iEAAiE;QACjE,sCAAsC;QACtC,iDAAiD;QACjD,iEAAiE;QACjE,4CAA4C;QAC5C,iCAAiC;QACjC,sCAAsC;KACvC;IACD,QAAQ,CAAC,KAAa;QACpB,4DAA4D;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrD,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAErC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAC/B,+BAA+B;QAC/B,IAAI,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtC,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Environment Variable Secret Recognizer
3
+ * Detects secrets in .env-style KEY=VALUE lines
4
+ */
5
+ import type { Recognizer } from "../base.js";
6
+ export declare function createEnvVarSecretRecognizer(minValueLength?: number, extraKeyPatterns?: RegExp[]): Recognizer;
7
+ export declare const envVarSecretRecognizer: Recognizer;
8
+ //# sourceMappingURL=env-var.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-var.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/env-var.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAa7C,wBAAgB,4BAA4B,CAC1C,cAAc,GAAE,MAA2B,EAC3C,gBAAgB,GAAE,MAAM,EAAO,GAC9B,UAAU,CAyCZ;AAED,eAAO,MAAM,sBAAsB,YAAiC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Environment Variable Secret Recognizer
3
+ * Detects secrets in .env-style KEY=VALUE lines
4
+ */
5
+ import { PIIType, DetectionSource } from "../../types/index.js";
6
+ import { isSecretKeyName } from "./key-patterns.js";
7
+ const ENV_VAR_LINE = /^[ \t]*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)[ \t]*=[ \t]*["']?(.+?)["']?$/gm;
8
+ const PLACEHOLDER_VALUES = new Set([
9
+ "changeme", "your-api-key-here", "your_api_key_here",
10
+ "xxx", "yyy", "zzz", "todo", "fixme", "replace_me",
11
+ "example", "test", "dummy", "placeholder",
12
+ ]);
13
+ const DEFAULT_MIN_LENGTH = 4;
14
+ export function createEnvVarSecretRecognizer(minValueLength = DEFAULT_MIN_LENGTH, extraKeyPatterns = []) {
15
+ return {
16
+ type: PIIType.ENV_VAR_SECRET,
17
+ name: "Environment Variable Secret",
18
+ defaultConfidence: 0.88,
19
+ find(text) {
20
+ const matches = [];
21
+ for (const match of text.matchAll(ENV_VAR_LINE)) {
22
+ if (match.index === undefined)
23
+ continue;
24
+ const key = match[1];
25
+ const value = match[2];
26
+ // Check if key name suggests a secret
27
+ const keyIsSecret = isSecretKeyName(key)
28
+ || extraKeyPatterns.some((p) => p.test(key));
29
+ if (!keyIsSecret)
30
+ continue;
31
+ // Filter out short or placeholder values
32
+ if (value.length < minValueLength)
33
+ continue;
34
+ if (PLACEHOLDER_VALUES.has(value.toLowerCase()))
35
+ continue;
36
+ // Span covers the VALUE portion only
37
+ const fullLine = match[0];
38
+ const valueStartInLine = fullLine.lastIndexOf(value);
39
+ const valueStart = match.index + valueStartInLine;
40
+ matches.push({
41
+ type: PIIType.ENV_VAR_SECRET,
42
+ start: valueStart,
43
+ end: valueStart + value.length,
44
+ confidence: 0.88,
45
+ source: DetectionSource.REGEX,
46
+ text: value,
47
+ });
48
+ }
49
+ return matches;
50
+ },
51
+ };
52
+ }
53
+ export const envVarSecretRecognizer = createEnvVarSecretRecognizer();
54
+ //# sourceMappingURL=env-var.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-var.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/env-var.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,YAAY,GAAG,8EAA8E,CAAC;AAEpG,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,UAAU,EAAE,mBAAmB,EAAE,mBAAmB;IACpD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY;IAClD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAC1C,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,UAAU,4BAA4B,CAC1C,iBAAyB,kBAAkB,EAC3C,mBAA6B,EAAE;IAE/B,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,cAAc;QAC5B,IAAI,EAAE,6BAA6B;QACnC,iBAAiB,EAAE,IAAI;QAEvB,IAAI,CAAC,IAAY;YACf,MAAM,OAAO,GAAgB,EAAE,CAAC;YAEhC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAAE,SAAS;gBACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBAExB,sCAAsC;gBACtC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC;uBACnC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,WAAW;oBAAE,SAAS;gBAE3B,yCAAyC;gBACzC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc;oBAAE,SAAS;gBAC5C,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAAE,SAAS;gBAE1D,qCAAqC;gBACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC;gBAElD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO,CAAC,cAAc;oBAC5B,KAAK,EAAE,UAAU;oBACjB,GAAG,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM;oBAC9B,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,eAAe,CAAC,KAAK;oBAC7B,IAAI,EAAE,KAAK;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Secret Recognizers Module
3
+ * Exports all secret/credential recognizers
4
+ */
5
+ import type { Recognizer } from "../base.js";
6
+ export { apiKeyRecognizer } from "./api-key.js";
7
+ export { privateKeyRecognizer } from "./private-key.js";
8
+ export { jwtRecognizer } from "./jwt.js";
9
+ export { connectionStringRecognizer } from "./connection-string.js";
10
+ export { awsCredentialsRecognizer } from "./aws-credentials.js";
11
+ export { envVarSecretRecognizer, createEnvVarSecretRecognizer } from "./env-var.js";
12
+ export { configSecretRecognizer, createConfigSecretRecognizer } from "./config-secret.js";
13
+ export { createLiteralValueRecognizer } from "./literal-value.js";
14
+ export { isSecretKeyName } from "./key-patterns.js";
15
+ /**
16
+ * Creates all secret recognizers
17
+ */
18
+ export declare function createSecretRecognizers(options?: {
19
+ secretKeyPatterns?: RegExp[];
20
+ minValueLength?: number;
21
+ }): Recognizer[];
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAChD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,UAAU,EAAE,CAkBf"}