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,132 @@
1
+ /**
2
+ * Spend Tracker
3
+ * Monitors per-transaction and daily spending limits for purchase protection
4
+ */
5
+ import type { SpendLimits } from '../../config/index.js';
6
+ /**
7
+ * Record of a tracked spend transaction
8
+ */
9
+ export interface SpendRecord {
10
+ /** Amount of the transaction */
11
+ amount: number;
12
+ /** Unix timestamp when the transaction was recorded */
13
+ timestamp: number;
14
+ /** Unique identifier for the transaction */
15
+ transactionId: string;
16
+ /** Domain where the transaction occurred */
17
+ domain?: string;
18
+ /** Whether the transaction was approved */
19
+ approved: boolean;
20
+ }
21
+ /**
22
+ * Result of a spend limit check
23
+ */
24
+ export interface SpendLimitResult {
25
+ /** Whether the transaction is allowed */
26
+ allowed: boolean;
27
+ /** Which limit was exceeded, if any */
28
+ exceededLimit?: 'perTransaction' | 'daily';
29
+ /** Current total spent today */
30
+ currentDailyTotal: number;
31
+ /** Remaining amount allowed today */
32
+ remainingDaily: number;
33
+ /** Human-readable message */
34
+ message?: string;
35
+ }
36
+ /**
37
+ * Interface for the spend tracker
38
+ */
39
+ export interface ISpendTracker {
40
+ /** Record a transaction (after approval) */
41
+ record(amount: number, metadata?: {
42
+ transactionId?: string;
43
+ domain?: string;
44
+ }): void;
45
+ /** Check if a transaction would exceed limits */
46
+ checkLimits(amount: number, limits: SpendLimits): SpendLimitResult;
47
+ /** Get current daily total */
48
+ getDailyTotal(): number;
49
+ /** Get recent transactions */
50
+ getTransactions(since?: number): SpendRecord[];
51
+ /** Reset (for testing) */
52
+ reset(): void;
53
+ }
54
+ /**
55
+ * Extract amount from a string value
56
+ * @param value String that may contain an amount
57
+ * @returns Parsed amount or null if not found
58
+ */
59
+ export declare function extractAmount(value: string): number | null;
60
+ /**
61
+ * Extract amount from tool input
62
+ * Searches common field names for price/amount values
63
+ * @param toolInput Tool input object
64
+ * @returns Extracted amount or null
65
+ */
66
+ export declare function extractAmountFromInput(toolInput: Record<string, unknown>): number | null;
67
+ /**
68
+ * SpendTracker implementation
69
+ * Tracks spending transactions and enforces limits
70
+ */
71
+ export declare class SpendTracker implements ISpendTracker {
72
+ private transactions;
73
+ private readonly cleanupIntervalMs;
74
+ private lastCleanup;
75
+ /**
76
+ * Create a new SpendTracker
77
+ * @param cleanupIntervalMs How often to run cleanup (default: 1 hour)
78
+ */
79
+ constructor(cleanupIntervalMs?: number);
80
+ /**
81
+ * Record a transaction
82
+ * @param amount Transaction amount
83
+ * @param metadata Optional metadata (transactionId, domain)
84
+ */
85
+ record(amount: number, metadata?: {
86
+ transactionId?: string;
87
+ domain?: string;
88
+ }): void;
89
+ /**
90
+ * Check if a transaction would exceed limits
91
+ * @param amount Transaction amount
92
+ * @param limits Spend limits to check against
93
+ * @returns Result indicating if allowed and any exceeded limits
94
+ */
95
+ checkLimits(amount: number, limits: SpendLimits): SpendLimitResult;
96
+ /**
97
+ * Get total amount spent today
98
+ * @returns Sum of today's approved transactions
99
+ */
100
+ getDailyTotal(): number;
101
+ /**
102
+ * Get transactions since a given timestamp
103
+ * @param since Unix timestamp (default: start of today)
104
+ * @returns Array of transactions since the given time
105
+ */
106
+ getTransactions(since?: number): SpendRecord[];
107
+ /**
108
+ * Reset all tracked transactions (for testing)
109
+ */
110
+ reset(): void;
111
+ /**
112
+ * Run cleanup if enough time has passed
113
+ */
114
+ private maybeCleanup;
115
+ /**
116
+ * Remove transactions older than 24 hours
117
+ */
118
+ private cleanup;
119
+ }
120
+ /**
121
+ * Create a new SpendTracker instance
122
+ */
123
+ export declare function createSpendTracker(): SpendTracker;
124
+ /**
125
+ * Get the global spend tracker instance
126
+ */
127
+ export declare function getGlobalSpendTracker(): SpendTracker;
128
+ /**
129
+ * Reset the global spend tracker (for testing)
130
+ */
131
+ export declare function resetGlobalSpendTracker(): void;
132
+ //# sourceMappingURL=spend-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-tracker.d.ts","sourceRoot":"","sources":["../../../../src/detectors/purchase/spend-tracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,aAAa,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC3C,gCAAgC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACrF,iDAAiD;IACjD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACnE,8BAA8B;IAC9B,aAAa,IAAI,MAAM,CAAC;IACxB,8BAA8B;IAC9B,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAC/C,0BAA0B;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf;AAkBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4B1D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAoGxF;AAoBD;;;GAGG;AACH,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,WAAW,CAAsB;IAEzC;;;OAGG;gBACS,iBAAiB,GAAE,MAAuB;IAItD;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAepF;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,gBAAgB;IAqClE;;;OAGG;IACH,aAAa,IAAI,MAAM;IAOvB;;;;OAIG;IACH,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAO9C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,OAAO;CAIhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAOD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAKpD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C"}
@@ -0,0 +1,313 @@
1
+ /**
2
+ * Spend Tracker
3
+ * Monitors per-transaction and daily spending limits for purchase protection
4
+ */
5
+ /**
6
+ * Amount patterns for detecting prices in text
7
+ */
8
+ const AMOUNT_PATTERNS = [
9
+ // Currency with dollar sign: $100, $100.00, $1,000.00
10
+ /\$\s*([0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?)/,
11
+ // Currency with other symbols: €100, £100, ¥1000 (handle large numbers for yen)
12
+ /[€£¥]\s*([0-9]+(?:,?[0-9]{3})*(?:\.[0-9]{2})?)/,
13
+ // Labeled amounts: amount=100, price=99.99, total=50
14
+ /(?:amount|price|total|cost|value)\s*[=:]\s*([0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?)/i,
15
+ // USD/EUR labeled: 100 USD, 99.99 EUR
16
+ /([0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?)\s*(?:USD|EUR|GBP|CAD|AUD)/i,
17
+ // Plain decimal numbers (lower confidence): 99.99
18
+ /^([0-9]{1,6}\.[0-9]{2})$/,
19
+ ];
20
+ /**
21
+ * Extract amount from a string value
22
+ * @param value String that may contain an amount
23
+ * @returns Parsed amount or null if not found
24
+ */
25
+ export function extractAmount(value) {
26
+ if (!value || typeof value !== 'string') {
27
+ return null;
28
+ }
29
+ const cleanValue = value.trim();
30
+ for (const pattern of AMOUNT_PATTERNS) {
31
+ const match = cleanValue.match(pattern);
32
+ if (match && match[1]) {
33
+ // Remove commas and parse
34
+ const numStr = match[1].replace(/,/g, '');
35
+ const num = parseFloat(numStr);
36
+ if (!isNaN(num) && num > 0) {
37
+ return num;
38
+ }
39
+ }
40
+ }
41
+ // Try direct parse if it looks like a number
42
+ if (/^[0-9]+(?:\.[0-9]+)?$/.test(cleanValue)) {
43
+ const num = parseFloat(cleanValue);
44
+ if (!isNaN(num) && num > 0) {
45
+ return num;
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ /**
51
+ * Extract amount from tool input
52
+ * Searches common field names for price/amount values
53
+ * @param toolInput Tool input object
54
+ * @returns Extracted amount or null
55
+ */
56
+ export function extractAmountFromInput(toolInput) {
57
+ // Priority field names to check
58
+ const amountFields = [
59
+ 'amount',
60
+ 'price',
61
+ 'total',
62
+ 'cost',
63
+ 'value',
64
+ 'payment_amount',
65
+ 'paymentAmount',
66
+ 'transaction_amount',
67
+ 'transactionAmount',
68
+ 'subtotal',
69
+ 'grand_total',
70
+ 'grandTotal',
71
+ ];
72
+ // Check priority fields first
73
+ for (const field of amountFields) {
74
+ const value = toolInput[field];
75
+ if (value !== undefined && value !== null) {
76
+ if (typeof value === 'number' && value > 0) {
77
+ return value;
78
+ }
79
+ if (typeof value === 'string') {
80
+ const parsed = extractAmount(value);
81
+ if (parsed !== null) {
82
+ return parsed;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ // Check URL query parameters
88
+ const url = toolInput.url;
89
+ if (typeof url === 'string') {
90
+ try {
91
+ const urlObj = new URL(url.startsWith('http') ? url : `https://${url}`);
92
+ for (const field of amountFields) {
93
+ const param = urlObj.searchParams.get(field);
94
+ if (param) {
95
+ const parsed = extractAmount(param);
96
+ if (parsed !== null) {
97
+ return parsed;
98
+ }
99
+ }
100
+ }
101
+ }
102
+ catch {
103
+ // Invalid URL, ignore
104
+ }
105
+ }
106
+ // Check nested form data
107
+ const formData = toolInput.data || toolInput.body || toolInput.formData;
108
+ if (formData && typeof formData === 'object') {
109
+ const result = extractAmountFromInput(formData);
110
+ if (result !== null) {
111
+ return result;
112
+ }
113
+ }
114
+ // Check fields array (Playwright form fields)
115
+ const fields = toolInput.fields;
116
+ if (Array.isArray(fields)) {
117
+ for (const field of fields) {
118
+ if (field && typeof field === 'object') {
119
+ const name = field.name;
120
+ const value = field.value;
121
+ if (typeof name === 'string' && amountFields.includes(name.toLowerCase())) {
122
+ if (typeof value === 'number' && value > 0) {
123
+ return value;
124
+ }
125
+ if (typeof value === 'string') {
126
+ const parsed = extractAmount(value);
127
+ if (parsed !== null) {
128
+ return parsed;
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ // Scan all string values in the input for currency patterns (last resort)
136
+ for (const [key, value] of Object.entries(toolInput)) {
137
+ // Skip non-string values and known non-amount fields
138
+ if (typeof value !== 'string')
139
+ continue;
140
+ if (['url', 'path', 'href', 'selector', 'ref', 'element'].includes(key))
141
+ continue;
142
+ // Look for explicit currency patterns only
143
+ const currencyMatch = value.match(/\$\s*([0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?)/);
144
+ if (currencyMatch && currencyMatch[1]) {
145
+ const parsed = extractAmount(value);
146
+ if (parsed !== null) {
147
+ return parsed;
148
+ }
149
+ }
150
+ }
151
+ return null;
152
+ }
153
+ /**
154
+ * Generate a unique transaction ID
155
+ */
156
+ function generateTransactionId() {
157
+ const timestamp = Date.now().toString(36);
158
+ const random = Math.random().toString(36).substring(2, 8);
159
+ return `txn_${timestamp}_${random}`;
160
+ }
161
+ /**
162
+ * Get the start of today (midnight in local timezone)
163
+ */
164
+ function getStartOfDay(timestamp = Date.now()) {
165
+ const date = new Date(timestamp);
166
+ date.setHours(0, 0, 0, 0);
167
+ return date.getTime();
168
+ }
169
+ /**
170
+ * SpendTracker implementation
171
+ * Tracks spending transactions and enforces limits
172
+ */
173
+ export class SpendTracker {
174
+ transactions = [];
175
+ cleanupIntervalMs;
176
+ lastCleanup = Date.now();
177
+ /**
178
+ * Create a new SpendTracker
179
+ * @param cleanupIntervalMs How often to run cleanup (default: 1 hour)
180
+ */
181
+ constructor(cleanupIntervalMs = 60 * 60 * 1000) {
182
+ this.cleanupIntervalMs = cleanupIntervalMs;
183
+ }
184
+ /**
185
+ * Record a transaction
186
+ * @param amount Transaction amount
187
+ * @param metadata Optional metadata (transactionId, domain)
188
+ */
189
+ record(amount, metadata) {
190
+ // Run cleanup if needed
191
+ this.maybeCleanup();
192
+ const record = {
193
+ amount,
194
+ timestamp: Date.now(),
195
+ transactionId: metadata?.transactionId || generateTransactionId(),
196
+ domain: metadata?.domain,
197
+ approved: true,
198
+ };
199
+ this.transactions.push(record);
200
+ }
201
+ /**
202
+ * Check if a transaction would exceed limits
203
+ * @param amount Transaction amount
204
+ * @param limits Spend limits to check against
205
+ * @returns Result indicating if allowed and any exceeded limits
206
+ */
207
+ checkLimits(amount, limits) {
208
+ // Run cleanup if needed
209
+ this.maybeCleanup();
210
+ const dailyTotal = this.getDailyTotal();
211
+ const remainingDaily = Math.max(0, limits.daily - dailyTotal);
212
+ // Check per-transaction limit first
213
+ if (amount > limits.perTransaction) {
214
+ return {
215
+ allowed: false,
216
+ exceededLimit: 'perTransaction',
217
+ currentDailyTotal: dailyTotal,
218
+ remainingDaily,
219
+ message: `Transaction amount $${amount.toFixed(2)} exceeds per-transaction limit of $${limits.perTransaction.toFixed(2)}`,
220
+ };
221
+ }
222
+ // Check if adding this amount would exceed daily limit
223
+ if (dailyTotal + amount > limits.daily) {
224
+ return {
225
+ allowed: false,
226
+ exceededLimit: 'daily',
227
+ currentDailyTotal: dailyTotal,
228
+ remainingDaily,
229
+ message: `Transaction amount $${amount.toFixed(2)} would exceed daily limit of $${limits.daily.toFixed(2)} (current total: $${dailyTotal.toFixed(2)})`,
230
+ };
231
+ }
232
+ // Transaction is allowed
233
+ return {
234
+ allowed: true,
235
+ currentDailyTotal: dailyTotal,
236
+ remainingDaily: remainingDaily - amount,
237
+ };
238
+ }
239
+ /**
240
+ * Get total amount spent today
241
+ * @returns Sum of today's approved transactions
242
+ */
243
+ getDailyTotal() {
244
+ const startOfDay = getStartOfDay();
245
+ return this.transactions
246
+ .filter((t) => t.timestamp >= startOfDay && t.approved)
247
+ .reduce((sum, t) => sum + t.amount, 0);
248
+ }
249
+ /**
250
+ * Get transactions since a given timestamp
251
+ * @param since Unix timestamp (default: start of today)
252
+ * @returns Array of transactions since the given time
253
+ */
254
+ getTransactions(since) {
255
+ const cutoff = since ?? getStartOfDay();
256
+ return this.transactions
257
+ .filter((t) => t.timestamp >= cutoff)
258
+ .sort((a, b) => b.timestamp - a.timestamp);
259
+ }
260
+ /**
261
+ * Reset all tracked transactions (for testing)
262
+ */
263
+ reset() {
264
+ this.transactions = [];
265
+ this.lastCleanup = Date.now();
266
+ }
267
+ /**
268
+ * Run cleanup if enough time has passed
269
+ */
270
+ maybeCleanup() {
271
+ const now = Date.now();
272
+ if (now - this.lastCleanup >= this.cleanupIntervalMs) {
273
+ this.cleanup();
274
+ this.lastCleanup = now;
275
+ }
276
+ }
277
+ /**
278
+ * Remove transactions older than 24 hours
279
+ */
280
+ cleanup() {
281
+ const cutoff = Date.now() - 24 * 60 * 60 * 1000;
282
+ this.transactions = this.transactions.filter((t) => t.timestamp >= cutoff);
283
+ }
284
+ }
285
+ /**
286
+ * Create a new SpendTracker instance
287
+ */
288
+ export function createSpendTracker() {
289
+ return new SpendTracker();
290
+ }
291
+ /**
292
+ * Singleton instance for the global spend tracker
293
+ */
294
+ let globalSpendTracker = null;
295
+ /**
296
+ * Get the global spend tracker instance
297
+ */
298
+ export function getGlobalSpendTracker() {
299
+ if (!globalSpendTracker) {
300
+ globalSpendTracker = new SpendTracker();
301
+ }
302
+ return globalSpendTracker;
303
+ }
304
+ /**
305
+ * Reset the global spend tracker (for testing)
306
+ */
307
+ export function resetGlobalSpendTracker() {
308
+ if (globalSpendTracker) {
309
+ globalSpendTracker.reset();
310
+ }
311
+ globalSpendTracker = null;
312
+ }
313
+ //# sourceMappingURL=spend-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-tracker.js","sourceRoot":"","sources":["../../../../src/detectors/purchase/spend-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Purchase Detector Types
3
+ * Type definitions for the purchase/transaction detection system
4
+ */
5
+ import type { Severity, Action } from '../../config/index.js';
6
+ /**
7
+ * Detection context passed to detectors
8
+ */
9
+ export interface DetectionContext {
10
+ /** Name of the tool being invoked */
11
+ toolName: string;
12
+ /** Input parameters to the tool */
13
+ toolInput: Record<string, unknown>;
14
+ /** URL being accessed (for browser/navigation tools) */
15
+ url?: string;
16
+ }
17
+ /**
18
+ * Result of a detection operation
19
+ */
20
+ export interface DetectionResult {
21
+ /** Whether a purchase/transaction was detected */
22
+ detected: boolean;
23
+ /** Category of the detection */
24
+ category: 'purchase';
25
+ /** Severity level of the detection */
26
+ severity: Severity;
27
+ /** Confidence score from 0 to 1 */
28
+ confidence: number;
29
+ /** Human-readable reason for the detection */
30
+ reason: string;
31
+ /** Additional metadata about the detection */
32
+ metadata?: {
33
+ /** Domain that triggered the detection */
34
+ domain?: string;
35
+ /** URL that triggered the detection */
36
+ url?: string;
37
+ /** Form fields that triggered the detection */
38
+ formFields?: string[];
39
+ /** Pattern that matched */
40
+ matchedPattern?: string;
41
+ /** Detected amount from the transaction */
42
+ amount?: number;
43
+ /** Spend limit that was exceeded */
44
+ exceededLimit?: 'perTransaction' | 'daily';
45
+ /** Current daily total at time of detection */
46
+ currentDailyTotal?: number;
47
+ };
48
+ }
49
+ /**
50
+ * Configuration for the purchase detector
51
+ */
52
+ export interface PurchaseDetectorConfig {
53
+ /** Whether the detector is enabled */
54
+ enabled: boolean;
55
+ /** Severity level to assign to detections */
56
+ severity: Severity;
57
+ /** Action to take when purchase is detected */
58
+ action: Action;
59
+ /** Domain configuration */
60
+ domains?: {
61
+ /** Mode for domain filtering */
62
+ mode: 'blocklist' | 'allowlist';
63
+ /** Domains to block */
64
+ blocklist: string[];
65
+ };
66
+ /** Spending limits configuration */
67
+ spendLimits?: {
68
+ /** Maximum amount per transaction */
69
+ perTransaction: number;
70
+ /** Maximum daily spending amount */
71
+ daily: number;
72
+ };
73
+ }
74
+ /**
75
+ * Interface for the main purchase detector
76
+ */
77
+ export interface PurchaseDetector {
78
+ /**
79
+ * Detect purchase/transaction attempts
80
+ * @param context Detection context with tool information
81
+ * @returns Detection result
82
+ */
83
+ detect(context: DetectionContext): Promise<DetectionResult>;
84
+ }
85
+ /**
86
+ * Interface for sub-detectors (domain, URL, form)
87
+ */
88
+ export interface SubDetector {
89
+ /**
90
+ * Check if the given context matches this detector's patterns
91
+ * @param context Detection context
92
+ * @returns Detection result or null if no match
93
+ */
94
+ detect(context: DetectionContext): DetectionResult | null;
95
+ }
96
+ /**
97
+ * Domain match result with confidence
98
+ */
99
+ export interface DomainMatchResult {
100
+ /** Whether a match was found */
101
+ matched: boolean;
102
+ /** The domain that matched */
103
+ domain?: string;
104
+ /** The pattern that matched */
105
+ pattern?: string;
106
+ /** Match type */
107
+ matchType?: 'exact' | 'glob' | 'keyword';
108
+ /** Confidence score */
109
+ confidence: number;
110
+ }
111
+ /**
112
+ * URL match result with confidence
113
+ */
114
+ export interface UrlMatchResult {
115
+ /** Whether a match was found */
116
+ matched: boolean;
117
+ /** The URL that matched */
118
+ url?: string;
119
+ /** The pattern that matched */
120
+ pattern?: string;
121
+ /** Match type */
122
+ matchType?: 'path' | 'api';
123
+ /** Confidence score */
124
+ confidence: number;
125
+ }
126
+ /**
127
+ * Form field match result
128
+ */
129
+ export interface FormFieldMatchResult {
130
+ /** Whether a match was found */
131
+ matched: boolean;
132
+ /** Fields that matched */
133
+ fields?: string[];
134
+ /** Patterns that matched */
135
+ patterns?: string[];
136
+ /** Confidence score */
137
+ confidence: number;
138
+ }
139
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/detectors/purchase/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Purchase Detector Types
3
+ * Type definitions for the purchase/transaction detection system
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/detectors/purchase/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * URL Pattern Detector
3
+ * Detects purchase-related URL paths and API endpoints
4
+ */
5
+ import type { UrlMatchResult, DetectionContext, DetectionResult, SubDetector } from './types.js';
6
+ import type { Severity } from '../../config/index.js';
7
+ /**
8
+ * Extract path from URL
9
+ */
10
+ export declare function extractPath(url: string): string | null;
11
+ /**
12
+ * Check URL path against known payment paths
13
+ */
14
+ export declare function matchUrlPath(url: string): UrlMatchResult;
15
+ /**
16
+ * URL pattern detector class
17
+ */
18
+ export declare class UrlDetector implements SubDetector {
19
+ private severity;
20
+ constructor(severity?: Severity);
21
+ /**
22
+ * Extract URL from tool context
23
+ */
24
+ private extractUrl;
25
+ detect(context: DetectionContext): DetectionResult | null;
26
+ }
27
+ /**
28
+ * Create a URL detector with the given configuration
29
+ */
30
+ export declare function createUrlDetector(severity?: Severity): UrlDetector;
31
+ //# sourceMappingURL=url-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-detector.d.ts","sourceRoot":"","sources":["../../../../src/detectors/purchase/url-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA0HtD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBtD;AAUD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CA6ExD;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,GAAE,QAAqB;IAI3C;;OAEG;IACH,OAAO,CAAC,UAAU;IAiClB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,GAAG,IAAI;CA4B1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,QAAqB,GAAG,WAAW,CAE9E"}