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.
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/PKG-INFO +107 -5
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/README.md +102 -3
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/pyproject.toml +10 -2
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/analyzer.py +575 -69
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/binding_tracker.py +25 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/boundary_detection.py +809 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/call_graph.py +94 -2
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/call_resolver.py +14 -2
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/config_scanner.py +781 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/data_flow.py +39 -11
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/dependency_extractor.py +3539 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/integration_detector.py +95 -20
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/js_gradle_locks.py +277 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/literal_scanner.py +579 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/manifest_partitioner.py +493 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/secret_patterns.py +404 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/secrets_policy.py +246 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/surface_enrichment.py +2 -1
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/template_scanner.py +831 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/tree_resolver.py +195 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/url_prefix_resolver.py +343 -33
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/analysis/version_resolver.py +356 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cli/main.py +490 -134
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cloud/apisec_client.py +40 -12
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cloud/client.py +10 -10
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/config.py +64 -7
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/discovery.py +1 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/log_format.py +15 -1
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/manifest.py +110 -1
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/state.py +25 -9
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/telemetry.py +2 -1
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/types.py +8 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/base.py +6 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/aspnet_plugin.py +278 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/dotnet/taint_scanner.py +1470 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/webforms_plugin.py +137 -13
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/__init__.py +2 -1
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/jaxrs_plugin.py +51 -3
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/java/servlet_plugin.py +220 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/java/taint_scanner.py +2334 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/__init__.py +2 -1
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/express_plugin.py +20 -2
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/fastify_plugin.py +56 -2
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/js/koa_plugin.py +283 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/js/taint_scanner.py +1562 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/django_plugin.py +76 -30
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/fastapi/plugin.py +74 -10
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/python/flask_plugin.py +748 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/python/taint_scanner.py +1445 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/__init__.py +24 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/action_cable_plugin.py +152 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/hanami_plugin.py +254 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/padrino_plugin.py +114 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/rails_plugin.py +121 -73
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/roda_plugin.py +260 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/sidekiq_plugin.py +208 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/sinatra_plugin.py +22 -3
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/frameworks/ruby/taint_scanner.py +2580 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/js/parser.py +61 -6
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/cross_file_resolver.py +54 -2
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/parameter_analyzer.py +52 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/router_registry.py +178 -20
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/visitors.py +16 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/parsing/ruby/language_services.py +807 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/__init__.py +15 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/indexer.py +299 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/metadata.py +333 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/module_graph.py +291 -0
- apisec_code_bolt-0.1.10/src/apisec_code_bolt/pkgindex/package_source.py +447 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/executor.py +28 -12
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/checksums/checksums.lock +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/checksums/md5-checksums.bin +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/checksums/sha1-checksums.bin +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/buildOutputCleanup/cache.properties +2 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/.gradle/vcs-1/gc.properties +0 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-agg-all.json +579 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-agg-runtime.json +446 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-bom-all.json +477 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/cyclonedx-bom-runtime.json +338 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/package-lock-v1.json +37 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/package-lock.json +52 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/packages.lock.json +46 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/pnpm-lock-v5.yaml +25 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/pnpm-lock-v6.yaml +39 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/pnpm-lock.yaml +35 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/yarn-berry.lock +31 -0
- apisec_code_bolt-0.1.10/tests/fixtures/dep_files/yarn.lock +25 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_django_cbv_module_alias/urls.py +7 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_django_cbv_module_alias/views.py +19 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_flask_auth/app.py +64 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-a/app.py +11 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-a/pyproject.toml +6 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-b/app.py +11 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/apps/service-b/pyproject.toml +6 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_monorepo/shared_util.py +7 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-js/index.js +14 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-js/package.json +7 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-py/main.py +26 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_polyglot_monorepo/services/api-py/pyproject.toml +4 -0
- apisec_code_bolt-0.1.10/tests/fixtures/sample_spring_boot/apisec-code-bolt/state.yaml +1 -0
- apisec_code_bolt-0.1.10/tests/fixtures/vulnerable_app/target/classes/com/demo/DemoController.class +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_cli.py +53 -0
- apisec_code_bolt-0.1.10/tests/integration/test_django_cbv_decorator_auth.py +51 -0
- apisec_code_bolt-0.1.10/tests/integration/test_erb_template_data_flows.py +81 -0
- apisec_code_bolt-0.1.10/tests/integration/test_flask_auth_integration.py +74 -0
- apisec_code_bolt-0.1.10/tests/integration/test_jsx_tsx_manifest.py +66 -0
- apisec_code_bolt-0.1.10/tests/integration/test_monorepo_partitioning.py +71 -0
- apisec_code_bolt-0.1.10/tests/integration/test_monorepo_regression.py +76 -0
- apisec_code_bolt-0.1.10/tests/integration/test_polyglot_monorepo_auth_boundary.py +270 -0
- apisec_code_bolt-0.1.10/tests/integration/test_polyglot_python_prefix_maps.py +151 -0
- apisec_code_bolt-0.1.10/tests/integration/test_regression_flask_auth_and_deps.py +210 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_spring_boot_analysis.py +8 -2
- apisec_code_bolt-0.1.10/tests/test_query/__init__.py +0 -0
- apisec_code_bolt-0.1.10/tests/test_query/test_executor_connected.py +122 -0
- apisec_code_bolt-0.1.10/tests/unit/conftest.py +9 -0
- apisec_code_bolt-0.1.10/tests/unit/test_apisec_client_enrich.py +80 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_aspnet_plugin.py +199 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_benchmark_run.py +40 -0
- apisec_code_bolt-0.1.10/tests/unit/test_boundary_detection.py +594 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_call_graph.py +141 -0
- apisec_code_bolt-0.1.10/tests/unit/test_config_scanner_secret_values.py +467 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_cross_file_resolver.py +91 -0
- apisec_code_bolt-0.1.10/tests/unit/test_csharp_taint_scanner.py +1253 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_data_flow.py +93 -0
- apisec_code_bolt-0.1.10/tests/unit/test_dependency_parsing.py +3271 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_django_plugin.py +78 -2
- apisec_code_bolt-0.1.10/tests/unit/test_entry_point_interface_resolution.py +149 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_express_nestjs_plugin.py +68 -3
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_fastapi_plugin.py +164 -0
- apisec_code_bolt-0.1.10/tests/unit/test_fastify_passport_auth.py +159 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_fastify_plugin.py +20 -2
- apisec_code_bolt-0.1.10/tests/unit/test_flask_auth_and_deps.py +451 -0
- apisec_code_bolt-0.1.10/tests/unit/test_flask_blueprint_prefix.py +420 -0
- apisec_code_bolt-0.1.10/tests/unit/test_flask_params.py +119 -0
- apisec_code_bolt-0.1.10/tests/unit/test_flask_surface_kind.py +97 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_integration_detection.py +35 -0
- apisec_code_bolt-0.1.10/tests/unit/test_java_taint_scanner.py +860 -0
- apisec_code_bolt-0.1.10/tests/unit/test_jaxrs_secured_auth.py +287 -0
- apisec_code_bolt-0.1.10/tests/unit/test_js_gradle_locks.py +300 -0
- apisec_code_bolt-0.1.10/tests/unit/test_js_parser.py +109 -0
- apisec_code_bolt-0.1.10/tests/unit/test_js_taint_scanner.py +1237 -0
- apisec_code_bolt-0.1.10/tests/unit/test_koa_plugin.py +211 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_legacy_aspnet_plugin.py +59 -0
- apisec_code_bolt-0.1.10/tests/unit/test_manifest_partitioner.py +555 -0
- apisec_code_bolt-0.1.10/tests/unit/test_monorepo_upload_cli.py +507 -0
- apisec_code_bolt-0.1.10/tests/unit/test_origin_type_contract.py +74 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_parameter_analyzer.py +75 -0
- apisec_code_bolt-0.1.10/tests/unit/test_pkgindex.py +1399 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_python_parser.py +42 -0
- apisec_code_bolt-0.1.10/tests/unit/test_python_taint_scanner.py +1481 -0
- apisec_code_bolt-0.1.10/tests/unit/test_rails_plugin.py +5231 -0
- apisec_code_bolt-0.1.10/tests/unit/test_router_registry.py +1069 -0
- apisec_code_bolt-0.1.10/tests/unit/test_ruby_language_services.py +590 -0
- apisec_code_bolt-0.1.10/tests/unit/test_ruby_p6_plugins.py +503 -0
- apisec_code_bolt-0.1.10/tests/unit/test_secret_detection_coverage.py +342 -0
- apisec_code_bolt-0.1.10/tests/unit/test_secret_value_presentation.py +209 -0
- apisec_code_bolt-0.1.10/tests/unit/test_secrets_policy.py +316 -0
- apisec_code_bolt-0.1.10/tests/unit/test_servlet_plugin.py +297 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_surface_extraction_client.py +11 -0
- apisec_code_bolt-0.1.10/tests/unit/test_template_scanner.py +714 -0
- apisec_code_bolt-0.1.10/tests/unit/test_tree_resolver.py +187 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_upload_verify_timeout.py +39 -6
- apisec_code_bolt-0.1.10/tests/unit/test_url_prefix_resolver.py +199 -0
- apisec_code_bolt-0.1.10/tests/unit/test_version_resolver.py +182 -0
- apisec_code_bolt-0.1.10/tests/unit/test_webforms_plugin.py +345 -0
- apisec_code_bolt-0.1.8/src/apisec_code_bolt/analysis/config_scanner.py +0 -363
- apisec_code_bolt-0.1.8/src/apisec_code_bolt/analysis/dependency_extractor.py +0 -1278
- apisec_code_bolt-0.1.8/src/apisec_code_bolt/analysis/literal_scanner.py +0 -300
- apisec_code_bolt-0.1.8/src/apisec_code_bolt/frameworks/python/flask_plugin.py +0 -230
- apisec_code_bolt-0.1.8/src/apisec_code_bolt/frameworks/ruby/__init__.py +0 -8
- apisec_code_bolt-0.1.8/src/apisec_code_bolt/frameworks/ruby/taint_scanner.py +0 -640
- apisec_code_bolt-0.1.8/src/apisec_code_bolt/parsing/ruby/language_services.py +0 -101
- apisec_code_bolt-0.1.8/tests/unit/test_dependency_parsing.py +0 -885
- apisec_code_bolt-0.1.8/tests/unit/test_rails_plugin.py +0 -722
- apisec_code_bolt-0.1.8/tests/unit/test_router_registry.py +0 -566
- apisec_code_bolt-0.1.8/tests/unit/test_webforms_plugin.py +0 -83
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/.gitignore +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/__main__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/call_graph_types.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/capability_tagger.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/flow_analysis.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/hof_catalog.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/path_normalizer.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/read_site_detector.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/request_patterns.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/sensitivity_classifier.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/analysis/sink_evidence.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cli/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cli/exit_codes.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/cloud/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/credentials.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/core/repo.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/fingerprinting/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/_graphql_common.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/_jwt_common.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/auth_helpers.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/_path_helpers.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/grpc_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/jwt_config_extractor.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/legacy_aspnet_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/refit_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/dotnet/wcf_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/_annotations.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/_constraints.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/graphql_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/jwt_config_extractor.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/micronaut_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/java/spring_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/_route_helpers.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/graphql_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/js/nestjs_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/celery_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/click_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/fastapi/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/graphql_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/prefect_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/python/webhook_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/_ts_helpers.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/grape_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/frameworks/ruby/graphql_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/base.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/language_services.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/literals.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/parser.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/csharp/type_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/js/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/js/language_services.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/language_services.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/parser.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/jvm/type_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/cbv_extractor.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/constant_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/dynamic_route_detector.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/expression_utils.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/extraction_types.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/language_services.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/parser.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/path_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/python/type_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/ruby/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/ruby/parser.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/parsing/services.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/ast_cache.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/handlers.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/src/apisec_code_bolt/query/manifest_context.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/conftest.py +0 -0
- /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
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/Cargo.toml +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/Gemfile.lock +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/Pipfile +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/build.gradle +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/build.gradle.kts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/go.mod +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/package.json +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/pom.xml +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/pyproject_pep621.toml +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/pyproject_poetry.toml +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/requirements-dev.txt +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/requirements.txt +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/setup.cfg +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/dep_files/setup.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_django/urls.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_django/views.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/app.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/middleware/authenticate.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/routes/auth.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_express/routes/users.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/main.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/routes/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/routes/users.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/services/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_fastapi/services/user_service.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_flask/app.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_flask_pydantic/app.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_grape/api.rb +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/auth.controller.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/roles.decorator.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/roles.guard.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_nestjs/users.controller.ts +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_sinatra/app.rb +0 -0
- {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
- {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
- {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
- {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
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/sample_spring_boot/src/main/resources/application.properties +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/VULNERABILITIES.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vuln_spring_boot/src/main/resources/application.properties +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/fixtures/vulnerable_app/pom.xml +0 -0
- {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
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_django_analysis.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_express_analysis.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_fastapi_analysis.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_flask_analysis.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_nestjs_analysis.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/integration/test_vulnerable_app_reachability_guard.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/fixtures/sample_app.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_auth_indicator_matching.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_executor.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_handlers.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/test_query/test_read_site_origin_types.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/__init__.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_apisec_client.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_benchmark_audit.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_cbv_extractor.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_cli_console_url.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_config.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_config_scanner_framework.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_constant_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_csharp_literals.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_csharp_type_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_discovery.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_dynamic_routes.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_flow_analysis.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_grape_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_graphql_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_grpc_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_instrumentation.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_java_parser.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_jaxrs_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_js_graphql_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_jwt_config_extraction.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_manifest_upload_gzip.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_micronaut_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_path_resolver.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_pydantic_body_inference.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_refit_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_repo_canonical.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_ruby_graphql_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_sensitivity_capability.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_sinatra_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_sink_evidence.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_spring_plugin.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_static_route_catchup.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_surface_enrichment.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_telemetry.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_transformation_tracking.py +0 -0
- {apisec_code_bolt-0.1.8 → apisec_code_bolt-0.1.10}/tests/unit/test_types.py +0 -0
- {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.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: apisec-code-bolt
|
|
3
|
-
Version: 0.1.
|
|
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
|
|
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
|
|
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.
|
|
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
|