raxe 0.4.6__py3-none-any.whl

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 (668) hide show
  1. raxe/__init__.py +101 -0
  2. raxe/application/__init__.py +48 -0
  3. raxe/application/ab_testing.py +170 -0
  4. raxe/application/analytics/__init__.py +30 -0
  5. raxe/application/analytics/achievement_service.py +444 -0
  6. raxe/application/analytics/repositories.py +172 -0
  7. raxe/application/analytics/retention_service.py +267 -0
  8. raxe/application/analytics/statistics_service.py +419 -0
  9. raxe/application/analytics/streak_service.py +283 -0
  10. raxe/application/apply_policy.py +291 -0
  11. raxe/application/eager_l2.py +503 -0
  12. raxe/application/preloader.py +353 -0
  13. raxe/application/scan_merger.py +321 -0
  14. raxe/application/scan_pipeline.py +1059 -0
  15. raxe/application/scan_pipeline_async.py +403 -0
  16. raxe/application/session_tracker.py +458 -0
  17. raxe/application/telemetry_manager.py +357 -0
  18. raxe/application/telemetry_orchestrator.py +1210 -0
  19. raxe/async_sdk/__init__.py +34 -0
  20. raxe/async_sdk/cache.py +286 -0
  21. raxe/async_sdk/client.py +556 -0
  22. raxe/async_sdk/wrappers/__init__.py +23 -0
  23. raxe/async_sdk/wrappers/openai.py +238 -0
  24. raxe/cli/__init__.py +21 -0
  25. raxe/cli/auth.py +1047 -0
  26. raxe/cli/branding.py +235 -0
  27. raxe/cli/config.py +334 -0
  28. raxe/cli/custom_rules.py +458 -0
  29. raxe/cli/doctor.py +686 -0
  30. raxe/cli/error_handler.py +665 -0
  31. raxe/cli/event.py +648 -0
  32. raxe/cli/exit_codes.py +57 -0
  33. raxe/cli/expiry_warning.py +302 -0
  34. raxe/cli/export.py +183 -0
  35. raxe/cli/history.py +247 -0
  36. raxe/cli/l2_formatter.py +872 -0
  37. raxe/cli/main.py +1137 -0
  38. raxe/cli/models.py +590 -0
  39. raxe/cli/output.py +403 -0
  40. raxe/cli/privacy.py +84 -0
  41. raxe/cli/profiler.py +262 -0
  42. raxe/cli/progress.py +379 -0
  43. raxe/cli/progress_context.py +101 -0
  44. raxe/cli/repl.py +394 -0
  45. raxe/cli/rules.py +542 -0
  46. raxe/cli/setup_wizard.py +721 -0
  47. raxe/cli/stats.py +292 -0
  48. raxe/cli/suppress.py +501 -0
  49. raxe/cli/telemetry.py +1384 -0
  50. raxe/cli/test.py +130 -0
  51. raxe/cli/tune.py +315 -0
  52. raxe/cli/validate.py +218 -0
  53. raxe/domain/__init__.py +30 -0
  54. raxe/domain/analytics/__init__.py +97 -0
  55. raxe/domain/analytics/achievements.py +306 -0
  56. raxe/domain/analytics/models.py +120 -0
  57. raxe/domain/analytics/retention.py +168 -0
  58. raxe/domain/analytics/statistics.py +207 -0
  59. raxe/domain/analytics/streaks.py +173 -0
  60. raxe/domain/engine/__init__.py +15 -0
  61. raxe/domain/engine/executor.py +396 -0
  62. raxe/domain/engine/matcher.py +212 -0
  63. raxe/domain/inline_suppression.py +176 -0
  64. raxe/domain/ml/__init__.py +133 -0
  65. raxe/domain/ml/embedding_cache.py +309 -0
  66. raxe/domain/ml/gemma_detector.py +921 -0
  67. raxe/domain/ml/gemma_models.py +346 -0
  68. raxe/domain/ml/l2_config.py +428 -0
  69. raxe/domain/ml/l2_output_schema.py +443 -0
  70. raxe/domain/ml/manifest_loader.py +309 -0
  71. raxe/domain/ml/manifest_schema.py +345 -0
  72. raxe/domain/ml/model_metadata.py +263 -0
  73. raxe/domain/ml/model_registry.py +786 -0
  74. raxe/domain/ml/protocol.py +282 -0
  75. raxe/domain/ml/scoring_models.py +419 -0
  76. raxe/domain/ml/stub_detector.py +397 -0
  77. raxe/domain/ml/threat_scorer.py +757 -0
  78. raxe/domain/ml/tokenizer_registry.py +372 -0
  79. raxe/domain/ml/voting/__init__.py +89 -0
  80. raxe/domain/ml/voting/config.py +595 -0
  81. raxe/domain/ml/voting/engine.py +465 -0
  82. raxe/domain/ml/voting/head_voters.py +378 -0
  83. raxe/domain/ml/voting/models.py +222 -0
  84. raxe/domain/models.py +82 -0
  85. raxe/domain/packs/__init__.py +17 -0
  86. raxe/domain/packs/models.py +304 -0
  87. raxe/domain/policies/__init__.py +20 -0
  88. raxe/domain/policies/evaluator.py +212 -0
  89. raxe/domain/policies/models.py +223 -0
  90. raxe/domain/rules/__init__.py +32 -0
  91. raxe/domain/rules/custom.py +286 -0
  92. raxe/domain/rules/models.py +273 -0
  93. raxe/domain/rules/schema.py +166 -0
  94. raxe/domain/rules/validator.py +556 -0
  95. raxe/domain/suppression.py +801 -0
  96. raxe/domain/suppression_factory.py +174 -0
  97. raxe/domain/telemetry/__init__.py +116 -0
  98. raxe/domain/telemetry/backpressure.py +424 -0
  99. raxe/domain/telemetry/event_creator.py +362 -0
  100. raxe/domain/telemetry/events.py +1282 -0
  101. raxe/domain/telemetry/priority.py +263 -0
  102. raxe/domain/telemetry/scan_telemetry_builder.py +670 -0
  103. raxe/infrastructure/__init__.py +25 -0
  104. raxe/infrastructure/analytics/__init__.py +18 -0
  105. raxe/infrastructure/analytics/aggregator.py +484 -0
  106. raxe/infrastructure/analytics/aggregator_optimized.py +184 -0
  107. raxe/infrastructure/analytics/engine.py +748 -0
  108. raxe/infrastructure/analytics/repository.py +409 -0
  109. raxe/infrastructure/analytics/streaks.py +467 -0
  110. raxe/infrastructure/analytics/views.py +178 -0
  111. raxe/infrastructure/cloud/__init__.py +9 -0
  112. raxe/infrastructure/config/__init__.py +56 -0
  113. raxe/infrastructure/config/endpoints.py +641 -0
  114. raxe/infrastructure/config/scan_config.py +352 -0
  115. raxe/infrastructure/config/yaml_config.py +459 -0
  116. raxe/infrastructure/database/__init__.py +10 -0
  117. raxe/infrastructure/database/connection.py +200 -0
  118. raxe/infrastructure/database/models.py +325 -0
  119. raxe/infrastructure/database/scan_history.py +764 -0
  120. raxe/infrastructure/ml/__init__.py +0 -0
  121. raxe/infrastructure/ml/download_progress.py +438 -0
  122. raxe/infrastructure/ml/model_downloader.py +457 -0
  123. raxe/infrastructure/models/__init__.py +16 -0
  124. raxe/infrastructure/models/discovery.py +461 -0
  125. raxe/infrastructure/packs/__init__.py +13 -0
  126. raxe/infrastructure/packs/loader.py +407 -0
  127. raxe/infrastructure/packs/registry.py +381 -0
  128. raxe/infrastructure/policies/__init__.py +16 -0
  129. raxe/infrastructure/policies/api_client.py +256 -0
  130. raxe/infrastructure/policies/validator.py +227 -0
  131. raxe/infrastructure/policies/yaml_loader.py +250 -0
  132. raxe/infrastructure/rules/__init__.py +18 -0
  133. raxe/infrastructure/rules/custom_loader.py +224 -0
  134. raxe/infrastructure/rules/versioning.py +222 -0
  135. raxe/infrastructure/rules/yaml_loader.py +286 -0
  136. raxe/infrastructure/security/__init__.py +31 -0
  137. raxe/infrastructure/security/auth.py +145 -0
  138. raxe/infrastructure/security/policy_validator.py +124 -0
  139. raxe/infrastructure/security/signatures.py +171 -0
  140. raxe/infrastructure/suppression/__init__.py +36 -0
  141. raxe/infrastructure/suppression/composite_repository.py +154 -0
  142. raxe/infrastructure/suppression/sqlite_repository.py +231 -0
  143. raxe/infrastructure/suppression/yaml_composite_repository.py +156 -0
  144. raxe/infrastructure/suppression/yaml_repository.py +510 -0
  145. raxe/infrastructure/telemetry/__init__.py +79 -0
  146. raxe/infrastructure/telemetry/acquisition.py +179 -0
  147. raxe/infrastructure/telemetry/config.py +254 -0
  148. raxe/infrastructure/telemetry/credential_store.py +947 -0
  149. raxe/infrastructure/telemetry/dual_queue.py +1123 -0
  150. raxe/infrastructure/telemetry/flush_helper.py +343 -0
  151. raxe/infrastructure/telemetry/flush_scheduler.py +776 -0
  152. raxe/infrastructure/telemetry/health_client.py +394 -0
  153. raxe/infrastructure/telemetry/hook.py +347 -0
  154. raxe/infrastructure/telemetry/queue.py +520 -0
  155. raxe/infrastructure/telemetry/sender.py +476 -0
  156. raxe/infrastructure/tracking/__init__.py +13 -0
  157. raxe/infrastructure/tracking/usage.py +389 -0
  158. raxe/integrations/__init__.py +55 -0
  159. raxe/integrations/availability.py +143 -0
  160. raxe/integrations/registry.py +122 -0
  161. raxe/integrations/utils.py +135 -0
  162. raxe/mcp/__init__.py +62 -0
  163. raxe/mcp/cli.py +97 -0
  164. raxe/mcp/server.py +409 -0
  165. raxe/monitoring/__init__.py +51 -0
  166. raxe/monitoring/metrics.py +372 -0
  167. raxe/monitoring/profiler.py +388 -0
  168. raxe/monitoring/server.py +136 -0
  169. raxe/packs/core/v1.0.0/pack.yaml +1394 -0
  170. raxe/packs/core/v1.0.0/rules/PI/pi-001@1.0.0.yaml +49 -0
  171. raxe/packs/core/v1.0.0/rules/PI/pi-006@1.0.0.yaml +48 -0
  172. raxe/packs/core/v1.0.0/rules/PI/pi-014@1.0.0.yaml +54 -0
  173. raxe/packs/core/v1.0.0/rules/PI/pi-017@1.0.0.yaml +52 -0
  174. raxe/packs/core/v1.0.0/rules/PI/pi-022@1.0.0.yaml +67 -0
  175. raxe/packs/core/v1.0.0/rules/PI/pi-023@1.0.0.yaml +91 -0
  176. raxe/packs/core/v1.0.0/rules/PI/pi-024@1.0.0.yaml +80 -0
  177. raxe/packs/core/v1.0.0/rules/PI/pi-025@1.0.0.yaml +81 -0
  178. raxe/packs/core/v1.0.0/rules/PI/pi-026@1.0.0.yaml +50 -0
  179. raxe/packs/core/v1.0.0/rules/PI/pi-027@1.0.0.yaml +77 -0
  180. raxe/packs/core/v1.0.0/rules/PI/pi-028@1.0.0.yaml +52 -0
  181. raxe/packs/core/v1.0.0/rules/PI/pi-029@1.0.0.yaml +51 -0
  182. raxe/packs/core/v1.0.0/rules/PI/pi-030@1.0.0.yaml +55 -0
  183. raxe/packs/core/v1.0.0/rules/PI/pi-033@1.0.0.yaml +50 -0
  184. raxe/packs/core/v1.0.0/rules/PI/pi-034@1.0.0.yaml +50 -0
  185. raxe/packs/core/v1.0.0/rules/PI/pi-035@1.0.0.yaml +50 -0
  186. raxe/packs/core/v1.0.0/rules/PI/pi-046@1.0.0.yaml +50 -0
  187. raxe/packs/core/v1.0.0/rules/PI/pi-047@1.0.0.yaml +50 -0
  188. raxe/packs/core/v1.0.0/rules/PI/pi-048@1.0.0.yaml +50 -0
  189. raxe/packs/core/v1.0.0/rules/PI/pi-049@1.0.0.yaml +50 -0
  190. raxe/packs/core/v1.0.0/rules/PI/pi-050@1.0.0.yaml +50 -0
  191. raxe/packs/core/v1.0.0/rules/PI/pi-068@1.0.0.yaml +50 -0
  192. raxe/packs/core/v1.0.0/rules/PI/pi-078@1.0.0.yaml +50 -0
  193. raxe/packs/core/v1.0.0/rules/PI/pi-2001@1.0.0.yaml +35 -0
  194. raxe/packs/core/v1.0.0/rules/PI/pi-2004@1.0.0.yaml +39 -0
  195. raxe/packs/core/v1.0.0/rules/PI/pi-201@1.0.0.yaml +43 -0
  196. raxe/packs/core/v1.0.0/rules/PI/pi-202@1.0.0.yaml +47 -0
  197. raxe/packs/core/v1.0.0/rules/PI/pi-203@1.0.0.yaml +46 -0
  198. raxe/packs/core/v1.0.0/rules/PI/pi-3007@1.0.0.yaml +44 -0
  199. raxe/packs/core/v1.0.0/rules/PI/pi-3016@1.0.0.yaml +44 -0
  200. raxe/packs/core/v1.0.0/rules/PI/pi-3026@1.0.0.yaml +39 -0
  201. raxe/packs/core/v1.0.0/rules/PI/pi-3027@1.0.0.yaml +64 -0
  202. raxe/packs/core/v1.0.0/rules/PI/pi-3028@1.0.0.yaml +51 -0
  203. raxe/packs/core/v1.0.0/rules/PI/pi-3029@1.0.0.yaml +53 -0
  204. raxe/packs/core/v1.0.0/rules/PI/pi-3030@1.0.0.yaml +50 -0
  205. raxe/packs/core/v1.0.0/rules/PI/pi-3031@1.0.0.yaml +50 -0
  206. raxe/packs/core/v1.0.0/rules/PI/pi-3032@1.0.0.yaml +50 -0
  207. raxe/packs/core/v1.0.0/rules/PI/pi-3033@1.0.0.yaml +56 -0
  208. raxe/packs/core/v1.0.0/rules/PI/pi-3034@1.0.0.yaml +50 -0
  209. raxe/packs/core/v1.0.0/rules/PI/pi-79@1.0.0.yaml +38 -0
  210. raxe/packs/core/v1.0.0/rules/PI/pi-80@1.0.0.yaml +38 -0
  211. raxe/packs/core/v1.0.0/rules/PI/pi-81@1.0.0.yaml +38 -0
  212. raxe/packs/core/v1.0.0/rules/PI/pi-82@1.0.0.yaml +38 -0
  213. raxe/packs/core/v1.0.0/rules/PI/pi-83@1.0.0.yaml +38 -0
  214. raxe/packs/core/v1.0.0/rules/PI/pi-84@1.0.0.yaml +38 -0
  215. raxe/packs/core/v1.0.0/rules/PI/pi-85@1.0.0.yaml +38 -0
  216. raxe/packs/core/v1.0.0/rules/PI/pi-86@1.0.0.yaml +38 -0
  217. raxe/packs/core/v1.0.0/rules/PI/pi-87@1.0.0.yaml +38 -0
  218. raxe/packs/core/v1.0.0/rules/PI/pi-88@1.0.0.yaml +38 -0
  219. raxe/packs/core/v1.0.0/rules/PI/pi-89@1.0.0.yaml +38 -0
  220. raxe/packs/core/v1.0.0/rules/PI/pi-90@1.0.0.yaml +38 -0
  221. raxe/packs/core/v1.0.0/rules/PI/pi-91@1.0.0.yaml +38 -0
  222. raxe/packs/core/v1.0.0/rules/PI/pi-92@1.0.0.yaml +38 -0
  223. raxe/packs/core/v1.0.0/rules/PI/pi-93@1.0.0.yaml +38 -0
  224. raxe/packs/core/v1.0.0/rules/PI/pi-94@1.0.0.yaml +38 -0
  225. raxe/packs/core/v1.0.0/rules/PI/pi-95@1.0.0.yaml +38 -0
  226. raxe/packs/core/v1.0.0/rules/PI/pi-96@1.0.0.yaml +38 -0
  227. raxe/packs/core/v1.0.0/rules/PI/pi-97@1.0.0.yaml +38 -0
  228. raxe/packs/core/v1.0.0/rules/PI/pi-98@1.0.0.yaml +38 -0
  229. raxe/packs/core/v1.0.0/rules/cmd/cmd-001@1.0.0.yaml +48 -0
  230. raxe/packs/core/v1.0.0/rules/cmd/cmd-007@1.0.0.yaml +48 -0
  231. raxe/packs/core/v1.0.0/rules/cmd/cmd-015@1.0.0.yaml +56 -0
  232. raxe/packs/core/v1.0.0/rules/cmd/cmd-016@1.0.0.yaml +46 -0
  233. raxe/packs/core/v1.0.0/rules/cmd/cmd-017@1.0.0.yaml +57 -0
  234. raxe/packs/core/v1.0.0/rules/cmd/cmd-021@1.0.0.yaml +46 -0
  235. raxe/packs/core/v1.0.0/rules/cmd/cmd-022@1.0.0.yaml +46 -0
  236. raxe/packs/core/v1.0.0/rules/cmd/cmd-023@1.0.0.yaml +78 -0
  237. raxe/packs/core/v1.0.0/rules/cmd/cmd-024@1.0.0.yaml +46 -0
  238. raxe/packs/core/v1.0.0/rules/cmd/cmd-025@1.0.0.yaml +93 -0
  239. raxe/packs/core/v1.0.0/rules/cmd/cmd-026@1.0.0.yaml +81 -0
  240. raxe/packs/core/v1.0.0/rules/cmd/cmd-027@1.0.0.yaml +82 -0
  241. raxe/packs/core/v1.0.0/rules/cmd/cmd-028@1.0.0.yaml +46 -0
  242. raxe/packs/core/v1.0.0/rules/cmd/cmd-033@1.0.0.yaml +48 -0
  243. raxe/packs/core/v1.0.0/rules/cmd/cmd-036@1.0.0.yaml +47 -0
  244. raxe/packs/core/v1.0.0/rules/cmd/cmd-037@1.0.0.yaml +44 -0
  245. raxe/packs/core/v1.0.0/rules/cmd/cmd-052@1.0.0.yaml +43 -0
  246. raxe/packs/core/v1.0.0/rules/cmd/cmd-054@1.0.0.yaml +44 -0
  247. raxe/packs/core/v1.0.0/rules/cmd/cmd-056@1.0.0.yaml +43 -0
  248. raxe/packs/core/v1.0.0/rules/cmd/cmd-065@1.0.0.yaml +46 -0
  249. raxe/packs/core/v1.0.0/rules/cmd/cmd-075@1.0.0.yaml +45 -0
  250. raxe/packs/core/v1.0.0/rules/cmd/cmd-079@1.0.0.yaml +44 -0
  251. raxe/packs/core/v1.0.0/rules/cmd/cmd-1080@1.0.0.yaml +41 -0
  252. raxe/packs/core/v1.0.0/rules/cmd/cmd-1090@1.0.0.yaml +41 -0
  253. raxe/packs/core/v1.0.0/rules/cmd/cmd-1104@1.0.0.yaml +44 -0
  254. raxe/packs/core/v1.0.0/rules/cmd/cmd-1105@1.0.0.yaml +41 -0
  255. raxe/packs/core/v1.0.0/rules/cmd/cmd-1112@1.0.0.yaml +44 -0
  256. raxe/packs/core/v1.0.0/rules/cmd/cmd-201@1.0.0.yaml +47 -0
  257. raxe/packs/core/v1.0.0/rules/cmd/cmd-202@1.0.0.yaml +42 -0
  258. raxe/packs/core/v1.0.0/rules/cmd/cmd-203@1.0.0.yaml +43 -0
  259. raxe/packs/core/v1.0.0/rules/cmd/cmd-204@1.0.0.yaml +47 -0
  260. raxe/packs/core/v1.0.0/rules/cmd/cmd-205@1.0.0.yaml +44 -0
  261. raxe/packs/core/v1.0.0/rules/cmd/cmd-206@1.0.0.yaml +47 -0
  262. raxe/packs/core/v1.0.0/rules/cmd/cmd-207@1.0.0.yaml +46 -0
  263. raxe/packs/core/v1.0.0/rules/cmd/cmd-208@1.0.0.yaml +42 -0
  264. raxe/packs/core/v1.0.0/rules/cmd/cmd-209@1.0.0.yaml +38 -0
  265. raxe/packs/core/v1.0.0/rules/cmd/cmd-210@1.0.0.yaml +38 -0
  266. raxe/packs/core/v1.0.0/rules/cmd/cmd-211@1.0.0.yaml +38 -0
  267. raxe/packs/core/v1.0.0/rules/cmd/cmd-212@1.0.0.yaml +38 -0
  268. raxe/packs/core/v1.0.0/rules/cmd/cmd-213@1.0.0.yaml +38 -0
  269. raxe/packs/core/v1.0.0/rules/cmd/cmd-214@1.0.0.yaml +38 -0
  270. raxe/packs/core/v1.0.0/rules/cmd/cmd-215@1.0.0.yaml +38 -0
  271. raxe/packs/core/v1.0.0/rules/cmd/cmd-216@1.0.0.yaml +38 -0
  272. raxe/packs/core/v1.0.0/rules/cmd/cmd-217@1.0.0.yaml +38 -0
  273. raxe/packs/core/v1.0.0/rules/cmd/cmd-218@1.0.0.yaml +38 -0
  274. raxe/packs/core/v1.0.0/rules/cmd/cmd-219@1.0.0.yaml +38 -0
  275. raxe/packs/core/v1.0.0/rules/cmd/cmd-220@1.0.0.yaml +38 -0
  276. raxe/packs/core/v1.0.0/rules/cmd/cmd-221@1.0.0.yaml +38 -0
  277. raxe/packs/core/v1.0.0/rules/cmd/cmd-222@1.0.0.yaml +38 -0
  278. raxe/packs/core/v1.0.0/rules/cmd/cmd-223@1.0.0.yaml +38 -0
  279. raxe/packs/core/v1.0.0/rules/cmd/cmd-224@1.0.0.yaml +38 -0
  280. raxe/packs/core/v1.0.0/rules/cmd/cmd-225@1.0.0.yaml +38 -0
  281. raxe/packs/core/v1.0.0/rules/cmd/cmd-226@1.0.0.yaml +38 -0
  282. raxe/packs/core/v1.0.0/rules/cmd/cmd-227@1.0.0.yaml +38 -0
  283. raxe/packs/core/v1.0.0/rules/cmd/cmd-228@1.0.0.yaml +38 -0
  284. raxe/packs/core/v1.0.0/rules/cmd/cmd-229@1.0.0.yaml +38 -0
  285. raxe/packs/core/v1.0.0/rules/cmd/cmd-230@1.0.0.yaml +38 -0
  286. raxe/packs/core/v1.0.0/rules/cmd/cmd-231@1.0.0.yaml +38 -0
  287. raxe/packs/core/v1.0.0/rules/cmd/cmd-232@1.0.0.yaml +38 -0
  288. raxe/packs/core/v1.0.0/rules/cmd/cmd-233@1.0.0.yaml +38 -0
  289. raxe/packs/core/v1.0.0/rules/cmd/cmd-234@1.0.0.yaml +38 -0
  290. raxe/packs/core/v1.0.0/rules/cmd/cmd-235@1.0.0.yaml +38 -0
  291. raxe/packs/core/v1.0.0/rules/cmd/cmd-236@1.0.0.yaml +38 -0
  292. raxe/packs/core/v1.0.0/rules/cmd/cmd-237@1.0.0.yaml +38 -0
  293. raxe/packs/core/v1.0.0/rules/cmd/cmd-238@1.0.0.yaml +38 -0
  294. raxe/packs/core/v1.0.0/rules/enc/enc-001@1.0.0.yaml +48 -0
  295. raxe/packs/core/v1.0.0/rules/enc/enc-013@1.0.0.yaml +46 -0
  296. raxe/packs/core/v1.0.0/rules/enc/enc-019@1.0.0.yaml +43 -0
  297. raxe/packs/core/v1.0.0/rules/enc/enc-020@1.0.0.yaml +47 -0
  298. raxe/packs/core/v1.0.0/rules/enc/enc-024@1.0.0.yaml +46 -0
  299. raxe/packs/core/v1.0.0/rules/enc/enc-029@1.0.0.yaml +44 -0
  300. raxe/packs/core/v1.0.0/rules/enc/enc-038@1.0.0.yaml +44 -0
  301. raxe/packs/core/v1.0.0/rules/enc/enc-044@1.0.0.yaml +46 -0
  302. raxe/packs/core/v1.0.0/rules/enc/enc-067@1.0.0.yaml +42 -0
  303. raxe/packs/core/v1.0.0/rules/enc/enc-069@1.0.0.yaml +42 -0
  304. raxe/packs/core/v1.0.0/rules/enc/enc-100@1.0.0.yaml +38 -0
  305. raxe/packs/core/v1.0.0/rules/enc/enc-101@1.0.0.yaml +38 -0
  306. raxe/packs/core/v1.0.0/rules/enc/enc-102@1.0.0.yaml +38 -0
  307. raxe/packs/core/v1.0.0/rules/enc/enc-103@1.0.0.yaml +38 -0
  308. raxe/packs/core/v1.0.0/rules/enc/enc-104@1.0.0.yaml +38 -0
  309. raxe/packs/core/v1.0.0/rules/enc/enc-105@1.0.0.yaml +38 -0
  310. raxe/packs/core/v1.0.0/rules/enc/enc-106@1.0.0.yaml +38 -0
  311. raxe/packs/core/v1.0.0/rules/enc/enc-107@1.0.0.yaml +38 -0
  312. raxe/packs/core/v1.0.0/rules/enc/enc-108@1.0.0.yaml +38 -0
  313. raxe/packs/core/v1.0.0/rules/enc/enc-109@1.0.0.yaml +38 -0
  314. raxe/packs/core/v1.0.0/rules/enc/enc-110@1.0.0.yaml +38 -0
  315. raxe/packs/core/v1.0.0/rules/enc/enc-111@1.0.0.yaml +38 -0
  316. raxe/packs/core/v1.0.0/rules/enc/enc-112@1.0.0.yaml +38 -0
  317. raxe/packs/core/v1.0.0/rules/enc/enc-113@1.0.0.yaml +38 -0
  318. raxe/packs/core/v1.0.0/rules/enc/enc-114@1.0.0.yaml +38 -0
  319. raxe/packs/core/v1.0.0/rules/enc/enc-115@1.0.0.yaml +38 -0
  320. raxe/packs/core/v1.0.0/rules/enc/enc-116@1.0.0.yaml +38 -0
  321. raxe/packs/core/v1.0.0/rules/enc/enc-117@1.0.0.yaml +38 -0
  322. raxe/packs/core/v1.0.0/rules/enc/enc-118@1.0.0.yaml +38 -0
  323. raxe/packs/core/v1.0.0/rules/enc/enc-119@1.0.0.yaml +38 -0
  324. raxe/packs/core/v1.0.0/rules/enc/enc-120@1.0.0.yaml +38 -0
  325. raxe/packs/core/v1.0.0/rules/enc/enc-201@1.0.0.yaml +37 -0
  326. raxe/packs/core/v1.0.0/rules/enc/enc-202@1.0.0.yaml +41 -0
  327. raxe/packs/core/v1.0.0/rules/enc/enc-203@1.0.0.yaml +41 -0
  328. raxe/packs/core/v1.0.0/rules/enc/enc-3004@1.0.0.yaml +40 -0
  329. raxe/packs/core/v1.0.0/rules/enc/enc-3006@1.0.0.yaml +40 -0
  330. raxe/packs/core/v1.0.0/rules/enc/enc-3011@1.0.0.yaml +40 -0
  331. raxe/packs/core/v1.0.0/rules/enc/enc-5016@1.0.0.yaml +46 -0
  332. raxe/packs/core/v1.0.0/rules/enc/enc-6001@1.0.0.yaml +53 -0
  333. raxe/packs/core/v1.0.0/rules/enc/enc-6002@1.0.0.yaml +41 -0
  334. raxe/packs/core/v1.0.0/rules/enc/enc-70@1.0.0.yaml +38 -0
  335. raxe/packs/core/v1.0.0/rules/enc/enc-71@1.0.0.yaml +38 -0
  336. raxe/packs/core/v1.0.0/rules/enc/enc-72@1.0.0.yaml +38 -0
  337. raxe/packs/core/v1.0.0/rules/enc/enc-73@1.0.0.yaml +38 -0
  338. raxe/packs/core/v1.0.0/rules/enc/enc-74@1.0.0.yaml +38 -0
  339. raxe/packs/core/v1.0.0/rules/enc/enc-75@1.0.0.yaml +38 -0
  340. raxe/packs/core/v1.0.0/rules/enc/enc-76@1.0.0.yaml +38 -0
  341. raxe/packs/core/v1.0.0/rules/enc/enc-77@1.0.0.yaml +38 -0
  342. raxe/packs/core/v1.0.0/rules/enc/enc-78@1.0.0.yaml +38 -0
  343. raxe/packs/core/v1.0.0/rules/enc/enc-79@1.0.0.yaml +38 -0
  344. raxe/packs/core/v1.0.0/rules/enc/enc-80@1.0.0.yaml +38 -0
  345. raxe/packs/core/v1.0.0/rules/enc/enc-81@1.0.0.yaml +38 -0
  346. raxe/packs/core/v1.0.0/rules/enc/enc-82@1.0.0.yaml +38 -0
  347. raxe/packs/core/v1.0.0/rules/enc/enc-83@1.0.0.yaml +38 -0
  348. raxe/packs/core/v1.0.0/rules/enc/enc-84@1.0.0.yaml +38 -0
  349. raxe/packs/core/v1.0.0/rules/enc/enc-85@1.0.0.yaml +38 -0
  350. raxe/packs/core/v1.0.0/rules/enc/enc-86@1.0.0.yaml +38 -0
  351. raxe/packs/core/v1.0.0/rules/enc/enc-87@1.0.0.yaml +38 -0
  352. raxe/packs/core/v1.0.0/rules/enc/enc-88@1.0.0.yaml +38 -0
  353. raxe/packs/core/v1.0.0/rules/enc/enc-89@1.0.0.yaml +38 -0
  354. raxe/packs/core/v1.0.0/rules/enc/enc-90@1.0.0.yaml +38 -0
  355. raxe/packs/core/v1.0.0/rules/enc/enc-91@1.0.0.yaml +38 -0
  356. raxe/packs/core/v1.0.0/rules/enc/enc-92@1.0.0.yaml +38 -0
  357. raxe/packs/core/v1.0.0/rules/enc/enc-93@1.0.0.yaml +38 -0
  358. raxe/packs/core/v1.0.0/rules/enc/enc-94@1.0.0.yaml +38 -0
  359. raxe/packs/core/v1.0.0/rules/enc/enc-95@1.0.0.yaml +38 -0
  360. raxe/packs/core/v1.0.0/rules/enc/enc-96@1.0.0.yaml +38 -0
  361. raxe/packs/core/v1.0.0/rules/enc/enc-97@1.0.0.yaml +38 -0
  362. raxe/packs/core/v1.0.0/rules/enc/enc-98@1.0.0.yaml +38 -0
  363. raxe/packs/core/v1.0.0/rules/enc/enc-99@1.0.0.yaml +38 -0
  364. raxe/packs/core/v1.0.0/rules/hc/hc-001@1.0.0.yaml +73 -0
  365. raxe/packs/core/v1.0.0/rules/hc/hc-002@1.0.0.yaml +71 -0
  366. raxe/packs/core/v1.0.0/rules/hc/hc-003@1.0.0.yaml +65 -0
  367. raxe/packs/core/v1.0.0/rules/hc/hc-004@1.0.0.yaml +73 -0
  368. raxe/packs/core/v1.0.0/rules/hc/hc-101@1.0.0.yaml +47 -0
  369. raxe/packs/core/v1.0.0/rules/hc/hc-102@1.0.0.yaml +47 -0
  370. raxe/packs/core/v1.0.0/rules/hc/hc-103@1.0.0.yaml +47 -0
  371. raxe/packs/core/v1.0.0/rules/hc/hc-104@1.0.0.yaml +47 -0
  372. raxe/packs/core/v1.0.0/rules/hc/hc-105@1.0.0.yaml +48 -0
  373. raxe/packs/core/v1.0.0/rules/hc/hc-106@1.0.0.yaml +40 -0
  374. raxe/packs/core/v1.0.0/rules/hc/hc-107@1.0.0.yaml +47 -0
  375. raxe/packs/core/v1.0.0/rules/hc/hc-108@1.0.0.yaml +47 -0
  376. raxe/packs/core/v1.0.0/rules/hc/hc-109@1.0.0.yaml +50 -0
  377. raxe/packs/core/v1.0.0/rules/hc/hc-110@1.0.0.yaml +56 -0
  378. raxe/packs/core/v1.0.0/rules/hc/hc-111@1.0.0.yaml +49 -0
  379. raxe/packs/core/v1.0.0/rules/hc/hc-112@1.0.0.yaml +53 -0
  380. raxe/packs/core/v1.0.0/rules/hc/hc-113@1.0.0.yaml +52 -0
  381. raxe/packs/core/v1.0.0/rules/hc/hc-114@1.0.0.yaml +52 -0
  382. raxe/packs/core/v1.0.0/rules/hc/hc-115@1.0.0.yaml +52 -0
  383. raxe/packs/core/v1.0.0/rules/hc/hc-116@1.0.0.yaml +53 -0
  384. raxe/packs/core/v1.0.0/rules/hc/hc-117@1.0.0.yaml +54 -0
  385. raxe/packs/core/v1.0.0/rules/hc/hc-118@1.0.0.yaml +52 -0
  386. raxe/packs/core/v1.0.0/rules/hc/hc-119@1.0.0.yaml +51 -0
  387. raxe/packs/core/v1.0.0/rules/hc/hc-120@1.0.0.yaml +52 -0
  388. raxe/packs/core/v1.0.0/rules/hc/hc-121@1.0.0.yaml +51 -0
  389. raxe/packs/core/v1.0.0/rules/hc/hc-122@1.0.0.yaml +51 -0
  390. raxe/packs/core/v1.0.0/rules/hc/hc-123@1.0.0.yaml +52 -0
  391. raxe/packs/core/v1.0.0/rules/hc/hc-124@1.0.0.yaml +53 -0
  392. raxe/packs/core/v1.0.0/rules/hc/hc-125@1.0.0.yaml +53 -0
  393. raxe/packs/core/v1.0.0/rules/hc/hc-126@1.0.0.yaml +53 -0
  394. raxe/packs/core/v1.0.0/rules/hc/hc-127@1.0.0.yaml +53 -0
  395. raxe/packs/core/v1.0.0/rules/hc/hc-128@1.0.0.yaml +53 -0
  396. raxe/packs/core/v1.0.0/rules/hc/hc-129@1.0.0.yaml +51 -0
  397. raxe/packs/core/v1.0.0/rules/hc/hc-130@1.0.0.yaml +51 -0
  398. raxe/packs/core/v1.0.0/rules/hc/hc-131@1.0.0.yaml +51 -0
  399. raxe/packs/core/v1.0.0/rules/hc/hc-132@1.0.0.yaml +51 -0
  400. raxe/packs/core/v1.0.0/rules/hc/hc-133@1.0.0.yaml +53 -0
  401. raxe/packs/core/v1.0.0/rules/hc/hc-134@1.0.0.yaml +51 -0
  402. raxe/packs/core/v1.0.0/rules/hc/hc-135@1.0.0.yaml +51 -0
  403. raxe/packs/core/v1.0.0/rules/hc/hc-136@1.0.0.yaml +51 -0
  404. raxe/packs/core/v1.0.0/rules/hc/hc-137@1.0.0.yaml +51 -0
  405. raxe/packs/core/v1.0.0/rules/hc/hc-138@1.0.0.yaml +51 -0
  406. raxe/packs/core/v1.0.0/rules/hc/hc-139@1.0.0.yaml +51 -0
  407. raxe/packs/core/v1.0.0/rules/hc/hc-140@1.0.0.yaml +51 -0
  408. raxe/packs/core/v1.0.0/rules/hc/hc-141@1.0.0.yaml +41 -0
  409. raxe/packs/core/v1.0.0/rules/hc/hc-142@1.0.0.yaml +37 -0
  410. raxe/packs/core/v1.0.0/rules/hc/hc-143@1.0.0.yaml +37 -0
  411. raxe/packs/core/v1.0.0/rules/hc/hc-144@1.0.0.yaml +37 -0
  412. raxe/packs/core/v1.0.0/rules/hc/hc-145@1.0.0.yaml +37 -0
  413. raxe/packs/core/v1.0.0/rules/hc/hc-146@1.0.0.yaml +37 -0
  414. raxe/packs/core/v1.0.0/rules/hc/hc-147@1.0.0.yaml +37 -0
  415. raxe/packs/core/v1.0.0/rules/hc/hc-148@1.0.0.yaml +37 -0
  416. raxe/packs/core/v1.0.0/rules/hc/hc-149@1.0.0.yaml +37 -0
  417. raxe/packs/core/v1.0.0/rules/hc/hc-150@1.0.0.yaml +37 -0
  418. raxe/packs/core/v1.0.0/rules/hc/hc-151@1.0.0.yaml +37 -0
  419. raxe/packs/core/v1.0.0/rules/hc/hc-152@1.0.0.yaml +37 -0
  420. raxe/packs/core/v1.0.0/rules/hc/hc-153@1.0.0.yaml +37 -0
  421. raxe/packs/core/v1.0.0/rules/hc/hc-154@1.0.0.yaml +37 -0
  422. raxe/packs/core/v1.0.0/rules/hc/hc-155@1.0.0.yaml +37 -0
  423. raxe/packs/core/v1.0.0/rules/hc/hc-156@1.0.0.yaml +37 -0
  424. raxe/packs/core/v1.0.0/rules/hc/hc-157@1.0.0.yaml +37 -0
  425. raxe/packs/core/v1.0.0/rules/hc/hc-158@1.0.0.yaml +37 -0
  426. raxe/packs/core/v1.0.0/rules/hc/hc-159@1.0.0.yaml +37 -0
  427. raxe/packs/core/v1.0.0/rules/hc/hc-160@1.0.0.yaml +37 -0
  428. raxe/packs/core/v1.0.0/rules/hc/hc-161@1.0.0.yaml +37 -0
  429. raxe/packs/core/v1.0.0/rules/jb/jb-001@1.0.0.yaml +47 -0
  430. raxe/packs/core/v1.0.0/rules/jb/jb-009@1.0.0.yaml +47 -0
  431. raxe/packs/core/v1.0.0/rules/jb/jb-020@1.0.0.yaml +47 -0
  432. raxe/packs/core/v1.0.0/rules/jb/jb-021@1.0.0.yaml +46 -0
  433. raxe/packs/core/v1.0.0/rules/jb/jb-022@1.0.0.yaml +47 -0
  434. raxe/packs/core/v1.0.0/rules/jb/jb-028@1.0.0.yaml +43 -0
  435. raxe/packs/core/v1.0.0/rules/jb/jb-033@1.0.0.yaml +46 -0
  436. raxe/packs/core/v1.0.0/rules/jb/jb-034@1.0.0.yaml +46 -0
  437. raxe/packs/core/v1.0.0/rules/jb/jb-036@1.0.0.yaml +41 -0
  438. raxe/packs/core/v1.0.0/rules/jb/jb-039@1.0.0.yaml +41 -0
  439. raxe/packs/core/v1.0.0/rules/jb/jb-056@1.0.0.yaml +38 -0
  440. raxe/packs/core/v1.0.0/rules/jb/jb-066@1.0.0.yaml +37 -0
  441. raxe/packs/core/v1.0.0/rules/jb/jb-076@1.0.0.yaml +37 -0
  442. raxe/packs/core/v1.0.0/rules/jb/jb-098@1.0.0.yaml +46 -0
  443. raxe/packs/core/v1.0.0/rules/jb/jb-103@1.0.0.yaml +47 -0
  444. raxe/packs/core/v1.0.0/rules/jb/jb-104@1.0.0.yaml +52 -0
  445. raxe/packs/core/v1.0.0/rules/jb/jb-105@1.0.0.yaml +56 -0
  446. raxe/packs/core/v1.0.0/rules/jb/jb-110@1.0.0.yaml +56 -0
  447. raxe/packs/core/v1.0.0/rules/jb/jb-111@1.0.0.yaml +57 -0
  448. raxe/packs/core/v1.0.0/rules/jb/jb-112@1.0.0.yaml +38 -0
  449. raxe/packs/core/v1.0.0/rules/jb/jb-113@1.0.0.yaml +38 -0
  450. raxe/packs/core/v1.0.0/rules/jb/jb-114@1.0.0.yaml +38 -0
  451. raxe/packs/core/v1.0.0/rules/jb/jb-115@1.0.0.yaml +38 -0
  452. raxe/packs/core/v1.0.0/rules/jb/jb-116@1.0.0.yaml +38 -0
  453. raxe/packs/core/v1.0.0/rules/jb/jb-117@1.0.0.yaml +38 -0
  454. raxe/packs/core/v1.0.0/rules/jb/jb-118@1.0.0.yaml +38 -0
  455. raxe/packs/core/v1.0.0/rules/jb/jb-119@1.0.0.yaml +38 -0
  456. raxe/packs/core/v1.0.0/rules/jb/jb-120@1.0.0.yaml +38 -0
  457. raxe/packs/core/v1.0.0/rules/jb/jb-121@1.0.0.yaml +38 -0
  458. raxe/packs/core/v1.0.0/rules/jb/jb-122@1.0.0.yaml +38 -0
  459. raxe/packs/core/v1.0.0/rules/jb/jb-123@1.0.0.yaml +38 -0
  460. raxe/packs/core/v1.0.0/rules/jb/jb-124@1.0.0.yaml +38 -0
  461. raxe/packs/core/v1.0.0/rules/jb/jb-125@1.0.0.yaml +38 -0
  462. raxe/packs/core/v1.0.0/rules/jb/jb-126@1.0.0.yaml +38 -0
  463. raxe/packs/core/v1.0.0/rules/jb/jb-127@1.0.0.yaml +38 -0
  464. raxe/packs/core/v1.0.0/rules/jb/jb-128@1.0.0.yaml +38 -0
  465. raxe/packs/core/v1.0.0/rules/jb/jb-129@1.0.0.yaml +38 -0
  466. raxe/packs/core/v1.0.0/rules/jb/jb-130@1.0.0.yaml +38 -0
  467. raxe/packs/core/v1.0.0/rules/jb/jb-131@1.0.0.yaml +38 -0
  468. raxe/packs/core/v1.0.0/rules/jb/jb-132@1.0.0.yaml +38 -0
  469. raxe/packs/core/v1.0.0/rules/jb/jb-133@1.0.0.yaml +38 -0
  470. raxe/packs/core/v1.0.0/rules/jb/jb-134@1.0.0.yaml +38 -0
  471. raxe/packs/core/v1.0.0/rules/jb/jb-135@1.0.0.yaml +38 -0
  472. raxe/packs/core/v1.0.0/rules/jb/jb-136@1.0.0.yaml +38 -0
  473. raxe/packs/core/v1.0.0/rules/jb/jb-137@1.0.0.yaml +38 -0
  474. raxe/packs/core/v1.0.0/rules/jb/jb-138@1.0.0.yaml +38 -0
  475. raxe/packs/core/v1.0.0/rules/jb/jb-139@1.0.0.yaml +38 -0
  476. raxe/packs/core/v1.0.0/rules/jb/jb-140@1.0.0.yaml +38 -0
  477. raxe/packs/core/v1.0.0/rules/jb/jb-141@1.0.0.yaml +38 -0
  478. raxe/packs/core/v1.0.0/rules/jb/jb-142@1.0.0.yaml +38 -0
  479. raxe/packs/core/v1.0.0/rules/jb/jb-143@1.0.0.yaml +38 -0
  480. raxe/packs/core/v1.0.0/rules/jb/jb-144@1.0.0.yaml +38 -0
  481. raxe/packs/core/v1.0.0/rules/jb/jb-145@1.0.0.yaml +38 -0
  482. raxe/packs/core/v1.0.0/rules/jb/jb-146@1.0.0.yaml +38 -0
  483. raxe/packs/core/v1.0.0/rules/jb/jb-147@1.0.0.yaml +38 -0
  484. raxe/packs/core/v1.0.0/rules/jb/jb-148@1.0.0.yaml +38 -0
  485. raxe/packs/core/v1.0.0/rules/jb/jb-149@1.0.0.yaml +38 -0
  486. raxe/packs/core/v1.0.0/rules/jb/jb-150@1.0.0.yaml +38 -0
  487. raxe/packs/core/v1.0.0/rules/jb/jb-151@1.0.0.yaml +38 -0
  488. raxe/packs/core/v1.0.0/rules/jb/jb-152@1.0.0.yaml +38 -0
  489. raxe/packs/core/v1.0.0/rules/jb/jb-153@1.0.0.yaml +38 -0
  490. raxe/packs/core/v1.0.0/rules/jb/jb-154@1.0.0.yaml +38 -0
  491. raxe/packs/core/v1.0.0/rules/jb/jb-155@1.0.0.yaml +38 -0
  492. raxe/packs/core/v1.0.0/rules/jb/jb-156@1.0.0.yaml +38 -0
  493. raxe/packs/core/v1.0.0/rules/jb/jb-157@1.0.0.yaml +38 -0
  494. raxe/packs/core/v1.0.0/rules/jb/jb-158@1.0.0.yaml +38 -0
  495. raxe/packs/core/v1.0.0/rules/jb/jb-159@1.0.0.yaml +38 -0
  496. raxe/packs/core/v1.0.0/rules/jb/jb-160@1.0.0.yaml +38 -0
  497. raxe/packs/core/v1.0.0/rules/jb/jb-161@1.0.0.yaml +38 -0
  498. raxe/packs/core/v1.0.0/rules/jb/jb-162@1.0.0.yaml +38 -0
  499. raxe/packs/core/v1.0.0/rules/jb/jb-201@1.0.0.yaml +40 -0
  500. raxe/packs/core/v1.0.0/rules/jb/jb-202@1.0.0.yaml +41 -0
  501. raxe/packs/core/v1.0.0/rules/jb/jb-203@1.0.0.yaml +51 -0
  502. raxe/packs/core/v1.0.0/rules/jb/jb-204@1.0.0.yaml +50 -0
  503. raxe/packs/core/v1.0.0/rules/jb/jb-205@1.0.0.yaml +50 -0
  504. raxe/packs/core/v1.0.0/rules/jb/jb-206@1.0.0.yaml +50 -0
  505. raxe/packs/core/v1.0.0/rules/jb/jb-207@1.0.0.yaml +49 -0
  506. raxe/packs/core/v1.0.0/rules/pii/pii-001@1.0.0.yaml +48 -0
  507. raxe/packs/core/v1.0.0/rules/pii/pii-009@1.0.0.yaml +48 -0
  508. raxe/packs/core/v1.0.0/rules/pii/pii-012@1.0.0.yaml +48 -0
  509. raxe/packs/core/v1.0.0/rules/pii/pii-017@1.0.0.yaml +48 -0
  510. raxe/packs/core/v1.0.0/rules/pii/pii-022@1.0.0.yaml +47 -0
  511. raxe/packs/core/v1.0.0/rules/pii/pii-025@1.0.0.yaml +47 -0
  512. raxe/packs/core/v1.0.0/rules/pii/pii-027@1.0.0.yaml +47 -0
  513. raxe/packs/core/v1.0.0/rules/pii/pii-028@1.0.0.yaml +47 -0
  514. raxe/packs/core/v1.0.0/rules/pii/pii-034@1.0.0.yaml +47 -0
  515. raxe/packs/core/v1.0.0/rules/pii/pii-037@1.0.0.yaml +47 -0
  516. raxe/packs/core/v1.0.0/rules/pii/pii-040@1.0.0.yaml +47 -0
  517. raxe/packs/core/v1.0.0/rules/pii/pii-041@1.0.0.yaml +47 -0
  518. raxe/packs/core/v1.0.0/rules/pii/pii-044@1.0.0.yaml +47 -0
  519. raxe/packs/core/v1.0.0/rules/pii/pii-050@1.0.0.yaml +57 -0
  520. raxe/packs/core/v1.0.0/rules/pii/pii-051@1.0.0.yaml +53 -0
  521. raxe/packs/core/v1.0.0/rules/pii/pii-052@1.0.0.yaml +52 -0
  522. raxe/packs/core/v1.0.0/rules/pii/pii-053@1.0.0.yaml +56 -0
  523. raxe/packs/core/v1.0.0/rules/pii/pii-054@1.0.0.yaml +53 -0
  524. raxe/packs/core/v1.0.0/rules/pii/pii-055@1.0.0.yaml +51 -0
  525. raxe/packs/core/v1.0.0/rules/pii/pii-056@1.0.0.yaml +51 -0
  526. raxe/packs/core/v1.0.0/rules/pii/pii-058@1.0.0.yaml +47 -0
  527. raxe/packs/core/v1.0.0/rules/pii/pii-2015@1.0.0.yaml +41 -0
  528. raxe/packs/core/v1.0.0/rules/pii/pii-2025@1.0.0.yaml +35 -0
  529. raxe/packs/core/v1.0.0/rules/pii/pii-2026@1.0.0.yaml +39 -0
  530. raxe/packs/core/v1.0.0/rules/pii/pii-2035@1.0.0.yaml +39 -0
  531. raxe/packs/core/v1.0.0/rules/pii/pii-2037@1.0.0.yaml +39 -0
  532. raxe/packs/core/v1.0.0/rules/pii/pii-2042@1.0.0.yaml +39 -0
  533. raxe/packs/core/v1.0.0/rules/pii/pii-3001@1.0.0.yaml +39 -0
  534. raxe/packs/core/v1.0.0/rules/pii/pii-3002@1.0.0.yaml +41 -0
  535. raxe/packs/core/v1.0.0/rules/pii/pii-3003@1.0.0.yaml +36 -0
  536. raxe/packs/core/v1.0.0/rules/pii/pii-3004@1.0.0.yaml +41 -0
  537. raxe/packs/core/v1.0.0/rules/pii/pii-3005@1.0.0.yaml +39 -0
  538. raxe/packs/core/v1.0.0/rules/pii/pii-3006@1.0.0.yaml +35 -0
  539. raxe/packs/core/v1.0.0/rules/pii/pii-3007@1.0.0.yaml +37 -0
  540. raxe/packs/core/v1.0.0/rules/pii/pii-3008@1.0.0.yaml +35 -0
  541. raxe/packs/core/v1.0.0/rules/pii/pii-3009@1.0.0.yaml +42 -0
  542. raxe/packs/core/v1.0.0/rules/pii/pii-3010@1.0.0.yaml +39 -0
  543. raxe/packs/core/v1.0.0/rules/pii/pii-3011@1.0.0.yaml +35 -0
  544. raxe/packs/core/v1.0.0/rules/pii/pii-3012@1.0.0.yaml +35 -0
  545. raxe/packs/core/v1.0.0/rules/pii/pii-3013@1.0.0.yaml +36 -0
  546. raxe/packs/core/v1.0.0/rules/pii/pii-3014@1.0.0.yaml +36 -0
  547. raxe/packs/core/v1.0.0/rules/pii/pii-3015@1.0.0.yaml +42 -0
  548. raxe/packs/core/v1.0.0/rules/pii/pii-3016@1.0.0.yaml +42 -0
  549. raxe/packs/core/v1.0.0/rules/pii/pii-3017@1.0.0.yaml +40 -0
  550. raxe/packs/core/v1.0.0/rules/pii/pii-3018@1.0.0.yaml +38 -0
  551. raxe/packs/core/v1.0.0/rules/pii/pii-3019@1.0.0.yaml +40 -0
  552. raxe/packs/core/v1.0.0/rules/pii/pii-3020@1.0.0.yaml +40 -0
  553. raxe/packs/core/v1.0.0/rules/pii/pii-3021@1.0.0.yaml +39 -0
  554. raxe/packs/core/v1.0.0/rules/pii/pii-3022@1.0.0.yaml +36 -0
  555. raxe/packs/core/v1.0.0/rules/pii/pii-3023@1.0.0.yaml +41 -0
  556. raxe/packs/core/v1.0.0/rules/pii/pii-3024@1.0.0.yaml +37 -0
  557. raxe/packs/core/v1.0.0/rules/pii/pii-3025@1.0.0.yaml +38 -0
  558. raxe/packs/core/v1.0.0/rules/pii/pii-3026@1.0.0.yaml +42 -0
  559. raxe/packs/core/v1.0.0/rules/pii/pii-3027@1.0.0.yaml +38 -0
  560. raxe/packs/core/v1.0.0/rules/pii/pii-3028@1.0.0.yaml +42 -0
  561. raxe/packs/core/v1.0.0/rules/pii/pii-3029@1.0.0.yaml +36 -0
  562. raxe/packs/core/v1.0.0/rules/pii/pii-3030@1.0.0.yaml +42 -0
  563. raxe/packs/core/v1.0.0/rules/pii/pii-3031@1.0.0.yaml +37 -0
  564. raxe/packs/core/v1.0.0/rules/pii/pii-3032@1.0.0.yaml +42 -0
  565. raxe/packs/core/v1.0.0/rules/pii/pii-3033@1.0.0.yaml +39 -0
  566. raxe/packs/core/v1.0.0/rules/pii/pii-3034@1.0.0.yaml +40 -0
  567. raxe/packs/core/v1.0.0/rules/pii/pii-3035@1.0.0.yaml +43 -0
  568. raxe/packs/core/v1.0.0/rules/pii/pii-3036@1.0.0.yaml +41 -0
  569. raxe/packs/core/v1.0.0/rules/pii/pii-3037@1.0.0.yaml +35 -0
  570. raxe/packs/core/v1.0.0/rules/pii/pii-3038@1.0.0.yaml +35 -0
  571. raxe/packs/core/v1.0.0/rules/pii/pii-3039@1.0.0.yaml +35 -0
  572. raxe/packs/core/v1.0.0/rules/pii/pii-3040@1.0.0.yaml +41 -0
  573. raxe/packs/core/v1.0.0/rules/pii/pii-3041@1.0.0.yaml +39 -0
  574. raxe/packs/core/v1.0.0/rules/pii/pii-3042@1.0.0.yaml +36 -0
  575. raxe/packs/core/v1.0.0/rules/pii/pii-3043@1.0.0.yaml +35 -0
  576. raxe/packs/core/v1.0.0/rules/pii/pii-3044@1.0.0.yaml +43 -0
  577. raxe/packs/core/v1.0.0/rules/pii/pii-3045@1.0.0.yaml +36 -0
  578. raxe/packs/core/v1.0.0/rules/pii/pii-3046@1.0.0.yaml +37 -0
  579. raxe/packs/core/v1.0.0/rules/pii/pii-3047@1.0.0.yaml +36 -0
  580. raxe/packs/core/v1.0.0/rules/pii/pii-3048@1.0.0.yaml +36 -0
  581. raxe/packs/core/v1.0.0/rules/pii/pii-3049@1.0.0.yaml +38 -0
  582. raxe/packs/core/v1.0.0/rules/pii/pii-3050@1.0.0.yaml +44 -0
  583. raxe/packs/core/v1.0.0/rules/pii/pii-3051@1.0.0.yaml +35 -0
  584. raxe/packs/core/v1.0.0/rules/pii/pii-3052@1.0.0.yaml +36 -0
  585. raxe/packs/core/v1.0.0/rules/pii/pii-3053@1.0.0.yaml +35 -0
  586. raxe/packs/core/v1.0.0/rules/pii/pii-3054@1.0.0.yaml +35 -0
  587. raxe/packs/core/v1.0.0/rules/pii/pii-3055@1.0.0.yaml +40 -0
  588. raxe/packs/core/v1.0.0/rules/pii/pii-3056@1.0.0.yaml +38 -0
  589. raxe/packs/core/v1.0.0/rules/pii/pii-3057@1.0.0.yaml +40 -0
  590. raxe/packs/core/v1.0.0/rules/pii/pii-3058@1.0.0.yaml +43 -0
  591. raxe/packs/core/v1.0.0/rules/pii/pii-3059@1.0.0.yaml +42 -0
  592. raxe/packs/core/v1.0.0/rules/pii/pii-3060@1.0.0.yaml +42 -0
  593. raxe/packs/core/v1.0.0/rules/pii/pii-3061@1.0.0.yaml +50 -0
  594. raxe/packs/core/v1.0.0/rules/pii/pii-3062@1.0.0.yaml +50 -0
  595. raxe/packs/core/v1.0.0/rules/pii/pii-3063@1.0.0.yaml +54 -0
  596. raxe/packs/core/v1.0.0/rules/pii/pii-3064@1.0.0.yaml +78 -0
  597. raxe/packs/core/v1.0.0/rules/pii/pii-3065@1.0.0.yaml +84 -0
  598. raxe/packs/core/v1.0.0/rules/pii/pii-3066@1.0.0.yaml +84 -0
  599. raxe/packs/core/v1.0.0/rules/pii/pii-3067@1.0.0.yaml +88 -0
  600. raxe/packs/core/v1.0.0/rules/pii/pii-3068@1.0.0.yaml +94 -0
  601. raxe/packs/core/v1.0.0/rules/pii/pii-3069@1.0.0.yaml +90 -0
  602. raxe/packs/core/v1.0.0/rules/pii/pii-3070@1.0.0.yaml +99 -0
  603. raxe/packs/core/v1.0.0/rules/pii/pii-3071@1.0.0.yaml +91 -0
  604. raxe/packs/core/v1.0.0/rules/pii/pii-3072@1.0.0.yaml +38 -0
  605. raxe/packs/core/v1.0.0/rules/pii/pii-3073@1.0.0.yaml +38 -0
  606. raxe/packs/core/v1.0.0/rules/pii/pii-3074@1.0.0.yaml +38 -0
  607. raxe/packs/core/v1.0.0/rules/pii/pii-3075@1.0.0.yaml +38 -0
  608. raxe/packs/core/v1.0.0/rules/pii/pii-3076@1.0.0.yaml +38 -0
  609. raxe/packs/core/v1.0.0/rules/pii/pii-3077@1.0.0.yaml +38 -0
  610. raxe/packs/core/v1.0.0/rules/pii/pii-3078@1.0.0.yaml +38 -0
  611. raxe/packs/core/v1.0.0/rules/pii/pii-3079@1.0.0.yaml +38 -0
  612. raxe/packs/core/v1.0.0/rules/pii/pii-3080@1.0.0.yaml +38 -0
  613. raxe/packs/core/v1.0.0/rules/pii/pii-3081@1.0.0.yaml +38 -0
  614. raxe/packs/core/v1.0.0/rules/pii/pii-3082@1.0.0.yaml +38 -0
  615. raxe/packs/core/v1.0.0/rules/pii/pii-3083@1.0.0.yaml +38 -0
  616. raxe/packs/core/v1.0.0/rules/pii/pii-3084@1.0.0.yaml +38 -0
  617. raxe/packs/core/v1.0.0/rules/pii/pii-3085@1.0.0.yaml +38 -0
  618. raxe/packs/core/v1.0.0/rules/rag/rag-016@1.0.0.yaml +47 -0
  619. raxe/packs/core/v1.0.0/rules/rag/rag-028@1.0.0.yaml +47 -0
  620. raxe/packs/core/v1.0.0/rules/rag/rag-042@1.0.0.yaml +47 -0
  621. raxe/packs/core/v1.0.0/rules/rag/rag-044@1.0.0.yaml +47 -0
  622. raxe/packs/core/v1.0.0/rules/rag/rag-045@1.0.0.yaml +47 -0
  623. raxe/packs/core/v1.0.0/rules/rag/rag-050@1.0.0.yaml +47 -0
  624. raxe/packs/core/v1.0.0/rules/rag/rag-201@1.0.0.yaml +41 -0
  625. raxe/packs/core/v1.0.0/rules/rag/rag-202@1.0.0.yaml +41 -0
  626. raxe/packs/core/v1.0.0/rules/rag/rag-3001@1.0.0.yaml +41 -0
  627. raxe/packs/core/v1.0.0/rules/rag/rag-3006@1.0.0.yaml +41 -0
  628. raxe/packs/core/v1.0.0/rules/rag/rag-3009@1.0.0.yaml +41 -0
  629. raxe/packs/core/v1.0.0/rules/rag/rag-3012@1.0.0.yaml +41 -0
  630. raxe/plugins/__init__.py +98 -0
  631. raxe/plugins/custom_rules.py +380 -0
  632. raxe/plugins/loader.py +389 -0
  633. raxe/plugins/manager.py +538 -0
  634. raxe/plugins/protocol.py +428 -0
  635. raxe/py.typed +0 -0
  636. raxe/sdk/__init__.py +77 -0
  637. raxe/sdk/agent_scanner.py +1918 -0
  638. raxe/sdk/client.py +1603 -0
  639. raxe/sdk/decorator.py +175 -0
  640. raxe/sdk/exceptions.py +859 -0
  641. raxe/sdk/integrations/__init__.py +277 -0
  642. raxe/sdk/integrations/agent_scanner.py +71 -0
  643. raxe/sdk/integrations/autogen.py +872 -0
  644. raxe/sdk/integrations/crewai.py +1368 -0
  645. raxe/sdk/integrations/dspy.py +845 -0
  646. raxe/sdk/integrations/extractors.py +363 -0
  647. raxe/sdk/integrations/huggingface.py +395 -0
  648. raxe/sdk/integrations/langchain.py +948 -0
  649. raxe/sdk/integrations/litellm.py +484 -0
  650. raxe/sdk/integrations/llamaindex.py +1049 -0
  651. raxe/sdk/integrations/portkey.py +831 -0
  652. raxe/sdk/suppression_context.py +215 -0
  653. raxe/sdk/wrappers/__init__.py +163 -0
  654. raxe/sdk/wrappers/anthropic.py +310 -0
  655. raxe/sdk/wrappers/openai.py +221 -0
  656. raxe/sdk/wrappers/vertexai.py +484 -0
  657. raxe/utils/__init__.py +12 -0
  658. raxe/utils/error_sanitizer.py +135 -0
  659. raxe/utils/logging.py +241 -0
  660. raxe/utils/performance.py +414 -0
  661. raxe/utils/profiler.py +339 -0
  662. raxe/utils/validators.py +170 -0
  663. raxe-0.4.6.dist-info/METADATA +471 -0
  664. raxe-0.4.6.dist-info/RECORD +668 -0
  665. raxe-0.4.6.dist-info/WHEEL +5 -0
  666. raxe-0.4.6.dist-info/entry_points.txt +2 -0
  667. raxe-0.4.6.dist-info/licenses/LICENSE +56 -0
  668. raxe-0.4.6.dist-info/top_level.txt +1 -0
raxe/sdk/exceptions.py ADDED
@@ -0,0 +1,859 @@
1
+ """RAXE SDK exceptions with structured error codes.
2
+
3
+ Custom exception hierarchy for RAXE SDK operations with structured error codes,
4
+ detailed messages, and actionable remediation hints.
5
+
6
+ All RAXE exceptions inherit from RaxeException for easy catching.
7
+
8
+ Error Code Format:
9
+ {CATEGORY}-{NUMBER}
10
+
11
+ Categories:
12
+ - CFG: Configuration errors (001-099)
13
+ - RULE: Rule-related errors (100-199)
14
+ - SEC: Security errors (200-299)
15
+ - DB: Database errors (300-399)
16
+ - VAL: Validation errors (400-499)
17
+ - INFRA: Infrastructure errors (500-599)
18
+
19
+ Example:
20
+ >>> try:
21
+ ... raxe.scan(prompt)
22
+ ... except RaxeException as e:
23
+ ... print(f"Error {e.error.code}: {e.error.message}")
24
+ ... print(f"Fix: {e.error.remediation}")
25
+ """
26
+
27
+ from dataclasses import dataclass, field
28
+ from enum import Enum
29
+ from typing import TYPE_CHECKING, Any
30
+
31
+ if TYPE_CHECKING:
32
+ from raxe.application.scan_pipeline import ScanPipelineResult
33
+
34
+
35
+ class ErrorCategory(str, Enum):
36
+ """Categories for RAXE error codes."""
37
+
38
+ CFG = "CFG" # Configuration errors
39
+ RULE = "RULE" # Rule-related errors
40
+ SEC = "SEC" # Security errors
41
+ DB = "DB" # Database errors
42
+ VAL = "VAL" # Validation errors
43
+ INFRA = "INFRA" # Infrastructure errors
44
+
45
+
46
+ class ErrorCode(str, Enum):
47
+ """Structured error codes for RAXE exceptions.
48
+
49
+ Each error code follows the format: {CATEGORY}-{NUMBER}
50
+
51
+ Error codes provide:
52
+ - Consistent identification across logs and telemetry
53
+ - Easy lookup in documentation
54
+ - Programmatic error handling
55
+ """
56
+
57
+ # Configuration errors (CFG-001 to CFG-099)
58
+ CFG_NOT_FOUND = "CFG-001"
59
+ CFG_INVALID_FORMAT = "CFG-002"
60
+ CFG_MISSING_REQUIRED = "CFG-003"
61
+ CFG_INVALID_VALUE = "CFG-004"
62
+ CFG_PERMISSION_DENIED = "CFG-005"
63
+ CFG_INITIALIZATION_FAILED = "CFG-006"
64
+
65
+ # Rule errors (RULE-100 to RULE-199)
66
+ RULE_NOT_FOUND = "RULE-100"
67
+ RULE_INVALID_SYNTAX = "RULE-101"
68
+ RULE_INVALID_PATTERN = "RULE-102"
69
+ RULE_LOAD_FAILED = "RULE-103"
70
+ RULE_PACK_NOT_FOUND = "RULE-104"
71
+ RULE_PACK_INVALID = "RULE-105"
72
+ RULE_VERSION_MISMATCH = "RULE-106"
73
+ RULE_DUPLICATE_ID = "RULE-107"
74
+
75
+ # Security errors (SEC-200 to SEC-299)
76
+ SEC_THREAT_DETECTED = "SEC-200"
77
+ SEC_BLOCKED_BY_POLICY = "SEC-201"
78
+ SEC_CRITICAL_THREAT = "SEC-202"
79
+ SEC_SIGNATURE_INVALID = "SEC-203"
80
+ SEC_AUTH_FAILED = "SEC-204"
81
+ SEC_PERMISSION_DENIED = "SEC-205"
82
+ SEC_CREDENTIAL_EXPIRED = "SEC-206"
83
+
84
+ # Database errors (DB-300 to DB-399)
85
+ DB_CONNECTION_FAILED = "DB-300"
86
+ DB_QUERY_FAILED = "DB-301"
87
+ DB_MIGRATION_FAILED = "DB-302"
88
+ DB_INTEGRITY_ERROR = "DB-303"
89
+ DB_NOT_INITIALIZED = "DB-304"
90
+ DB_LOCK_TIMEOUT = "DB-305"
91
+
92
+ # Validation errors (VAL-400 to VAL-499)
93
+ VAL_EMPTY_INPUT = "VAL-400"
94
+ VAL_INPUT_TOO_LONG = "VAL-401"
95
+ VAL_INVALID_FORMAT = "VAL-402"
96
+ VAL_MISSING_FIELD = "VAL-403"
97
+ VAL_TYPE_MISMATCH = "VAL-404"
98
+ VAL_OUT_OF_RANGE = "VAL-405"
99
+ VAL_INVALID_REGEX = "VAL-406"
100
+ VAL_POLICY_INVALID = "VAL-407"
101
+
102
+ # Infrastructure errors (INFRA-500 to INFRA-599)
103
+ INFRA_NETWORK_ERROR = "INFRA-500"
104
+ INFRA_TIMEOUT = "INFRA-501"
105
+ INFRA_SERVICE_UNAVAILABLE = "INFRA-502"
106
+ INFRA_RATE_LIMITED = "INFRA-503"
107
+ INFRA_DISK_FULL = "INFRA-504"
108
+ INFRA_MODEL_LOAD_FAILED = "INFRA-505"
109
+ INFRA_CIRCUIT_BREAKER_OPEN = "INFRA-506"
110
+
111
+ @property
112
+ def category(self) -> ErrorCategory:
113
+ """Extract the category from the error code."""
114
+ prefix = self.value.split("-")[0]
115
+ return ErrorCategory(prefix)
116
+
117
+ @property
118
+ def number(self) -> int:
119
+ """Extract the numeric part of the error code."""
120
+ return int(self.value.split("-")[1])
121
+
122
+
123
+ # Base URL for error documentation
124
+ _DOCS_BASE_URL = "https://docs.raxe.ai/errors"
125
+
126
+
127
+ @dataclass(frozen=True)
128
+ class RaxeError:
129
+ """Structured error information for RAXE exceptions.
130
+
131
+ Provides comprehensive error details including:
132
+ - Unique error code for identification
133
+ - Human-readable message
134
+ - Additional context details
135
+ - Actionable remediation steps
136
+ - Link to documentation
137
+
138
+ Attributes:
139
+ code: The ErrorCode enum value
140
+ message: Human-readable error description
141
+ details: Optional additional context as key-value pairs
142
+ remediation: Suggested fix or next steps
143
+ doc_url: Link to detailed documentation
144
+
145
+ Example:
146
+ >>> error = RaxeError(
147
+ ... code=ErrorCode.CFG_NOT_FOUND,
148
+ ... message="Configuration file not found",
149
+ ... details={"path": "/home/user/.raxe/config.yaml"},
150
+ ... remediation="Run 'raxe init' to create default configuration"
151
+ ... )
152
+ >>> print(error.doc_url)
153
+ 'https://docs.raxe.ai/errors/CFG-001'
154
+ """
155
+
156
+ code: ErrorCode
157
+ message: str
158
+ details: dict[str, Any] = field(default_factory=dict)
159
+ remediation: str = ""
160
+
161
+ @property
162
+ def doc_url(self) -> str:
163
+ """Generate documentation URL for this error."""
164
+ return f"{_DOCS_BASE_URL}/{self.code.value}"
165
+
166
+ def __str__(self) -> str:
167
+ """Format error as human-readable string."""
168
+ parts = [f"[{self.code.value}] {self.message}"]
169
+ if self.details:
170
+ detail_str = ", ".join(f"{k}={v}" for k, v in self.details.items())
171
+ parts.append(f"Details: {detail_str}")
172
+ if self.remediation:
173
+ parts.append(f"Fix: {self.remediation}")
174
+ return " | ".join(parts)
175
+
176
+ def to_dict(self) -> dict[str, Any]:
177
+ """Convert error to dictionary for serialization.
178
+
179
+ Returns:
180
+ Dictionary representation suitable for JSON serialization.
181
+ """
182
+ return {
183
+ "code": self.code.value,
184
+ "category": self.code.category.value,
185
+ "message": self.message,
186
+ "details": self.details,
187
+ "remediation": self.remediation,
188
+ "doc_url": self.doc_url,
189
+ }
190
+
191
+
192
+ # ============================================================================
193
+ # Pre-defined error templates for common scenarios
194
+ # ============================================================================
195
+
196
+ def config_not_found_error(path: str) -> RaxeError:
197
+ """Create error for missing configuration file."""
198
+ return RaxeError(
199
+ code=ErrorCode.CFG_NOT_FOUND,
200
+ message=f"Configuration file not found: {path}",
201
+ details={"path": path},
202
+ remediation="Run 'raxe init' to create default configuration, "
203
+ "or specify a valid config path with --config",
204
+ )
205
+
206
+
207
+ def config_invalid_format_error(path: str, parse_error: str) -> RaxeError:
208
+ """Create error for invalid configuration format."""
209
+ return RaxeError(
210
+ code=ErrorCode.CFG_INVALID_FORMAT,
211
+ message=f"Invalid configuration format in {path}",
212
+ details={"path": path, "parse_error": parse_error},
213
+ remediation="Check YAML syntax and ensure the file is valid. "
214
+ "Use 'raxe config validate' to check for errors.",
215
+ )
216
+
217
+
218
+ def config_missing_required_error(field: str) -> RaxeError:
219
+ """Create error for missing required configuration field."""
220
+ return RaxeError(
221
+ code=ErrorCode.CFG_MISSING_REQUIRED,
222
+ message=f"Required configuration field missing: {field}",
223
+ details={"field": field},
224
+ remediation=f"Add the '{field}' field to your configuration file. "
225
+ "See 'raxe config show' for current configuration.",
226
+ )
227
+
228
+
229
+ def rule_not_found_error(rule_id: str) -> RaxeError:
230
+ """Create error for missing rule."""
231
+ return RaxeError(
232
+ code=ErrorCode.RULE_NOT_FOUND,
233
+ message=f"Rule not found: {rule_id}",
234
+ details={"rule_id": rule_id},
235
+ remediation="Check the rule ID spelling. Use 'raxe rules list' to see available rules.",
236
+ )
237
+
238
+
239
+ def rule_invalid_pattern_error(rule_id: str, pattern: str, error: str) -> RaxeError:
240
+ """Create error for invalid regex pattern in rule."""
241
+ return RaxeError(
242
+ code=ErrorCode.RULE_INVALID_PATTERN,
243
+ message=f"Invalid regex pattern in rule {rule_id}",
244
+ details={"rule_id": rule_id, "pattern_preview": pattern[:50] + "..." if len(pattern) > 50 else pattern, "error": error},
245
+ remediation="Fix the regex pattern syntax. Test patterns at regex101.com before adding to rules.",
246
+ )
247
+
248
+
249
+ def validation_empty_input_error(field: str = "prompt") -> RaxeError:
250
+ """Create error for empty input."""
251
+ return RaxeError(
252
+ code=ErrorCode.VAL_EMPTY_INPUT,
253
+ message=f"Empty {field} provided",
254
+ details={"field": field},
255
+ remediation=f"Provide a non-empty {field} for scanning.",
256
+ )
257
+
258
+
259
+ def validation_input_too_long_error(
260
+ field: str,
261
+ length: int,
262
+ max_length: int,
263
+ ) -> RaxeError:
264
+ """Create error for input exceeding maximum length."""
265
+ return RaxeError(
266
+ code=ErrorCode.VAL_INPUT_TOO_LONG,
267
+ message=f"Input {field} exceeds maximum length",
268
+ details={"field": field, "length": length, "max_length": max_length},
269
+ remediation=f"Reduce {field} length to under {max_length} characters.",
270
+ )
271
+
272
+
273
+ def database_connection_error(db_path: str, error: str) -> RaxeError:
274
+ """Create error for database connection failure."""
275
+ return RaxeError(
276
+ code=ErrorCode.DB_CONNECTION_FAILED,
277
+ message=f"Failed to connect to database: {db_path}",
278
+ details={"db_path": db_path, "error": error},
279
+ remediation="Check database path permissions and disk space. "
280
+ "Run 'raxe doctor' to diagnose database issues.",
281
+ )
282
+
283
+
284
+ def infrastructure_timeout_error(
285
+ operation: str,
286
+ timeout_seconds: float,
287
+ ) -> RaxeError:
288
+ """Create error for operation timeout."""
289
+ return RaxeError(
290
+ code=ErrorCode.INFRA_TIMEOUT,
291
+ message=f"Operation timed out: {operation}",
292
+ details={"operation": operation, "timeout_seconds": timeout_seconds},
293
+ remediation="Try again or increase timeout. "
294
+ "If persistent, check system resources with 'raxe doctor'.",
295
+ )
296
+
297
+
298
+ def security_threat_detected_error(
299
+ severity: str,
300
+ detection_count: int,
301
+ ) -> RaxeError:
302
+ """Create error for detected security threat."""
303
+ return RaxeError(
304
+ code=ErrorCode.SEC_THREAT_DETECTED,
305
+ message=f"Security threat detected: {severity} severity",
306
+ details={"severity": severity, "detection_count": detection_count},
307
+ remediation="Review the detected threat. If false positive, "
308
+ "add a suppression rule or adjust policy thresholds.",
309
+ )
310
+
311
+
312
+ def security_blocked_by_policy_error(
313
+ policy_decision: str,
314
+ severity: str,
315
+ ) -> RaxeError:
316
+ """Create error when request is blocked by policy."""
317
+ return RaxeError(
318
+ code=ErrorCode.SEC_BLOCKED_BY_POLICY,
319
+ message=f"Request blocked by policy: {policy_decision}",
320
+ details={"policy_decision": policy_decision, "severity": severity},
321
+ remediation="Review policy configuration. Use 'raxe scan --explain' "
322
+ "for detailed threat information.",
323
+ )
324
+
325
+
326
+ def _get_default_console_keys_url() -> str:
327
+ """Get default console keys URL from centralized endpoints."""
328
+ from raxe.infrastructure.config.endpoints import get_console_url
329
+ return f"{get_console_url()}/keys"
330
+
331
+
332
+ def credential_expired_error(
333
+ days_expired: int,
334
+ console_url: str | None = None,
335
+ ) -> RaxeError:
336
+ """Create error for expired API credentials.
337
+
338
+ Args:
339
+ days_expired: Number of days since the key expired.
340
+ console_url: URL where users can get a new key (uses centralized endpoint if None).
341
+
342
+ Returns:
343
+ RaxeError with SEC-206 code and helpful remediation.
344
+ """
345
+ if console_url is None:
346
+ console_url = _get_default_console_keys_url()
347
+
348
+ if days_expired == 0:
349
+ expiry_text = "today"
350
+ elif days_expired == 1:
351
+ expiry_text = "1 day ago"
352
+ else:
353
+ expiry_text = f"{days_expired} days ago"
354
+
355
+ return RaxeError(
356
+ code=ErrorCode.SEC_CREDENTIAL_EXPIRED,
357
+ message=f"Your temporary API key expired {expiry_text}",
358
+ details={"days_expired": days_expired, "console_url": console_url},
359
+ remediation=f"Get a permanent key at: {console_url}\n"
360
+ "Or run: raxe auth login",
361
+ )
362
+
363
+
364
+ # ============================================================================
365
+ # Base Exception Classes
366
+ # ============================================================================
367
+
368
+ class RaxeException(Exception):
369
+ """Base exception for all RAXE errors.
370
+
371
+ Can be initialized with either a simple message (for backwards compatibility)
372
+ or a structured RaxeError for rich error information.
373
+
374
+ Attributes:
375
+ error: Optional RaxeError with structured error details
376
+ message: Human-readable error message
377
+
378
+ Examples:
379
+ # Legacy usage (backwards compatible)
380
+ >>> raise RaxeException("Something went wrong")
381
+
382
+ # Structured usage (preferred)
383
+ >>> error = RaxeError(
384
+ ... code=ErrorCode.CFG_NOT_FOUND,
385
+ ... message="Config not found",
386
+ ... remediation="Run 'raxe init'"
387
+ ... )
388
+ >>> raise RaxeException(error)
389
+ """
390
+
391
+ def __init__(
392
+ self,
393
+ message_or_error: str | RaxeError,
394
+ *,
395
+ error: RaxeError | None = None,
396
+ ) -> None:
397
+ """Initialize RAXE exception.
398
+
399
+ Args:
400
+ message_or_error: Either a string message (legacy) or RaxeError (structured)
401
+ error: Optional RaxeError (alternative to passing as first argument)
402
+ """
403
+ if isinstance(message_or_error, RaxeError):
404
+ self.error = message_or_error
405
+ self.message = str(message_or_error)
406
+ elif error is not None:
407
+ self.error = error
408
+ self.message = message_or_error
409
+ else:
410
+ self.error = None
411
+ self.message = message_or_error
412
+
413
+ super().__init__(self.message)
414
+
415
+ @property
416
+ def code(self) -> ErrorCode | None:
417
+ """Get error code if available."""
418
+ return self.error.code if self.error else None
419
+
420
+ @property
421
+ def remediation(self) -> str | None:
422
+ """Get remediation hint if available."""
423
+ return self.error.remediation if self.error else None
424
+
425
+ @property
426
+ def doc_url(self) -> str | None:
427
+ """Get documentation URL if available."""
428
+ return self.error.doc_url if self.error else None
429
+
430
+ def to_dict(self) -> dict[str, Any]:
431
+ """Convert exception to dictionary for serialization.
432
+
433
+ Returns:
434
+ Dictionary representation suitable for JSON serialization.
435
+ """
436
+ if self.error:
437
+ return self.error.to_dict()
438
+ return {
439
+ "message": self.message,
440
+ "code": None,
441
+ }
442
+
443
+
444
+ # ============================================================================
445
+ # Configuration Exceptions
446
+ # ============================================================================
447
+
448
+ class ConfigurationError(RaxeException):
449
+ """Raised when configuration is invalid or missing.
450
+
451
+ This exception covers:
452
+ - Missing configuration files
453
+ - Invalid configuration format (YAML parse errors)
454
+ - Missing required configuration fields
455
+ - Invalid configuration values
456
+ - Permission issues with config files
457
+
458
+ Example:
459
+ >>> raise ConfigurationError(config_not_found_error("/path/to/config"))
460
+ """
461
+
462
+ pass
463
+
464
+
465
+ # ============================================================================
466
+ # Validation Exceptions
467
+ # ============================================================================
468
+
469
+ class ValidationError(RaxeException):
470
+ """Raised when input validation fails.
471
+
472
+ This exception covers:
473
+ - Empty input
474
+ - Input exceeding length limits
475
+ - Invalid format
476
+ - Missing required fields
477
+ - Type mismatches
478
+ - Out of range values
479
+
480
+ Example:
481
+ >>> raise ValidationError(validation_empty_input_error("prompt"))
482
+ """
483
+
484
+ pass
485
+
486
+
487
+ # ============================================================================
488
+ # Rule Exceptions
489
+ # ============================================================================
490
+
491
+ class RuleError(RaxeException):
492
+ """Raised when rule loading or processing fails.
493
+
494
+ This exception covers:
495
+ - Rule not found
496
+ - Invalid rule syntax
497
+ - Invalid regex patterns
498
+ - Rule pack issues
499
+ - Version mismatches
500
+
501
+ Example:
502
+ >>> raise RuleError(rule_not_found_error("pi-999"))
503
+ """
504
+
505
+ pass
506
+
507
+
508
+ # ============================================================================
509
+ # Database Exceptions
510
+ # ============================================================================
511
+
512
+ class DatabaseError(RaxeException):
513
+ """Raised when database operations fail.
514
+
515
+ This exception covers:
516
+ - Connection failures
517
+ - Query errors
518
+ - Migration failures
519
+ - Integrity constraint violations
520
+ - Lock timeouts
521
+
522
+ Example:
523
+ >>> raise DatabaseError(database_connection_error("/path/to/db", "disk full"))
524
+ """
525
+
526
+ pass
527
+
528
+
529
+ # ============================================================================
530
+ # Infrastructure Exceptions
531
+ # ============================================================================
532
+
533
+ class InfrastructureError(RaxeException):
534
+ """Raised when infrastructure operations fail.
535
+
536
+ This exception covers:
537
+ - Network errors
538
+ - Timeouts
539
+ - Service unavailability
540
+ - Rate limiting
541
+ - Disk space issues
542
+ - Model loading failures
543
+ - Circuit breaker activation
544
+
545
+ Example:
546
+ >>> raise InfrastructureError(infrastructure_timeout_error("cloud_sync", 30.0))
547
+ """
548
+
549
+ pass
550
+
551
+
552
+ # ============================================================================
553
+ # Security Exceptions (Backwards Compatible)
554
+ # ============================================================================
555
+
556
+ class SecurityException(RaxeException):
557
+ """Raised when a security threat is detected and blocking is enabled.
558
+
559
+ This exception is raised when:
560
+ - A threat is detected during scanning
561
+ - The policy dictates blocking (e.g., CRITICAL severity)
562
+ - block_on_threat=True is specified
563
+
564
+ Attributes:
565
+ result: The ScanPipelineResult that triggered the exception
566
+ error: Optional RaxeError with structured details
567
+
568
+ Example:
569
+ >>> # Standard usage with result
570
+ >>> raise SecurityException(result)
571
+
572
+ >>> # Usage with structured error
573
+ >>> error = security_threat_detected_error("HIGH", 3)
574
+ >>> raise SecurityException(result, error=error)
575
+ """
576
+
577
+ def __init__(
578
+ self,
579
+ result: "ScanPipelineResult",
580
+ *,
581
+ error: RaxeError | None = None,
582
+ ) -> None:
583
+ """Initialize security exception.
584
+
585
+ Args:
586
+ result: ScanPipelineResult containing threat details
587
+ error: Optional structured error information
588
+ """
589
+ self.result = result
590
+
591
+ # Create default structured error if not provided
592
+ if error is None:
593
+ error = security_threat_detected_error(
594
+ severity=str(result.severity),
595
+ detection_count=result.total_detections,
596
+ )
597
+
598
+ message = (
599
+ f"Security threat detected: {result.severity} "
600
+ f"({result.total_detections} detection(s))"
601
+ )
602
+ super().__init__(message, error=error)
603
+
604
+
605
+ class RaxeBlockedError(SecurityException):
606
+ """Raised when a request is blocked by policy.
607
+
608
+ This is a specialized SecurityException that indicates
609
+ the request was explicitly blocked by policy evaluation.
610
+
611
+ Attributes:
612
+ result: The ScanPipelineResult with blocking decision
613
+ error: RaxeError with SEC-201 code
614
+
615
+ Example:
616
+ >>> raise RaxeBlockedError(result)
617
+ """
618
+
619
+ def __init__(self, result: "ScanPipelineResult") -> None:
620
+ """Initialize blocked error.
621
+
622
+ Args:
623
+ result: ScanPipelineResult with blocking decision
624
+ """
625
+ error = security_blocked_by_policy_error(
626
+ policy_decision=str(result.policy_decision),
627
+ severity=str(result.severity),
628
+ )
629
+ super().__init__(result, error=error)
630
+
631
+ # Override message for backwards compatibility
632
+ self.args = (
633
+ f"Request blocked by policy: {result.policy_decision} "
634
+ f"(Severity: {result.severity})",
635
+ )
636
+
637
+
638
+ class ScanTimeoutError(InfrastructureError):
639
+ """Raised when a scan times out and fail_open=False (fail-closed mode).
640
+
641
+ This exception is raised when:
642
+ - A scan exceeds the configured timeout_ms
643
+ - The config has fail_open=False (fail-closed behavior)
644
+
645
+ When fail_open=True (default), timeouts result in allowing the request
646
+ rather than raising an exception.
647
+
648
+ Attributes:
649
+ timeout_ms: The configured timeout in milliseconds
650
+
651
+ Example:
652
+ >>> config = AgentScannerConfig(timeout_ms=100, fail_open=False)
653
+ >>> # If scan takes >100ms, raises ScanTimeoutError
654
+ """
655
+
656
+ def __init__(
657
+ self,
658
+ message: str,
659
+ *,
660
+ timeout_ms: float = 100.0,
661
+ ) -> None:
662
+ """Initialize scan timeout error.
663
+
664
+ Args:
665
+ message: Error message describing the timeout
666
+ timeout_ms: The configured timeout value
667
+ """
668
+ self.timeout_ms = timeout_ms
669
+ error = infrastructure_timeout_error(
670
+ operation="security_scan",
671
+ timeout_seconds=timeout_ms / 1000.0,
672
+ )
673
+ super().__init__(message, error=error)
674
+
675
+
676
+ # ============================================================================
677
+ # Exception Mapping Utilities
678
+ # ============================================================================
679
+
680
+ def from_error_code(
681
+ code: ErrorCode,
682
+ message: str | None = None,
683
+ details: dict[str, Any] | None = None,
684
+ remediation: str | None = None,
685
+ ) -> RaxeException:
686
+ """Create appropriate exception from error code.
687
+
688
+ Factory function that creates the correct exception type based on
689
+ the error code category.
690
+
691
+ Args:
692
+ code: The ErrorCode to create exception for
693
+ message: Optional custom message (uses default if not provided)
694
+ details: Optional additional context
695
+ remediation: Optional custom remediation (uses default if not provided)
696
+
697
+ Returns:
698
+ Appropriate RaxeException subclass based on error code category
699
+
700
+ Example:
701
+ >>> exc = from_error_code(
702
+ ... ErrorCode.CFG_NOT_FOUND,
703
+ ... message="Config missing",
704
+ ... details={"path": "/etc/raxe/config.yaml"}
705
+ ... )
706
+ >>> isinstance(exc, ConfigurationError)
707
+ True
708
+ """
709
+ # Default messages for each error code
710
+ default_messages: dict[ErrorCode, str] = {
711
+ ErrorCode.CFG_NOT_FOUND: "Configuration file not found",
712
+ ErrorCode.CFG_INVALID_FORMAT: "Invalid configuration format",
713
+ ErrorCode.CFG_MISSING_REQUIRED: "Required configuration field missing",
714
+ ErrorCode.CFG_INVALID_VALUE: "Invalid configuration value",
715
+ ErrorCode.CFG_PERMISSION_DENIED: "Permission denied accessing configuration",
716
+ ErrorCode.CFG_INITIALIZATION_FAILED: "Configuration initialization failed",
717
+ ErrorCode.RULE_NOT_FOUND: "Detection rule not found",
718
+ ErrorCode.RULE_INVALID_SYNTAX: "Invalid rule syntax",
719
+ ErrorCode.RULE_INVALID_PATTERN: "Invalid regex pattern in rule",
720
+ ErrorCode.RULE_LOAD_FAILED: "Failed to load detection rules",
721
+ ErrorCode.RULE_PACK_NOT_FOUND: "Rule pack not found",
722
+ ErrorCode.RULE_PACK_INVALID: "Invalid rule pack format",
723
+ ErrorCode.RULE_VERSION_MISMATCH: "Rule version mismatch",
724
+ ErrorCode.RULE_DUPLICATE_ID: "Duplicate rule ID detected",
725
+ ErrorCode.SEC_THREAT_DETECTED: "Security threat detected",
726
+ ErrorCode.SEC_BLOCKED_BY_POLICY: "Request blocked by security policy",
727
+ ErrorCode.SEC_CRITICAL_THREAT: "Critical security threat detected",
728
+ ErrorCode.SEC_SIGNATURE_INVALID: "Invalid signature",
729
+ ErrorCode.SEC_AUTH_FAILED: "Authentication failed",
730
+ ErrorCode.SEC_PERMISSION_DENIED: "Permission denied",
731
+ ErrorCode.SEC_CREDENTIAL_EXPIRED: "API key has expired",
732
+ ErrorCode.DB_CONNECTION_FAILED: "Database connection failed",
733
+ ErrorCode.DB_QUERY_FAILED: "Database query failed",
734
+ ErrorCode.DB_MIGRATION_FAILED: "Database migration failed",
735
+ ErrorCode.DB_INTEGRITY_ERROR: "Database integrity error",
736
+ ErrorCode.DB_NOT_INITIALIZED: "Database not initialized",
737
+ ErrorCode.DB_LOCK_TIMEOUT: "Database lock timeout",
738
+ ErrorCode.VAL_EMPTY_INPUT: "Empty input provided",
739
+ ErrorCode.VAL_INPUT_TOO_LONG: "Input exceeds maximum length",
740
+ ErrorCode.VAL_INVALID_FORMAT: "Invalid input format",
741
+ ErrorCode.VAL_MISSING_FIELD: "Required field missing",
742
+ ErrorCode.VAL_TYPE_MISMATCH: "Type mismatch",
743
+ ErrorCode.VAL_OUT_OF_RANGE: "Value out of allowed range",
744
+ ErrorCode.VAL_INVALID_REGEX: "Invalid regular expression",
745
+ ErrorCode.VAL_POLICY_INVALID: "Invalid policy configuration",
746
+ ErrorCode.INFRA_NETWORK_ERROR: "Network error",
747
+ ErrorCode.INFRA_TIMEOUT: "Operation timed out",
748
+ ErrorCode.INFRA_SERVICE_UNAVAILABLE: "Service unavailable",
749
+ ErrorCode.INFRA_RATE_LIMITED: "Rate limit exceeded",
750
+ ErrorCode.INFRA_DISK_FULL: "Disk space exhausted",
751
+ ErrorCode.INFRA_MODEL_LOAD_FAILED: "Failed to load ML model",
752
+ ErrorCode.INFRA_CIRCUIT_BREAKER_OPEN: "Circuit breaker is open",
753
+ }
754
+
755
+ # Default remediations for each error code
756
+ default_remediations: dict[ErrorCode, str] = {
757
+ ErrorCode.CFG_NOT_FOUND: "Run 'raxe init' to create default configuration",
758
+ ErrorCode.CFG_INVALID_FORMAT: "Check YAML syntax with 'raxe config validate'",
759
+ ErrorCode.CFG_MISSING_REQUIRED: "Add the missing field to configuration",
760
+ ErrorCode.CFG_INVALID_VALUE: "Check documentation for valid values",
761
+ ErrorCode.CFG_PERMISSION_DENIED: "Check file permissions on config directory",
762
+ ErrorCode.CFG_INITIALIZATION_FAILED: "Run 'raxe doctor' to diagnose issues",
763
+ ErrorCode.RULE_NOT_FOUND: "Use 'raxe rules list' to see available rules",
764
+ ErrorCode.RULE_INVALID_SYNTAX: "Validate rule with 'raxe validate-rule'",
765
+ ErrorCode.RULE_INVALID_PATTERN: "Test regex patterns at regex101.com",
766
+ ErrorCode.RULE_LOAD_FAILED: "Check rule file permissions and format",
767
+ ErrorCode.RULE_PACK_NOT_FOUND: "Install rule pack with 'raxe pack install'",
768
+ ErrorCode.RULE_PACK_INVALID: "Validate pack structure and manifest",
769
+ ErrorCode.RULE_VERSION_MISMATCH: "Update RAXE or rule pack to compatible version",
770
+ ErrorCode.RULE_DUPLICATE_ID: "Ensure all rule IDs are unique",
771
+ ErrorCode.SEC_THREAT_DETECTED: "Review detection with 'raxe scan --explain'",
772
+ ErrorCode.SEC_BLOCKED_BY_POLICY: "Adjust policy or add suppression rule",
773
+ ErrorCode.SEC_CRITICAL_THREAT: "Investigate immediately - potential attack",
774
+ ErrorCode.SEC_SIGNATURE_INVALID: "Verify rule pack integrity",
775
+ ErrorCode.SEC_AUTH_FAILED: "Get a permanent key at the console or run 'raxe auth login'",
776
+ ErrorCode.SEC_PERMISSION_DENIED: "Contact administrator for access",
777
+ ErrorCode.SEC_CREDENTIAL_EXPIRED: "Get a permanent key at the console or run 'raxe auth login'",
778
+ ErrorCode.DB_CONNECTION_FAILED: "Check database path and permissions",
779
+ ErrorCode.DB_QUERY_FAILED: "Run 'raxe doctor' to check database health",
780
+ ErrorCode.DB_MIGRATION_FAILED: "Backup data and reinitialize database",
781
+ ErrorCode.DB_INTEGRITY_ERROR: "Database may be corrupted - restore from backup",
782
+ ErrorCode.DB_NOT_INITIALIZED: "Run 'raxe init' to initialize database",
783
+ ErrorCode.DB_LOCK_TIMEOUT: "Close other RAXE instances and retry",
784
+ ErrorCode.VAL_EMPTY_INPUT: "Provide non-empty input",
785
+ ErrorCode.VAL_INPUT_TOO_LONG: "Reduce input length",
786
+ ErrorCode.VAL_INVALID_FORMAT: "Check input format requirements",
787
+ ErrorCode.VAL_MISSING_FIELD: "Provide all required fields",
788
+ ErrorCode.VAL_TYPE_MISMATCH: "Check data types match expected format",
789
+ ErrorCode.VAL_OUT_OF_RANGE: "Use value within allowed range",
790
+ ErrorCode.VAL_INVALID_REGEX: "Fix regex syntax",
791
+ ErrorCode.VAL_POLICY_INVALID: "Check policy configuration format",
792
+ ErrorCode.INFRA_NETWORK_ERROR: "Check network connectivity",
793
+ ErrorCode.INFRA_TIMEOUT: "Retry or increase timeout",
794
+ ErrorCode.INFRA_SERVICE_UNAVAILABLE: "Service may be down - retry later",
795
+ ErrorCode.INFRA_RATE_LIMITED: "Wait and retry with backoff. Get higher limits via 'raxe auth login'",
796
+ ErrorCode.INFRA_DISK_FULL: "Free up disk space",
797
+ ErrorCode.INFRA_MODEL_LOAD_FAILED: "Reinstall ML models with 'pip install raxe[ml]'",
798
+ ErrorCode.INFRA_CIRCUIT_BREAKER_OPEN: "Service recovering - retry in a few minutes",
799
+ }
800
+
801
+ # Create the error
802
+ error = RaxeError(
803
+ code=code,
804
+ message=message or default_messages.get(code, f"Error {code.value}"),
805
+ details=details or {},
806
+ remediation=remediation or default_remediations.get(code, ""),
807
+ )
808
+
809
+ # Map category to exception type
810
+ exception_map: dict[ErrorCategory, type[RaxeException]] = {
811
+ ErrorCategory.CFG: ConfigurationError,
812
+ ErrorCategory.RULE: RuleError,
813
+ ErrorCategory.SEC: RaxeException, # Use base for SEC (SecurityException needs result)
814
+ ErrorCategory.DB: DatabaseError,
815
+ ErrorCategory.VAL: ValidationError,
816
+ ErrorCategory.INFRA: InfrastructureError,
817
+ }
818
+
819
+ exception_class = exception_map.get(code.category, RaxeException)
820
+ return exception_class(error)
821
+
822
+
823
+ # ============================================================================
824
+ # Re-exports for convenience
825
+ # ============================================================================
826
+
827
+ __all__ = [
828
+ # Core classes
829
+ "ErrorCategory",
830
+ "ErrorCode",
831
+ "RaxeError",
832
+ # Base exception
833
+ "RaxeException",
834
+ # Domain exceptions
835
+ "ConfigurationError",
836
+ "ValidationError",
837
+ "RuleError",
838
+ "DatabaseError",
839
+ "InfrastructureError",
840
+ # Security exceptions (backwards compatible)
841
+ "SecurityException",
842
+ "RaxeBlockedError",
843
+ "ScanTimeoutError",
844
+ # Error factories
845
+ "config_not_found_error",
846
+ "config_invalid_format_error",
847
+ "config_missing_required_error",
848
+ "rule_not_found_error",
849
+ "rule_invalid_pattern_error",
850
+ "validation_empty_input_error",
851
+ "validation_input_too_long_error",
852
+ "database_connection_error",
853
+ "infrastructure_timeout_error",
854
+ "security_threat_detected_error",
855
+ "security_blocked_by_policy_error",
856
+ "credential_expired_error",
857
+ # Utilities
858
+ "from_error_code",
859
+ ]