voidaccess 1.5.0__tar.gz → 1.6.0__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 (202) hide show
  1. {voidaccess-1.5.0 → voidaccess-1.6.0}/PKG-INFO +56 -1
  2. voidaccess-1.5.0/voidaccess.egg-info/PKG-INFO → voidaccess-1.6.0/README.md +506 -497
  3. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/settings.py +34 -0
  4. {voidaccess-1.5.0 → voidaccess-1.6.0}/config.py +18 -0
  5. {voidaccess-1.5.0 → voidaccess-1.6.0}/pyproject.toml +1 -1
  6. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/paste_scraper.py +23 -30
  7. voidaccess-1.6.0/sources/proxy_client.py +622 -0
  8. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/rss_scraper.py +66 -17
  9. voidaccess-1.6.0/tests/test_cli_proxy_config.py +697 -0
  10. voidaccess-1.6.0/tests/test_paste_scraper.py +569 -0
  11. voidaccess-1.6.0/tests/test_proxy_client.py +1135 -0
  12. voidaccess-1.6.0/tests/test_rss_scraper.py +675 -0
  13. voidaccess-1.5.0/README.md → voidaccess-1.6.0/voidaccess.egg-info/PKG-INFO +552 -451
  14. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess.egg-info/SOURCES.txt +3 -0
  15. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/__init__.py +1 -1
  16. voidaccess-1.6.0/voidaccess_cli/commands/configure.py +408 -0
  17. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/commands/investigate.py +16 -0
  18. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/config.py +70 -0
  19. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/main.py +62 -4
  20. voidaccess-1.5.0/tests/test_paste_scraper.py +0 -245
  21. voidaccess-1.5.0/tests/test_rss_scraper.py +0 -359
  22. voidaccess-1.5.0/voidaccess_cli/commands/configure.py +0 -182
  23. {voidaccess-1.5.0 → voidaccess-1.6.0}/LICENSE +0 -0
  24. {voidaccess-1.5.0 → voidaccess-1.6.0}/analysis/__init__.py +0 -0
  25. {voidaccess-1.5.0 → voidaccess-1.6.0}/analysis/opsec.py +0 -0
  26. {voidaccess-1.5.0 → voidaccess-1.6.0}/analysis/patterns.py +0 -0
  27. {voidaccess-1.5.0 → voidaccess-1.6.0}/analysis/temporal.py +0 -0
  28. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/__init__.py +0 -0
  29. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/auth.py +0 -0
  30. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/main.py +0 -0
  31. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/__init__.py +0 -0
  32. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/actors.py +0 -0
  33. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/admin.py +0 -0
  34. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/auth.py +0 -0
  35. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/entities.py +0 -0
  36. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/export.py +0 -0
  37. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/investigations.py +0 -0
  38. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/monitors.py +0 -0
  39. {voidaccess-1.5.0 → voidaccess-1.6.0}/api/routes/search.py +0 -0
  40. {voidaccess-1.5.0 → voidaccess-1.6.0}/auth/__init__.py +0 -0
  41. {voidaccess-1.5.0 → voidaccess-1.6.0}/auth/token_blacklist.py +0 -0
  42. {voidaccess-1.5.0 → voidaccess-1.6.0}/crawler/__init__.py +0 -0
  43. {voidaccess-1.5.0 → voidaccess-1.6.0}/crawler/dedup.py +0 -0
  44. {voidaccess-1.5.0 → voidaccess-1.6.0}/crawler/frontier.py +0 -0
  45. {voidaccess-1.5.0 → voidaccess-1.6.0}/crawler/spider.py +0 -0
  46. {voidaccess-1.5.0 → voidaccess-1.6.0}/crawler/utils.py +0 -0
  47. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/__init__.py +0 -0
  48. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/__init__.py +0 -0
  49. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/env.py +0 -0
  50. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0001_initial_schema.py +0 -0
  51. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0002_add_investigation_status_column.py +0 -0
  52. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0002_add_missing_tables.py +0 -0
  53. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0003_add_canonical_value_and_entity_links.py +0 -0
  54. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0004_add_page_posted_at.py +0 -0
  55. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0005_add_extraction_method.py +0 -0
  56. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0006_add_monitor_alerts.py +0 -0
  57. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0007_add_actor_style_profiles.py +0 -0
  58. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0008_add_users_table.py +0 -0
  59. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0009_add_investigation_id_to_relationships.py +0 -0
  60. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0010_add_composite_index_entity_relationships.py +0 -0
  61. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0011_add_page_extraction_cache.py +0 -0
  62. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0013_add_graph_status.py +0 -0
  63. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0015_add_progress_fields.py +0 -0
  64. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0016_backfill_graph_status.py +0 -0
  65. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0017_add_user_api_keys.py +0 -0
  66. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0018_add_user_id_to_investigations.py +0 -0
  67. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0019_add_content_safety_log.py +0 -0
  68. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0020_add_entity_source_tracking.py +0 -0
  69. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0021_add_search_engine_stats.py +0 -0
  70. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0022_add_actor_profiles.py +0 -0
  71. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/migrations/versions/0023_add_investigation_metadata.py +0 -0
  72. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/models.py +0 -0
  73. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/queries.py +0 -0
  74. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/search_engine_stats.py +0 -0
  75. {voidaccess-1.5.0 → voidaccess-1.6.0}/db/session.py +0 -0
  76. {voidaccess-1.5.0 → voidaccess-1.6.0}/export/__init__.py +0 -0
  77. {voidaccess-1.5.0 → voidaccess-1.6.0}/export/ioc_package.py +0 -0
  78. {voidaccess-1.5.0 → voidaccess-1.6.0}/export/misp.py +0 -0
  79. {voidaccess-1.5.0 → voidaccess-1.6.0}/export/sigma.py +0 -0
  80. {voidaccess-1.5.0 → voidaccess-1.6.0}/export/snort_export.py +0 -0
  81. {voidaccess-1.5.0 → voidaccess-1.6.0}/export/stix.py +0 -0
  82. {voidaccess-1.5.0 → voidaccess-1.6.0}/export/yara_export.py +0 -0
  83. {voidaccess-1.5.0 → voidaccess-1.6.0}/extractor/__init__.py +0 -0
  84. {voidaccess-1.5.0 → voidaccess-1.6.0}/extractor/llm_extract.py +0 -0
  85. {voidaccess-1.5.0 → voidaccess-1.6.0}/extractor/ner.py +0 -0
  86. {voidaccess-1.5.0 → voidaccess-1.6.0}/extractor/normalizer.py +0 -0
  87. {voidaccess-1.5.0 → voidaccess-1.6.0}/extractor/pipeline.py +0 -0
  88. {voidaccess-1.5.0 → voidaccess-1.6.0}/extractor/regex_patterns.py +0 -0
  89. {voidaccess-1.5.0 → voidaccess-1.6.0}/fingerprint/__init__.py +0 -0
  90. {voidaccess-1.5.0 → voidaccess-1.6.0}/fingerprint/profiler.py +0 -0
  91. {voidaccess-1.5.0 → voidaccess-1.6.0}/fingerprint/stylometry.py +0 -0
  92. {voidaccess-1.5.0 → voidaccess-1.6.0}/graph/__init__.py +0 -0
  93. {voidaccess-1.5.0 → voidaccess-1.6.0}/graph/builder.py +0 -0
  94. {voidaccess-1.5.0 → voidaccess-1.6.0}/graph/export.py +0 -0
  95. {voidaccess-1.5.0 → voidaccess-1.6.0}/graph/model.py +0 -0
  96. {voidaccess-1.5.0 → voidaccess-1.6.0}/graph/queries.py +0 -0
  97. {voidaccess-1.5.0 → voidaccess-1.6.0}/graph/visualize.py +0 -0
  98. {voidaccess-1.5.0 → voidaccess-1.6.0}/i18n/__init__.py +0 -0
  99. {voidaccess-1.5.0 → voidaccess-1.6.0}/i18n/detect.py +0 -0
  100. {voidaccess-1.5.0 → voidaccess-1.6.0}/i18n/query_expand.py +0 -0
  101. {voidaccess-1.5.0 → voidaccess-1.6.0}/i18n/translate.py +0 -0
  102. {voidaccess-1.5.0 → voidaccess-1.6.0}/monitor/__init__.py +0 -0
  103. {voidaccess-1.5.0 → voidaccess-1.6.0}/monitor/_db.py +0 -0
  104. {voidaccess-1.5.0 → voidaccess-1.6.0}/monitor/alerts.py +0 -0
  105. {voidaccess-1.5.0 → voidaccess-1.6.0}/monitor/config.py +0 -0
  106. {voidaccess-1.5.0 → voidaccess-1.6.0}/monitor/diff.py +0 -0
  107. {voidaccess-1.5.0 → voidaccess-1.6.0}/monitor/jobs.py +0 -0
  108. {voidaccess-1.5.0 → voidaccess-1.6.0}/monitor/scheduler.py +0 -0
  109. {voidaccess-1.5.0 → voidaccess-1.6.0}/scraper/__init__.py +0 -0
  110. {voidaccess-1.5.0 → voidaccess-1.6.0}/scraper/scrape.py +0 -0
  111. {voidaccess-1.5.0 → voidaccess-1.6.0}/scraper/scrape_js.py +0 -0
  112. {voidaccess-1.5.0 → voidaccess-1.6.0}/search/__init__.py +0 -0
  113. {voidaccess-1.5.0 → voidaccess-1.6.0}/search/circuit_breaker.py +0 -0
  114. {voidaccess-1.5.0 → voidaccess-1.6.0}/search/query_builder.py +0 -0
  115. {voidaccess-1.5.0 → voidaccess-1.6.0}/search/search.py +0 -0
  116. {voidaccess-1.5.0 → voidaccess-1.6.0}/setup.cfg +0 -0
  117. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/__init__.py +0 -0
  118. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/actor_profiles.py +0 -0
  119. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/blockchain.py +0 -0
  120. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/cache.py +0 -0
  121. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/cisa.py +0 -0
  122. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/dns_enrichment.py +0 -0
  123. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/domain_reputation.py +0 -0
  124. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/email_reputation.py +0 -0
  125. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/engines.py +0 -0
  126. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/enrichment.py +0 -0
  127. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/github_scraper.py +0 -0
  128. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/gitlab_scraper.py +0 -0
  129. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/hash_reputation.py +0 -0
  130. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/historical_intel.py +0 -0
  131. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/ip_reputation.py +0 -0
  132. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/pastes.py +0 -0
  133. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/seed_manager.py +0 -0
  134. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/seeds.py +0 -0
  135. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/shodan.py +0 -0
  136. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/telegram.py +0 -0
  137. {voidaccess-1.5.0 → voidaccess-1.6.0}/sources/virustotal.py +0 -0
  138. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_analysis_opsec.py +0 -0
  139. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_analysis_stylometry.py +0 -0
  140. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_analysis_temporal.py +0 -0
  141. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_api.py +0 -0
  142. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_api_monitors.py +0 -0
  143. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_blockchain.py +0 -0
  144. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_config.py +0 -0
  145. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_crawler.py +0 -0
  146. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_db.py +0 -0
  147. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_dns_enrichment.py +0 -0
  148. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_domain_reputation.py +0 -0
  149. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_email_reputation.py +0 -0
  150. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_filter_e2e_manual.py +0 -0
  151. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_filter_parser_manual.py +0 -0
  152. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_fingerprint.py +0 -0
  153. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_github_scraper.py +0 -0
  154. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_gitlab_scraper.py +0 -0
  155. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_graph.py +0 -0
  156. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_hash_reputation.py +0 -0
  157. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_i18n.py +0 -0
  158. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_ip_reputation.py +0 -0
  159. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_llm.py +0 -0
  160. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_llm_utils.py +0 -0
  161. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_model_singleton.py +0 -0
  162. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_monitor.py +0 -0
  163. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_pagination.py +0 -0
  164. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_regex_patterns.py +0 -0
  165. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_scrape_js.py +0 -0
  166. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_settings.py +0 -0
  167. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_snort_export.py +0 -0
  168. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_sources.py +0 -0
  169. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_sources_enrichment_new.py +0 -0
  170. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_vector.py +0 -0
  171. {voidaccess-1.5.0 → voidaccess-1.6.0}/tests/test_yara_export.py +0 -0
  172. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/__init__.py +0 -0
  173. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/async_utils.py +0 -0
  174. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/content_safety.py +0 -0
  175. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/defang.py +0 -0
  176. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/encryption.py +0 -0
  177. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/enrichment_cache.py +0 -0
  178. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/ioc_freshness.py +0 -0
  179. {voidaccess-1.5.0 → voidaccess-1.6.0}/utils/user_keys.py +0 -0
  180. {voidaccess-1.5.0 → voidaccess-1.6.0}/vector/__init__.py +0 -0
  181. {voidaccess-1.5.0 → voidaccess-1.6.0}/vector/embedder.py +0 -0
  182. {voidaccess-1.5.0 → voidaccess-1.6.0}/vector/model_singleton.py +0 -0
  183. {voidaccess-1.5.0 → voidaccess-1.6.0}/vector/search.py +0 -0
  184. {voidaccess-1.5.0 → voidaccess-1.6.0}/vector/store.py +0 -0
  185. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess/__init__.py +0 -0
  186. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess/config.py +0 -0
  187. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess/llm.py +0 -0
  188. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess/llm_utils.py +0 -0
  189. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess.egg-info/dependency_links.txt +0 -0
  190. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess.egg-info/entry_points.txt +0 -0
  191. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess.egg-info/requires.txt +0 -0
  192. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess.egg-info/top_level.txt +0 -0
  193. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/adapters/__init__.py +0 -0
  194. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/adapters/sqlite.py +0 -0
  195. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/browser.py +0 -0
  196. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/commands/__init__.py +0 -0
  197. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/commands/actors.py +0 -0
  198. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/commands/enrich.py +0 -0
  199. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/commands/export.py +0 -0
  200. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/commands/show.py +0 -0
  201. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/display.py +0 -0
  202. {voidaccess-1.5.0 → voidaccess-1.6.0}/voidaccess_cli/tor_detect.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voidaccess
3
- Version: 1.5.0
3
+ Version: 1.6.0
4
4
  Summary: Dark web OSINT CLI — automated threat intelligence from query to report
5
5
  Author: VoidAccess
6
6
  License-Expression: MIT
@@ -65,6 +65,20 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
65
65
 
66
66
  ---
67
67
 
68
+ ## What's New in v1.6.0
69
+
70
+ - **Optional clearnet scraping proxy (ScrapingAnt)** — paste sites and RSS feeds can now be routed through ScrapingAnt. Affects clearnet scraping only; Tor, `.onion`, GitHub, and GitLab traffic are never affected.
71
+ - **Two mutually exclusive transports** — pick one, not both:
72
+ - **REST API transport** — `VOIDACCESS_USE_PROXIES=true` (legacy v1.5.0 toggle) routes requests through ScrapingAnt's Web Scraping API.
73
+ - **Proxy Mode transport** — `VOIDACCESS_USE_PROXY=true` routes requests through ScrapingAnt's HTTP CONNECT endpoint at `proxy.scrapingant.com:8080`.
74
+ - Per [ScrapingAnt docs](https://docs.scrapingant.com/proxy-mode): "Proxy Mode is a light front-end for the scraping API and has all the same functionality and performance" — so the two are alternate transports to the same backend, never chained.
75
+ - **`SCRAPINGANT_PROXY_TYPE`** — `residential` (default) or `datacenter`; per docs this is passed as a `proxy_type=` parameter in the Proxy Mode username string (which is built at connection time as `"scrapingant&browser=false&proxy_type=..."`). NOT a separate hostname.
76
+ - **Single credential** — `SCRAPINGANT_API_KEY` is the only real credential; the Proxy Mode username is a literal constant per docs. No per-customer username field, no second key.
77
+ - **New CLI surfaces** — `voidaccess configure proxy` now prompts for key + type in one uninterrupted block, plus `--enable-proxy / --disable-proxy` for non-interactive Proxy Mode toggling and `--show` for masked state inspection.
78
+ - **55 → 74 proxy-config tests** — covers both transports, the `apply_env()` independent-toggle guarantee, the single-transport selection logic, and the masked `--show` output.
79
+
80
+ ---
81
+
68
82
  ## What's New in v1.5.0
69
83
 
70
84
  - 37 new entity types across crypto, credentials, messaging, and network/forensic indicators.
@@ -128,6 +142,7 @@ The Docker stack includes PostgreSQL, Tor, FastAPI, and Next.js.
128
142
  | `voidaccess actor <handle> --note "text"` | Append an analyst note to an actor profile |
129
143
  | `voidaccess timeline <handle>` | Shortcut for `voidaccess actor <handle> --timeline` |
130
144
  | `voidaccess configure` | Setup wizard |
145
+ | `voidaccess configure proxy` | ScrapingAnt key, username, type, and routing toggles. Flags: `--enable / --disable` (API gate), `--enable-proxy / --disable-proxy` (proxy gate), `--show` (masked state) |
131
146
 
132
147
  Export examples:
133
148
 
@@ -299,6 +314,46 @@ All enrichment sources that require a key degrade gracefully when the key is abs
299
314
  | `GITLAB_TOKEN` | Raises GitLab scraping from 15 to 60 req/min | Free | [gitlab.com/profile/personal_access_tokens](https://gitlab.com/-/profile/personal_access_tokens) |
300
315
  | `BLOCKCYPHER_TOKEN` | BTC/ETH wallet balance and transaction graph | Yes | [blockcypher.com](https://www.blockcypher.com) |
301
316
  | `ETHERSCAN_API_KEY` | ETH wallet lookups | Yes | [etherscan.io/apis](https://etherscan.io/apis) |
317
+ | `SCRAPINGANT_API_KEY` + `VOIDACCESS_USE_PROXIES=true` | Optional clearnet proxy for paste sites + RSS feeds (see below) | Yes (free tier) | [scrapingant.com](https://scrapingant.com/?ref=mzliyzh) |
318
+
319
+ ### Optional: Clearnet Scraping Proxy (ScrapingAnt)
320
+
321
+ When a third-party clearnet site rate-limits or blocks VoidAccess's outbound IP, every paste site fetch and every RSS feed fetch in the same investigation can fail. The optional **ScrapingAnt** integration routes those specific requests through ScrapingAnt — either its Web Scraping API or its Proxy Mode HTTP CONNECT endpoint at `proxy.scrapingant.com:8080`.
322
+
323
+ **What it covers** — paste sites (Pastebin, dpaste, paste.ee, Rentry) and the 20 curated RSS security feeds (Krebs on Security, BleepingComputer, Talos, Mandiant, CrowdStrike, Unit 42, CISA, and others). Nothing else.
324
+
325
+ **What it does not cover** — Tor traffic, dark web scraping, and `.onion` fetches are **completely unaffected** by this setting regardless of how it is configured. The proxy only sees the two clearnet sources named above.
326
+
327
+ **GitHub and GitLab scraping are also unaffected** — and intentionally so. Both of those scrapers carry authentication tokens (`GITHUB_TOKEN`, `GITLAB_TOKEN`) in their requests. Forwarding those tokens through a third-party proxy would expose them to that third party, which is unacceptable from a security standpoint. Both scrapers always go direct to the GitHub/GitLab API regardless of the proxy setting. This is a permanent design constraint, not something the proxy toggle can override.
328
+
329
+ **It's entirely optional.** VoidAccess behaves identically without it — paste sites and RSS feeds are simply fetched directly, exactly as they were in every prior release. Add the key only if you see upstream rate-limiting or blocks affecting those two sources.
330
+
331
+ #### Two mutually exclusive transports (v1.6.0)
332
+
333
+ Per the [ScrapingAnt docs](https://docs.scrapingant.com/proxy-mode): *"The proxy mode is a light front-end for the scraping API and has all the same functionality and performance as sending requests to the API endpoint."* Therefore the two transports below are **alternate transports to the same backend service** — pick ONE per request, never both:
334
+
335
+ | Transport | Env var | Required config | What it does |
336
+ |---|---|---|---|
337
+ | **REST API** | `VOIDACCESS_USE_PROXIES=true` | `SCRAPINGANT_API_KEY` | POSTs the target URL to `api.scrapingant.com/v2/general` and returns the response body. Legacy v1.5.0 toggle. |
338
+ | **Proxy Mode** | `VOIDACCESS_USE_PROXY=true` | `SCRAPINGANT_API_KEY` (only) | Routes the request as HTTP CONNECT through `proxy.scrapingant.com:8080` with username string built at connection time per docs: `scrapingant&browser=false&proxy_type=residential\|datacenter`. |
339
+
340
+ The Proxy Mode transport also reads `SCRAPINGANT_PROXY_TYPE` to pick the pool: `residential` (default; harder to detect, slightly higher latency) or `datacenter` (faster, cheaper, easier to fingerprint).
341
+
342
+ **Missing credentials leave both transports inactive.** Setting either transport env var to `true` without `SCRAPINGANT_API_KEY` is a no-op for that transport. No errors, no surprises.
343
+
344
+ **If both transport env vars are set, Proxy Mode wins** with a one-shot info log at runtime — there is no chained mode (Proxy Mode is documented as "the same functionality" as the REST API, so stacking them would double-charge without adding capability).
345
+
346
+ **How to turn it on** — all four surfaces, covering either transport:
347
+
348
+ | Surface | How |
349
+ |---|---|
350
+ | CLI configure wizard | `voidaccess configure` then `voidaccess configure keys` — paste sites and RSS feeds will be flagged with their honest "never Tor" description before any field is asked for. The interactive prompt covers the key, pool type, and asks about each transport separately. |
351
+ | `voidaccess configure proxy` (subcommand) | Interactive prompt for key + pool type. Non-interactive flags: `--enable / --disable` (REST API transport), `--enable-proxy / --disable-proxy` (Proxy Mode transport), `--show` (prints masked key `abcd…5678`, pool type, and both transport states). |
352
+ | `setup.sh` during Docker install | Group F in the Enrichment Keys step; prompts for key + pool type, asks about each transport toggle separately. |
353
+ | `--use-proxies` flag (single run) | `voidaccess investigate "query" --use-proxies` — sets `VOIDACCESS_USE_PROXIES=true` (REST API transport) for the current process only, leaves the on-disk config untouched. |
354
+ | Docker / web settings page | Settings → API Keys → ScrapingAnt. Stored encrypted at rest via the existing per-user `UserApiKey` mechanism (Fernet AES-128). |
355
+
356
+ **Referral signup:** [https://scrapingant.com/?ref=mzliyzh](https://scrapingant.com/?ref=mzliyzh) (referral bonus applied on first paid plan; a free tier is available for low-volume use).
302
357
 
303
358
  ---
304
359