splunk-soar-sdk 3.4.0__tar.gz → 3.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 (267) hide show
  1. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/utils/update_version.py +2 -3
  2. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/PKG-INFO +5 -1
  3. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/src/soar_test_assistant/server.py +1 -1
  4. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/pyproject.toml +10 -2
  5. splunk_soar_sdk-3.6.0/release_notes.txt +37 -0
  6. splunk_soar_sdk-3.6.0/release_version.txt +1 -0
  7. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/abstract.py +7 -6
  8. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/action_results.py +7 -7
  9. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/actions_manager.py +7 -13
  10. splunk_soar_sdk-3.6.0/src/soar_sdk/apis/es/findings.py +27 -0
  11. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/apis/utils.py +3 -2
  12. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/apis/vault.py +1 -0
  13. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app.py +24 -27
  14. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_cli_runner.py +7 -6
  15. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_client.py +3 -4
  16. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/asset.py +7 -9
  17. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/asset_state.py +1 -2
  18. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/async_utils.py +1 -2
  19. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/cli.py +2 -2
  20. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/manifests/deserializers.py +4 -3
  21. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/manifests/processors.py +4 -2
  22. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/package/cli.py +14 -14
  23. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/package/utils.py +3 -2
  24. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/code_renderers/action_renderer.py +5 -4
  25. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/code_renderers/renderer.py +2 -2
  26. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/compat.py +2 -1
  27. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/decorators/action.py +7 -11
  28. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/decorators/make_request.py +9 -11
  29. splunk_soar_sdk-3.6.0/src/soar_sdk/decorators/on_es_poll.py +187 -0
  30. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/decorators/on_poll.py +7 -11
  31. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/decorators/test_connectivity.py +5 -6
  32. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/decorators/view_handler.py +6 -7
  33. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/decorators/webhook.py +3 -5
  34. splunk_soar_sdk-3.6.0/src/soar_sdk/es_client.py +43 -0
  35. splunk_soar_sdk-3.6.0/src/soar_sdk/extras/email/__init__.py +9 -0
  36. splunk_soar_sdk-3.6.0/src/soar_sdk/extras/email/processor.py +1171 -0
  37. splunk_soar_sdk-3.6.0/src/soar_sdk/extras/email/rfc5322.py +335 -0
  38. splunk_soar_sdk-3.6.0/src/soar_sdk/extras/email/utils.py +178 -0
  39. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/input_spec.py +4 -3
  40. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/logging.py +5 -4
  41. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/meta/actions.py +3 -3
  42. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/meta/app.py +1 -0
  43. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/meta/dependencies.py +47 -11
  44. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/meta/webhooks.py +2 -1
  45. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/models/__init__.py +1 -1
  46. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/models/artifact.py +1 -0
  47. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/models/attachment_input.py +1 -1
  48. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/models/container.py +2 -1
  49. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/models/finding.py +4 -6
  50. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/models/vault_attachment.py +1 -0
  51. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/models/view.py +2 -0
  52. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/params.py +13 -7
  53. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/action_result.py +1 -1
  54. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/app.py +1 -1
  55. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/base_connector.py +3 -4
  56. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/connector_result.py +0 -1
  57. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/ph_ipc.py +2 -1
  58. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/vault.py +8 -6
  59. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom_common/app_interface/app_interface.py +1 -0
  60. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/views/component_registry.py +0 -1
  61. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/views/template_filters.py +4 -4
  62. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/views/template_renderer.py +3 -2
  63. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/views/view_parser.py +8 -6
  64. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/webhooks/models.py +3 -3
  65. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/webhooks/routing.py +3 -4
  66. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/manifests/test_processors.py +2 -3
  67. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/manifests/test_python_version_resolution.py +3 -2
  68. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_cli.py +0 -1
  69. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_convert_cli.py +8 -9
  70. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_deserializers.py +8 -7
  71. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_init_cli.py +4 -2
  72. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_manifests_cli.py +1 -2
  73. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_package_cli.py +2 -3
  74. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_serializers.py +4 -4
  75. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_utils.py +2 -1
  76. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/code_renderers/test_action_renderer.py +3 -2
  77. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/conftest.py +17 -11
  78. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/app.json +81 -74
  79. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/pyproject.toml +3 -1
  80. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/src/actions/async_action.py +4 -2
  81. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/src/app.py +25 -27
  82. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/uv.lock +207 -169
  83. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/app.json +78 -39
  84. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/pyproject.toml +3 -0
  85. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/src/app.py +3 -2
  86. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/uv.lock +215 -105
  87. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/interfaces/test_artifact_interface.py +3 -2
  88. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/interfaces/test_container_interface.py +5 -4
  89. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/interfaces/test_vault_interface.py +4 -3
  90. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/meta/test_datatypes.py +1 -0
  91. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/meta/test_dependencies.py +20 -8
  92. splunk_soar_sdk-3.6.0/tests/mocks/__init__.py +0 -0
  93. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_action_results.py +1 -0
  94. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_actions_manager.py +4 -5
  95. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_app.py +27 -27
  96. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_app_action.py +6 -7
  97. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_app_action_results.py +2 -2
  98. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_asset_state.py +3 -2
  99. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_async_integration.py +3 -3
  100. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_async_utils.py +1 -1
  101. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_code_renderers.py +6 -4
  102. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_compat.py +2 -1
  103. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_custom_views.py +4 -2
  104. splunk_soar_sdk-3.6.0/tests/test_email_processor.py +5132 -0
  105. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_encryption.py +4 -2
  106. splunk_soar_sdk-3.6.0/tests/test_es_client.py +46 -0
  107. splunk_soar_sdk-3.6.0/tests/test_es_on_poll.py +461 -0
  108. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_finding.py +3 -2
  109. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_input_spec.py +1 -1
  110. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_logging.py +7 -6
  111. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_make_request_action.py +3 -2
  112. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_params.py +1 -2
  113. splunk_soar_sdk-3.6.0/tests/test_rfc5322.py +750 -0
  114. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_template_filters.py +2 -1
  115. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_template_renderer.py +5 -4
  116. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_test_connectivity.py +2 -1
  117. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_view_parser.py +3 -2
  118. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/webhooks/test_routing.py +1 -1
  119. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/uv.lock +66 -1
  120. splunk_soar_sdk-3.4.0/release_notes.txt +0 -21
  121. splunk_soar_sdk-3.4.0/release_version.txt +0 -1
  122. splunk_soar_sdk-3.4.0/src/soar_sdk/decorators/on_es_poll.py +0 -218
  123. splunk_soar_sdk-3.4.0/test.png +0 -2
  124. splunk_soar_sdk-3.4.0/test.txt +0 -1
  125. splunk_soar_sdk-3.4.0/tests/test_es_on_poll.py +0 -586
  126. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  127. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  128. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/pull_request_template.md +0 -0
  129. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/scripts/generate_test_summary.py +0 -0
  130. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/utils/github.js +0 -0
  131. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/workflows/code_quality.yml +0 -0
  132. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/workflows/commit_hygiene.yml +0 -0
  133. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/workflows/generate_docs.yml +0 -0
  134. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/workflows/integration_tests.yml +0 -0
  135. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.github/workflows/semantic_release.yml +0 -0
  136. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.gitignore +0 -0
  137. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.pre-commit-config.yaml +0 -0
  138. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/.releaserc +0 -0
  139. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/LICENSE +0 -0
  140. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/README.md +0 -0
  141. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/commitlint.config.js +0 -0
  142. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/api_reference.rst +0 -0
  143. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/app_structure/index.rst +0 -0
  144. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/app_structure/pre-commit-config.yaml.rst +0 -0
  145. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/app_structure/pyproject.toml.rst +0 -0
  146. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/app_structure/src_app.rst +0 -0
  147. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/changelog.rst +0 -0
  148. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/cli_reference.rst +0 -0
  149. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/conf.py +0 -0
  150. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/custom_views/index.rst +0 -0
  151. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/custom_views/reusable_components.md +0 -0
  152. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/custom_views/templates.md +0 -0
  153. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/custom_views/view_handlers.md +0 -0
  154. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/getting_started/defining_asset.rst +0 -0
  155. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/getting_started/first_action.rst +0 -0
  156. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/getting_started/index.rst +0 -0
  157. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/getting_started/init_app.rst +0 -0
  158. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/getting_started/installation.rst +0 -0
  159. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/getting_started/testing_and_building.rst +0 -0
  160. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/docs/index.rst +0 -0
  161. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/README.md +0 -0
  162. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/install.sh +0 -0
  163. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/mcp_config.json +0 -0
  164. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/pyproject.toml +0 -0
  165. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/pytest.ini +0 -0
  166. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/src/soar_test_assistant/__init__.py +0 -0
  167. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/tests/__init__.py +0 -0
  168. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/tests/test_analyzer.py +0 -0
  169. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/mcp_server/uv.lock +0 -0
  170. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/__init__.py +0 -0
  171. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/apis/__init__.py +0 -0
  172. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/apis/artifact.py +3 -3
  173. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/apis/container.py +2 -2
  174. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_templates/basic_app/.gitignore +0 -0
  175. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_templates/basic_app/.pre-commit-config.yaml +0 -0
  176. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_templates/basic_app/logo.svg +0 -0
  177. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_templates/basic_app/logo_dark.svg +0 -0
  178. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_templates/basic_app/src/__init__.py +0 -0
  179. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/app_templates/basic_app/uv.lock +0 -0
  180. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/__init__.py +0 -0
  181. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/init/__init__.py +0 -0
  182. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/init/cli.py +5 -5
  183. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/manifests/__init__.py +0 -0
  184. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/manifests/cli.py +0 -0
  185. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/manifests/serializers.py +4 -4
  186. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/path_utils.py +1 -1
  187. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/test/__init__.py +0 -0
  188. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/test/cli.py +0 -0
  189. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/cli/utils.py +0 -0
  190. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/code_renderers/__init__.py +0 -0
  191. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/code_renderers/app_renderer.py +1 -1
  192. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/code_renderers/asset_renderer.py +1 -1
  193. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/code_renderers/templates/pyproject.toml.jinja +0 -0
  194. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/code_renderers/toml_renderer.py +0 -0
  195. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/colors.py +0 -0
  196. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/crypto.py +0 -0
  197. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/decorators/__init__.py +3 -3
  198. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/exceptions.py +0 -0
  199. {splunk_soar_sdk-3.4.0/src/soar_sdk/meta → splunk_soar_sdk-3.6.0/src/soar_sdk/extras}/__init__.py +0 -0
  200. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/field_utils.py +0 -0
  201. {splunk_soar_sdk-3.4.0/src/soar_sdk/views → splunk_soar_sdk-3.6.0/src/soar_sdk/meta}/__init__.py +0 -0
  202. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/meta/adapters.py +0 -0
  203. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/meta/datatypes.py +0 -0
  204. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/paths.py +0 -0
  205. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/py.typed +0 -0
  206. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/consts.py +0 -0
  207. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/encryption_helper.py +0 -0
  208. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/install_info.py +1 -1
  209. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom/json_keys.py +0 -0
  210. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/shims/phantom_common/encryption/encryption_manager_factory.py +0 -0
  211. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/templates/base/base_template.html +0 -0
  212. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/templates/base/error.html +0 -0
  213. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/templates/base/header.html +0 -0
  214. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/templates/base/logo_header.html +0 -0
  215. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/templates/components/pie_chart.html +0 -0
  216. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/templates/widgets/widget_resize_snippet.html +0 -0
  217. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/templates/widgets/widget_template.html +0 -0
  218. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/types.py +1 -1
  219. {splunk_soar_sdk-3.4.0/src/soar_sdk/views/components → splunk_soar_sdk-3.6.0/src/soar_sdk/views}/__init__.py +0 -0
  220. {splunk_soar_sdk-3.4.0/src/soar_sdk/webhooks → splunk_soar_sdk-3.6.0/src/soar_sdk/views/components}/__init__.py +0 -0
  221. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/src/soar_sdk/views/components/pie_chart.py +0 -0
  222. {splunk_soar_sdk-3.4.0/tests → splunk_soar_sdk-3.6.0/src/soar_sdk/webhooks}/__init__.py +0 -0
  223. {splunk_soar_sdk-3.4.0/tests/cli → splunk_soar_sdk-3.6.0/tests}/__init__.py +0 -0
  224. {splunk_soar_sdk-3.4.0/tests/cli/manifests → splunk_soar_sdk-3.6.0/tests/cli}/__init__.py +0 -0
  225. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/datapath_parse.py +0 -0
  226. {splunk_soar_sdk-3.4.0/tests/example_app/src/actions → splunk_soar_sdk-3.6.0/tests/cli/manifests}/__init__.py +0 -0
  227. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_assets/converted_app/actions.py.txt +0 -0
  228. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/cli/test_test_cli.py +0 -0
  229. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/example_asset.json +0 -0
  230. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/logo.svg +0 -0
  231. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/logo_dark.svg +0 -0
  232. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/release_notes/v1.md +0 -0
  233. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/src/__init__.py +0 -0
  234. {splunk_soar_sdk-3.4.0/tests/integration → splunk_soar_sdk-3.6.0/tests/example_app/src/actions}/__init__.py +0 -0
  235. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/src/actions/generate_category.py +0 -0
  236. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/src/actions/reverse_string.py +1 -1
  237. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/src/ignoreme.txt +0 -0
  238. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app/templates/reverse_string.html +0 -0
  239. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/example_asset.json +0 -0
  240. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/logo.svg +0 -0
  241. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/logo_dark.svg +0 -0
  242. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/example_app_with_webhook/src/__init__.py +0 -0
  243. {splunk_soar_sdk-3.4.0/tests/interfaces → splunk_soar_sdk-3.6.0/tests/integration}/__init__.py +0 -0
  244. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/integration/conftest.py +0 -0
  245. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/integration/phantom_constants.py +0 -0
  246. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/integration/phantom_instance.py +3 -3
  247. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/integration/soar_client.py +2 -2
  248. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/integration/test_example_app.py +0 -0
  249. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/integration/test_example_app_with_webhook.py +2 -2
  250. {splunk_soar_sdk-3.4.0/tests/meta → splunk_soar_sdk-3.6.0/tests/interfaces}/__init__.py +0 -0
  251. {splunk_soar_sdk-3.4.0/tests/mocks → splunk_soar_sdk-3.6.0/tests/meta}/__init__.py +0 -0
  252. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/meta/test_actions.py +0 -0
  253. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/meta/test_adapters.py +0 -0
  254. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/meta/test_webhooks.py +0 -0
  255. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/mocks/dynamic_mocks.py +0 -0
  256. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/mocks/importable_action.py +0 -0
  257. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/stubs.py +0 -0
  258. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_app_action_params.py +1 -1
  259. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_app_client.py +1 -1
  260. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_app_runner.py +6 -6
  261. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_asset.py +1 -1
  262. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_assets/splunk-sdk-2.1.0.tar.gz +0 -0
  263. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_attachment_input.py +0 -0
  264. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_container.py +6 -6
  265. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_field_utils.py +0 -0
  266. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/test_on_poll.py +4 -4
  267. {splunk_soar_sdk-3.4.0 → splunk_soar_sdk-3.6.0}/tests/webhooks/test_models.py +1 -1
@@ -1,10 +1,9 @@
1
1
  import argparse
2
+ from typing import cast
2
3
 
3
- from tomlkit import parse, dumps
4
+ from tomlkit import dumps, parse
4
5
  from tomlkit.container import Container
5
6
 
6
- from typing import cast
7
-
8
7
 
9
8
  def update_version(version: str) -> None:
10
9
  pyproject_path = "pyproject.toml"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splunk-soar-sdk
3
- Version: 3.4.0
3
+ Version: 3.6.0
4
4
  Summary: The official framework for developing and testing Splunk SOAR Apps
5
5
  Project-URL: Homepage, https://github.com/phantomcyber/splunk-soar-sdk
6
6
  Project-URL: Documentation, https://github.com/phantomcyber/splunk-soar-sdk
@@ -22,6 +22,8 @@ Requires-Dist: bleach>=6.2.0
22
22
  Requires-Dist: build>=1.3.0
23
23
  Requires-Dist: click<8.2.0,>=8.0.0
24
24
  Requires-Dist: distro>=1.8.0
25
+ Requires-Dist: hatchling>=1.28.0
26
+ Requires-Dist: httpx-retries>=0.4.5
25
27
  Requires-Dist: httpx>=0.28.1
26
28
  Requires-Dist: humanize>=4.12.2
27
29
  Requires-Dist: jinja2>=3.1.0
@@ -32,6 +34,8 @@ Requires-Dist: setuptools>=80.9.0
32
34
  Requires-Dist: toml<1,>=0.10.2
33
35
  Requires-Dist: tqdm>=4.67.1
34
36
  Requires-Dist: typer<1,>=0.12.5
37
+ Provides-Extra: email
38
+ Requires-Dist: python-magic>=0.4.27; extra == 'email'
35
39
  Description-Content-Type: text/markdown
36
40
 
37
41
  # Splunk SOAR SDK - the official tool for Splunk SOAR app development
@@ -7,7 +7,7 @@ from typing import Any
7
7
 
8
8
  from mcp.server import Server
9
9
  from mcp.server.stdio import stdio_server
10
- from mcp.types import Tool, TextContent
10
+ from mcp.types import TextContent, Tool
11
11
 
12
12
  app = Server("soar-test-assistant")
13
13
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "splunk-soar-sdk"
3
- version = "3.4.0"
3
+ version = "3.6.0"
4
4
  description = "The official framework for developing and testing Splunk SOAR Apps"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13, <3.15"
@@ -44,6 +44,8 @@ dependencies = [
44
44
  "packaging>=25.0",
45
45
  "build>=1.3.0",
46
46
  "setuptools>=80.9.0",
47
+ "httpx-retries>=0.4.5",
48
+ "hatchling>=1.28.0",
47
49
  ]
48
50
 
49
51
  [project.urls]
@@ -51,6 +53,11 @@ Homepage = "https://github.com/phantomcyber/splunk-soar-sdk"
51
53
  Documentation = "https://github.com/phantomcyber/splunk-soar-sdk"
52
54
  Repository = "https://github.com/phantomcyber/splunk-soar-sdk"
53
55
 
56
+ [project.optional-dependencies]
57
+ email = [
58
+ "python-magic>=0.4.27",
59
+ ]
60
+
54
61
  [project.scripts]
55
62
  soarapps = "soar_sdk.cli.cli:main"
56
63
 
@@ -173,6 +180,7 @@ select = [
173
180
  "PL", # pylint
174
181
  "UP", # pyupgrade
175
182
  "RUF", # ruff's own rules
183
+ "I", # isort
176
184
  ]
177
185
  ignore = [
178
186
  "E402", # Module level import not at top of file.
@@ -237,4 +245,4 @@ match = "(?!test_).*\\.py"
237
245
  match-dir = "(?!tests|__pycache__|build|dist).*"
238
246
 
239
247
  [tool.codespell]
240
- ignore-words-list = "MergeT"
248
+ ignore-words-list = "MergeT,asend"
@@ -0,0 +1,37 @@
1
+ # [3.6.0](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.5.0...3.6.0) (2025-12-12)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * remove the useless test files from the root of the repo ([f529497](https://github.com/phantomcyber/splunk-soar-sdk/commit/f529497a397a9879dbe5e264a2b562916b6bbcf8))
7
+
8
+
9
+ ### Features
10
+
11
+ * add `supports_es_polling` field to manifest ([0eb75dd](https://github.com/phantomcyber/splunk-soar-sdk/commit/0eb75dd56a7fb512fff0533bdb64317d4de776d6))
12
+ * add a client for submitting ES findings ([23bf0b7](https://github.com/phantomcyber/splunk-soar-sdk/commit/23bf0b7bea5e9437bffecfe783a20abf9c4eb35b))
13
+ * enable building the SDK from a local directory instead of fetching wheel ([8ca7a6c](https://github.com/phantomcyber/splunk-soar-sdk/commit/8ca7a6c007b740c56db2407306a32363d203da76))
14
+ * update ES polling to use the new workflow ([d69784c](https://github.com/phantomcyber/splunk-soar-sdk/commit/d69784c462eccab6f5a0796cc9573cff5e816a1c))
15
+
16
+
17
+
18
+
19
+
20
+ # [3.6.0](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.5.0...3.6.0) (2025-12-12)
21
+
22
+
23
+ ### Bug Fixes
24
+
25
+ * remove the useless test files from the root of the repo ([f529497](https://github.com/phantomcyber/splunk-soar-sdk/commit/f529497a397a9879dbe5e264a2b562916b6bbcf8))
26
+
27
+
28
+ ### Features
29
+
30
+ * add `supports_es_polling` field to manifest ([0eb75dd](https://github.com/phantomcyber/splunk-soar-sdk/commit/0eb75dd56a7fb512fff0533bdb64317d4de776d6))
31
+ * add a client for submitting ES findings ([23bf0b7](https://github.com/phantomcyber/splunk-soar-sdk/commit/23bf0b7bea5e9437bffecfe783a20abf9c4eb35b))
32
+ * enable building the SDK from a local directory instead of fetching wheel ([8ca7a6c](https://github.com/phantomcyber/splunk-soar-sdk/commit/8ca7a6c007b740c56db2407306a32363d203da76))
33
+ * update ES polling to use the new workflow ([d69784c](https://github.com/phantomcyber/splunk-soar-sdk/commit/d69784c462eccab6f5a0796cc9573cff5e816a1c))
34
+
35
+
36
+
37
+
@@ -0,0 +1 @@
1
+ 3.6.0
@@ -1,14 +1,15 @@
1
1
  from abc import abstractmethod
2
+ from collections.abc import AsyncIterable, Iterable, Mapping
2
3
  from typing import Any, Generic, TypeVar
3
- from collections.abc import Mapping, Iterable, AsyncIterable
4
4
 
5
- from soar_sdk.apis.vault import Vault
6
- from soar_sdk.apis.artifact import Artifact
7
- from soar_sdk.apis.container import Container
8
- from soar_sdk.action_results import ActionOutput
9
5
  import httpx
10
- from pydantic.dataclasses import dataclass
11
6
  from pydantic import field_validator
7
+ from pydantic.dataclasses import dataclass
8
+
9
+ from soar_sdk.action_results import ActionOutput
10
+ from soar_sdk.apis.artifact import Artifact
11
+ from soar_sdk.apis.container import Container
12
+ from soar_sdk.apis.vault import Vault
12
13
 
13
14
  JSONType = dict[str, Any] | list[Any] | str | int | float | bool | None
14
15
  SummaryType = TypeVar("SummaryType", bound=ActionOutput)
@@ -1,15 +1,15 @@
1
- from typing import Union, get_origin, get_args, Any
2
- from collections.abc import Iterator
3
- from typing_extensions import TypedDict
4
- from typing import NotRequired
5
- from pydantic import BaseModel, Field, ConfigDict
6
1
  import itertools
7
2
  import types
3
+ from collections.abc import Iterator
4
+ from typing import Any, NotRequired, Union, get_args, get_origin
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+ from typing_extensions import TypedDict
8
8
 
9
9
  from soar_sdk.compat import remove_when_soar_newer_than
10
- from soar_sdk.shims.phantom.action_result import ActionResult as PhantomActionResult
11
- from soar_sdk.meta.datatypes import as_datatype
12
10
  from soar_sdk.field_utils import parse_json_schema_extra
11
+ from soar_sdk.meta.datatypes import as_datatype
12
+ from soar_sdk.shims.phantom.action_result import ActionResult as PhantomActionResult
13
13
 
14
14
  remove_when_soar_newer_than(
15
15
  "7.0.0", "NotRequired from typing_extensions is in typing in Python 3.11+"
@@ -1,17 +1,17 @@
1
- from typing import Any
2
1
  import os
3
2
  from pathlib import Path
3
+ from typing import Any
4
+
5
+ from pydantic import ValidationError
4
6
 
5
7
  from soar_sdk.compat import remove_when_soar_newer_than
6
8
  from soar_sdk.input_spec import InputSpecification
7
- from soar_sdk.shims.phantom.base_connector import BaseConnector
8
-
9
+ from soar_sdk.logging import getLogger
9
10
  from soar_sdk.meta.actions import ActionMeta
10
- from soar_sdk.types import Action
11
- from pydantic import ValidationError
12
11
  from soar_sdk.shims.phantom.action_result import ActionResult as PhantomActionResult
12
+ from soar_sdk.shims.phantom.base_connector import BaseConnector
13
13
  from soar_sdk.shims.phantom.install_info import is_onprem_broker_install
14
- from soar_sdk.logging import getLogger
14
+ from soar_sdk.types import Action
15
15
 
16
16
  logger = getLogger()
17
17
 
@@ -24,6 +24,7 @@ class ActionsManager(BaseConnector):
24
24
 
25
25
  self._actions: dict[str, Action] = {}
26
26
  self.__app_dir: Path | None = None
27
+ self.supports_es_polling: bool = False
27
28
 
28
29
  def get_action(self, identifier: str) -> Action | None:
29
30
  """Convenience method for getting an Action callable from its identifier.
@@ -123,13 +124,6 @@ class ActionsManager(BaseConnector):
123
124
  # For non-broker just proceed as we did before
124
125
  return super().get_app_dir()
125
126
 
126
- def send_finding_to_es(self, finding: dict[str, Any]) -> str:
127
- """Send finding to ES.
128
-
129
- Returns finding_id: ID for the finding in ES.
130
- """
131
- return ""
132
-
133
127
  @classmethod
134
128
  def get_soar_base_url(cls) -> str:
135
129
  """Get the base URL of the Splunk SOAR instance this app is running on."""
@@ -0,0 +1,27 @@
1
+ import httpx
2
+ from pydantic import Field
3
+
4
+ from soar_sdk.models.finding import Finding
5
+
6
+
7
+ class CreateFindingResponse(Finding):
8
+ """The return type from creating a Finding."""
9
+
10
+ time: str = Field(alias="_time")
11
+ finding_id: str
12
+
13
+
14
+ class Findings:
15
+ """Client for ES Findings API."""
16
+
17
+ def __init__(self, client: httpx.Client) -> None:
18
+ self._client = client
19
+
20
+ def create(self, finding: Finding) -> CreateFindingResponse:
21
+ """Create a new Finding."""
22
+ res = self._client.post(
23
+ "/services/public/v2/findings",
24
+ data=finding.model_dump(),
25
+ )
26
+ res.raise_for_status()
27
+ return CreateFindingResponse(**res.json())
@@ -1,6 +1,7 @@
1
- import httpx
2
- from typing import Any
3
1
  from collections.abc import Generator
2
+ from typing import Any
3
+
4
+ import httpx
4
5
 
5
6
 
6
7
  def is_client_authenticated(client: httpx.Client) -> bool:
@@ -1,4 +1,5 @@
1
1
  from typing import TYPE_CHECKING
2
+
2
3
  from soar_sdk.models.vault_attachment import VaultAttachment
3
4
  from soar_sdk.shims.phantom.vault import PhantomVault, VaultBase
4
5
 
@@ -1,48 +1,45 @@
1
1
  import importlib.util
2
2
  import inspect
3
3
  import json
4
- from pathlib import Path
5
4
  import sys
5
+ import uuid
6
+ from collections.abc import Callable, Iterator
7
+ from pathlib import Path
6
8
  from typing import Any
7
- from collections.abc import Callable
8
- from collections.abc import Iterator
9
9
  from zoneinfo import ZoneInfo
10
10
 
11
+ from soar_sdk.abstract import SOARClient, SOARClientAuth
12
+ from soar_sdk.action_results import ActionOutput, ActionResult
13
+ from soar_sdk.actions_manager import ActionsManager
14
+ from soar_sdk.app_cli_runner import AppCliRunner
15
+ from soar_sdk.app_client import AppClient
11
16
  from soar_sdk.asset import BaseAsset
12
- from soar_sdk.input_spec import InputSpecification
17
+ from soar_sdk.asset_state import AssetState
13
18
  from soar_sdk.compat import (
14
19
  MIN_PHANTOM_VERSION,
15
20
  PythonVersion,
16
21
  )
22
+ from soar_sdk.decorators import (
23
+ ActionDecorator,
24
+ ConnectivityTestDecorator,
25
+ MakeRequestDecorator,
26
+ OnESPollDecorator,
27
+ OnPollDecorator,
28
+ ViewHandlerDecorator,
29
+ WebhookDecorator,
30
+ )
31
+ from soar_sdk.exceptions import ActionRegistrationError
32
+ from soar_sdk.input_spec import InputSpecification
33
+ from soar_sdk.logging import getLogger
34
+ from soar_sdk.meta.webhooks import WebhookMeta
35
+ from soar_sdk.params import Params
17
36
  from soar_sdk.shims.phantom_common.app_interface.app_interface import SoarRestClient
18
37
  from soar_sdk.shims.phantom_common.encryption.encryption_manager_factory import (
19
38
  platform_encryption_backend,
20
39
  )
21
- from soar_sdk.abstract import SOARClient, SOARClientAuth
22
- from soar_sdk.action_results import ActionResult
23
- from soar_sdk.actions_manager import ActionsManager
24
- from soar_sdk.app_cli_runner import AppCliRunner
25
- from soar_sdk.meta.webhooks import WebhookMeta
26
- from soar_sdk.params import Params
27
- from soar_sdk.app_client import AppClient
28
- from soar_sdk.action_results import ActionOutput
29
- from soar_sdk.logging import getLogger
30
40
  from soar_sdk.types import Action
31
- from soar_sdk.webhooks.routing import Router
32
41
  from soar_sdk.webhooks.models import WebhookRequest, WebhookResponse
33
- from soar_sdk.exceptions import ActionRegistrationError
34
- from soar_sdk.asset_state import AssetState
35
-
36
- import uuid
37
- from soar_sdk.decorators import (
38
- ConnectivityTestDecorator,
39
- ActionDecorator,
40
- ViewHandlerDecorator,
41
- OnPollDecorator,
42
- OnESPollDecorator,
43
- WebhookDecorator,
44
- MakeRequestDecorator,
45
- )
42
+ from soar_sdk.webhooks.routing import Router
46
43
 
47
44
 
48
45
  def is_valid_uuid(value: str) -> bool:
@@ -1,22 +1,23 @@
1
1
  import argparse
2
2
  import inspect
3
3
  import json
4
- from pathlib import Path
4
+ import os
5
5
  import typing
6
+ from pathlib import Path
6
7
  from typing import Any
7
- import os
8
+ from urllib.parse import parse_qs, urlparse
9
+
8
10
  from pydantic import ValidationError
9
- from urllib.parse import urlparse, parse_qs
10
11
 
12
+ from soar_sdk.abstract import SOARClientAuth
11
13
  from soar_sdk.input_spec import ActionParameter, AppConfig, InputSpecification, SoarAuth
14
+ from soar_sdk.logging import PhantomLogger
15
+ from soar_sdk.shims.phantom_common.app_interface.app_interface import SoarRestClient
12
16
  from soar_sdk.shims.phantom_common.encryption.encryption_manager_factory import (
13
17
  platform_encryption_backend,
14
18
  )
15
19
  from soar_sdk.types import Action
16
20
  from soar_sdk.webhooks.models import WebhookRequest
17
- from soar_sdk.logging import PhantomLogger
18
- from soar_sdk.shims.phantom_common.app_interface.app_interface import SoarRestClient
19
- from soar_sdk.abstract import SOARClientAuth
20
21
 
21
22
  if typing.TYPE_CHECKING:
22
23
  from .app import App
@@ -1,15 +1,14 @@
1
- from dataclasses import dataclass
2
- from typing import Any, TYPE_CHECKING
3
1
  from collections.abc import Mapping
2
+ from dataclasses import dataclass
3
+ from typing import TYPE_CHECKING, Any
4
4
 
5
5
  import httpx
6
6
 
7
+ from soar_sdk.abstract import SOARClient, SOARClientAuth, SummaryType
7
8
  from soar_sdk.apis.artifact import Artifact
8
9
  from soar_sdk.apis.container import Container
9
10
  from soar_sdk.apis.vault import Vault
10
11
 
11
- from soar_sdk.abstract import SOARClient, SOARClientAuth, SummaryType
12
-
13
12
  if TYPE_CHECKING:
14
13
  pass
15
14
 
@@ -1,18 +1,16 @@
1
- from typing import Any
1
+ from typing import Any, NotRequired
2
2
  from zoneinfo import ZoneInfo
3
- from pydantic import BaseModel, model_validator, ConfigDict, Field
4
- from pydantic_core import PydanticUndefined
5
3
 
4
+ from pydantic import BaseModel, ConfigDict, Field, model_validator
5
+ from pydantic_core import PydanticUndefined
6
6
  from typing_extensions import TypedDict
7
- from typing import NotRequired
8
-
9
7
 
10
- from soar_sdk.compat import remove_when_soar_newer_than
11
- from soar_sdk.meta.datatypes import as_datatype
12
- from soar_sdk.input_spec import AppConfig
13
- from soar_sdk.field_utils import parse_json_schema_extra
14
8
  from soar_sdk.asset_state import AssetState
9
+ from soar_sdk.compat import remove_when_soar_newer_than
15
10
  from soar_sdk.exceptions import AppContextRequired
11
+ from soar_sdk.field_utils import parse_json_schema_extra
12
+ from soar_sdk.input_spec import AppConfig
13
+ from soar_sdk.meta.datatypes import as_datatype
16
14
 
17
15
  remove_when_soar_newer_than(
18
16
  "7.0.0", "NotRequired from typing_extensions is in typing in Python 3.11+"
@@ -1,10 +1,9 @@
1
1
  import json
2
- from collections.abc import MutableMapping, Iterator
2
+ from collections.abc import Iterator, MutableMapping
3
3
 
4
4
  from soar_sdk.shims.phantom.base_connector import BaseConnector
5
5
  from soar_sdk.shims.phantom.encryption_helper import encryption_helper
6
6
 
7
-
8
7
  AssetStateKeyType = str
9
8
  AssetStateValueType = str | bool | int | float | None
10
9
  AssetStateType = dict[AssetStateKeyType, AssetStateValueType]
@@ -1,8 +1,7 @@
1
1
  import asyncio
2
2
  import inspect
3
- from typing import Any, TypeVar, overload
4
3
  from collections.abc import AsyncGenerator, Coroutine
5
-
4
+ from typing import Any, TypeVar, overload
6
5
 
7
6
  T = TypeVar("T")
8
7
 
@@ -1,11 +1,11 @@
1
1
  import typer
2
2
 
3
3
  from soar_sdk import __version__
4
- from soar_sdk.paths import SDK_ROOT
4
+ from soar_sdk.cli.init.cli import convert, init
5
5
  from soar_sdk.cli.manifests.cli import manifests
6
6
  from soar_sdk.cli.package.cli import package
7
- from soar_sdk.cli.init.cli import init, convert
8
7
  from soar_sdk.cli.test.cli import test
8
+ from soar_sdk.paths import SDK_ROOT
9
9
 
10
10
  CONTEXT_SETTINGS = {"help_option_names": ["-h", "--help"]}
11
11
  HELP = """A command-line tool for helping with SOAR Apps development"""
@@ -2,15 +2,16 @@ import dataclasses
2
2
  import json
3
3
  from pathlib import Path
4
4
  from typing import Any, NamedTuple, TypeVar, cast
5
+
5
6
  import pydantic
6
7
 
7
- from soar_sdk.action_results import ActionOutput, OutputFieldSpecification, OutputField
8
- from soar_sdk.cli.utils import normalize_field_name, NormalizationResult
8
+ from soar_sdk.action_results import ActionOutput, OutputField, OutputFieldSpecification
9
+ from soar_sdk.cli.utils import NormalizationResult, normalize_field_name
9
10
  from soar_sdk.compat import remove_when_soar_newer_than
10
11
  from soar_sdk.meta.actions import ActionMeta
11
12
  from soar_sdk.meta.app import AppMeta
12
- from soar_sdk.params import Params, Param
13
13
  from soar_sdk.meta.datatypes import to_python_type
14
+ from soar_sdk.params import Param, Params
14
15
 
15
16
 
16
17
  class DeserializedAppMeta(NamedTuple):
@@ -1,10 +1,10 @@
1
1
  import importlib
2
2
  import json
3
- import toml
4
- from datetime import datetime, UTC
3
+ from datetime import UTC, datetime
5
4
  from pathlib import Path
6
5
  from pprint import pprint
7
6
 
7
+ import toml
8
8
  from packaging.specifiers import SpecifierSet
9
9
 
10
10
  from soar_sdk.app import App
@@ -74,6 +74,8 @@ class ManifestProcessor:
74
74
  f"{module_name}.{app_instance_name}.handle_webhook"
75
75
  )
76
76
 
77
+ app_meta.supports_es_polling = app.actions_manager.supports_es_polling
78
+
77
79
  return app_meta
78
80
 
79
81
  def create(self) -> None:
@@ -1,27 +1,27 @@
1
+ import asyncio
1
2
  import contextlib
2
- from datetime import timedelta
3
- import humanize
4
- import typer
5
-
3
+ import json
4
+ import os
6
5
  import tarfile
6
+ import time
7
+ from datetime import timedelta
7
8
  from io import BytesIO
8
- import json
9
+ from itertools import chain
9
10
  from pathlib import Path
10
- import asyncio
11
- import time
12
11
  from typing import Annotated
13
- from tqdm import tqdm
12
+
13
+ import httpx
14
+ import humanize
15
+ import typer
14
16
  from rich.console import Console
15
17
  from rich.panel import Panel
18
+ from tqdm import tqdm
16
19
 
17
20
  from soar_sdk.cli.manifests.processors import ManifestProcessor
18
- from soar_sdk.meta.dependencies import DependencyWheel
19
- from soar_sdk.cli.path_utils import context_directory
20
21
  from soar_sdk.cli.package.utils import phantom_get_login_session, phantom_install_app
21
- from soar_sdk.paths import SDK_TEMPLATES, APP_TEMPLATES
22
- from itertools import chain
23
- import os
24
- import httpx
22
+ from soar_sdk.cli.path_utils import context_directory
23
+ from soar_sdk.meta.dependencies import DependencyWheel
24
+ from soar_sdk.paths import APP_TEMPLATES, SDK_TEMPLATES
25
25
 
26
26
  package = typer.Typer()
27
27
  console = Console() # For printing lots of pretty colors and stuff
@@ -1,6 +1,7 @@
1
- import httpx
2
- from contextlib import asynccontextmanager
3
1
  from collections.abc import AsyncGenerator
2
+ from contextlib import asynccontextmanager
3
+
4
+ import httpx
4
5
 
5
6
 
6
7
  @asynccontextmanager
@@ -1,15 +1,16 @@
1
- from typing import ClassVar
2
- from collections.abc import Iterator
3
- import typing
4
1
  import ast
2
+ import typing
3
+ from collections.abc import Iterator
4
+ from typing import ClassVar
5
+
5
6
  from pydantic_core import PydanticUndefined
6
7
 
7
8
  from soar_sdk.action_results import ActionOutput
8
9
  from soar_sdk.cli.utils import normalize_field_name
9
10
  from soar_sdk.code_renderers.renderer import AstRenderer
11
+ from soar_sdk.field_utils import parse_json_schema_extra
10
12
  from soar_sdk.meta.actions import ActionMeta
11
13
  from soar_sdk.params import Params
12
- from soar_sdk.field_utils import parse_json_schema_extra
13
14
 
14
15
 
15
16
  class ActionRenderer(AstRenderer[ActionMeta]):
@@ -1,9 +1,9 @@
1
1
  import abc
2
- from typing import TypeVar, Generic
3
- import jinja2 as j2
4
2
  import ast
5
3
  from collections.abc import Iterator
4
+ from typing import Generic, TypeVar
6
5
 
6
+ import jinja2 as j2
7
7
 
8
8
  ContextT = TypeVar("ContextT")
9
9
 
@@ -1,5 +1,6 @@
1
- from enum import Enum
2
1
  import functools
2
+ from enum import Enum
3
+
3
4
  from packaging.version import Version
4
5
 
5
6
  MIN_PHANTOM_VERSION = "7.0.0"
@@ -1,20 +1,16 @@
1
1
  import inspect
2
+ import traceback
3
+ from collections.abc import AsyncGenerator, Callable, Iterator
2
4
  from functools import wraps
3
- from collections.abc import Iterator
4
- from typing import Any, get_args, get_origin
5
- from collections.abc import Callable
6
- from collections.abc import AsyncGenerator
5
+ from typing import TYPE_CHECKING, Any, get_args, get_origin
7
6
 
8
7
  from soar_sdk.abstract import SOARClient
9
- from soar_sdk.action_results import ActionResult, ActionOutput
10
- from soar_sdk.params import Params
8
+ from soar_sdk.action_results import ActionOutput, ActionResult
9
+ from soar_sdk.async_utils import run_async_if_needed
10
+ from soar_sdk.exceptions import ActionFailure
11
11
  from soar_sdk.meta.actions import ActionMeta
12
+ from soar_sdk.params import Params
12
13
  from soar_sdk.types import Action, action_protocol
13
- from soar_sdk.exceptions import ActionFailure
14
- from soar_sdk.async_utils import run_async_if_needed
15
- import traceback
16
-
17
- from typing import TYPE_CHECKING
18
14
 
19
15
  if TYPE_CHECKING:
20
16
  from soar_sdk.app import App
@@ -1,19 +1,17 @@
1
1
  import inspect
2
+ import traceback
3
+ from collections.abc import Callable
4
+ from functools import wraps
5
+ from typing import TYPE_CHECKING, Any
2
6
 
3
7
  from soar_sdk.abstract import SOARClient
4
- from soar_sdk.action_results import ActionResult
5
- from soar_sdk.params import MakeRequestParams
6
- from soar_sdk.meta.actions import ActionMeta
7
- from soar_sdk.action_results import ActionOutput, MakeRequestOutput
8
- from soar_sdk.types import Action, action_protocol
9
- from soar_sdk.exceptions import ActionFailure
8
+ from soar_sdk.action_results import ActionOutput, ActionResult, MakeRequestOutput
10
9
  from soar_sdk.async_utils import run_async_if_needed
10
+ from soar_sdk.exceptions import ActionFailure
11
11
  from soar_sdk.logging import getLogger
12
- from functools import wraps
13
- import traceback
14
-
15
- from typing import TYPE_CHECKING, Any
16
- from collections.abc import Callable
12
+ from soar_sdk.meta.actions import ActionMeta
13
+ from soar_sdk.params import MakeRequestParams
14
+ from soar_sdk.types import Action, action_protocol
17
15
 
18
16
  if TYPE_CHECKING:
19
17
  from soar_sdk.app import App