apisec-code-bolt 0.1.8__tar.gz → 0.1.10__tar.gz

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 (362) hide show
  1. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/PKG-INFO +107 -5
  2. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/README.md +102 -3
  3. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/pyproject.toml +10 -2
  4. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/analyzer.py +575 -69
  5. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/binding_tracker.py +25 -0
  6. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/boundary_detection.py +809 -0
  7. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/call_graph.py +94 -2
  8. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/call_resolver.py +14 -2
  9. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/config_scanner.py +781 -0
  10. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/data_flow.py +39 -11
  11. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/dependency_extractor.py +3539 -0
  12. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/integration_detector.py +95 -20
  13. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/js_gradle_locks.py +277 -0
  14. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/literal_scanner.py +579 -0
  15. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/manifest_partitioner.py +493 -0
  16. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/secret_patterns.py +404 -0
  17. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/secrets_policy.py +246 -0
  18. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/surface_enrichment.py +2 -1
  19. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/template_scanner.py +831 -0
  20. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/tree_resolver.py +195 -0
  21. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/url_prefix_resolver.py +343 -33
  22. apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/version_resolver.py +356 -0
  23. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cli/main.py +490 -134
  24. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cloud/apisec_client.py +40 -12
  25. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cloud/client.py +10 -10
  26. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/config.py +64 -7
  27. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/discovery.py +1 -0
  28. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/log_format.py +15 -1
  29. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/manifest.py +110 -1
  30. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/state.py +25 -9
  31. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/telemetry.py +2 -1
  32. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/types.py +8 -0
  33. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/base.py +6 -0
  34. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/aspnet_plugin.py +278 -0
  35. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/dotnet/taint_scanner.py +1470 -0
  36. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/webforms_plugin.py +137 -13
  37. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/__init__.py +2 -1
  38. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/jaxrs_plugin.py +51 -3
  39. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/java/servlet_plugin.py +220 -0
  40. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/java/taint_scanner.py +2334 -0
  41. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/__init__.py +2 -1
  42. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/express_plugin.py +20 -2
  43. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/fastify_plugin.py +56 -2
  44. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/js/koa_plugin.py +283 -0
  45. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/js/taint_scanner.py +1562 -0
  46. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/django_plugin.py +76 -30
  47. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/fastapi/plugin.py +74 -10
  48. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/python/flask_plugin.py +748 -0
  49. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/python/taint_scanner.py +1445 -0
  50. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/__init__.py +24 -0
  51. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/action_cable_plugin.py +152 -0
  52. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/hanami_plugin.py +254 -0
  53. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/padrino_plugin.py +114 -0
  54. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/rails_plugin.py +121 -73
  55. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/roda_plugin.py +260 -0
  56. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/sidekiq_plugin.py +208 -0
  57. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/sinatra_plugin.py +22 -3
  58. apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/taint_scanner.py +2580 -0
  59. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/js/parser.py +61 -6
  60. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/cross_file_resolver.py +54 -2
  61. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/parameter_analyzer.py +52 -0
  62. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/router_registry.py +178 -20
  63. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/visitors.py +16 -0
  64. apisec_code_bolt-0.1.10/src/apisec_code_bolt/parsing/ruby/language_services.py +807 -0
  65. apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/__init__.py +15 -0
  66. apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/indexer.py +299 -0
  67. apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/metadata.py +333 -0
  68. apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/module_graph.py +291 -0
  69. apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/package_source.py +447 -0
  70. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/executor.py +28 -12
  71. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/checksums/checksums.lock +0 -0
  72. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/checksums/md5-checksums.bin +0 -0
  73. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/checksums/sha1-checksums.bin +0 -0
  74. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  75. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  76. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  77. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  78. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/buildOutputCleanup/cache.properties +2 -0
  79. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/vcs-1/gc.properties +0 -0
  80. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-agg-all.json +579 -0
  81. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-agg-runtime.json +446 -0
  82. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-bom-all.json +477 -0
  83. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-bom-runtime.json +338 -0
  84. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/package-lock-v1.json +37 -0
  85. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/package-lock.json +52 -0
  86. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/packages.lock.json +46 -0
  87. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/pnpm-lock-v5.yaml +25 -0
  88. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/pnpm-lock-v6.yaml +39 -0
  89. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/pnpm-lock.yaml +35 -0
  90. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/yarn-berry.lock +31 -0
  91. apisec_code_bolt-0.1.10/tests/fixtures/dep_files/yarn.lock +25 -0
  92. apisec_code_bolt-0.1.10/tests/fixtures/sample_django_cbv_module_alias/urls.py +7 -0
  93. apisec_code_bolt-0.1.10/tests/fixtures/sample_django_cbv_module_alias/views.py +19 -0
  94. apisec_code_bolt-0.1.10/tests/fixtures/sample_flask_auth/app.py +64 -0
  95. apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-a/app.py +11 -0
  96. apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-a/pyproject.toml +6 -0
  97. apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-b/app.py +11 -0
  98. apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-b/pyproject.toml +6 -0
  99. apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/shared_util.py +7 -0
  100. apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-js/index.js +14 -0
  101. apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-js/package.json +7 -0
  102. apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-py/main.py +26 -0
  103. apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-py/pyproject.toml +4 -0
  104. apisec_code_bolt-0.1.10/tests/fixtures/sample_spring_boot/apisec-code-bolt/state.yaml +1 -0
  105. apisec_code_bolt-0.1.10/tests/fixtures/vulnerable_app/target/classes/com/demo/DemoController.class +0 -0
  106. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_cli.py +53 -0
  107. apisec_code_bolt-0.1.10/tests/integration/test_django_cbv_decorator_auth.py +51 -0
  108. apisec_code_bolt-0.1.10/tests/integration/test_erb_template_data_flows.py +81 -0
  109. apisec_code_bolt-0.1.10/tests/integration/test_flask_auth_integration.py +74 -0
  110. apisec_code_bolt-0.1.10/tests/integration/test_jsx_tsx_manifest.py +66 -0
  111. apisec_code_bolt-0.1.10/tests/integration/test_monorepo_partitioning.py +71 -0
  112. apisec_code_bolt-0.1.10/tests/integration/test_monorepo_regression.py +76 -0
  113. apisec_code_bolt-0.1.10/tests/integration/test_polyglot_monorepo_auth_boundary.py +270 -0
  114. apisec_code_bolt-0.1.10/tests/integration/test_polyglot_python_prefix_maps.py +151 -0
  115. apisec_code_bolt-0.1.10/tests/integration/test_regression_flask_auth_and_deps.py +210 -0
  116. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_spring_boot_analysis.py +8 -2
  117. apisec_code_bolt-0.1.10/tests/test_query/__init__.py +0 -0
  118. apisec_code_bolt-0.1.10/tests/test_query/test_executor_connected.py +122 -0
  119. apisec_code_bolt-0.1.10/tests/unit/conftest.py +9 -0
  120. apisec_code_bolt-0.1.10/tests/unit/test_apisec_client_enrich.py +80 -0
  121. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_aspnet_plugin.py +199 -0
  122. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_benchmark_run.py +40 -0
  123. apisec_code_bolt-0.1.10/tests/unit/test_boundary_detection.py +594 -0
  124. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_call_graph.py +141 -0
  125. apisec_code_bolt-0.1.10/tests/unit/test_config_scanner_secret_values.py +467 -0
  126. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_cross_file_resolver.py +91 -0
  127. apisec_code_bolt-0.1.10/tests/unit/test_csharp_taint_scanner.py +1253 -0
  128. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_data_flow.py +93 -0
  129. apisec_code_bolt-0.1.10/tests/unit/test_dependency_parsing.py +3271 -0
  130. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_django_plugin.py +78 -2
  131. apisec_code_bolt-0.1.10/tests/unit/test_entry_point_interface_resolution.py +149 -0
  132. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_express_nestjs_plugin.py +68 -3
  133. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_fastapi_plugin.py +164 -0
  134. apisec_code_bolt-0.1.10/tests/unit/test_fastify_passport_auth.py +159 -0
  135. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_fastify_plugin.py +20 -2
  136. apisec_code_bolt-0.1.10/tests/unit/test_flask_auth_and_deps.py +451 -0
  137. apisec_code_bolt-0.1.10/tests/unit/test_flask_blueprint_prefix.py +420 -0
  138. apisec_code_bolt-0.1.10/tests/unit/test_flask_params.py +119 -0
  139. apisec_code_bolt-0.1.10/tests/unit/test_flask_surface_kind.py +97 -0
  140. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_integration_detection.py +35 -0
  141. apisec_code_bolt-0.1.10/tests/unit/test_java_taint_scanner.py +860 -0
  142. apisec_code_bolt-0.1.10/tests/unit/test_jaxrs_secured_auth.py +287 -0
  143. apisec_code_bolt-0.1.10/tests/unit/test_js_gradle_locks.py +300 -0
  144. apisec_code_bolt-0.1.10/tests/unit/test_js_parser.py +109 -0
  145. apisec_code_bolt-0.1.10/tests/unit/test_js_taint_scanner.py +1237 -0
  146. apisec_code_bolt-0.1.10/tests/unit/test_koa_plugin.py +211 -0
  147. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_legacy_aspnet_plugin.py +59 -0
  148. apisec_code_bolt-0.1.10/tests/unit/test_manifest_partitioner.py +555 -0
  149. apisec_code_bolt-0.1.10/tests/unit/test_monorepo_upload_cli.py +507 -0
  150. apisec_code_bolt-0.1.10/tests/unit/test_origin_type_contract.py +74 -0
  151. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_parameter_analyzer.py +75 -0
  152. apisec_code_bolt-0.1.10/tests/unit/test_pkgindex.py +1399 -0
  153. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_python_parser.py +42 -0
  154. apisec_code_bolt-0.1.10/tests/unit/test_python_taint_scanner.py +1481 -0
  155. apisec_code_bolt-0.1.10/tests/unit/test_rails_plugin.py +5231 -0
  156. apisec_code_bolt-0.1.10/tests/unit/test_router_registry.py +1069 -0
  157. apisec_code_bolt-0.1.10/tests/unit/test_ruby_language_services.py +590 -0
  158. apisec_code_bolt-0.1.10/tests/unit/test_ruby_p6_plugins.py +503 -0
  159. apisec_code_bolt-0.1.10/tests/unit/test_secret_detection_coverage.py +342 -0
  160. apisec_code_bolt-0.1.10/tests/unit/test_secret_value_presentation.py +209 -0
  161. apisec_code_bolt-0.1.10/tests/unit/test_secrets_policy.py +316 -0
  162. apisec_code_bolt-0.1.10/tests/unit/test_servlet_plugin.py +297 -0
  163. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_surface_extraction_client.py +11 -0
  164. apisec_code_bolt-0.1.10/tests/unit/test_template_scanner.py +714 -0
  165. apisec_code_bolt-0.1.10/tests/unit/test_tree_resolver.py +187 -0
  166. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_upload_verify_timeout.py +39 -6
  167. apisec_code_bolt-0.1.10/tests/unit/test_url_prefix_resolver.py +199 -0
  168. apisec_code_bolt-0.1.10/tests/unit/test_version_resolver.py +182 -0
  169. apisec_code_bolt-0.1.10/tests/unit/test_webforms_plugin.py +345 -0
  170. apisec_code_bolt-0.1.8/src/apisec_code_bolt/analysis/config_scanner.py +0 -363
  171. apisec_code_bolt-0.1.8/src/apisec_code_bolt/analysis/dependency_extractor.py +0 -1278
  172. apisec_code_bolt-0.1.8/src/apisec_code_bolt/analysis/literal_scanner.py +0 -300
  173. apisec_code_bolt-0.1.8/src/apisec_code_bolt/frameworks/python/flask_plugin.py +0 -230
  174. apisec_code_bolt-0.1.8/src/apisec_code_bolt/frameworks/ruby/__init__.py +0 -8
  175. apisec_code_bolt-0.1.8/src/apisec_code_bolt/frameworks/ruby/taint_scanner.py +0 -640
  176. apisec_code_bolt-0.1.8/src/apisec_code_bolt/parsing/ruby/language_services.py +0 -101
  177. apisec_code_bolt-0.1.8/tests/unit/test_dependency_parsing.py +0 -885
  178. apisec_code_bolt-0.1.8/tests/unit/test_rails_plugin.py +0 -722
  179. apisec_code_bolt-0.1.8/tests/unit/test_router_registry.py +0 -566
  180. apisec_code_bolt-0.1.8/tests/unit/test_webforms_plugin.py +0 -83
  181. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/.gitignore +0 -0
  182. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/__init__.py +0 -0
  183. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/__main__.py +0 -0
  184. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/__init__.py +0 -0
  185. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/call_graph_types.py +0 -0
  186. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/capability_tagger.py +0 -0
  187. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/flow_analysis.py +0 -0
  188. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/hof_catalog.py +0 -0
  189. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/path_normalizer.py +0 -0
  190. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/read_site_detector.py +0 -0
  191. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/request_patterns.py +0 -0
  192. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/sensitivity_classifier.py +0 -0
  193. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/sink_evidence.py +0 -0
  194. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cli/__init__.py +0 -0
  195. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cli/exit_codes.py +0 -0
  196. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cloud/__init__.py +0 -0
  197. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/__init__.py +0 -0
  198. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/credentials.py +0 -0
  199. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/repo.py +0 -0
  200. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/fingerprinting/__init__.py +0 -0
  201. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/__init__.py +0 -0
  202. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/_graphql_common.py +0 -0
  203. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/_jwt_common.py +0 -0
  204. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/auth_helpers.py +0 -0
  205. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/__init__.py +0 -0
  206. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/_path_helpers.py +0 -0
  207. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/grpc_plugin.py +0 -0
  208. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/jwt_config_extractor.py +0 -0
  209. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/legacy_aspnet_plugin.py +0 -0
  210. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/refit_plugin.py +0 -0
  211. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/wcf_plugin.py +0 -0
  212. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/_annotations.py +0 -0
  213. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/_constraints.py +0 -0
  214. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/graphql_plugin.py +0 -0
  215. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/jwt_config_extractor.py +0 -0
  216. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/micronaut_plugin.py +0 -0
  217. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/spring_plugin.py +0 -0
  218. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/_route_helpers.py +0 -0
  219. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/graphql_plugin.py +0 -0
  220. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/nestjs_plugin.py +0 -0
  221. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/__init__.py +0 -0
  222. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/celery_plugin.py +0 -0
  223. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/click_plugin.py +0 -0
  224. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/fastapi/__init__.py +0 -0
  225. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/graphql_plugin.py +0 -0
  226. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/prefect_plugin.py +0 -0
  227. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/webhook_plugin.py +0 -0
  228. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/_ts_helpers.py +0 -0
  229. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/grape_plugin.py +0 -0
  230. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/graphql_plugin.py +0 -0
  231. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/__init__.py +0 -0
  232. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/base.py +0 -0
  233. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/__init__.py +0 -0
  234. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/language_services.py +0 -0
  235. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/literals.py +0 -0
  236. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/parser.py +0 -0
  237. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/type_resolver.py +0 -0
  238. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/js/__init__.py +0 -0
  239. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/js/language_services.py +0 -0
  240. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/__init__.py +0 -0
  241. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/language_services.py +0 -0
  242. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/parser.py +0 -0
  243. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/type_resolver.py +0 -0
  244. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/__init__.py +0 -0
  245. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/cbv_extractor.py +0 -0
  246. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/constant_resolver.py +0 -0
  247. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/dynamic_route_detector.py +0 -0
  248. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/expression_utils.py +0 -0
  249. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/extraction_types.py +0 -0
  250. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/language_services.py +0 -0
  251. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/parser.py +0 -0
  252. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/path_resolver.py +0 -0
  253. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/type_resolver.py +0 -0
  254. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/ruby/__init__.py +0 -0
  255. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/ruby/parser.py +0 -0
  256. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/services.py +0 -0
  257. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/__init__.py +0 -0
  258. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/ast_cache.py +0 -0
  259. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/handlers.py +0 -0
  260. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/manifest_context.py +0 -0
  261. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/conftest.py +0 -0
  262. /apisec_code_bolt-0.1.8/tests/test_query/__init__.py → /apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/gc.properties +0 -0
  263. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/Cargo.toml +0 -0
  264. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/Gemfile.lock +0 -0
  265. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/Pipfile +0 -0
  266. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/build.gradle +0 -0
  267. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/build.gradle.kts +0 -0
  268. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/go.mod +0 -0
  269. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/package.json +0 -0
  270. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/pom.xml +0 -0
  271. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/pyproject_pep621.toml +0 -0
  272. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/pyproject_poetry.toml +0 -0
  273. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/requirements-dev.txt +0 -0
  274. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/requirements.txt +0 -0
  275. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/setup.cfg +0 -0
  276. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/setup.py +0 -0
  277. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_django/urls.py +0 -0
  278. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_django/views.py +0 -0
  279. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/app.ts +0 -0
  280. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/middleware/authenticate.ts +0 -0
  281. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/routes/auth.ts +0 -0
  282. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/routes/users.ts +0 -0
  283. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/main.py +0 -0
  284. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/routes/__init__.py +0 -0
  285. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/routes/users.py +0 -0
  286. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/services/__init__.py +0 -0
  287. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/services/user_service.py +0 -0
  288. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_flask/app.py +0 -0
  289. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_flask_pydantic/app.py +0 -0
  290. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_grape/api.rb +0 -0
  291. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/auth.controller.ts +0 -0
  292. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/roles.decorator.ts +0 -0
  293. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/roles.guard.ts +0 -0
  294. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/users.controller.ts +0 -0
  295. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_sinatra/app.rb +0 -0
  296. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_spring_boot/src/main/java/com/example/demo/config/SecurityConfig.java +0 -0
  297. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_spring_boot/src/main/java/com/example/demo/controller/UserController.java +0 -0
  298. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_spring_boot/src/main/java/com/example/demo/model/User.java +0 -0
  299. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_spring_boot/src/main/java/com/example/demo/service/UserService.java +0 -0
  300. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_spring_boot/src/main/resources/application.properties +0 -0
  301. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/VULNERABILITIES.md +0 -0
  302. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/config/SecurityConfig.java +0 -0
  303. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/controller/AdminController.java +0 -0
  304. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/controller/OrderController.java +0 -0
  305. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/controller/UserController.java +0 -0
  306. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/model/Order.java +0 -0
  307. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/model/User.java +0 -0
  308. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/service/OrderService.java +0 -0
  309. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/java/com/example/vulnapi/service/UserService.java +0 -0
  310. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/resources/application.properties +0 -0
  311. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vulnerable_app/pom.xml +0 -0
  312. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vulnerable_app/src/main/java/com/demo/DemoController.java +0 -0
  313. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/__init__.py +0 -0
  314. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_django_analysis.py +0 -0
  315. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_express_analysis.py +0 -0
  316. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_fastapi_analysis.py +0 -0
  317. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_flask_analysis.py +0 -0
  318. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_nestjs_analysis.py +0 -0
  319. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_vulnerable_app_reachability_guard.py +0 -0
  320. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/fixtures/sample_app.py +0 -0
  321. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_auth_indicator_matching.py +0 -0
  322. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_executor.py +0 -0
  323. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_handlers.py +0 -0
  324. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_read_site_origin_types.py +0 -0
  325. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/__init__.py +0 -0
  326. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_apisec_client.py +0 -0
  327. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_benchmark_audit.py +0 -0
  328. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_cbv_extractor.py +0 -0
  329. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_cli_console_url.py +0 -0
  330. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_config.py +0 -0
  331. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_config_scanner_framework.py +0 -0
  332. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_constant_resolver.py +0 -0
  333. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_csharp_literals.py +0 -0
  334. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_csharp_type_resolver.py +0 -0
  335. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_discovery.py +0 -0
  336. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_dynamic_routes.py +0 -0
  337. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_flow_analysis.py +0 -0
  338. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_grape_plugin.py +0 -0
  339. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_graphql_plugin.py +0 -0
  340. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_grpc_plugin.py +0 -0
  341. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_instrumentation.py +0 -0
  342. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_java_parser.py +0 -0
  343. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_jaxrs_plugin.py +0 -0
  344. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_js_graphql_plugin.py +0 -0
  345. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_jwt_config_extraction.py +0 -0
  346. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_manifest_upload_gzip.py +0 -0
  347. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_micronaut_plugin.py +0 -0
  348. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_path_resolver.py +0 -0
  349. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_pydantic_body_inference.py +0 -0
  350. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_refit_plugin.py +0 -0
  351. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_repo_canonical.py +0 -0
  352. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_ruby_graphql_plugin.py +0 -0
  353. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_sensitivity_capability.py +0 -0
  354. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_sinatra_plugin.py +0 -0
  355. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_sink_evidence.py +0 -0
  356. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_spring_plugin.py +0 -0
  357. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_static_route_catchup.py +0 -0
  358. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_surface_enrichment.py +0 -0
  359. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_telemetry.py +0 -0
  360. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_transformation_tracking.py +0 -0
  361. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_types.py +0 -0
  362. {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_wcf_plugin.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: apisec-code-bolt
3
- Version: 0.1.8
3
+ Version: 0.1.10
4
4
  Summary: Static analysis probe for extracting architectural metadata from codebases
5
5
  Project-URL: Homepage, https://apisec.ai
6
6
  Project-URL: Documentation, https://docs.apisec.ai/code-bolt
@@ -24,13 +24,16 @@ Requires-Dist: httpx>=0.26.0
24
24
  Requires-Dist: javalang>=0.13.0
25
25
  Requires-Dist: libcst>=1.1.0
26
26
  Requires-Dist: networkx>=3.2
27
+ Requires-Dist: packaging>=23.0
27
28
  Requires-Dist: pathspec>=0.12.0
28
29
  Requires-Dist: pydantic-settings>=2.1.0
29
30
  Requires-Dist: pydantic>=2.5.0
30
31
  Requires-Dist: pyyaml>=6.0
31
32
  Requires-Dist: rich>=13.7.0
32
33
  Requires-Dist: tree-sitter-c-sharp>=0.23
34
+ Requires-Dist: tree-sitter-java>=0.23
33
35
  Requires-Dist: tree-sitter-javascript>=0.23
36
+ Requires-Dist: tree-sitter-python>=0.23
34
37
  Requires-Dist: tree-sitter-ruby>=0.23
35
38
  Requires-Dist: tree-sitter-typescript>=0.23
36
39
  Requires-Dist: tree-sitter>=0.23
@@ -199,6 +202,7 @@ analysis:
199
202
  - "tests/**"
200
203
  - "**/migrations/**"
201
204
  max_files: 10000
205
+ detect_workspace_boundaries: true # see "Monorepo support" below
202
206
 
203
207
  data_flow:
204
208
  mode: inter_procedural
@@ -212,6 +216,59 @@ output:
212
216
  format: json
213
217
  ```
214
218
 
219
+ ## Monorepo support
220
+
221
+ When a scanned tree contains multiple independently-deployed sub-projects
222
+ (a pnpm/npm workspace, a Maven or Gradle multi-module build, a `.sln` with
223
+ several `.csproj`s, a `go.work`, or a uv/Poetry workspace — or, absent any of
224
+ those, any directory with its own recognised dependency manifest file),
225
+ `analyze` automatically detects each one as a separate boundary and uploads
226
+ its own manifest as its own Application, instead of one flat manifest mixing
227
+ every sub-project's routes, dependencies, and secrets together.
228
+
229
+ - **Activation is automatic and safe by default.** Detection only takes
230
+ effect when **2 or more** real boundaries are found; a single-project repo
231
+ is completely unaffected — same manifest, same canonical id, same
232
+ `state.yaml`. Disable it entirely with `--no-detect-monorepo` or
233
+ `detect_workspace_boundaries: false`.
234
+ - **Identity.** Each sub-project uploads under
235
+ `{repo_canonical_id}/{relative/path/to/sub-project}`; code that doesn't
236
+ belong to any detected sub-project (root-level config, CI files, a shared
237
+ library with no manifest of its own) uploads under
238
+ `{repo_canonical_id}/shared`.
239
+ - **Display name.** Each sub-project's Application is named
240
+ `{repo_name}/{relative/path/to/sub-project}` (and `{repo_name}/shared` for
241
+ the catch-all), so sibling services are distinguishable in the APIsec
242
+ console's Applications list instead of all showing up under the identical
243
+ bare repo name. A single-project repo is unaffected — same bare `repo_name`
244
+ as always.
245
+ - **Auth-middleware scoping rides on the same gate — and this one is
246
+ security-material.** A globally-registered auth middleware is attributed
247
+ only to routes inside its own boundary, so one service's middleware can no
248
+ longer mark a sibling service's routes as authenticated (which hides
249
+ genuinely-exposed endpoints). Because it is gated on the same "2 or more
250
+ boundaries" condition, a polyglot repo that presents only a **single**
251
+ boundary — e.g. one root manifest and no per-service marker file or
252
+ workspace config — falls back to the legacy path and gets repo-wide
253
+ attribution. If a repo mixes languages or services, give each one its own
254
+ dependency manifest (or declare a workspace) so boundary detection can see
255
+ them; otherwise auth attribution is repo-wide and may over-report routes as
256
+ protected.
257
+ Scoping covers every auth path that resolves by *name* rather than by file:
258
+ Spring Security filter chains, Rails `before_action` (including
259
+ `ApplicationController`-inherited callbacks), Django view classes and
260
+ decorators, and route-level auth dependencies — so two services that each
261
+ define, say, an `articles` controller no longer share each other's guards.
262
+ - **Known v1 limitations:**
263
+ - A response/request schema referenced by routes in more than one
264
+ sub-project is duplicated into each of them; only one level of nested
265
+ model references is followed.
266
+ - The `shared` partition does not get the LLM-based surface-enrichment
267
+ pass (it has no single directory to scope that scan to).
268
+ - A cross-partition reference (e.g. a route depending on an auth guard
269
+ defined in another sub-project) is preserved as-is and surfaced as a
270
+ warning in that partition's manifest, not silently dropped or rewritten.
271
+
215
272
  ## Commands
216
273
 
217
274
  Global options (before the subcommand): `--version`, `-v/--verbose`,
@@ -227,10 +284,8 @@ apisec-code-bolt analyze [PATH] [OPTIONS]
227
284
  Options:
228
285
  -o, --output FILE Save manifest to file instead of uploading
229
286
  --no-upload Skip uploading to cloud (implies --output if not set)
230
- --cloud-url TEXT Reasoning engine URL (legacy direct connection, local dev)
231
287
  --api-key TEXT Override stored API key
232
- --api-url TEXT Override stored API URL
233
- --reasoning-url TEXT Reasoning engine URL (if different from API URL)
288
+ --api-url TEXT Applicationsservice base URL (all analysis traffic is proxied here)
234
289
  --format [json|yaml] Output format
235
290
  --config FILE Path to configuration file
236
291
  --frameworks TEXT Comma-separated framework hints
@@ -239,6 +294,10 @@ Options:
239
294
  --timeout INTEGER Analysis timeout in seconds
240
295
  --dry-run Analyze and print a summary; write/upload nothing
241
296
  --stdout Write manifest JSON to stdout (for pipelines)
297
+ --detect-monorepo / --no-detect-monorepo
298
+ Detect monorepo sub-project boundaries and upload one
299
+ Application per sub-project (default: on; see
300
+ "Monorepo support" below)
242
301
  ```
243
302
 
244
303
  ### auth
@@ -349,6 +408,48 @@ ruff check .
349
408
  ruff format --check .
350
409
  ```
351
410
 
411
+ ### Publishing a release (maintainers)
412
+
413
+ The CLI is published to [PyPI](https://pypi.org/project/apisec-code-bolt/) by the
414
+ **Publish to PyPI** GitHub Action. **Merging to `build` does NOT publish** — the
415
+ workflow only runs on `workflow_dispatch` or a published GitHub Release, and it
416
+ builds from whatever ref it runs on.
417
+
418
+ Prerequisites (one-time): the `PYPI_API_TOKEN` repository secret must be set
419
+ (Settings → Secrets and variables → Actions).
420
+
421
+ 1. **Bump the version.** Edit `version` in `pyproject.toml` (single source of
422
+ truth; `--version` reads it via package metadata). PyPI **rejects re-uploads**
423
+ of an existing version, so the number must be higher than the current PyPI
424
+ release. Open a PR and merge it to `build`.
425
+
426
+ 2. **Publish** — dispatch the workflow (the standard path we use):
427
+ Actions → *Publish to PyPI* → **Run workflow** → select branch **`build`**.
428
+
429
+ ```bash
430
+ gh workflow run "Publish to PyPI" --ref build
431
+ ```
432
+
433
+ <details><summary>Alternative: publish via a GitHub Release</summary>
434
+
435
+ New release → create tag `vX.Y.Z` → set **Target: `build`** (it defaults to
436
+ the default branch; only `build` has the bumped version) → Publish. This
437
+ fires the same workflow via `release: [published]`.
438
+
439
+ ```bash
440
+ gh release create vX.Y.Z --target build --title "vX.Y.Z" --notes "…"
441
+ ```
442
+ </details>
443
+
444
+ 3. **Verify.** Confirm the new version appears on
445
+ [PyPI](https://pypi.org/project/apisec-code-bolt/), then upgrade an install:
446
+ ```bash
447
+ uv tool upgrade apisec-code-bolt # or: pipx upgrade apisec-code-bolt
448
+ ```
449
+
450
+ > Always release from `build` after the version bump has merged there — releasing
451
+ > from a ref that still carries the old version will fail the PyPI upload.
452
+
352
453
  ## Privacy
353
454
 
354
455
  apisec-code-bolt is designed with privacy as a core principle:
@@ -361,3 +462,4 @@ apisec-code-bolt is designed with privacy as a core principle:
361
462
  ## License
362
463
 
363
464
  Proprietary. Copyright © APIsec.
465
+
@@ -152,6 +152,7 @@ analysis:
152
152
  - "tests/**"
153
153
  - "**/migrations/**"
154
154
  max_files: 10000
155
+ detect_workspace_boundaries: true # see "Monorepo support" below
155
156
 
156
157
  data_flow:
157
158
  mode: inter_procedural
@@ -165,6 +166,59 @@ output:
165
166
  format: json
166
167
  ```
167
168
 
169
+ ## Monorepo support
170
+
171
+ When a scanned tree contains multiple independently-deployed sub-projects
172
+ (a pnpm/npm workspace, a Maven or Gradle multi-module build, a `.sln` with
173
+ several `.csproj`s, a `go.work`, or a uv/Poetry workspace — or, absent any of
174
+ those, any directory with its own recognised dependency manifest file),
175
+ `analyze` automatically detects each one as a separate boundary and uploads
176
+ its own manifest as its own Application, instead of one flat manifest mixing
177
+ every sub-project's routes, dependencies, and secrets together.
178
+
179
+ - **Activation is automatic and safe by default.** Detection only takes
180
+ effect when **2 or more** real boundaries are found; a single-project repo
181
+ is completely unaffected — same manifest, same canonical id, same
182
+ `state.yaml`. Disable it entirely with `--no-detect-monorepo` or
183
+ `detect_workspace_boundaries: false`.
184
+ - **Identity.** Each sub-project uploads under
185
+ `{repo_canonical_id}/{relative/path/to/sub-project}`; code that doesn't
186
+ belong to any detected sub-project (root-level config, CI files, a shared
187
+ library with no manifest of its own) uploads under
188
+ `{repo_canonical_id}/shared`.
189
+ - **Display name.** Each sub-project's Application is named
190
+ `{repo_name}/{relative/path/to/sub-project}` (and `{repo_name}/shared` for
191
+ the catch-all), so sibling services are distinguishable in the APIsec
192
+ console's Applications list instead of all showing up under the identical
193
+ bare repo name. A single-project repo is unaffected — same bare `repo_name`
194
+ as always.
195
+ - **Auth-middleware scoping rides on the same gate — and this one is
196
+ security-material.** A globally-registered auth middleware is attributed
197
+ only to routes inside its own boundary, so one service's middleware can no
198
+ longer mark a sibling service's routes as authenticated (which hides
199
+ genuinely-exposed endpoints). Because it is gated on the same "2 or more
200
+ boundaries" condition, a polyglot repo that presents only a **single**
201
+ boundary — e.g. one root manifest and no per-service marker file or
202
+ workspace config — falls back to the legacy path and gets repo-wide
203
+ attribution. If a repo mixes languages or services, give each one its own
204
+ dependency manifest (or declare a workspace) so boundary detection can see
205
+ them; otherwise auth attribution is repo-wide and may over-report routes as
206
+ protected.
207
+ Scoping covers every auth path that resolves by *name* rather than by file:
208
+ Spring Security filter chains, Rails `before_action` (including
209
+ `ApplicationController`-inherited callbacks), Django view classes and
210
+ decorators, and route-level auth dependencies — so two services that each
211
+ define, say, an `articles` controller no longer share each other's guards.
212
+ - **Known v1 limitations:**
213
+ - A response/request schema referenced by routes in more than one
214
+ sub-project is duplicated into each of them; only one level of nested
215
+ model references is followed.
216
+ - The `shared` partition does not get the LLM-based surface-enrichment
217
+ pass (it has no single directory to scope that scan to).
218
+ - A cross-partition reference (e.g. a route depending on an auth guard
219
+ defined in another sub-project) is preserved as-is and surfaced as a
220
+ warning in that partition's manifest, not silently dropped or rewritten.
221
+
168
222
  ## Commands
169
223
 
170
224
  Global options (before the subcommand): `--version`, `-v/--verbose`,
@@ -180,10 +234,8 @@ apisec-code-bolt analyze [PATH] [OPTIONS]
180
234
  Options:
181
235
  -o, --output FILE Save manifest to file instead of uploading
182
236
  --no-upload Skip uploading to cloud (implies --output if not set)
183
- --cloud-url TEXT Reasoning engine URL (legacy direct connection, local dev)
184
237
  --api-key TEXT Override stored API key
185
- --api-url TEXT Override stored API URL
186
- --reasoning-url TEXT Reasoning engine URL (if different from API URL)
238
+ --api-url TEXT Applicationsservice base URL (all analysis traffic is proxied here)
187
239
  --format [json|yaml] Output format
188
240
  --config FILE Path to configuration file
189
241
  --frameworks TEXT Comma-separated framework hints
@@ -192,6 +244,10 @@ Options:
192
244
  --timeout INTEGER Analysis timeout in seconds
193
245
  --dry-run Analyze and print a summary; write/upload nothing
194
246
  --stdout Write manifest JSON to stdout (for pipelines)
247
+ --detect-monorepo / --no-detect-monorepo
248
+ Detect monorepo sub-project boundaries and upload one
249
+ Application per sub-project (default: on; see
250
+ "Monorepo support" below)
195
251
  ```
196
252
 
197
253
  ### auth
@@ -302,6 +358,48 @@ ruff check .
302
358
  ruff format --check .
303
359
  ```
304
360
 
361
+ ### Publishing a release (maintainers)
362
+
363
+ The CLI is published to [PyPI](https://pypi.org/project/apisec-code-bolt/) by the
364
+ **Publish to PyPI** GitHub Action. **Merging to `build` does NOT publish** — the
365
+ workflow only runs on `workflow_dispatch` or a published GitHub Release, and it
366
+ builds from whatever ref it runs on.
367
+
368
+ Prerequisites (one-time): the `PYPI_API_TOKEN` repository secret must be set
369
+ (Settings → Secrets and variables → Actions).
370
+
371
+ 1. **Bump the version.** Edit `version` in `pyproject.toml` (single source of
372
+ truth; `--version` reads it via package metadata). PyPI **rejects re-uploads**
373
+ of an existing version, so the number must be higher than the current PyPI
374
+ release. Open a PR and merge it to `build`.
375
+
376
+ 2. **Publish** — dispatch the workflow (the standard path we use):
377
+ Actions → *Publish to PyPI* → **Run workflow** → select branch **`build`**.
378
+
379
+ ```bash
380
+ gh workflow run "Publish to PyPI" --ref build
381
+ ```
382
+
383
+ <details><summary>Alternative: publish via a GitHub Release</summary>
384
+
385
+ New release → create tag `vX.Y.Z` → set **Target: `build`** (it defaults to
386
+ the default branch; only `build` has the bumped version) → Publish. This
387
+ fires the same workflow via `release: [published]`.
388
+
389
+ ```bash
390
+ gh release create vX.Y.Z --target build --title "vX.Y.Z" --notes "…"
391
+ ```
392
+ </details>
393
+
394
+ 3. **Verify.** Confirm the new version appears on
395
+ [PyPI](https://pypi.org/project/apisec-code-bolt/), then upgrade an install:
396
+ ```bash
397
+ uv tool upgrade apisec-code-bolt # or: pipx upgrade apisec-code-bolt
398
+ ```
399
+
400
+ > Always release from `build` after the version bump has merged there — releasing
401
+ > from a ref that still carries the old version will fail the PyPI upload.
402
+
305
403
  ## Privacy
306
404
 
307
405
  apisec-code-bolt is designed with privacy as a core principle:
@@ -314,3 +412,4 @@ apisec-code-bolt is designed with privacy as a core principle:
314
412
  ## License
315
413
 
316
414
  Proprietary. Copyright © APIsec.
415
+
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "apisec-code-bolt"
7
- version = "0.1.8"
7
+ version = "0.1.10"
8
8
  description = "Static analysis probe for extracting architectural metadata from codebases"
9
9
  readme = "README.md"
10
10
  license = {text = "Proprietary"}
@@ -44,9 +44,17 @@ dependencies = [
44
44
  # Ruby parsing
45
45
  "tree-sitter-ruby>=0.23", # Ruby grammar for tree-sitter
46
46
 
47
+ # Python taint analysis
48
+ "tree-sitter-python>=0.23", # Python grammar for tree-sitter
49
+ "tree-sitter-java>=0.23", # Java grammar for tree-sitter
50
+
47
51
  # Graph operations
48
52
  "networkx>=3.2", # Call graph, data flow graphs
49
-
53
+
54
+ # Dependency version/marker parsing (tree_resolver, version_resolver, pkgindex)
55
+ "packaging>=23.0",
56
+
57
+
50
58
  # Data validation and serialization
51
59
  "pydantic>=2.5.0", # Schema validation, settings
52
60
  "pydantic-settings>=2.1.0", # Configuration from env