stackos-connectors 0.2.2__tar.gz → 0.2.4__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.
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/PKG-INFO +23 -6
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/README.md +22 -5
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/pyproject.toml +1 -1
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/catalog.json +21 -1
- stackos_connectors-0.2.4/src/stackos_connectors/connectors/google_indexing/docs/auth.md +30 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/docs/auth.md +1 -1
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/catalog.json +45 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/docs/auth.md +12 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/docs/quickbooks-online.md +5 -0
- stackos_connectors-0.2.4/src/stackos_connectors/connectors/quickbooks_online/probe.py +62 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/service_account.py +1 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_google_service_account.py +35 -2
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_oauth_contracts.py +29 -1
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_probes.py +7 -2
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/packaging/installed_auth_consumer.py +50 -3
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/packaging/test_grouped_layout.py +2 -2
- stackos_connectors-0.2.4/tests/quickbooks_online/test_probe.py +207 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/.github/workflows/publish.yml +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/.gitignore +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/LICENSE +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog/index.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog/schema.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/contract.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/docs/aignc.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/contract.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/docs/s3.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/docs/cloudflare-dns.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/assets/icon.jpeg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/assets/icon.svg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/docs/ftp.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/remote_tree.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/assets/icon.webp +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/docs/google-indexing.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/docs/google-search-console.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/contract.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/hubspot.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/signatures.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/signature.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/assets/icon.svg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/auth/viewer-organization.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/create.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/delete.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/resolve.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/unresolve.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/update.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/create.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/delete.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/update.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/add-label.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/archive.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/create.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/remove-label.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/search.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/unarchive.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/update.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/projects/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/projects/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/teams/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/teams/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/users/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/users/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/viewer/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/get.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/list.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/contract.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/docs/linear.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.metadata.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/root-policy-2026-07-23.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/assets/icon.webp +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/response.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/assets/icon.jpeg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/assets/icon.svg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/add-customer-tag.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/create-customer.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-lifetime-value.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-orders.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/list-customers.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/remove-customer-tag.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/search-customers.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/update-customer.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/adjust-inventory.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-by-sku.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-item.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-location-inventory.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-item-availability.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-levels.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-product-variant-inventory.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/set-inventory-level.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-note.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-tag.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/create-draft-order.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-by-name.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-fulfillment-status.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-timeline.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-order-variant-quantities.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-orders.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/mark-order-paid.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/search-orders.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-note.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-tags.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-collection.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product-variant.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-collection.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-by-handle.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-variant.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-collections.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-product-variants.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-products.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/search-products.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-status.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-variant.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/shopifyql.graphql +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/docs/shopify.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/payloads.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/constants.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/docs/signatures.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/files.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/http.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/payloads.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/results.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/validation.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/assets/icon.svg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/assets/icon.jpeg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/contract.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/docs/stripe.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/assets/icon.svg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/docs/auth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/docs/auth-protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/docs/protocol.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/payloads.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/schema.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/native.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/proxy.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/sessions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/openapi.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/stackos-tools.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/contract.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/docs/agent-api/README.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/docs/trackbooth.md +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/schema.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/transport.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/assets/icon.png +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/catalog.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/integration.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/contracts.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/errors.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/py.typed +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/redaction.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/registry.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/base.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/ark.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/media.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/batch.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/oauth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/probe.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/icons/integration.svg +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/media.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/oauth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/provider_utils.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/rate_limit.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/vendor_utils.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/validation.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_auth_redaction.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_oauth_protocol.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_search_console_scopes.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/conftest.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/fixtures/wire-contracts.json +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_hubspot_signature_protocol.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_named_actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_pipedrive_probes.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_probe_boundary.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_salesloft_probes.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/catalog/test_catalog.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/catalog/test_nested_resources.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/catalog/test_presentation.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_contract.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_native_result_boundary.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_nested_auth_redaction.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_preflight_redaction.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_public_key_facts.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_runtime.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_timeout_options.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_validation_data.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_validation_execution_outcome.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/test_native.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/test_probes_catalog.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/test_signature_protocol.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_aignc_native.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_generation_outcomes.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_media_files.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_named_media.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/conftest.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/test_auth.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/test_reads.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/conftest.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/test_linear_transport.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/test_safe_refs_named_actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/test_stripe_transport_transport.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_authorization.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_closure_outcomes.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_native.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_payloads.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_proxy.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_sessions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/trackbooth/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/trackbooth/test_native.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/__init__.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/catalog_fixture.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/conftest.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_ahrefs.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_boundary_timeout.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_cloudflare.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_dataforseo.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_firecrawl.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_ftp.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_ftp_actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_analytics.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_indexing.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_indexing_batch.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_search_console.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_search_console_batch.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_tag_manager.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_jina_reader.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_named_clients.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_native_boundary.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_openrouter.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_reddit.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_s3.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_s3_actions.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_serper.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_shopify.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_sitemap.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_transport_defaults.py +0 -0
- {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_wordpress_ghost.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: stackos-connectors
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Named provider connectors with plain data and caller-owned authentication.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -127,11 +127,11 @@ through `CallOptions(provider_context={"mailbox": ...})`. Google Ads/Workspace
|
|
|
127
127
|
service-account probes only report resolved-token presence and unverified resource
|
|
128
128
|
access; they make no HTTP call or new-grant claim.
|
|
129
129
|
|
|
130
|
-
Google JWT validation/signing is shared across the
|
|
130
|
+
Google JWT validation/signing is shared across the six declared service-account
|
|
131
131
|
methods. Credentials never come from ambient identity or key-supplied endpoints.
|
|
132
132
|
Provider details live in `connectors/<provider>/docs/auth.md` and the catalog.
|
|
133
|
-
Google Indexing
|
|
134
|
-
|
|
133
|
+
Google Indexing supports explicit `jwt_bearer` acquisition with the fixed Indexing
|
|
134
|
+
scope. Token acquisition does not establish API enablement or site-owner access.
|
|
135
135
|
|
|
136
136
|
Provider-local pure helpers cover Telegram authorization request/challenge/state
|
|
137
137
|
translation (`connectors.telegram.auth`), Slack v0 HMAC verification
|
|
@@ -191,15 +191,32 @@ Python 3.12 or newer is required. Source:
|
|
|
191
191
|
Published releases can be installed with:
|
|
192
192
|
|
|
193
193
|
```bash
|
|
194
|
-
python -m pip install stackos-connectors==0.2.
|
|
194
|
+
python -m pip install stackos-connectors==0.2.4
|
|
195
195
|
```
|
|
196
196
|
|
|
197
|
-
Or add `stackos-connectors==0.2.
|
|
197
|
+
Or add `stackos-connectors==0.2.4` to your Python dependency requirements.
|
|
198
198
|
|
|
199
199
|
Install from a local checkout with `pip install /path/to/StackOSConnectors`, or
|
|
200
200
|
build a wheel with `python -m build --wheel` and install that wheel. Runtime use
|
|
201
201
|
needs only the installed package and its declared dependencies.
|
|
202
202
|
|
|
203
|
+
### 0.2.4 release notes
|
|
204
|
+
|
|
205
|
+
- Complete QuickBooks setup metadata with method labels and explicit required
|
|
206
|
+
environment and company realm fields.
|
|
207
|
+
- Add a credential probe through the existing validated CompanyInfo read. It
|
|
208
|
+
returns bounded company identity and leaves OAuth grant evidence unknown.
|
|
209
|
+
- Preserve the two QuickBooks read actions and Google Indexing authentication
|
|
210
|
+
support from 0.2.3.
|
|
211
|
+
|
|
212
|
+
### 0.2.3 release notes
|
|
213
|
+
|
|
214
|
+
- Restore Google Indexing service-account token acquisition through the canonical
|
|
215
|
+
`get_auth_contract` and `request_token` APIs. The contract fixes the Google token
|
|
216
|
+
endpoint and Indexing scope, requires a Bearer response, and rejects delegation.
|
|
217
|
+
- Preserve the QuickBooks Online connector from 0.2.2 and the Search Console scope
|
|
218
|
+
handling from 0.2.1.
|
|
219
|
+
|
|
203
220
|
## Publishing
|
|
204
221
|
|
|
205
222
|
The manual [publish workflow](.github/workflows/publish.yml) uses PyPI Trusted
|
|
@@ -111,11 +111,11 @@ through `CallOptions(provider_context={"mailbox": ...})`. Google Ads/Workspace
|
|
|
111
111
|
service-account probes only report resolved-token presence and unverified resource
|
|
112
112
|
access; they make no HTTP call or new-grant claim.
|
|
113
113
|
|
|
114
|
-
Google JWT validation/signing is shared across the
|
|
114
|
+
Google JWT validation/signing is shared across the six declared service-account
|
|
115
115
|
methods. Credentials never come from ambient identity or key-supplied endpoints.
|
|
116
116
|
Provider details live in `connectors/<provider>/docs/auth.md` and the catalog.
|
|
117
|
-
Google Indexing
|
|
118
|
-
|
|
117
|
+
Google Indexing supports explicit `jwt_bearer` acquisition with the fixed Indexing
|
|
118
|
+
scope. Token acquisition does not establish API enablement or site-owner access.
|
|
119
119
|
|
|
120
120
|
Provider-local pure helpers cover Telegram authorization request/challenge/state
|
|
121
121
|
translation (`connectors.telegram.auth`), Slack v0 HMAC verification
|
|
@@ -175,15 +175,32 @@ Python 3.12 or newer is required. Source:
|
|
|
175
175
|
Published releases can be installed with:
|
|
176
176
|
|
|
177
177
|
```bash
|
|
178
|
-
python -m pip install stackos-connectors==0.2.
|
|
178
|
+
python -m pip install stackos-connectors==0.2.4
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
-
Or add `stackos-connectors==0.2.
|
|
181
|
+
Or add `stackos-connectors==0.2.4` to your Python dependency requirements.
|
|
182
182
|
|
|
183
183
|
Install from a local checkout with `pip install /path/to/StackOSConnectors`, or
|
|
184
184
|
build a wheel with `python -m build --wheel` and install that wheel. Runtime use
|
|
185
185
|
needs only the installed package and its declared dependencies.
|
|
186
186
|
|
|
187
|
+
### 0.2.4 release notes
|
|
188
|
+
|
|
189
|
+
- Complete QuickBooks setup metadata with method labels and explicit required
|
|
190
|
+
environment and company realm fields.
|
|
191
|
+
- Add a credential probe through the existing validated CompanyInfo read. It
|
|
192
|
+
returns bounded company identity and leaves OAuth grant evidence unknown.
|
|
193
|
+
- Preserve the two QuickBooks read actions and Google Indexing authentication
|
|
194
|
+
support from 0.2.3.
|
|
195
|
+
|
|
196
|
+
### 0.2.3 release notes
|
|
197
|
+
|
|
198
|
+
- Restore Google Indexing service-account token acquisition through the canonical
|
|
199
|
+
`get_auth_contract` and `request_token` APIs. The contract fixes the Google token
|
|
200
|
+
endpoint and Indexing scope, requires a Bearer response, and rejects delegation.
|
|
201
|
+
- Preserve the QuickBooks Online connector from 0.2.2 and the Search Console scope
|
|
202
|
+
handling from 0.2.1.
|
|
203
|
+
|
|
187
204
|
## Publishing
|
|
188
205
|
|
|
189
206
|
The manual [publish workflow](.github/workflows/publish.yml) uses PyPI Trusted
|
|
@@ -41,7 +41,20 @@
|
|
|
41
41
|
"type": "secret"
|
|
42
42
|
}
|
|
43
43
|
],
|
|
44
|
-
"description": "Use the Google service-account key to acquire an access token
|
|
44
|
+
"description": "Use request_token with the Google service-account key to acquire an access token. Execution accepts the resolved access_token; provider resource access must be granted separately. Credential storage and refresh scheduling remain consumer-owned.",
|
|
45
|
+
"auth_type": "oauth",
|
|
46
|
+
"interactive": false
|
|
47
|
+
},
|
|
48
|
+
"evidence_source": "oauth_response",
|
|
49
|
+
"protocol": {
|
|
50
|
+
"grant_types": [
|
|
51
|
+
"jwt_bearer"
|
|
52
|
+
],
|
|
53
|
+
"flow": "jwt_bearer",
|
|
54
|
+
"authorization_endpoint": null,
|
|
55
|
+
"pkce_mode": "unavailable",
|
|
56
|
+
"authorization_params": [],
|
|
57
|
+
"required_token_type": "Bearer"
|
|
45
58
|
}
|
|
46
59
|
}
|
|
47
60
|
],
|
|
@@ -221,5 +234,12 @@
|
|
|
221
234
|
"path": "shared/icons/integration.svg",
|
|
222
235
|
"media_type": "image/svg+xml",
|
|
223
236
|
"kind": "fallback"
|
|
237
|
+
},
|
|
238
|
+
"auth_protocol": {
|
|
239
|
+
"flow": "jwt_bearer",
|
|
240
|
+
"token_endpoint": "https://oauth2.googleapis.com/token",
|
|
241
|
+
"scopes": [
|
|
242
|
+
"https://www.googleapis.com/auth/indexing"
|
|
243
|
+
]
|
|
224
244
|
}
|
|
225
245
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Google Indexing authentication
|
|
2
|
+
|
|
3
|
+
The [bundled catalog](../catalog.json) is the installed contract for method fields,
|
|
4
|
+
scopes, endpoints and supported grants. Read it through `describe`; use
|
|
5
|
+
`get_auth_contract` for immutable protocol facts.
|
|
6
|
+
|
|
7
|
+
| Saved method | Explicit token grants |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `service-account` | `jwt_bearer` |
|
|
10
|
+
|
|
11
|
+
Call `request_token` with resolved `service_account_json` to sign an RSA JWT and
|
|
12
|
+
exchange it at `https://oauth2.googleapis.com/token`. The signed request uses only
|
|
13
|
+
`https://www.googleapis.com/auth/indexing`. The shared Google key validator rejects
|
|
14
|
+
alternate token endpoints and external credential sources. Delegation is not
|
|
15
|
+
supported. A successful response requires a Bearer token and a positive expiry;
|
|
16
|
+
omitted scope remains omitted provider evidence.
|
|
17
|
+
|
|
18
|
+
Actions and `probe_credentials` accept the resolved `access_token`. Discovery,
|
|
19
|
+
probes and actions never acquire or refresh credentials implicitly. The consumer
|
|
20
|
+
owns key and token custody, refresh timing, permissions, persistence and audit.
|
|
21
|
+
|
|
22
|
+
Token acquisition does not verify API enablement or site-owner access. The service
|
|
23
|
+
account needs delegated site-owner access in Search Console. This property role
|
|
24
|
+
is separate from Workspace user impersonation. Existing eligibility, quota and
|
|
25
|
+
notification semantics remain in the [provider notes](google-indexing.md).
|
|
26
|
+
|
|
27
|
+
Provider references retained from the reviewed catalog:
|
|
28
|
+
|
|
29
|
+
- [Indexing prerequisites](https://developers.google.com/search/apis/indexing-api/v3/prereqs)
|
|
30
|
+
- [Indexing API usage](https://developers.google.com/search/apis/indexing-api/v3/using-api)
|
|
@@ -21,7 +21,7 @@ The full `webmasters` scope also permits read operations. Consumers can use
|
|
|
21
21
|
without changing stored provider scope evidence. Read-only scope never satisfies
|
|
22
22
|
a sitemap submission requirement. Property permissions remain separate.
|
|
23
23
|
|
|
24
|
-
Service-account token success does not establish Search Console property access. Inventory probes can succeed with no properties. Google Indexing
|
|
24
|
+
Service-account token success does not establish Search Console property access. Inventory probes can succeed with no properties. Google Indexing has a separate [service-account authentication contract](../../google_indexing/docs/auth.md) and scope.
|
|
25
25
|
|
|
26
26
|
`request_token` receives resolved application/key fields and performs only the requested grant. Actions and `probe_credentials` receive resolved execution fields. Discovery, probes and actions never acquire or refresh implicitly. The consumer owns credential/state/PKCE custody, callbacks, refresh timing and concurrency, permissions, persistence and audit. Token results and authorization URLs are sensitive in-process values.
|
|
27
27
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"name": "QuickBooks Online",
|
|
5
5
|
"description": "Bounded company and invoice reads with explicit caller-owned OAuth.",
|
|
6
6
|
"auth_type": "oauth",
|
|
7
|
+
"probe_implementation": "stackos_connectors.connectors.quickbooks_online.probe:probe",
|
|
7
8
|
"auth_methods": [
|
|
8
9
|
{
|
|
9
10
|
"key": "oauth2_authorization_code",
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
"type": "object",
|
|
27
28
|
"properties": {
|
|
28
29
|
"environment": {
|
|
30
|
+
"type": "string",
|
|
29
31
|
"enum": [
|
|
30
32
|
"sandbox",
|
|
31
33
|
"production"
|
|
@@ -43,6 +45,7 @@
|
|
|
43
45
|
"additionalProperties": false
|
|
44
46
|
},
|
|
45
47
|
"setup": {
|
|
48
|
+
"label": "Connect with QuickBooks",
|
|
46
49
|
"auth_type": "oauth",
|
|
47
50
|
"interactive": true,
|
|
48
51
|
"description": "Register an Intuit app, verify callback state and realmId, and supply its resolved accounting access token.",
|
|
@@ -60,6 +63,26 @@
|
|
|
60
63
|
"type": "secret",
|
|
61
64
|
"secret": true,
|
|
62
65
|
"required": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"key": "environment",
|
|
69
|
+
"label": "Environment",
|
|
70
|
+
"type": "select",
|
|
71
|
+
"secret": false,
|
|
72
|
+
"required": true,
|
|
73
|
+
"options": [
|
|
74
|
+
{"value": "sandbox", "label": "Sandbox"},
|
|
75
|
+
{"value": "production", "label": "Production"}
|
|
76
|
+
],
|
|
77
|
+
"description": "Choose the intended QuickBooks environment explicitly; there is no default."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"key": "realm_id",
|
|
81
|
+
"label": "Company realm ID",
|
|
82
|
+
"type": "text",
|
|
83
|
+
"secret": false,
|
|
84
|
+
"required": true,
|
|
85
|
+
"description": "Numeric company realm ID, 1–32 digits. Bind it to the intended company and verify callback realmId before token exchange."
|
|
63
86
|
}
|
|
64
87
|
]
|
|
65
88
|
},
|
|
@@ -92,6 +115,7 @@
|
|
|
92
115
|
"type": "object",
|
|
93
116
|
"properties": {
|
|
94
117
|
"environment": {
|
|
118
|
+
"type": "string",
|
|
95
119
|
"enum": [
|
|
96
120
|
"sandbox",
|
|
97
121
|
"production"
|
|
@@ -109,6 +133,7 @@
|
|
|
109
133
|
"additionalProperties": false
|
|
110
134
|
},
|
|
111
135
|
"setup": {
|
|
136
|
+
"label": "OAuth2 access token",
|
|
112
137
|
"auth_type": "oauth",
|
|
113
138
|
"interactive": false,
|
|
114
139
|
"description": "Register an Intuit app, verify callback state and realmId, and supply its resolved accounting access token.",
|
|
@@ -119,6 +144,26 @@
|
|
|
119
144
|
"type": "secret",
|
|
120
145
|
"secret": true,
|
|
121
146
|
"required": true
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"key": "environment",
|
|
150
|
+
"label": "Environment",
|
|
151
|
+
"type": "select",
|
|
152
|
+
"secret": false,
|
|
153
|
+
"required": true,
|
|
154
|
+
"options": [
|
|
155
|
+
{"value": "sandbox", "label": "Sandbox"},
|
|
156
|
+
{"value": "production", "label": "Production"}
|
|
157
|
+
],
|
|
158
|
+
"description": "Choose the intended QuickBooks environment explicitly; there is no default."
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"key": "realm_id",
|
|
162
|
+
"label": "Company realm ID",
|
|
163
|
+
"type": "text",
|
|
164
|
+
"secret": false,
|
|
165
|
+
"required": true,
|
|
166
|
+
"description": "Numeric company realm ID, 1–32 digits. Supply the company realm bound to this access token."
|
|
122
167
|
}
|
|
123
168
|
]
|
|
124
169
|
},
|
|
@@ -10,4 +10,16 @@ The caller owns application secrets, state verification, callback handling, bind
|
|
|
10
10
|
|
|
11
11
|
An omitted token response scope remains unknown; the requested accounting scope is not evidence of an actual grant. An omitted refresh token remains absent in `TokenResult`; the caller decides whether to retain a prior value. Unknown refresh outcomes require caller reconciliation, not automatic replay. `CompanyInfo.Id` is a separate entity identifier and need not equal callback `realmId`.
|
|
12
12
|
|
|
13
|
+
Both method setup forms require an explicit environment and numeric company realm
|
|
14
|
+
ID of 1–32 digits. Neither field has a default. The caller validates the intended
|
|
15
|
+
realm against the OAuth callback before exchanging a code.
|
|
16
|
+
|
|
17
|
+
`probe_credentials` reuses `quickbooks-online.company-info.get` with the resolved
|
|
18
|
+
token and configured realm. It returns optional company display name and metadata
|
|
19
|
+
containing provider-returned `company_id`, caller-configured `configured_realm_id`
|
|
20
|
+
and `environment`. `provider_account_id` remains null because the returned entity
|
|
21
|
+
ID is not realm attestation. No grants or scopes are inferred from a successful
|
|
22
|
+
CompanyInfo read. Malformed responses and credential echoes fail through the same
|
|
23
|
+
validator as the action; provider failures expose only safe status/reason facts.
|
|
24
|
+
|
|
13
25
|
Primary protocol sources: [sandbox discovery](https://developer.intuit.com/.well-known/openid_sandbox_configuration/), [production discovery](https://developer.intuit.com/.well-known/openid_configuration/), [official Python OAuth client](https://github.com/intuit/oauth-pythonclient/blob/master/intuitlib/client.py), and [accounting scope](https://github.com/intuit/oauth-pythonclient/blob/master/intuitlib/enums.py). Local fixture verification does not establish live app consent or sandbox compatibility.
|
|
@@ -19,6 +19,11 @@ A missing `Invoice` array in an otherwise empty `QueryResponse` means an empty p
|
|
|
19
19
|
|
|
20
20
|
The consumer owns page traversal, cross-page duplicate detection, aggregate size/count bounds, empty-scan handling, overflow detection, persistence and publication. A short page can terminate a declared traversal, but offset pagination is not a transactionally isolated snapshot. The returned `realm_id` repeats request context, not independent provider attestation. Provider faults return fixed safe error codes and status, never raw response bodies, tokens or transport exception text.
|
|
21
21
|
|
|
22
|
+
The explicit credential probe calls the existing CompanyInfo action and shares
|
|
23
|
+
its validation, transport, retry bounds and redaction. It reports only safe company
|
|
24
|
+
identity, keeps configured realm context distinct from `CompanyInfo.Id`, and does
|
|
25
|
+
not establish OAuth scope grants. See [authentication](auth.md) for its result.
|
|
26
|
+
|
|
22
27
|
Run local checks with `.venv/bin/python -B -m pytest tests/quickbooks_online tests/auth tests/catalog tests/packaging -p no:cacheprovider` and `.venv/bin/ruff check src/stackos_connectors/connectors/quickbooks_online tests/quickbooks_online`. The standalone installed-wheel driver in `tests/packaging/installed_auth_consumer.py` uses injected transports with live networking prohibited. Live Intuit consent/provider verification is a separate gate.
|
|
23
28
|
|
|
24
29
|
References: [Invoice API](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/invoice), [limits and throttling](https://static.developer.intuit.com/output_html/qbo/docs/learn/limits-and-throttles.html), [authentication](auth.md).
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Company identity probe using the existing validated QuickBooks read action."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from stackos_connectors import CallOptions, ConnectorAuth, get_default_client
|
|
6
|
+
from stackos_connectors.errors import ConnectorError, IntegrationDownError, RateLimitedError
|
|
7
|
+
from stackos_connectors.probe import AuthMethodProbeContext
|
|
8
|
+
|
|
9
|
+
_SAFE_ERROR_REASONS = frozenset(
|
|
10
|
+
{
|
|
11
|
+
"invalid_response",
|
|
12
|
+
"authentication_failed",
|
|
13
|
+
"permission_denied",
|
|
14
|
+
"rate_limited",
|
|
15
|
+
"provider_unavailable",
|
|
16
|
+
"provider_failure",
|
|
17
|
+
"network_error",
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
async def probe(
|
|
23
|
+
*, auth: ConnectorAuth, options: CallOptions, context: AuthMethodProbeContext
|
|
24
|
+
) -> dict[str, Any]:
|
|
25
|
+
try:
|
|
26
|
+
result = await get_default_client().execute(
|
|
27
|
+
"quickbooks-online", "quickbooks-online.company-info.get", {}, auth, options
|
|
28
|
+
)
|
|
29
|
+
except ConnectorError as exc:
|
|
30
|
+
data: dict[str, Any] = {"stage": "test", "reason_code": "probe_error"}
|
|
31
|
+
reason = (
|
|
32
|
+
exc.provider_error.get("reason_code") if isinstance(exc.provider_error, dict) else None
|
|
33
|
+
)
|
|
34
|
+
if isinstance(reason, str) and reason in _SAFE_ERROR_REASONS:
|
|
35
|
+
data["reason_code"] = reason
|
|
36
|
+
status = exc.provider_status_code
|
|
37
|
+
if type(status) is int and 100 <= status <= 599:
|
|
38
|
+
data["status"] = status
|
|
39
|
+
error_type = RateLimitedError if status == 429 else IntegrationDownError
|
|
40
|
+
raise error_type("QuickBooks CompanyInfo probe failed.", data=data) from None
|
|
41
|
+
|
|
42
|
+
company = result.output_json
|
|
43
|
+
return {
|
|
44
|
+
"ok": True,
|
|
45
|
+
"vendor": "quickbooks-online",
|
|
46
|
+
"status": "ok",
|
|
47
|
+
"summary": "QuickBooks CompanyInfo read succeeded for the configured realm.",
|
|
48
|
+
"metadata": {
|
|
49
|
+
"evidence": {
|
|
50
|
+
"account": {
|
|
51
|
+
# CompanyInfo.Id is an entity id, not the account's realm id.
|
|
52
|
+
"provider_account_id": None,
|
|
53
|
+
"display_name": company.get("company_name"),
|
|
54
|
+
"metadata": {
|
|
55
|
+
"company_id": company["company_id"],
|
|
56
|
+
"configured_realm_id": company["realm_id"],
|
|
57
|
+
"environment": auth.config["environment"],
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
}
|
{stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_google_service_account.py
RENAMED
|
@@ -81,11 +81,12 @@ async def test_explicit_jwt_grant():
|
|
|
81
81
|
"google-ads",
|
|
82
82
|
"google-workspace",
|
|
83
83
|
"google-search-console",
|
|
84
|
+
"google-indexing",
|
|
84
85
|
"google-analytics",
|
|
85
86
|
"google-tag-manager",
|
|
86
87
|
],
|
|
87
88
|
)
|
|
88
|
-
async def
|
|
89
|
+
async def test_released_jwt_providers(provider):
|
|
89
90
|
from urllib.parse import parse_qs
|
|
90
91
|
|
|
91
92
|
from stackos_connectors.auth import get_auth_contract
|
|
@@ -107,12 +108,44 @@ async def test_five_released_jwt_providers(provider):
|
|
|
107
108
|
)
|
|
108
109
|
|
|
109
110
|
async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as http:
|
|
110
|
-
await request_token(
|
|
111
|
+
result = await request_token(
|
|
111
112
|
provider,
|
|
112
113
|
auth=ConnectorAuth("service-account", {"service_account_json": value}),
|
|
113
114
|
grant_type="jwt_bearer",
|
|
114
115
|
http=http,
|
|
115
116
|
)
|
|
117
|
+
assert not http.is_closed
|
|
118
|
+
assert result.access_token == "token"
|
|
119
|
+
assert result.token_type == "Bearer" and result.expires_in == 3600
|
|
120
|
+
assert result.scopes is None and not result.scopes_present
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@pytest.mark.parametrize(
|
|
124
|
+
"response,invalid_field",
|
|
125
|
+
[
|
|
126
|
+
({"expires_in": 3600}, "token_type"),
|
|
127
|
+
({"expires_in": 3600, "token_type": "Basic"}, "token_type"),
|
|
128
|
+
({"token_type": "Bearer"}, "expires_in"),
|
|
129
|
+
({"expires_in": 0, "token_type": "Bearer"}, "expires_in"),
|
|
130
|
+
({"expires_in": 3600, "token_type": "Bearer", "scope": ""}, "scope"),
|
|
131
|
+
],
|
|
132
|
+
)
|
|
133
|
+
async def test_google_indexing_rejects_invalid_token_response(response, invalid_field):
|
|
134
|
+
_, value = make_key()
|
|
135
|
+
async with httpx.AsyncClient(
|
|
136
|
+
transport=httpx.MockTransport(
|
|
137
|
+
lambda r: httpx.Response(200, json={"access_token": "token", **response})
|
|
138
|
+
)
|
|
139
|
+
) as http:
|
|
140
|
+
with pytest.raises(OAuthTokenError) as caught:
|
|
141
|
+
await request_token(
|
|
142
|
+
"google-indexing",
|
|
143
|
+
auth=ConnectorAuth("service-account", {"service_account_json": value}),
|
|
144
|
+
grant_type="jwt_bearer",
|
|
145
|
+
http=http,
|
|
146
|
+
)
|
|
147
|
+
assert caught.value.provider_key == "google-indexing"
|
|
148
|
+
assert invalid_field in caught.value.invalid_fields
|
|
116
149
|
|
|
117
150
|
|
|
118
151
|
@pytest.mark.parametrize(
|
|
@@ -65,7 +65,7 @@ def test_authorization_request_preserves_linear_protocol_and_hides_state():
|
|
|
65
65
|
[
|
|
66
66
|
("missing", "oauth2_token"),
|
|
67
67
|
("pipedrive", "api_token"),
|
|
68
|
-
("google-indexing", "
|
|
68
|
+
("google-indexing", "oauth2_authorization_code"),
|
|
69
69
|
("linear", "missing"),
|
|
70
70
|
],
|
|
71
71
|
)
|
|
@@ -74,6 +74,34 @@ def test_unsupported_auth_does_not_gain_a_protocol(provider, method):
|
|
|
74
74
|
get_auth_contract(provider, method=method)
|
|
75
75
|
|
|
76
76
|
|
|
77
|
+
def test_google_indexing_contract_has_fixed_jwt_protocol():
|
|
78
|
+
from stackos_connectors.shared.google.service_account import (
|
|
79
|
+
GOOGLE_SERVICE_ACCOUNT_PROVIDERS,
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
contract = get_auth_contract(
|
|
83
|
+
"google-indexing",
|
|
84
|
+
method="service-account",
|
|
85
|
+
config={"token_endpoint": "https://untrusted.example/token", "scopes": ["invented"]},
|
|
86
|
+
)
|
|
87
|
+
assert "google-indexing" in GOOGLE_SERVICE_ACCOUNT_PROVIDERS
|
|
88
|
+
assert contract.flow == "jwt_bearer"
|
|
89
|
+
assert contract.token_endpoint == "https://oauth2.googleapis.com/token"
|
|
90
|
+
assert contract.scopes == ("https://www.googleapis.com/auth/indexing",)
|
|
91
|
+
assert contract.grant_types == ("jwt_bearer",)
|
|
92
|
+
assert contract.required_token_type == "Bearer"
|
|
93
|
+
assert contract.authorization_endpoint is None
|
|
94
|
+
assert contract.pkce_mode == "unavailable"
|
|
95
|
+
assert contract.authorization_params == ()
|
|
96
|
+
assert contract.delegated_subject is None
|
|
97
|
+
with pytest.raises(OAuthTokenError, match="only for Google Workspace"):
|
|
98
|
+
get_auth_contract(
|
|
99
|
+
"google-indexing",
|
|
100
|
+
method="service-account",
|
|
101
|
+
config={"delegated_subject": "user@example.com"},
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
77
105
|
def test_dynamic_endpoints_and_delegation():
|
|
78
106
|
assert (
|
|
79
107
|
"/organizations/"
|
|
@@ -372,7 +372,12 @@ def test_probe_bindings_are_fixed_and_metadata_discovery_does_not_probe(monkeypa
|
|
|
372
372
|
monkeypatch.setattr("stackos_connectors.probe.probe_credentials", forbidden)
|
|
373
373
|
description = get_default_client().describe("google-indexing")
|
|
374
374
|
assert description["probe_implementation"].startswith("stackos_connectors.")
|
|
375
|
-
assert "auth_protocol"
|
|
375
|
+
assert description["auth_protocol"]["flow"] == "jwt_bearer"
|
|
376
|
+
method = description["auth_methods"][0]
|
|
377
|
+
assert method["evidence_source"] == "oauth_response"
|
|
378
|
+
assert method["setup"]["auth_type"] == "oauth"
|
|
379
|
+
assert not method["setup"]["interactive"]
|
|
380
|
+
assert method["fields_schema"]["required"] == ["access_token"]
|
|
376
381
|
# Every catalog-local binding is importable from the standalone wheel. Pure
|
|
377
382
|
# config projection must neither construct a provider nor perform a probe.
|
|
378
383
|
bound = {
|
|
@@ -380,5 +385,5 @@ def test_probe_bindings_are_fixed_and_metadata_discovery_does_not_probe(monkeypa
|
|
|
380
385
|
for key, metadata in get_default_client().registry.connector_metadata.items()
|
|
381
386
|
if metadata.get("probe_implementation")
|
|
382
387
|
}
|
|
383
|
-
assert len(bound) ==
|
|
388
|
+
assert len(bound) == 38
|
|
384
389
|
assert all(project_probe_config(key, {}) == {} for key in bound)
|
{stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/packaging/installed_auth_consumer.py
RENAMED
|
@@ -58,6 +58,12 @@ ACCESS = "driver-access-canary"
|
|
|
58
58
|
|
|
59
59
|
async def quickbooks_reads(client):
|
|
60
60
|
"""Exercise the installed QBO action factory through the public API."""
|
|
61
|
+
description = client.describe("quickbooks-online")
|
|
62
|
+
assert len(description["actions"]) == 2
|
|
63
|
+
for method in description["auth_methods"]:
|
|
64
|
+
assert method["setup"]["label"]
|
|
65
|
+
setup_fields = {field["key"]: field for field in method["setup"]["fields"]}
|
|
66
|
+
assert setup_fields["environment"]["required"] and setup_fields["realm_id"]["required"]
|
|
61
67
|
raw = '{ "Id":"7", "TxnDate":"2026-01-31", "TotalAmt":9007199254740993.0100, "Balance":-0.001 }'
|
|
62
68
|
calls = []
|
|
63
69
|
|
|
@@ -110,8 +116,21 @@ async def quickbooks_reads(client):
|
|
|
110
116
|
)
|
|
111
117
|
assert page.output_json["invoices"] == [{"native_id": "7", "raw_json": raw}]
|
|
112
118
|
assert page.output_json["count"] == 1
|
|
119
|
+
probe = await probe_credentials("quickbooks-online", auth=auth, options=options)
|
|
120
|
+
assert probe["ok"]
|
|
121
|
+
assert probe["metadata"]["evidence"] == {
|
|
122
|
+
"account": {
|
|
123
|
+
"provider_account_id": None,
|
|
124
|
+
"display_name": "Synthetic",
|
|
125
|
+
"metadata": {
|
|
126
|
+
"company_id": "1",
|
|
127
|
+
"configured_realm_id": "123456789",
|
|
128
|
+
"environment": "sandbox",
|
|
129
|
+
},
|
|
130
|
+
}
|
|
131
|
+
}
|
|
113
132
|
assert not http.is_closed
|
|
114
|
-
assert len(calls) ==
|
|
133
|
+
assert len(calls) == 3
|
|
115
134
|
|
|
116
135
|
|
|
117
136
|
async def main():
|
|
@@ -123,7 +142,7 @@ async def main():
|
|
|
123
142
|
for key, metadata in client.registry.connector_metadata.items()
|
|
124
143
|
if "auth_protocol" in metadata
|
|
125
144
|
}
|
|
126
|
-
assert len(providers) ==
|
|
145
|
+
assert len(providers) == 17 and "google-indexing" in providers
|
|
127
146
|
methods = 0
|
|
128
147
|
for key, metadata in providers.items():
|
|
129
148
|
assert root.joinpath("connectors", key.replace("-", "_"), "docs", "auth.md").is_file()
|
|
@@ -148,6 +167,8 @@ async def main():
|
|
|
148
167
|
|
|
149
168
|
grant_calls = []
|
|
150
169
|
for provider in providers:
|
|
170
|
+
if provider == "google-indexing":
|
|
171
|
+
continue # Its only grant is exercised with a generated JSON key below.
|
|
151
172
|
application_only = provider in {"reddit", "taboola"}
|
|
152
173
|
grant = "client_credentials" if application_only else "authorization_code"
|
|
153
174
|
method = "client_credentials" if application_only else "oauth2_authorization_code"
|
|
@@ -200,7 +221,6 @@ async def main():
|
|
|
200
221
|
assert result.access_token == ACCESS and result.scopes_present
|
|
201
222
|
assert ACCESS not in repr(result) and SECRET not in repr(auth)
|
|
202
223
|
assert len(grant_calls) == 17 # Meta explicitly performs its second exchange.
|
|
203
|
-
await quickbooks_reads(client)
|
|
204
224
|
|
|
205
225
|
async with httpx.AsyncClient(
|
|
206
226
|
transport=httpx.MockTransport(
|
|
@@ -254,6 +274,30 @@ async def main():
|
|
|
254
274
|
http=http,
|
|
255
275
|
)
|
|
256
276
|
assert signed.access_token == ACCESS and not signed.scopes_present
|
|
277
|
+
|
|
278
|
+
def indexing_jwt_edge(request):
|
|
279
|
+
assert str(request.url) == "https://oauth2.googleapis.com/token"
|
|
280
|
+
body = parse_qs(request.content.decode())
|
|
281
|
+
assert body["grant_type"] == ["urn:ietf:params:oauth:grant-type:jwt-bearer"]
|
|
282
|
+
encoded = body["assertion"][0].split(".")[1]
|
|
283
|
+
claims = json.loads(base64.urlsafe_b64decode(encoded + "=" * (-len(encoded) % 4)))
|
|
284
|
+
assert claims["scope"] == "https://www.googleapis.com/auth/indexing"
|
|
285
|
+
assert claims["aud"] == "https://oauth2.googleapis.com/token"
|
|
286
|
+
assert "sub" not in claims
|
|
287
|
+
return httpx.Response(
|
|
288
|
+
200, json={"access_token": ACCESS, "expires_in": 3600, "token_type": "Bearer"}
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
async with httpx.AsyncClient(transport=httpx.MockTransport(indexing_jwt_edge)) as http:
|
|
292
|
+
indexing = await request_token(
|
|
293
|
+
"google-indexing",
|
|
294
|
+
auth=ConnectorAuth("service-account", {"service_account_json": key_json}),
|
|
295
|
+
grant_type="jwt_bearer",
|
|
296
|
+
http=http,
|
|
297
|
+
)
|
|
298
|
+
assert not http.is_closed
|
|
299
|
+
assert indexing.access_token == ACCESS and not indexing.scopes_present
|
|
300
|
+
assert indexing.token_type == "Bearer" and indexing.expires_in == 3600
|
|
257
301
|
try:
|
|
258
302
|
await request_token(
|
|
259
303
|
"taboola",
|
|
@@ -276,6 +320,7 @@ async def main():
|
|
|
276
320
|
|
|
277
321
|
auth_api.request_token = implicit_grant
|
|
278
322
|
oauth_protocol.request_token = implicit_grant
|
|
323
|
+
await quickbooks_reads(client)
|
|
279
324
|
client.describe("google-workspace")
|
|
280
325
|
config = project_probe_config(
|
|
281
326
|
"wordpress", {"site_url": "https://fixture.test", "account_ref": "private"}
|
|
@@ -363,12 +408,14 @@ async def main():
|
|
|
363
408
|
"refresh",
|
|
364
409
|
"client_credentials",
|
|
365
410
|
"delegated_jwt",
|
|
411
|
+
"indexing_jwt",
|
|
366
412
|
"probe",
|
|
367
413
|
"action",
|
|
368
414
|
"telegram",
|
|
369
415
|
"slack_v0",
|
|
370
416
|
"hubspot_v3",
|
|
371
417
|
"quickbooks_exact_reads",
|
|
418
|
+
"quickbooks_company_probe",
|
|
372
419
|
],
|
|
373
420
|
"network": "blocked; injected edges only",
|
|
374
421
|
"origins": origins,
|
{stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/packaging/test_grouped_layout.py
RENAMED
|
@@ -16,8 +16,8 @@ def test_auth_protocol_resources_have_integration_owners():
|
|
|
16
16
|
for key, metadata in registry.connector_metadata.items()
|
|
17
17
|
if "auth_protocol" in metadata
|
|
18
18
|
}
|
|
19
|
-
assert len(protocols) ==
|
|
20
|
-
assert "google-indexing"
|
|
19
|
+
assert len(protocols) == 17
|
|
20
|
+
assert "google-indexing" in protocols
|
|
21
21
|
for key, metadata in protocols.items():
|
|
22
22
|
document = json.loads(
|
|
23
23
|
root.joinpath("connectors", key.replace("-", "_"), "catalog.json").read_text()
|