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,292 @@
1
+ /**
2
+ * URL Pattern Detector
3
+ * Detects purchase-related URL paths and API endpoints
4
+ */
5
+ /**
6
+ * Checkout and payment paths
7
+ */
8
+ const CHECKOUT_PATHS = [
9
+ '/checkout',
10
+ '/checkout/',
11
+ '/checkout/*',
12
+ '/payment',
13
+ '/payment/',
14
+ '/payments',
15
+ '/payments/',
16
+ '/pay',
17
+ '/pay/',
18
+ '/cart/checkout',
19
+ '/cart/confirm',
20
+ '/cart/payment',
21
+ '/secure/checkout',
22
+ '/secure/payment',
23
+ '/gp/buy',
24
+ '/gp/checkout',
25
+ ];
26
+ /**
27
+ * Purchase and order paths
28
+ */
29
+ const PURCHASE_PATHS = [
30
+ '/buy',
31
+ '/buy/',
32
+ '/buy/*',
33
+ '/purchase',
34
+ '/purchase/',
35
+ '/order',
36
+ '/order/',
37
+ '/orders',
38
+ '/orders/',
39
+ '/orders/create',
40
+ '/orders/submit',
41
+ '/confirm-order',
42
+ '/place-order',
43
+ '/complete-purchase',
44
+ ];
45
+ /**
46
+ * Subscription and billing paths
47
+ */
48
+ const SUBSCRIPTION_PATHS = [
49
+ '/subscribe',
50
+ '/subscribe/',
51
+ '/subscription',
52
+ '/subscription/',
53
+ '/subscriptions',
54
+ '/billing',
55
+ '/billing/',
56
+ '/billing/payment',
57
+ '/billing/subscribe',
58
+ '/upgrade',
59
+ '/upgrade/',
60
+ '/premium',
61
+ '/pro',
62
+ ];
63
+ /**
64
+ * API endpoints for orders and payments
65
+ */
66
+ const API_ENDPOINTS = [
67
+ '/api/orders',
68
+ '/api/order',
69
+ '/api/checkout',
70
+ '/api/payment',
71
+ '/api/payments',
72
+ '/api/purchase',
73
+ '/api/subscribe',
74
+ '/api/subscription',
75
+ '/api/billing',
76
+ '/api/charge',
77
+ '/api/transaction',
78
+ '/api/transactions',
79
+ '/api/v1/orders',
80
+ '/api/v1/checkout',
81
+ '/api/v1/payment',
82
+ '/api/v1/payments',
83
+ '/api/v2/orders',
84
+ '/api/v2/checkout',
85
+ '/api/v2/payment',
86
+ '/api/v2/payments',
87
+ '/graphql', // Often used for mutations
88
+ ];
89
+ /**
90
+ * URL path keywords (for partial matching)
91
+ */
92
+ const URL_KEYWORDS = [
93
+ 'checkout',
94
+ 'payment',
95
+ 'purchase',
96
+ 'billing',
97
+ 'subscribe',
98
+ 'order',
99
+ 'transaction',
100
+ 'charge',
101
+ ];
102
+ /**
103
+ * Convert glob pattern to regex for URL matching
104
+ */
105
+ function pathPatternToRegex(pattern) {
106
+ // Normalize pattern - remove trailing slash for matching
107
+ const normalizedPattern = pattern.endsWith('/') && pattern.length > 1
108
+ ? pattern.slice(0, -1)
109
+ : pattern;
110
+ // Escape special regex characters except *
111
+ const regex = normalizedPattern
112
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
113
+ .replace(/\*/g, '.*');
114
+ // Match the pattern at the start of the path (or exact match)
115
+ return new RegExp(`^${regex}(?:/.*)?$`, 'i');
116
+ }
117
+ /**
118
+ * Extract path from URL
119
+ */
120
+ export function extractPath(url) {
121
+ // If input is already a path (starts with /), return it directly
122
+ if (url.startsWith('/')) {
123
+ // Extract just the path without query string
124
+ const pathMatch = url.match(/^(\/[^?#]*)/);
125
+ return pathMatch ? pathMatch[1].toLowerCase() : url.toLowerCase();
126
+ }
127
+ try {
128
+ let normalizedUrl = url;
129
+ if (!url.includes('://')) {
130
+ normalizedUrl = 'https://' + url;
131
+ }
132
+ const parsed = new URL(normalizedUrl);
133
+ return parsed.pathname.toLowerCase();
134
+ }
135
+ catch {
136
+ // If URL parsing fails, try to extract path directly
137
+ const pathMatch = url.match(/^(?:https?:\/\/[^/]+)?(\/.*)$/i);
138
+ if (pathMatch) {
139
+ return pathMatch[1].toLowerCase();
140
+ }
141
+ return null;
142
+ }
143
+ }
144
+ /**
145
+ * Check if path matches a pattern
146
+ */
147
+ function matchesPathPattern(path, pattern) {
148
+ const regex = pathPatternToRegex(pattern);
149
+ return regex.test(path);
150
+ }
151
+ /**
152
+ * Check URL path against known payment paths
153
+ */
154
+ export function matchUrlPath(url) {
155
+ const path = extractPath(url);
156
+ if (!path) {
157
+ return { matched: false, confidence: 0 };
158
+ }
159
+ // Normalize path for matching (remove trailing slash for comparison)
160
+ const normalizedPath = path.endsWith('/') && path.length > 1
161
+ ? path.slice(0, -1)
162
+ : path;
163
+ // Check checkout paths (highest priority)
164
+ for (const pattern of CHECKOUT_PATHS) {
165
+ if (matchesPathPattern(normalizedPath, pattern)) {
166
+ return {
167
+ matched: true,
168
+ url: url,
169
+ pattern: pattern,
170
+ matchType: 'path',
171
+ confidence: 0.9,
172
+ };
173
+ }
174
+ }
175
+ // Check purchase paths
176
+ for (const pattern of PURCHASE_PATHS) {
177
+ if (matchesPathPattern(normalizedPath, pattern)) {
178
+ return {
179
+ matched: true,
180
+ url: url,
181
+ pattern: pattern,
182
+ matchType: 'path',
183
+ confidence: 0.85,
184
+ };
185
+ }
186
+ }
187
+ // Check subscription paths
188
+ for (const pattern of SUBSCRIPTION_PATHS) {
189
+ if (matchesPathPattern(normalizedPath, pattern)) {
190
+ return {
191
+ matched: true,
192
+ url: url,
193
+ pattern: pattern,
194
+ matchType: 'path',
195
+ confidence: 0.85,
196
+ };
197
+ }
198
+ }
199
+ // Check API endpoints
200
+ for (const pattern of API_ENDPOINTS) {
201
+ if (matchesPathPattern(normalizedPath, pattern)) {
202
+ return {
203
+ matched: true,
204
+ url: url,
205
+ pattern: pattern,
206
+ matchType: 'api',
207
+ confidence: 0.8,
208
+ };
209
+ }
210
+ }
211
+ // Check for keywords in path (lower confidence)
212
+ for (const keyword of URL_KEYWORDS) {
213
+ if (normalizedPath.includes(keyword)) {
214
+ return {
215
+ matched: true,
216
+ url: url,
217
+ pattern: keyword,
218
+ matchType: 'path',
219
+ confidence: 0.6,
220
+ };
221
+ }
222
+ }
223
+ return { matched: false, confidence: 0 };
224
+ }
225
+ /**
226
+ * URL pattern detector class
227
+ */
228
+ export class UrlDetector {
229
+ severity;
230
+ constructor(severity = 'critical') {
231
+ this.severity = severity;
232
+ }
233
+ /**
234
+ * Extract URL from tool context
235
+ */
236
+ extractUrl(context) {
237
+ // Direct URL in context
238
+ if (context.url) {
239
+ return context.url;
240
+ }
241
+ // Check common tool input patterns
242
+ const input = context.toolInput;
243
+ if (typeof input.url === 'string') {
244
+ return input.url;
245
+ }
246
+ if (typeof input.href === 'string') {
247
+ return input.href;
248
+ }
249
+ if (typeof input.link === 'string') {
250
+ return input.link;
251
+ }
252
+ if (typeof input.target === 'string' && input.target.includes('/')) {
253
+ return input.target;
254
+ }
255
+ // Check for path-only inputs
256
+ if (typeof input.path === 'string') {
257
+ return input.path;
258
+ }
259
+ return null;
260
+ }
261
+ detect(context) {
262
+ const url = this.extractUrl(context);
263
+ if (!url) {
264
+ return null;
265
+ }
266
+ const result = matchUrlPath(url);
267
+ if (!result.matched) {
268
+ return null;
269
+ }
270
+ const matchTypeDescription = result.matchType === 'api'
271
+ ? 'API endpoint for payments/orders'
272
+ : 'checkout/payment URL path';
273
+ return {
274
+ detected: true,
275
+ category: 'purchase',
276
+ severity: this.severity,
277
+ confidence: result.confidence,
278
+ reason: `Detected ${matchTypeDescription}: ${result.pattern}`,
279
+ metadata: {
280
+ url: result.url,
281
+ matchedPattern: result.pattern,
282
+ },
283
+ };
284
+ }
285
+ }
286
+ /**
287
+ * Create a URL detector with the given configuration
288
+ */
289
+ export function createUrlDetector(severity = 'critical') {
290
+ return new UrlDetector(severity);
291
+ }
292
+ //# sourceMappingURL=url-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-detector.js","sourceRoot":"","sources":["../../../../src/detectors/purchase/url-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * API Key Detector
3
+ * Detects API keys from various providers
4
+ */
5
+ import type { SecretsDetectionResult, SecretSubDetector, ApiKeyMatch } from './types.js';
6
+ import type { Severity } from '../../config/index.js';
7
+ /**
8
+ * Redact a value showing first and last few characters
9
+ */
10
+ export declare function redactValue(value: string, showStart?: number, showEnd?: number): string;
11
+ /**
12
+ * Match API keys in text
13
+ */
14
+ export declare function matchApiKeys(text: string): ApiKeyMatch[];
15
+ /**
16
+ * API Key Detector class
17
+ */
18
+ export declare class ApiKeyDetector implements SecretSubDetector {
19
+ private severity;
20
+ constructor(severity: Severity);
21
+ /**
22
+ * Scan text for API keys
23
+ */
24
+ scan(text: string, location: string): SecretsDetectionResult[];
25
+ }
26
+ /**
27
+ * Create an API key detector
28
+ */
29
+ export declare function createApiKeyDetector(severity: Severity): ApiKeyDetector;
30
+ //# sourceMappingURL=api-key-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key-detector.d.ts","sourceRoot":"","sources":["../../../../src/detectors/secrets/api-key-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA0MtD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAI,EAAE,OAAO,SAAI,GAAG,MAAM,CAM7E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAgExD;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,iBAAiB;IACtD,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAI9B;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,sBAAsB,EAAE;CAiB/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAEvE"}
@@ -0,0 +1,297 @@
1
+ /**
2
+ * API Key Detector
3
+ * Detects API keys from various providers
4
+ */
5
+ /**
6
+ * API key patterns for various providers
7
+ */
8
+ const API_KEY_PATTERNS = [
9
+ // OpenAI - sk-... format (51+ chars)
10
+ {
11
+ provider: 'openai',
12
+ pattern: /\bsk-[A-Za-z0-9]{48,}\b/g,
13
+ minLength: 51,
14
+ confidence: 0.95,
15
+ description: 'OpenAI API key',
16
+ },
17
+ // Anthropic - sk-ant-... format
18
+ {
19
+ provider: 'anthropic',
20
+ pattern: /\bsk-ant-[A-Za-z0-9_-]{32,}\b/g,
21
+ confidence: 0.95,
22
+ description: 'Anthropic API key',
23
+ },
24
+ // AWS Access Key ID - AKIA... (20 chars)
25
+ {
26
+ provider: 'aws',
27
+ pattern: /\bAKIA[0-9A-Z]{16}\b/g,
28
+ minLength: 20,
29
+ maxLength: 20,
30
+ confidence: 0.95,
31
+ description: 'AWS Access Key ID',
32
+ },
33
+ // AWS Secret Access Key (40 chars base64-like)
34
+ {
35
+ provider: 'aws',
36
+ pattern: /\b[A-Za-z0-9/+=]{40}\b/g,
37
+ minLength: 40,
38
+ maxLength: 40,
39
+ confidence: 0.5, // Lower confidence without context
40
+ description: 'Potential AWS Secret Access Key',
41
+ },
42
+ // GitHub tokens - ghp_, gho_, ghs_, ghr_ prefixes
43
+ {
44
+ provider: 'github',
45
+ pattern: /\bghp_[A-Za-z0-9]{36,}\b/g,
46
+ confidence: 0.95,
47
+ description: 'GitHub Personal Access Token',
48
+ },
49
+ {
50
+ provider: 'github',
51
+ pattern: /\bgho_[A-Za-z0-9]{36,}\b/g,
52
+ confidence: 0.95,
53
+ description: 'GitHub OAuth Token',
54
+ },
55
+ {
56
+ provider: 'github',
57
+ pattern: /\bghs_[A-Za-z0-9]{36,}\b/g,
58
+ confidence: 0.95,
59
+ description: 'GitHub App Installation Token',
60
+ },
61
+ {
62
+ provider: 'github',
63
+ pattern: /\bghr_[A-Za-z0-9]{36,}\b/g,
64
+ confidence: 0.95,
65
+ description: 'GitHub Refresh Token',
66
+ },
67
+ // Stripe keys - sk_live_, sk_test_, pk_live_, pk_test_
68
+ {
69
+ provider: 'stripe',
70
+ pattern: /\bsk_live_[A-Za-z0-9]{24,}\b/g,
71
+ confidence: 0.95,
72
+ description: 'Stripe Live Secret Key',
73
+ },
74
+ {
75
+ provider: 'stripe',
76
+ pattern: /\bsk_test_[A-Za-z0-9]{24,}\b/g,
77
+ confidence: 0.90,
78
+ description: 'Stripe Test Secret Key',
79
+ },
80
+ {
81
+ provider: 'stripe',
82
+ pattern: /\bpk_live_[A-Za-z0-9]{24,}\b/g,
83
+ confidence: 0.90,
84
+ description: 'Stripe Live Publishable Key',
85
+ },
86
+ {
87
+ provider: 'stripe',
88
+ pattern: /\bpk_test_[A-Za-z0-9]{24,}\b/g,
89
+ confidence: 0.85,
90
+ description: 'Stripe Test Publishable Key',
91
+ },
92
+ // Slack tokens - xoxb-, xoxp-, xoxa-, xoxr-, xoxs-
93
+ {
94
+ provider: 'slack',
95
+ pattern: /\bxoxb-[0-9]{10,13}-[0-9]{10,13}-[A-Za-z0-9]{24}\b/g,
96
+ confidence: 0.95,
97
+ description: 'Slack Bot Token',
98
+ },
99
+ {
100
+ provider: 'slack',
101
+ pattern: /\bxoxp-[0-9]{10,13}-[0-9]{10,13}-[0-9]{10,13}-[A-Za-z0-9]{32}\b/g,
102
+ confidence: 0.95,
103
+ description: 'Slack User Token',
104
+ },
105
+ {
106
+ provider: 'slack',
107
+ pattern: /\bxoxa-[0-9]+-[A-Za-z0-9]{24,}\b/g,
108
+ confidence: 0.95,
109
+ description: 'Slack App Token',
110
+ },
111
+ {
112
+ provider: 'slack',
113
+ pattern: /\bxoxr-[0-9]+-[A-Za-z0-9]{24,}\b/g,
114
+ confidence: 0.95,
115
+ description: 'Slack Refresh Token',
116
+ },
117
+ {
118
+ provider: 'slack',
119
+ pattern: /\bxoxs-[0-9]+-[A-Za-z0-9]{24,}\b/g,
120
+ confidence: 0.95,
121
+ description: 'Slack Session Token',
122
+ },
123
+ // Google API key - AIza... (39 total chars)
124
+ {
125
+ provider: 'google',
126
+ pattern: /\bAIza[A-Za-z0-9_-]{35,}\b/g,
127
+ confidence: 0.90,
128
+ description: 'Google API Key',
129
+ },
130
+ // Generic patterns (lower confidence)
131
+ {
132
+ provider: 'generic',
133
+ pattern: /\bapi[_-]?key[_-]?[=:]["']?([A-Za-z0-9_-]{20,})["']?/gi,
134
+ confidence: 0.70,
135
+ description: 'Generic API Key pattern',
136
+ },
137
+ ];
138
+ /**
139
+ * Cloud credential patterns (environment variables)
140
+ */
141
+ const CLOUD_CREDENTIAL_PATTERNS = [
142
+ {
143
+ provider: 'aws',
144
+ pattern: /AWS_SECRET_ACCESS_KEY\s*[=:]\s*["']?([A-Za-z0-9/+=]{40})["']?/g,
145
+ confidence: 0.95,
146
+ description: 'AWS Secret Access Key in env var',
147
+ },
148
+ {
149
+ provider: 'aws',
150
+ pattern: /AWS_ACCESS_KEY_ID\s*[=:]\s*["']?(AKIA[0-9A-Z]{16})["']?/g,
151
+ confidence: 0.95,
152
+ description: 'AWS Access Key ID in env var',
153
+ },
154
+ {
155
+ provider: 'google',
156
+ pattern: /GOOGLE_APPLICATION_CREDENTIALS\s*[=:]\s*["']?([^"'\s]+)["']?/g,
157
+ confidence: 0.85,
158
+ description: 'Google Application Credentials path',
159
+ },
160
+ ];
161
+ /**
162
+ * Private key patterns
163
+ */
164
+ const PRIVATE_KEY_PATTERNS = [
165
+ {
166
+ provider: 'generic',
167
+ pattern: /-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/g,
168
+ confidence: 0.99,
169
+ description: 'Private key (RSA)',
170
+ },
171
+ {
172
+ provider: 'generic',
173
+ pattern: /-----BEGIN\s+EC\s+PRIVATE\s+KEY-----/g,
174
+ confidence: 0.99,
175
+ description: 'Private key (EC)',
176
+ },
177
+ {
178
+ provider: 'generic',
179
+ pattern: /-----BEGIN\s+OPENSSH\s+PRIVATE\s+KEY-----/g,
180
+ confidence: 0.99,
181
+ description: 'Private key (OpenSSH)',
182
+ },
183
+ {
184
+ provider: 'generic',
185
+ pattern: /-----BEGIN\s+PGP\s+PRIVATE\s+KEY\s+BLOCK-----/g,
186
+ confidence: 0.99,
187
+ description: 'Private key (PGP)',
188
+ },
189
+ ];
190
+ /**
191
+ * Redact a value showing first and last few characters
192
+ */
193
+ export function redactValue(value, showStart = 4, showEnd = 4) {
194
+ if (value.length <= showStart + showEnd + 3) {
195
+ // Too short to redact meaningfully
196
+ return value.slice(0, showStart) + '***';
197
+ }
198
+ return value.slice(0, showStart) + '***' + value.slice(-showEnd);
199
+ }
200
+ /**
201
+ * Match API keys in text
202
+ */
203
+ export function matchApiKeys(text) {
204
+ const matches = [];
205
+ const seen = new Set();
206
+ // Check standard API key patterns
207
+ for (const pattern of API_KEY_PATTERNS) {
208
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
209
+ let match;
210
+ while ((match = regex.exec(text)) !== null) {
211
+ const value = match[1] || match[0];
212
+ // Skip if we've already seen this value
213
+ if (seen.has(value))
214
+ continue;
215
+ seen.add(value);
216
+ // Validate length if specified
217
+ if (pattern.minLength && value.length < pattern.minLength)
218
+ continue;
219
+ if (pattern.maxLength && value.length > pattern.maxLength)
220
+ continue;
221
+ matches.push({
222
+ matched: true,
223
+ provider: pattern.provider,
224
+ value,
225
+ redactedValue: redactValue(value),
226
+ confidence: pattern.confidence,
227
+ });
228
+ }
229
+ }
230
+ // Check cloud credential patterns
231
+ for (const pattern of CLOUD_CREDENTIAL_PATTERNS) {
232
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
233
+ let match;
234
+ while ((match = regex.exec(text)) !== null) {
235
+ const value = match[1] || match[0];
236
+ if (seen.has(value))
237
+ continue;
238
+ seen.add(value);
239
+ matches.push({
240
+ matched: true,
241
+ provider: pattern.provider,
242
+ value,
243
+ redactedValue: redactValue(value),
244
+ confidence: pattern.confidence,
245
+ });
246
+ }
247
+ }
248
+ // Check private key patterns
249
+ for (const pattern of PRIVATE_KEY_PATTERNS) {
250
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
251
+ if (regex.test(text)) {
252
+ matches.push({
253
+ matched: true,
254
+ provider: pattern.provider,
255
+ value: pattern.description,
256
+ redactedValue: '[PRIVATE KEY]',
257
+ confidence: pattern.confidence,
258
+ });
259
+ }
260
+ }
261
+ return matches;
262
+ }
263
+ /**
264
+ * API Key Detector class
265
+ */
266
+ export class ApiKeyDetector {
267
+ severity;
268
+ constructor(severity) {
269
+ this.severity = severity;
270
+ }
271
+ /**
272
+ * Scan text for API keys
273
+ */
274
+ scan(text, location) {
275
+ const matches = matchApiKeys(text);
276
+ return matches.map((match) => ({
277
+ detected: true,
278
+ category: 'secrets',
279
+ severity: this.severity,
280
+ confidence: match.confidence,
281
+ reason: `Detected ${match.provider} API key/credential`,
282
+ metadata: {
283
+ type: 'api-key',
284
+ provider: match.provider,
285
+ redactedValue: match.redactedValue,
286
+ location,
287
+ },
288
+ }));
289
+ }
290
+ }
291
+ /**
292
+ * Create an API key detector
293
+ */
294
+ export function createApiKeyDetector(severity) {
295
+ return new ApiKeyDetector(severity);
296
+ }
297
+ //# sourceMappingURL=api-key-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key-detector.js","sourceRoot":"","sources":["../../../../src/detectors/secrets/api-key-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Secrets Detector
3
+ * Main detector that combines API key, token, credential, and PII detection
4
+ */
5
+ import type { SecretsDetectionContext, SecretsDetectionResult, SecretsDetector as ISecretsDetector, SecretsDetectorConfig } from './types.js';
6
+ import type { SecretsRule } from '../../config/index.js';
7
+ export * from './types.js';
8
+ export { ApiKeyDetector, createApiKeyDetector, matchApiKeys, redactValue } from './api-key-detector.js';
9
+ export { TokenDetector, createTokenDetector, matchTokens, matchJwt, matchBearerToken, matchSessionToken, matchRefreshToken, matchAccessToken, isValidJwtStructure, } from './token-detector.js';
10
+ export { PiiDetector, createPiiDetector, matchPii, matchSsn, matchCreditCard, matchEmail, luhnCheck, isValidSsn, redactPii, } from './pii-detector.js';
11
+ /**
12
+ * Main secrets detector implementation
13
+ */
14
+ export declare class SecretsDetectorImpl implements ISecretsDetector {
15
+ private config;
16
+ private apiKeyDetector;
17
+ private tokenDetector;
18
+ private piiDetector;
19
+ constructor(config: SecretsDetectorConfig);
20
+ detect(context: SecretsDetectionContext): Promise<SecretsDetectionResult>;
21
+ /**
22
+ * Get all individual detection results (for detailed reporting)
23
+ */
24
+ detectAll(context: SecretsDetectionContext): Promise<SecretsDetectionResult[]>;
25
+ /**
26
+ * Get the configured action for detected secrets
27
+ */
28
+ getAction(): "block" | "confirm" | "agent-confirm" | "warn" | "log";
29
+ /**
30
+ * Check if the detector is enabled
31
+ */
32
+ isEnabled(): boolean;
33
+ }
34
+ /**
35
+ * Create a secrets detector from SecretsRule configuration
36
+ */
37
+ export declare function createSecretsDetector(rule: SecretsRule): SecretsDetectorImpl;
38
+ /**
39
+ * Create a secrets detector with default configuration
40
+ */
41
+ export declare function createDefaultSecretsDetector(): SecretsDetectorImpl;
42
+ export default SecretsDetectorImpl;
43
+ //# sourceMappingURL=index.d.ts.map