clawsec 0.0.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.
Files changed (361) hide show
  1. package/README.md +560 -0
  2. package/dist/bin/clawsec.d.ts +7 -0
  3. package/dist/bin/clawsec.d.ts.map +1 -0
  4. package/dist/bin/clawsec.js +12 -0
  5. package/dist/bin/clawsec.js.map +1 -0
  6. package/dist/src/actions/block.d.ts +22 -0
  7. package/dist/src/actions/block.d.ts.map +1 -0
  8. package/dist/src/actions/block.js +83 -0
  9. package/dist/src/actions/block.js.map +1 -0
  10. package/dist/src/actions/confirm.d.ts +35 -0
  11. package/dist/src/actions/confirm.d.ts.map +1 -0
  12. package/dist/src/actions/confirm.js +156 -0
  13. package/dist/src/actions/confirm.js.map +1 -0
  14. package/dist/src/actions/executor.d.ts +64 -0
  15. package/dist/src/actions/executor.d.ts.map +1 -0
  16. package/dist/src/actions/executor.js +114 -0
  17. package/dist/src/actions/executor.js.map +1 -0
  18. package/dist/src/actions/index.d.ts +13 -0
  19. package/dist/src/actions/index.d.ts.map +1 -0
  20. package/dist/src/actions/index.js +15 -0
  21. package/dist/src/actions/index.js.map +1 -0
  22. package/dist/src/actions/log.d.ts +19 -0
  23. package/dist/src/actions/log.d.ts.map +1 -0
  24. package/dist/src/actions/log.js +63 -0
  25. package/dist/src/actions/log.js.map +1 -0
  26. package/dist/src/actions/types.d.ts +85 -0
  27. package/dist/src/actions/types.d.ts.map +1 -0
  28. package/dist/src/actions/types.js +78 -0
  29. package/dist/src/actions/types.js.map +1 -0
  30. package/dist/src/actions/warn.d.ts +22 -0
  31. package/dist/src/actions/warn.d.ts.map +1 -0
  32. package/dist/src/actions/warn.js +84 -0
  33. package/dist/src/actions/warn.js.map +1 -0
  34. package/dist/src/approval/agent-confirm.d.ts +104 -0
  35. package/dist/src/approval/agent-confirm.d.ts.map +1 -0
  36. package/dist/src/approval/agent-confirm.js +173 -0
  37. package/dist/src/approval/agent-confirm.js.map +1 -0
  38. package/dist/src/approval/index.d.ts +14 -0
  39. package/dist/src/approval/index.d.ts.map +1 -0
  40. package/dist/src/approval/index.js +9 -0
  41. package/dist/src/approval/index.js.map +1 -0
  42. package/dist/src/approval/native.d.ts +56 -0
  43. package/dist/src/approval/native.d.ts.map +1 -0
  44. package/dist/src/approval/native.js +196 -0
  45. package/dist/src/approval/native.js.map +1 -0
  46. package/dist/src/approval/store.d.ts +88 -0
  47. package/dist/src/approval/store.d.ts.map +1 -0
  48. package/dist/src/approval/store.js +192 -0
  49. package/dist/src/approval/store.js.map +1 -0
  50. package/dist/src/approval/types.d.ts +119 -0
  51. package/dist/src/approval/types.d.ts.map +1 -0
  52. package/dist/src/approval/types.js +6 -0
  53. package/dist/src/approval/types.js.map +1 -0
  54. package/dist/src/approval/webhook.d.ts +170 -0
  55. package/dist/src/approval/webhook.d.ts.map +1 -0
  56. package/dist/src/approval/webhook.js +362 -0
  57. package/dist/src/approval/webhook.js.map +1 -0
  58. package/dist/src/cli/commands/audit.d.ts +43 -0
  59. package/dist/src/cli/commands/audit.d.ts.map +1 -0
  60. package/dist/src/cli/commands/audit.js +115 -0
  61. package/dist/src/cli/commands/audit.js.map +1 -0
  62. package/dist/src/cli/commands/feedback.d.ts +27 -0
  63. package/dist/src/cli/commands/feedback.d.ts.map +1 -0
  64. package/dist/src/cli/commands/feedback.js +228 -0
  65. package/dist/src/cli/commands/feedback.js.map +1 -0
  66. package/dist/src/cli/commands/index.d.ts +11 -0
  67. package/dist/src/cli/commands/index.d.ts.map +1 -0
  68. package/dist/src/cli/commands/index.js +13 -0
  69. package/dist/src/cli/commands/index.js.map +1 -0
  70. package/dist/src/cli/commands/status.d.ts +20 -0
  71. package/dist/src/cli/commands/status.d.ts.map +1 -0
  72. package/dist/src/cli/commands/status.js +122 -0
  73. package/dist/src/cli/commands/status.js.map +1 -0
  74. package/dist/src/cli/commands/test.d.ts +23 -0
  75. package/dist/src/cli/commands/test.d.ts.map +1 -0
  76. package/dist/src/cli/commands/test.js +134 -0
  77. package/dist/src/cli/commands/test.js.map +1 -0
  78. package/dist/src/cli/commands/types.d.ts +81 -0
  79. package/dist/src/cli/commands/types.d.ts.map +1 -0
  80. package/dist/src/cli/commands/types.js +6 -0
  81. package/dist/src/cli/commands/types.js.map +1 -0
  82. package/dist/src/cli/index.d.ts +17 -0
  83. package/dist/src/cli/index.d.ts.map +1 -0
  84. package/dist/src/cli/index.js +267 -0
  85. package/dist/src/cli/index.js.map +1 -0
  86. package/dist/src/config/defaults.d.ts +20 -0
  87. package/dist/src/config/defaults.d.ts.map +1 -0
  88. package/dist/src/config/defaults.js +123 -0
  89. package/dist/src/config/defaults.js.map +1 -0
  90. package/dist/src/config/index.d.ts +8 -0
  91. package/dist/src/config/index.d.ts.map +1 -0
  92. package/dist/src/config/index.js +41 -0
  93. package/dist/src/config/index.js.map +1 -0
  94. package/dist/src/config/loader.d.ts +99 -0
  95. package/dist/src/config/loader.d.ts.map +1 -0
  96. package/dist/src/config/loader.js +242 -0
  97. package/dist/src/config/loader.js.map +1 -0
  98. package/dist/src/config/schema.d.ts +627 -0
  99. package/dist/src/config/schema.d.ts.map +1 -0
  100. package/dist/src/config/schema.js +585 -0
  101. package/dist/src/config/schema.js.map +1 -0
  102. package/dist/src/detectors/destructive/cloud-detector.d.ts +51 -0
  103. package/dist/src/detectors/destructive/cloud-detector.d.ts.map +1 -0
  104. package/dist/src/detectors/destructive/cloud-detector.js +556 -0
  105. package/dist/src/detectors/destructive/cloud-detector.js.map +1 -0
  106. package/dist/src/detectors/destructive/code-detector.d.ts +59 -0
  107. package/dist/src/detectors/destructive/code-detector.d.ts.map +1 -0
  108. package/dist/src/detectors/destructive/code-detector.js +558 -0
  109. package/dist/src/detectors/destructive/code-detector.js.map +1 -0
  110. package/dist/src/detectors/destructive/index.d.ts +54 -0
  111. package/dist/src/detectors/destructive/index.d.ts.map +1 -0
  112. package/dist/src/detectors/destructive/index.js +168 -0
  113. package/dist/src/detectors/destructive/index.js.map +1 -0
  114. package/dist/src/detectors/destructive/shell-detector.d.ts +43 -0
  115. package/dist/src/detectors/destructive/shell-detector.d.ts.map +1 -0
  116. package/dist/src/detectors/destructive/shell-detector.js +302 -0
  117. package/dist/src/detectors/destructive/shell-detector.js.map +1 -0
  118. package/dist/src/detectors/destructive/types.d.ts +143 -0
  119. package/dist/src/detectors/destructive/types.d.ts.map +1 -0
  120. package/dist/src/detectors/destructive/types.js +6 -0
  121. package/dist/src/detectors/destructive/types.js.map +1 -0
  122. package/dist/src/detectors/exfiltration/cloud-detector.d.ts +51 -0
  123. package/dist/src/detectors/exfiltration/cloud-detector.d.ts.map +1 -0
  124. package/dist/src/detectors/exfiltration/cloud-detector.js +427 -0
  125. package/dist/src/detectors/exfiltration/cloud-detector.js.map +1 -0
  126. package/dist/src/detectors/exfiltration/http-detector.d.ts +47 -0
  127. package/dist/src/detectors/exfiltration/http-detector.d.ts.map +1 -0
  128. package/dist/src/detectors/exfiltration/http-detector.js +429 -0
  129. package/dist/src/detectors/exfiltration/http-detector.js.map +1 -0
  130. package/dist/src/detectors/exfiltration/index.d.ts +44 -0
  131. package/dist/src/detectors/exfiltration/index.d.ts.map +1 -0
  132. package/dist/src/detectors/exfiltration/index.js +118 -0
  133. package/dist/src/detectors/exfiltration/index.js.map +1 -0
  134. package/dist/src/detectors/exfiltration/network-detector.d.ts +55 -0
  135. package/dist/src/detectors/exfiltration/network-detector.d.ts.map +1 -0
  136. package/dist/src/detectors/exfiltration/network-detector.js +504 -0
  137. package/dist/src/detectors/exfiltration/network-detector.js.map +1 -0
  138. package/dist/src/detectors/exfiltration/types.d.ts +139 -0
  139. package/dist/src/detectors/exfiltration/types.d.ts.map +1 -0
  140. package/dist/src/detectors/exfiltration/types.js +6 -0
  141. package/dist/src/detectors/exfiltration/types.js.map +1 -0
  142. package/dist/src/detectors/purchase/domain-detector.d.ts +44 -0
  143. package/dist/src/detectors/purchase/domain-detector.d.ts.map +1 -0
  144. package/dist/src/detectors/purchase/domain-detector.js +296 -0
  145. package/dist/src/detectors/purchase/domain-detector.js.map +1 -0
  146. package/dist/src/detectors/purchase/form-detector.d.ts +27 -0
  147. package/dist/src/detectors/purchase/form-detector.d.ts.map +1 -0
  148. package/dist/src/detectors/purchase/form-detector.js +344 -0
  149. package/dist/src/detectors/purchase/form-detector.js.map +1 -0
  150. package/dist/src/detectors/purchase/index.d.ts +65 -0
  151. package/dist/src/detectors/purchase/index.d.ts.map +1 -0
  152. package/dist/src/detectors/purchase/index.js +216 -0
  153. package/dist/src/detectors/purchase/index.js.map +1 -0
  154. package/dist/src/detectors/purchase/spend-tracker.d.ts +132 -0
  155. package/dist/src/detectors/purchase/spend-tracker.d.ts.map +1 -0
  156. package/dist/src/detectors/purchase/spend-tracker.js +313 -0
  157. package/dist/src/detectors/purchase/spend-tracker.js.map +1 -0
  158. package/dist/src/detectors/purchase/types.d.ts +139 -0
  159. package/dist/src/detectors/purchase/types.d.ts.map +1 -0
  160. package/dist/src/detectors/purchase/types.js +6 -0
  161. package/dist/src/detectors/purchase/types.js.map +1 -0
  162. package/dist/src/detectors/purchase/url-detector.d.ts +31 -0
  163. package/dist/src/detectors/purchase/url-detector.d.ts.map +1 -0
  164. package/dist/src/detectors/purchase/url-detector.js +292 -0
  165. package/dist/src/detectors/purchase/url-detector.js.map +1 -0
  166. package/dist/src/detectors/secrets/api-key-detector.d.ts +30 -0
  167. package/dist/src/detectors/secrets/api-key-detector.d.ts.map +1 -0
  168. package/dist/src/detectors/secrets/api-key-detector.js +297 -0
  169. package/dist/src/detectors/secrets/api-key-detector.js.map +1 -0
  170. package/dist/src/detectors/secrets/index.d.ts +43 -0
  171. package/dist/src/detectors/secrets/index.d.ts.map +1 -0
  172. package/dist/src/detectors/secrets/index.js +261 -0
  173. package/dist/src/detectors/secrets/index.js.map +1 -0
  174. package/dist/src/detectors/secrets/pii-detector.d.ts +54 -0
  175. package/dist/src/detectors/secrets/pii-detector.d.ts.map +1 -0
  176. package/dist/src/detectors/secrets/pii-detector.js +286 -0
  177. package/dist/src/detectors/secrets/pii-detector.js.map +1 -0
  178. package/dist/src/detectors/secrets/token-detector.d.ts +51 -0
  179. package/dist/src/detectors/secrets/token-detector.d.ts.map +1 -0
  180. package/dist/src/detectors/secrets/token-detector.js +233 -0
  181. package/dist/src/detectors/secrets/token-detector.js.map +1 -0
  182. package/dist/src/detectors/secrets/types.d.ts +157 -0
  183. package/dist/src/detectors/secrets/types.d.ts.map +1 -0
  184. package/dist/src/detectors/secrets/types.js +6 -0
  185. package/dist/src/detectors/secrets/types.js.map +1 -0
  186. package/dist/src/detectors/website/category-detector.d.ts +22 -0
  187. package/dist/src/detectors/website/category-detector.d.ts.map +1 -0
  188. package/dist/src/detectors/website/category-detector.js +162 -0
  189. package/dist/src/detectors/website/category-detector.js.map +1 -0
  190. package/dist/src/detectors/website/index.d.ts +53 -0
  191. package/dist/src/detectors/website/index.d.ts.map +1 -0
  192. package/dist/src/detectors/website/index.js +232 -0
  193. package/dist/src/detectors/website/index.js.map +1 -0
  194. package/dist/src/detectors/website/pattern-matcher.d.ts +33 -0
  195. package/dist/src/detectors/website/pattern-matcher.d.ts.map +1 -0
  196. package/dist/src/detectors/website/pattern-matcher.js +121 -0
  197. package/dist/src/detectors/website/pattern-matcher.js.map +1 -0
  198. package/dist/src/detectors/website/types.d.ts +105 -0
  199. package/dist/src/detectors/website/types.d.ts.map +1 -0
  200. package/dist/src/detectors/website/types.js +6 -0
  201. package/dist/src/detectors/website/types.js.map +1 -0
  202. package/dist/src/engine/analyzer.d.ts +87 -0
  203. package/dist/src/engine/analyzer.d.ts.map +1 -0
  204. package/dist/src/engine/analyzer.js +427 -0
  205. package/dist/src/engine/analyzer.js.map +1 -0
  206. package/dist/src/engine/cache.d.ts +80 -0
  207. package/dist/src/engine/cache.d.ts.map +1 -0
  208. package/dist/src/engine/cache.js +167 -0
  209. package/dist/src/engine/cache.js.map +1 -0
  210. package/dist/src/engine/index.d.ts +11 -0
  211. package/dist/src/engine/index.d.ts.map +1 -0
  212. package/dist/src/engine/index.js +11 -0
  213. package/dist/src/engine/index.js.map +1 -0
  214. package/dist/src/engine/llm-client.d.ts +210 -0
  215. package/dist/src/engine/llm-client.d.ts.map +1 -0
  216. package/dist/src/engine/llm-client.js +506 -0
  217. package/dist/src/engine/llm-client.js.map +1 -0
  218. package/dist/src/engine/types.d.ts +163 -0
  219. package/dist/src/engine/types.d.ts.map +1 -0
  220. package/dist/src/engine/types.js +21 -0
  221. package/dist/src/engine/types.js.map +1 -0
  222. package/dist/src/feedback/index.d.ts +9 -0
  223. package/dist/src/feedback/index.d.ts.map +1 -0
  224. package/dist/src/feedback/index.js +8 -0
  225. package/dist/src/feedback/index.js.map +1 -0
  226. package/dist/src/feedback/learner.d.ts +222 -0
  227. package/dist/src/feedback/learner.d.ts.map +1 -0
  228. package/dist/src/feedback/learner.js +401 -0
  229. package/dist/src/feedback/learner.js.map +1 -0
  230. package/dist/src/feedback/store.d.ts +113 -0
  231. package/dist/src/feedback/store.d.ts.map +1 -0
  232. package/dist/src/feedback/store.js +228 -0
  233. package/dist/src/feedback/store.js.map +1 -0
  234. package/dist/src/feedback/types.d.ts +126 -0
  235. package/dist/src/feedback/types.d.ts.map +1 -0
  236. package/dist/src/feedback/types.js +6 -0
  237. package/dist/src/feedback/types.js.map +1 -0
  238. package/dist/src/hooks/before-agent-start/handler.d.ts +37 -0
  239. package/dist/src/hooks/before-agent-start/handler.d.ts.map +1 -0
  240. package/dist/src/hooks/before-agent-start/handler.js +109 -0
  241. package/dist/src/hooks/before-agent-start/handler.js.map +1 -0
  242. package/dist/src/hooks/before-agent-start/index.d.ts +8 -0
  243. package/dist/src/hooks/before-agent-start/index.d.ts.map +1 -0
  244. package/dist/src/hooks/before-agent-start/index.js +7 -0
  245. package/dist/src/hooks/before-agent-start/index.js.map +1 -0
  246. package/dist/src/hooks/before-agent-start/prompts.d.ts +48 -0
  247. package/dist/src/hooks/before-agent-start/prompts.d.ts.map +1 -0
  248. package/dist/src/hooks/before-agent-start/prompts.js +103 -0
  249. package/dist/src/hooks/before-agent-start/prompts.js.map +1 -0
  250. package/dist/src/hooks/before-tool-call/handler.d.ts +42 -0
  251. package/dist/src/hooks/before-tool-call/handler.d.ts.map +1 -0
  252. package/dist/src/hooks/before-tool-call/handler.js +226 -0
  253. package/dist/src/hooks/before-tool-call/handler.js.map +1 -0
  254. package/dist/src/hooks/before-tool-call/index.d.ts +7 -0
  255. package/dist/src/hooks/before-tool-call/index.d.ts.map +1 -0
  256. package/dist/src/hooks/before-tool-call/index.js +6 -0
  257. package/dist/src/hooks/before-tool-call/index.js.map +1 -0
  258. package/dist/src/hooks/tool-result-persist/filter.d.ts +72 -0
  259. package/dist/src/hooks/tool-result-persist/filter.d.ts.map +1 -0
  260. package/dist/src/hooks/tool-result-persist/filter.js +305 -0
  261. package/dist/src/hooks/tool-result-persist/filter.js.map +1 -0
  262. package/dist/src/hooks/tool-result-persist/handler.d.ts +49 -0
  263. package/dist/src/hooks/tool-result-persist/handler.d.ts.map +1 -0
  264. package/dist/src/hooks/tool-result-persist/handler.js +217 -0
  265. package/dist/src/hooks/tool-result-persist/handler.js.map +1 -0
  266. package/dist/src/hooks/tool-result-persist/index.d.ts +11 -0
  267. package/dist/src/hooks/tool-result-persist/index.d.ts.map +1 -0
  268. package/dist/src/hooks/tool-result-persist/index.js +11 -0
  269. package/dist/src/hooks/tool-result-persist/index.js.map +1 -0
  270. package/dist/src/index.d.ts +256 -0
  271. package/dist/src/index.d.ts.map +1 -0
  272. package/dist/src/index.js +222 -0
  273. package/dist/src/index.js.map +1 -0
  274. package/dist/src/notifications/discord.d.ts +10 -0
  275. package/dist/src/notifications/discord.d.ts.map +1 -0
  276. package/dist/src/notifications/discord.js +218 -0
  277. package/dist/src/notifications/discord.js.map +1 -0
  278. package/dist/src/notifications/index.d.ts +37 -0
  279. package/dist/src/notifications/index.d.ts.map +1 -0
  280. package/dist/src/notifications/index.js +68 -0
  281. package/dist/src/notifications/index.js.map +1 -0
  282. package/dist/src/notifications/slack.d.ts +10 -0
  283. package/dist/src/notifications/slack.d.ts.map +1 -0
  284. package/dist/src/notifications/slack.js +218 -0
  285. package/dist/src/notifications/slack.js.map +1 -0
  286. package/dist/src/notifications/telegram.d.ts +10 -0
  287. package/dist/src/notifications/telegram.d.ts.map +1 -0
  288. package/dist/src/notifications/telegram.js +242 -0
  289. package/dist/src/notifications/telegram.js.map +1 -0
  290. package/dist/src/notifications/types.d.ts +119 -0
  291. package/dist/src/notifications/types.d.ts.map +1 -0
  292. package/dist/src/notifications/types.js +6 -0
  293. package/dist/src/notifications/types.js.map +1 -0
  294. package/dist/src/proxy/index.d.ts +8 -0
  295. package/dist/src/proxy/index.d.ts.map +1 -0
  296. package/dist/src/proxy/index.js +9 -0
  297. package/dist/src/proxy/index.js.map +1 -0
  298. package/dist/src/proxy/middleware.d.ts +55 -0
  299. package/dist/src/proxy/middleware.d.ts.map +1 -0
  300. package/dist/src/proxy/middleware.js +215 -0
  301. package/dist/src/proxy/middleware.js.map +1 -0
  302. package/dist/src/proxy/server.d.ts +57 -0
  303. package/dist/src/proxy/server.d.ts.map +1 -0
  304. package/dist/src/proxy/server.js +298 -0
  305. package/dist/src/proxy/server.js.map +1 -0
  306. package/dist/src/proxy/types.d.ts +136 -0
  307. package/dist/src/proxy/types.d.ts.map +1 -0
  308. package/dist/src/proxy/types.js +6 -0
  309. package/dist/src/proxy/types.js.map +1 -0
  310. package/dist/src/sanitization/index.d.ts +10 -0
  311. package/dist/src/sanitization/index.d.ts.map +1 -0
  312. package/dist/src/sanitization/index.js +9 -0
  313. package/dist/src/sanitization/index.js.map +1 -0
  314. package/dist/src/sanitization/patterns.d.ts +51 -0
  315. package/dist/src/sanitization/patterns.d.ts.map +1 -0
  316. package/dist/src/sanitization/patterns.js +266 -0
  317. package/dist/src/sanitization/patterns.js.map +1 -0
  318. package/dist/src/sanitization/scanner.d.ts +29 -0
  319. package/dist/src/sanitization/scanner.d.ts.map +1 -0
  320. package/dist/src/sanitization/scanner.js +328 -0
  321. package/dist/src/sanitization/scanner.js.map +1 -0
  322. package/dist/src/sanitization/types.d.ts +57 -0
  323. package/dist/src/sanitization/types.d.ts.map +1 -0
  324. package/dist/src/sanitization/types.js +5 -0
  325. package/dist/src/sanitization/types.js.map +1 -0
  326. package/openclaw.plugin.json +114 -0
  327. package/package.json +63 -0
  328. package/rules/builtin/README.md +139 -0
  329. package/rules/builtin/ai-services.yaml +70 -0
  330. package/rules/builtin/api-keys.yaml +64 -0
  331. package/rules/builtin/authentication.yaml +56 -0
  332. package/rules/builtin/aws-security.yaml +57 -0
  333. package/rules/builtin/azure-security.yaml +58 -0
  334. package/rules/builtin/cicd-security.yaml +64 -0
  335. package/rules/builtin/cloud-storage.yaml +64 -0
  336. package/rules/builtin/container-registry.yaml +55 -0
  337. package/rules/builtin/crypto-wallets.yaml +71 -0
  338. package/rules/builtin/database-nosql.yaml +58 -0
  339. package/rules/builtin/database-sql.yaml +62 -0
  340. package/rules/builtin/development-env.yaml +67 -0
  341. package/rules/builtin/docker.yaml +57 -0
  342. package/rules/builtin/filesystem.yaml +71 -0
  343. package/rules/builtin/financial-pci.yaml +61 -0
  344. package/rules/builtin/gcp-security.yaml +57 -0
  345. package/rules/builtin/git-operations.yaml +68 -0
  346. package/rules/builtin/healthcare-hipaa.yaml +64 -0
  347. package/rules/builtin/kubernetes.yaml +60 -0
  348. package/rules/builtin/messaging-services.yaml +53 -0
  349. package/rules/builtin/minimal.yaml +47 -0
  350. package/rules/builtin/mobile-development.yaml +61 -0
  351. package/rules/builtin/monitoring.yaml +63 -0
  352. package/rules/builtin/network-security.yaml +57 -0
  353. package/rules/builtin/package-managers.yaml +74 -0
  354. package/rules/builtin/payment-processing.yaml +66 -0
  355. package/rules/builtin/pii-protection.yaml +48 -0
  356. package/rules/builtin/production-strict.yaml +55 -0
  357. package/rules/builtin/secrets-management.yaml +63 -0
  358. package/rules/builtin/serverless.yaml +74 -0
  359. package/rules/builtin/ssh-security.yaml +66 -0
  360. package/rules/builtin/terraform.yaml +51 -0
  361. package/rules/builtin/web-security.yaml +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/detectors/secrets/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,IAAI,gBAAgB,EACnC,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,uBAAuB,CAAC;AAGnE,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AA2K3B;;GAEG;AACH,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE,qBAAqB;IAOnC,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA6B/E;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IA2BpF;;OAEG;IACH,SAAS;IAIT;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,mBAAmB,CAQ5E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,mBAAmB,CAMlE;AAGD,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Secrets Detector
3
+ * Main detector that combines API key, token, credential, and PII detection
4
+ */
5
+ import { createApiKeyDetector } from './api-key-detector.js';
6
+ import { createTokenDetector } from './token-detector.js';
7
+ import { createPiiDetector } from './pii-detector.js';
8
+ // Re-export types
9
+ export * from './types.js';
10
+ // Re-export sub-detectors
11
+ export { ApiKeyDetector, createApiKeyDetector, matchApiKeys, redactValue } from './api-key-detector.js';
12
+ export { TokenDetector, createTokenDetector, matchTokens, matchJwt, matchBearerToken, matchSessionToken, matchRefreshToken, matchAccessToken, isValidJwtStructure, } from './token-detector.js';
13
+ export { PiiDetector, createPiiDetector, matchPii, matchSsn, matchCreditCard, matchEmail, luhnCheck, isValidSsn, redactPii, } from './pii-detector.js';
14
+ /**
15
+ * Credential patterns for password/secret detection
16
+ */
17
+ const CREDENTIAL_PATTERNS = [
18
+ // password=, passwd=, pwd=
19
+ {
20
+ pattern: /\b(?:password|passwd|pwd)\s*[=:]\s*["']?([^\s"']{4,})["']?/gi,
21
+ type: 'password',
22
+ },
23
+ // secret=, api_key=, apikey=
24
+ {
25
+ pattern: /\b(?:secret|api_key|apikey|api-key)\s*[=:]\s*["']?([^\s"']{8,})["']?/gi,
26
+ type: 'secret',
27
+ },
28
+ // auth_token=, auth-token=
29
+ {
30
+ pattern: /\b(?:auth_token|auth-token|authtoken)\s*[=:]\s*["']?([^\s"']{8,})["']?/gi,
31
+ type: 'auth_token',
32
+ },
33
+ // database connection strings with password
34
+ {
35
+ pattern: /(?:mysql|postgres|postgresql|mongodb|redis):\/\/[^:]+:([^@]+)@/gi,
36
+ type: 'connection_string',
37
+ },
38
+ ];
39
+ /**
40
+ * No detection result (used when disabled or no match)
41
+ */
42
+ function noDetection(severity) {
43
+ return {
44
+ detected: false,
45
+ category: 'secrets',
46
+ severity,
47
+ confidence: 0,
48
+ reason: 'No secrets detected',
49
+ };
50
+ }
51
+ /**
52
+ * Combine multiple detection results, taking the highest severity/confidence
53
+ */
54
+ function combineResults(results, severity) {
55
+ const detections = results.filter((r) => r.detected);
56
+ if (detections.length === 0) {
57
+ return noDetection(severity);
58
+ }
59
+ // Sort by confidence (highest first)
60
+ detections.sort((a, b) => b.confidence - a.confidence);
61
+ // Take the highest confidence result as primary
62
+ const primary = detections[0];
63
+ // Build combined reason if multiple detections
64
+ let reason = primary.reason;
65
+ if (detections.length > 1) {
66
+ reason = `${primary.reason} (+${detections.length - 1} more)`;
67
+ }
68
+ return {
69
+ detected: true,
70
+ category: 'secrets',
71
+ severity,
72
+ confidence: primary.confidence,
73
+ reason,
74
+ metadata: primary.metadata,
75
+ };
76
+ }
77
+ /**
78
+ * Extract text content from tool input/output for scanning
79
+ */
80
+ function extractTextContent(obj) {
81
+ const content = new Map();
82
+ const textFields = [
83
+ 'command', 'script', 'code', 'content', 'body', 'text',
84
+ 'message', 'response', 'output', 'result', 'data',
85
+ 'query', 'sql', 'value', 'payload', 'json',
86
+ 'stdout', 'stderr', 'log', 'logs',
87
+ 'env', 'environment', 'config', 'configuration',
88
+ 'headers', 'header', 'authorization',
89
+ ];
90
+ function processValue(key, value) {
91
+ if (typeof value === 'string' && value.length > 0) {
92
+ content.set(key, value);
93
+ }
94
+ else if (typeof value === 'object' && value !== null) {
95
+ if (Array.isArray(value)) {
96
+ value.forEach((item, idx) => {
97
+ processValue(`${key}[${idx}]`, item);
98
+ });
99
+ }
100
+ else {
101
+ Object.entries(value).forEach(([k, v]) => {
102
+ processValue(`${key}.${k}`, v);
103
+ });
104
+ }
105
+ }
106
+ }
107
+ // Process known text fields first
108
+ for (const field of textFields) {
109
+ if (field in obj) {
110
+ processValue(field, obj[field]);
111
+ }
112
+ }
113
+ // Process all remaining fields
114
+ for (const [key, value] of Object.entries(obj)) {
115
+ if (!textFields.includes(key)) {
116
+ processValue(key, value);
117
+ }
118
+ }
119
+ return content;
120
+ }
121
+ /**
122
+ * Scan for credential patterns
123
+ */
124
+ function scanCredentials(text, location, severity) {
125
+ const results = [];
126
+ for (const credPattern of CREDENTIAL_PATTERNS) {
127
+ const regex = new RegExp(credPattern.pattern.source, credPattern.pattern.flags);
128
+ let match;
129
+ while ((match = regex.exec(text)) !== null) {
130
+ const value = match[1] || match[0];
131
+ // Skip short or placeholder values
132
+ if (value.length < 4)
133
+ continue;
134
+ if (/^[*x]+$/i.test(value))
135
+ continue; // Skip masked values
136
+ if (/^<.+>$/.test(value))
137
+ continue; // Skip placeholders like <password>
138
+ if (/^{.+}$/.test(value))
139
+ continue; // Skip template vars like {password}
140
+ if (/^\$\{.+\}$/.test(value))
141
+ continue; // Skip env vars like ${PASSWORD}
142
+ const redactedValue = value.length <= 8
143
+ ? value.slice(0, 2) + '***'
144
+ : value.slice(0, 4) + '***' + value.slice(-2);
145
+ results.push({
146
+ detected: true,
147
+ category: 'secrets',
148
+ severity,
149
+ confidence: 0.80,
150
+ reason: `Detected ${credPattern.type} credential`,
151
+ metadata: {
152
+ type: 'credential',
153
+ subtype: credPattern.type,
154
+ redactedValue,
155
+ location,
156
+ },
157
+ });
158
+ }
159
+ }
160
+ return results;
161
+ }
162
+ /**
163
+ * Main secrets detector implementation
164
+ */
165
+ export class SecretsDetectorImpl {
166
+ config;
167
+ apiKeyDetector;
168
+ tokenDetector;
169
+ piiDetector;
170
+ constructor(config) {
171
+ this.config = config;
172
+ this.apiKeyDetector = createApiKeyDetector(config.severity);
173
+ this.tokenDetector = createTokenDetector(config.severity);
174
+ this.piiDetector = createPiiDetector(config.severity, false); // Don't include email by default
175
+ }
176
+ async detect(context) {
177
+ // Check if detector is enabled
178
+ if (!this.config.enabled) {
179
+ return noDetection(this.config.severity);
180
+ }
181
+ const allResults = [];
182
+ // Extract text content from tool input
183
+ const inputContent = extractTextContent(context.toolInput);
184
+ for (const [location, text] of inputContent) {
185
+ allResults.push(...this.apiKeyDetector.scan(text, `input.${location}`));
186
+ allResults.push(...this.tokenDetector.scan(text, `input.${location}`));
187
+ allResults.push(...this.piiDetector.scan(text, `input.${location}`));
188
+ allResults.push(...scanCredentials(text, `input.${location}`, this.config.severity));
189
+ }
190
+ // Also scan tool output if provided
191
+ if (context.toolOutput) {
192
+ allResults.push(...this.apiKeyDetector.scan(context.toolOutput, 'output'));
193
+ allResults.push(...this.tokenDetector.scan(context.toolOutput, 'output'));
194
+ allResults.push(...this.piiDetector.scan(context.toolOutput, 'output'));
195
+ allResults.push(...scanCredentials(context.toolOutput, 'output', this.config.severity));
196
+ }
197
+ // Combine and return results
198
+ return combineResults(allResults, this.config.severity);
199
+ }
200
+ /**
201
+ * Get all individual detection results (for detailed reporting)
202
+ */
203
+ async detectAll(context) {
204
+ if (!this.config.enabled) {
205
+ return [];
206
+ }
207
+ const allResults = [];
208
+ // Extract text content from tool input
209
+ const inputContent = extractTextContent(context.toolInput);
210
+ for (const [location, text] of inputContent) {
211
+ allResults.push(...this.apiKeyDetector.scan(text, `input.${location}`));
212
+ allResults.push(...this.tokenDetector.scan(text, `input.${location}`));
213
+ allResults.push(...this.piiDetector.scan(text, `input.${location}`));
214
+ allResults.push(...scanCredentials(text, `input.${location}`, this.config.severity));
215
+ }
216
+ // Also scan tool output if provided
217
+ if (context.toolOutput) {
218
+ allResults.push(...this.apiKeyDetector.scan(context.toolOutput, 'output'));
219
+ allResults.push(...this.tokenDetector.scan(context.toolOutput, 'output'));
220
+ allResults.push(...this.piiDetector.scan(context.toolOutput, 'output'));
221
+ allResults.push(...scanCredentials(context.toolOutput, 'output', this.config.severity));
222
+ }
223
+ return allResults.filter((r) => r.detected);
224
+ }
225
+ /**
226
+ * Get the configured action for detected secrets
227
+ */
228
+ getAction() {
229
+ return this.config.action;
230
+ }
231
+ /**
232
+ * Check if the detector is enabled
233
+ */
234
+ isEnabled() {
235
+ return this.config.enabled;
236
+ }
237
+ }
238
+ /**
239
+ * Create a secrets detector from SecretsRule configuration
240
+ */
241
+ export function createSecretsDetector(rule) {
242
+ const config = {
243
+ enabled: rule.enabled,
244
+ severity: rule.severity,
245
+ action: rule.action,
246
+ };
247
+ return new SecretsDetectorImpl(config);
248
+ }
249
+ /**
250
+ * Create a secrets detector with default configuration
251
+ */
252
+ export function createDefaultSecretsDetector() {
253
+ return new SecretsDetectorImpl({
254
+ enabled: true,
255
+ severity: 'critical',
256
+ action: 'block',
257
+ });
258
+ }
259
+ // Default export
260
+ export default SecretsDetectorImpl;
261
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/detectors/secrets/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * PII Detector
3
+ * Detects Personally Identifiable Information including SSNs and credit cards
4
+ */
5
+ import type { SecretsDetectionResult, SecretSubDetector, PiiMatch, PiiType } from './types.js';
6
+ import type { Severity } from '../../config/index.js';
7
+ /**
8
+ * Luhn algorithm for credit card validation
9
+ * @param cardNumber The card number as a string (digits only)
10
+ * @returns true if the card number passes Luhn validation
11
+ */
12
+ export declare function luhnCheck(cardNumber: string): boolean;
13
+ /**
14
+ * Validate SSN
15
+ * Basic validation to reduce false positives
16
+ */
17
+ export declare function isValidSsn(area: string, group: string, serial: string): boolean;
18
+ /**
19
+ * Redact PII value
20
+ */
21
+ export declare function redactPii(value: string, type: PiiType): string;
22
+ /**
23
+ * Match SSNs in text
24
+ */
25
+ export declare function matchSsn(text: string): PiiMatch[];
26
+ /**
27
+ * Match credit card numbers in text
28
+ */
29
+ export declare function matchCreditCard(text: string): PiiMatch[];
30
+ /**
31
+ * Match email addresses in text
32
+ */
33
+ export declare function matchEmail(text: string): PiiMatch[];
34
+ /**
35
+ * Match all PII types in text
36
+ */
37
+ export declare function matchPii(text: string, includeEmail?: boolean): PiiMatch[];
38
+ /**
39
+ * PII Detector class
40
+ */
41
+ export declare class PiiDetector implements SecretSubDetector {
42
+ private severity;
43
+ private includeEmail;
44
+ constructor(severity: Severity, includeEmail?: boolean);
45
+ /**
46
+ * Scan text for PII
47
+ */
48
+ scan(text: string, location: string): SecretsDetectionResult[];
49
+ }
50
+ /**
51
+ * Create a PII detector
52
+ */
53
+ export declare function createPiiDetector(severity: Severity, includeEmail?: boolean): PiiDetector;
54
+ //# sourceMappingURL=pii-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-detector.d.ts","sourceRoot":"","sources":["../../../../src/detectors/secrets/pii-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CA2BrD;AA6BD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAqB/E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAwB9D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuBjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CA8CxD;AAoBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAyBnD;AAyBD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,QAAQ,EAAE,CAWvE;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,iBAAiB;IACnD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAU;gBAElB,QAAQ,EAAE,QAAQ,EAAE,YAAY,UAAQ;IAKpD;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,sBAAsB,EAAE;CAuB/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,UAAQ,GAAG,WAAW,CAEvF"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * PII Detector
3
+ * Detects Personally Identifiable Information including SSNs and credit cards
4
+ */
5
+ /**
6
+ * Luhn algorithm for credit card validation
7
+ * @param cardNumber The card number as a string (digits only)
8
+ * @returns true if the card number passes Luhn validation
9
+ */
10
+ export function luhnCheck(cardNumber) {
11
+ // Remove any non-digit characters
12
+ const digits = cardNumber.replace(/\D/g, '');
13
+ if (digits.length < 13 || digits.length > 19) {
14
+ return false;
15
+ }
16
+ let sum = 0;
17
+ let isEven = false;
18
+ // Process digits from right to left
19
+ for (let i = digits.length - 1; i >= 0; i--) {
20
+ let digit = parseInt(digits[i], 10);
21
+ if (isEven) {
22
+ digit *= 2;
23
+ if (digit > 9) {
24
+ digit -= 9;
25
+ }
26
+ }
27
+ sum += digit;
28
+ isEven = !isEven;
29
+ }
30
+ return sum % 10 === 0;
31
+ }
32
+ /**
33
+ * SSN pattern: xxx-xx-xxxx
34
+ * Valid SSN rules:
35
+ * - Area number (first 3 digits): 001-899, excluding 666
36
+ * - Group number (middle 2 digits): 01-99
37
+ * - Serial number (last 4 digits): 0001-9999
38
+ */
39
+ const SSN_PATTERN = /\b(\d{3})-(\d{2})-(\d{4})\b/g;
40
+ /**
41
+ * Credit card patterns (various formats)
42
+ * Matches 13-19 digits with optional separators
43
+ */
44
+ const CREDIT_CARD_PATTERNS = [
45
+ // 16 digits with spaces or dashes (4-4-4-4)
46
+ /\b(\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4})\b/g,
47
+ // 15 digits (Amex: 4-6-5)
48
+ /\b(\d{4}[\s-]?\d{6}[\s-]?\d{5})\b/g,
49
+ // 13-19 continuous digits
50
+ /\b(\d{13,19})\b/g,
51
+ ];
52
+ /**
53
+ * Email pattern
54
+ */
55
+ const EMAIL_PATTERN = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;
56
+ /**
57
+ * Validate SSN
58
+ * Basic validation to reduce false positives
59
+ */
60
+ export function isValidSsn(area, group, serial) {
61
+ const areaNum = parseInt(area, 10);
62
+ const groupNum = parseInt(group, 10);
63
+ const serialNum = parseInt(serial, 10);
64
+ // Area number cannot be 000, 666, or 900-999
65
+ if (areaNum === 0 || areaNum === 666 || areaNum >= 900) {
66
+ return false;
67
+ }
68
+ // Group number cannot be 00
69
+ if (groupNum === 0) {
70
+ return false;
71
+ }
72
+ // Serial number cannot be 0000
73
+ if (serialNum === 0) {
74
+ return false;
75
+ }
76
+ return true;
77
+ }
78
+ /**
79
+ * Redact PII value
80
+ */
81
+ export function redactPii(value, type) {
82
+ switch (type) {
83
+ case 'ssn':
84
+ // Show only last 4 digits
85
+ return `***-**-${value.slice(-4)}`;
86
+ case 'credit-card': {
87
+ // Show first 4 and last 4 digits
88
+ const digits = value.replace(/\D/g, '');
89
+ if (digits.length <= 8) {
90
+ return digits.slice(0, 4) + '***';
91
+ }
92
+ return digits.slice(0, 4) + '***' + digits.slice(-4);
93
+ }
94
+ case 'email': {
95
+ // Redact middle of email
96
+ const atIndex = value.indexOf('@');
97
+ if (atIndex <= 2) {
98
+ return '***' + value.slice(atIndex);
99
+ }
100
+ return value.slice(0, 2) + '***' + value.slice(atIndex);
101
+ }
102
+ default:
103
+ return '***';
104
+ }
105
+ }
106
+ /**
107
+ * Match SSNs in text
108
+ */
109
+ export function matchSsn(text) {
110
+ const matches = [];
111
+ const regex = new RegExp(SSN_PATTERN.source, SSN_PATTERN.flags);
112
+ let match;
113
+ while ((match = regex.exec(text)) !== null) {
114
+ const fullMatch = match[0];
115
+ const area = match[1];
116
+ const group = match[2];
117
+ const serial = match[3];
118
+ const isValid = isValidSsn(area, group, serial);
119
+ matches.push({
120
+ matched: true,
121
+ piiType: 'ssn',
122
+ value: fullMatch,
123
+ redactedValue: redactPii(fullMatch, 'ssn'),
124
+ confidence: isValid ? 0.90 : 0.60,
125
+ });
126
+ }
127
+ return matches;
128
+ }
129
+ /**
130
+ * Match credit card numbers in text
131
+ */
132
+ export function matchCreditCard(text) {
133
+ const matches = [];
134
+ const seen = new Set();
135
+ for (const pattern of CREDIT_CARD_PATTERNS) {
136
+ const regex = new RegExp(pattern.source, pattern.flags);
137
+ let match;
138
+ while ((match = regex.exec(text)) !== null) {
139
+ const value = match[1] || match[0];
140
+ const digits = value.replace(/\D/g, '');
141
+ // Skip if we've already seen these digits
142
+ if (seen.has(digits))
143
+ continue;
144
+ // Skip numbers that are too short or too long
145
+ if (digits.length < 13 || digits.length > 19)
146
+ continue;
147
+ // Skip numbers that are all the same digit (like 0000000000000000)
148
+ if (/^(\d)\1+$/.test(digits))
149
+ continue;
150
+ // Skip sequential numbers
151
+ if (isSequential(digits))
152
+ continue;
153
+ seen.add(digits);
154
+ const luhnValid = luhnCheck(digits);
155
+ // Only report if Luhn passes or if it looks very card-like
156
+ if (!luhnValid) {
157
+ // Skip low-confidence matches without Luhn validation
158
+ continue;
159
+ }
160
+ matches.push({
161
+ matched: true,
162
+ piiType: 'credit-card',
163
+ value: digits,
164
+ redactedValue: redactPii(digits, 'credit-card'),
165
+ confidence: 0.95, // High confidence since Luhn passed
166
+ luhnValid,
167
+ });
168
+ }
169
+ }
170
+ return matches;
171
+ }
172
+ /**
173
+ * Check if a number sequence is sequential (123456789...)
174
+ */
175
+ function isSequential(digits) {
176
+ let ascending = true;
177
+ let descending = true;
178
+ for (let i = 1; i < digits.length; i++) {
179
+ const curr = parseInt(digits[i], 10);
180
+ const prev = parseInt(digits[i - 1], 10);
181
+ if (curr !== (prev + 1) % 10)
182
+ ascending = false;
183
+ if (curr !== (prev - 1 + 10) % 10)
184
+ descending = false;
185
+ }
186
+ return ascending || descending;
187
+ }
188
+ /**
189
+ * Match email addresses in text
190
+ */
191
+ export function matchEmail(text) {
192
+ const matches = [];
193
+ const regex = new RegExp(EMAIL_PATTERN.source, EMAIL_PATTERN.flags);
194
+ const seen = new Set();
195
+ let match;
196
+ while ((match = regex.exec(text)) !== null) {
197
+ const value = match[0].toLowerCase();
198
+ if (seen.has(value))
199
+ continue;
200
+ seen.add(value);
201
+ // Skip common test/example emails
202
+ if (isExampleEmail(value))
203
+ continue;
204
+ matches.push({
205
+ matched: true,
206
+ piiType: 'email',
207
+ value,
208
+ redactedValue: redactPii(value, 'email'),
209
+ confidence: 0.70, // Lower confidence for emails
210
+ });
211
+ }
212
+ return matches;
213
+ }
214
+ /**
215
+ * Check if an email is a common test/example email
216
+ */
217
+ function isExampleEmail(email) {
218
+ const exampleDomains = [
219
+ 'example.com',
220
+ 'example.org',
221
+ 'example.net',
222
+ 'test.com',
223
+ 'localhost',
224
+ 'placeholder.com',
225
+ ];
226
+ const exampleLocalParts = ['test', 'example', 'admin', 'info', 'noreply'];
227
+ const [localPart, domain] = email.split('@');
228
+ if (exampleDomains.some(d => domain.endsWith(d)))
229
+ return true;
230
+ if (exampleLocalParts.includes(localPart))
231
+ return true;
232
+ return false;
233
+ }
234
+ /**
235
+ * Match all PII types in text
236
+ */
237
+ export function matchPii(text, includeEmail = false) {
238
+ const allMatches = [];
239
+ allMatches.push(...matchSsn(text));
240
+ allMatches.push(...matchCreditCard(text));
241
+ if (includeEmail) {
242
+ allMatches.push(...matchEmail(text));
243
+ }
244
+ return allMatches;
245
+ }
246
+ /**
247
+ * PII Detector class
248
+ */
249
+ export class PiiDetector {
250
+ severity;
251
+ includeEmail;
252
+ constructor(severity, includeEmail = false) {
253
+ this.severity = severity;
254
+ this.includeEmail = includeEmail;
255
+ }
256
+ /**
257
+ * Scan text for PII
258
+ */
259
+ scan(text, location) {
260
+ const matches = matchPii(text, this.includeEmail);
261
+ return matches.map((match) => {
262
+ // SSN and credit cards are higher severity
263
+ const severity = match.piiType === 'email' ? 'medium' : this.severity;
264
+ return {
265
+ detected: true,
266
+ category: 'secrets',
267
+ severity,
268
+ confidence: match.confidence,
269
+ reason: `Detected ${match.piiType === 'credit-card' ? 'credit card number' : match.piiType.toUpperCase()}${match.luhnValid !== undefined ? ' (Luhn validated)' : ''}`,
270
+ metadata: {
271
+ type: 'pii',
272
+ subtype: match.piiType,
273
+ redactedValue: match.redactedValue,
274
+ location,
275
+ },
276
+ };
277
+ });
278
+ }
279
+ }
280
+ /**
281
+ * Create a PII detector
282
+ */
283
+ export function createPiiDetector(severity, includeEmail = false) {
284
+ return new PiiDetector(severity, includeEmail);
285
+ }
286
+ //# sourceMappingURL=pii-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-detector.js","sourceRoot":"","sources":["../../../../src/detectors/secrets/pii-detector.ts"],"names":[],"mappings":"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"}