stackos-connectors 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- stackos_connectors-0.1.0/.github/workflows/publish.yml +59 -0
- stackos_connectors-0.1.0/.gitignore +7 -0
- stackos_connectors-0.1.0/LICENSE +21 -0
- stackos_connectors-0.1.0/PKG-INFO +160 -0
- stackos_connectors-0.1.0/README.md +144 -0
- stackos_connectors-0.1.0/pyproject.toml +40 -0
- stackos_connectors-0.1.0/src/stackos_connectors/__init__.py +99 -0
- stackos_connectors-0.1.0/src/stackos_connectors/catalog/index.json +54 -0
- stackos_connectors-0.1.0/src/stackos_connectors/catalog/schema.json +80 -0
- stackos_connectors-0.1.0/src/stackos_connectors/catalog.py +160 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ahrefs/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ahrefs/actions.py +107 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ahrefs/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ahrefs/catalog.json +186 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ahrefs/integration.py +184 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aignc/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aignc/actions.py +82 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aignc/catalog.json +662 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aignc/contract.py +31 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aignc/docs/aignc.md +33 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aignc/integration.py +572 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/alibaba_wan/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/alibaba_wan/actions.py +85 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/alibaba_wan/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/alibaba_wan/catalog.json +221 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/alibaba_wan/integration.py +392 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/apollo/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/apollo/actions.py +213 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/apollo/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/apollo/catalog.json +313 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/apollo/docs/protocol.md +19 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aws_s3/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aws_s3/actions.py +3082 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aws_s3/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aws_s3/catalog.json +1048 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aws_s3/contract.py +89 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aws_s3/docs/s3.md +49 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/aws_s3/integration.py +369 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/byteplus_seedance/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/byteplus_seedance/actions.py +85 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/byteplus_seedance/catalog.json +246 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/byteplus_seedream/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/byteplus_seedream/actions.py +88 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/byteplus_seedream/catalog.json +292 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/clay/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/clay/actions.py +100 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/clay/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/clay/catalog.json +139 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/clay/docs/protocol.md +16 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/cloudflare/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/cloudflare/actions.py +705 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/cloudflare/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/cloudflare/catalog.json +6381 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/cloudflare/docs/cloudflare-dns.md +37 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/cloudflare/integration.py +397 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/dataforseo/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/dataforseo/actions.py +147 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/dataforseo/assets/icon.jpeg +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/dataforseo/catalog.json +1275 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/dataforseo/integration.py +252 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/firecrawl/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/firecrawl/actions.py +100 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/firecrawl/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/firecrawl/catalog.json +189 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/firecrawl/integration.py +168 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ftp/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ftp/actions.py +1190 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ftp/assets/icon.svg +7 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ftp/catalog.json +1091 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ftp/docs/ftp.md +40 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ftp/integration.py +271 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ftp/remote_tree.py +342 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ghost/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ghost/actions.py +80 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ghost/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ghost/catalog.json +214 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ghost/integration.py +159 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_ads/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_ads/actions.py +279 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_ads/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_ads/catalog.json +797 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_ads/docs/protocol.md +22 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_analytics/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_analytics/actions.py +224 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_analytics/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_analytics/catalog.json +442 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_analytics/integration.py +112 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_gemini_image/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_gemini_image/actions.py +90 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_gemini_image/assets/icon.webp +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_gemini_image/catalog.json +275 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_gemini_image/integration.py +420 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_indexing/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_indexing/actions.py +148 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_indexing/catalog.json +224 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_indexing/docs/google-indexing.md +38 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_indexing/integration.py +261 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_search_console/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_search_console/actions.py +486 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_search_console/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_search_console/catalog.json +714 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_search_console/docs/google-search-console.md +37 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_search_console/integration.py +367 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_tag_manager/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_tag_manager/actions.py +241 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_tag_manager/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_tag_manager/catalog.json +477 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_tag_manager/integration.py +133 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_veo/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_veo/actions.py +85 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_veo/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_veo/catalog.json +211 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_veo/integration.py +337 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_workspace/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_workspace/actions.py +148 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_workspace/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_workspace/catalog.json +302 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/google_workspace/docs/protocol.md +19 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/http/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/http/actions.py +280 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/http/catalog.json +100 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/hubspot/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/hubspot/actions.py +144 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/hubspot/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/hubspot/catalog.json +4959 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/hubspot/contract.py +534 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/hubspot/docs/hubspot.md +41 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/hubspot/integration.py +209 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ideogram/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ideogram/actions.py +88 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ideogram/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ideogram/catalog.json +282 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/ideogram/integration.py +310 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/imap/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/imap/actions.py +1186 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/imap/assets/icon.svg +7 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/imap/catalog.json +520 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/imap/docs/protocol.md +19 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/imap/integration.py +300 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/jina/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/jina/actions.py +57 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/jina/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/jina/catalog.json +102 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/jina/integration.py +63 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/kling_video/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/kling_video/actions.py +86 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/kling_video/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/kling_video/catalog.json +232 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/kling_video/integration.py +413 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/actions.py +103 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/auth/viewer-organization.graphql +10 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/comments/create.graphql +25 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/comments/delete.graphql +6 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/comments/get.graphql +25 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/comments/list.graphql +45 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/comments/resolve.graphql +11 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/comments/unresolve.graphql +11 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/comments/update.graphql +14 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/cycles/get.graphql +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/cycles/list.graphql +37 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/get.graphql +15 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/list.graphql +35 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/create.graphql +21 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/delete.graphql +6 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/get.graphql +19 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/list.graphql +42 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/update.graphql +21 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/add-label.graphql +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/archive.graphql +11 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/create.graphql +27 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/get.graphql +51 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/list.graphql +71 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/remove-label.graphql +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/search.graphql +62 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/unarchive.graphql +11 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/issues/update.graphql +23 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/projects/get.graphql +18 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/projects/list.graphql +38 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/teams/get.graphql +12 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/teams/list.graphql +30 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/users/get.graphql +10 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/users/list.graphql +30 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/viewer/get.graphql +14 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/get.graphql +16 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/list.graphql +36 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/catalog.json +2794 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/contract.py +101 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/docs/linear.md +35 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/integration.py +518 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.json +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.metadata.json +18 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/linear/schemas/root-policy-2026-07-23.json +552 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/meta_ads/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/meta_ads/actions.py +357 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/meta_ads/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/meta_ads/catalog.json +977 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/microsoft_365/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/microsoft_365/actions.py +121 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/microsoft_365/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/microsoft_365/catalog.json +261 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/microsoft_365/docs/protocol.md +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openai_images/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openai_images/actions.py +85 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openai_images/assets/icon.webp +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openai_images/catalog.json +282 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openai_images/integration.py +327 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openrouter/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openrouter/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openrouter/catalog.json +114 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/openrouter/integration.py +69 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/outreach/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/outreach/actions.py +107 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/outreach/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/outreach/catalog.json +197 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/outreach/docs/protocol.md +18 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/pipedrive/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/pipedrive/actions.py +173 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/pipedrive/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/pipedrive/catalog.json +449 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/pipedrive/docs/protocol.md +22 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/pipedrive/integration.py +160 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reddit/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reddit/actions.py +85 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reddit/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reddit/catalog.json +173 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reddit/integration.py +117 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reve/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reve/actions.py +89 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reve/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reve/catalog.json +354 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/reve/integration.py +463 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesforce/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesforce/actions.py +173 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesforce/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesforce/catalog.json +490 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesforce/docs/protocol.md +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesloft/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesloft/actions.py +96 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesloft/assets/icon.jpeg +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesloft/catalog.json +239 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesloft/docs/protocol.md +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/salesloft/integration.py +119 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/serper/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/serper/actions.py +71 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/serper/assets/icon.svg +6 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/serper/catalog.json +124 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/serper/integration.py +83 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/actions.py +430 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/add-customer-tag.graphql +11 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/create-customer.graphql +24 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-lifetime-value.graphql +30 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-orders.graphql +27 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer.graphql +45 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/list-customers.graphql +29 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/remove-customer-tag.graphql +11 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/search-customers.graphql +29 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/customers/update-customer.graphql +24 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/adjust-inventory.graphql +25 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-by-sku.graphql +28 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-item.graphql +26 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-location-inventory.graphql +26 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-item-availability.graphql +40 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-levels.graphql +30 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-product-variant-inventory.graphql +20 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/set-inventory-level.graphql +25 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-note.graphql +13 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-tag.graphql +11 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/create-draft-order.graphql +67 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-by-name.graphql +91 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-fulfillment-status.graphql +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-timeline.graphql +15 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order.graphql +87 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-order-variant-quantities.graphql +18 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-orders.graphql +54 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/mark-order-paid.graphql +13 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/search-orders.graphql +54 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-note.graphql +13 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-tags.graphql +13 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-collection.graphql +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product-variant.graphql +20 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product.graphql +29 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-collection.graphql +41 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-by-handle.graphql +61 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-variant.graphql +31 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product.graphql +61 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-collections.graphql +24 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-product-variants.graphql +27 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-products.graphql +38 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/search-products.graphql +38 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-status.graphql +14 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-variant.graphql +20 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product.graphql +19 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/graphql/shopifyql.graphql +13 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/catalog.json +3178 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/docs/shopify.md +51 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/integration.py +228 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/shopify/payloads.py +592 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/sitemap/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/sitemap/actions.py +88 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/sitemap/catalog.json +72 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/sitemap/integration.py +324 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/actions.py +47 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/catalog.json +557 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/constants.py +14 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/docs/protocol.md +20 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/files.py +111 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/http.py +163 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/integration.py +87 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/payloads.py +38 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/results.py +30 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/slack_bot/validation.py +145 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/smtp/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/smtp/actions.py +324 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/smtp/assets/icon.svg +7 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/smtp/catalog.json +238 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/smtp/docs/protocol.md +13 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/smtp/integration.py +104 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/stripe/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/stripe/actions.py +265 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/stripe/assets/icon.jpeg +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/stripe/catalog.json +2315 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/stripe/contract.py +92 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/stripe/docs/stripe.md +58 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/stripe/integration.py +668 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/taboola/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/taboola/actions.py +286 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/taboola/assets/icon.svg +18 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/taboola/catalog.json +593 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/actions.py +291 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/catalog.json +2121 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/docs/protocol.md +20 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/payloads.py +278 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/schema.py +35 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/tdlib/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/tdlib/native.py +513 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/tdlib/proxy.py +347 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/telegram/tdlib/sessions.py +256 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/__init__.py +5 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/actions.py +220 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/assets/agent-api/catalog.json +53858 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/assets/agent-api/openapi.json +25942 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/assets/agent-api/stackos-tools.json +17122 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/assets.py +279 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/catalog.json +168 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/contract.py +8 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/docs/agent-api/README.md +17 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/docs/trackbooth.md +33 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/integration.py +202 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/schema.py +78 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/trackbooth/transport.py +107 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/wordpress/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/wordpress/actions.py +69 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/wordpress/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/wordpress/catalog.json +183 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/wordpress/integration.py +121 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/xai_imagine/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/xai_imagine/actions.py +89 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/xai_imagine/assets/icon.png +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/xai_imagine/catalog.json +402 -0
- stackos_connectors-0.1.0/src/stackos_connectors/connectors/xai_imagine/integration.py +420 -0
- stackos_connectors-0.1.0/src/stackos_connectors/contracts.py +177 -0
- stackos_connectors-0.1.0/src/stackos_connectors/errors.py +63 -0
- stackos_connectors-0.1.0/src/stackos_connectors/probe.py +26 -0
- stackos_connectors-0.1.0/src/stackos_connectors/py.typed +0 -0
- stackos_connectors-0.1.0/src/stackos_connectors/redaction.py +140 -0
- stackos_connectors-0.1.0/src/stackos_connectors/registry.py +419 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/base.py +380 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/byteplus/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/byteplus/ark.py +794 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/byteplus/media.py +178 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/google/__init__.py +1 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/google/batch.py +219 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/google/oauth.py +51 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/icons/integration.svg +8 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/media.py +263 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/provider_utils.py +350 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/rate_limit.py +72 -0
- stackos_connectors-0.1.0/src/stackos_connectors/shared/vendor_utils.py +182 -0
- stackos_connectors-0.1.0/src/stackos_connectors/validation.py +25 -0
- stackos_connectors-0.1.0/tests/business/conftest.py +11 -0
- stackos_connectors-0.1.0/tests/business/fixtures/wire-contracts.json +2847 -0
- stackos_connectors-0.1.0/tests/business/test_named_actions.py +483 -0
- stackos_connectors-0.1.0/tests/business/test_pipedrive_probes.py +172 -0
- stackos_connectors-0.1.0/tests/business/test_probe_boundary.py +84 -0
- stackos_connectors-0.1.0/tests/business/test_salesloft_probes.py +137 -0
- stackos_connectors-0.1.0/tests/catalog/test_catalog.py +248 -0
- stackos_connectors-0.1.0/tests/catalog/test_nested_resources.py +56 -0
- stackos_connectors-0.1.0/tests/catalog/test_presentation.py +143 -0
- stackos_connectors-0.1.0/tests/core/test_contract.py +243 -0
- stackos_connectors-0.1.0/tests/core/test_native_result_boundary.py +218 -0
- stackos_connectors-0.1.0/tests/core/test_nested_auth_redaction.py +76 -0
- stackos_connectors-0.1.0/tests/core/test_preflight_redaction.py +124 -0
- stackos_connectors-0.1.0/tests/core/test_public_key_facts.py +38 -0
- stackos_connectors-0.1.0/tests/core/test_runtime.py +161 -0
- stackos_connectors-0.1.0/tests/core/test_timeout_options.py +19 -0
- stackos_connectors-0.1.0/tests/core/test_validation_data.py +101 -0
- stackos_connectors-0.1.0/tests/core/test_validation_execution_outcome.py +57 -0
- stackos_connectors-0.1.0/tests/mail_slack/__init__.py +1 -0
- stackos_connectors-0.1.0/tests/mail_slack/test_native.py +637 -0
- stackos_connectors-0.1.0/tests/mail_slack/test_probes_catalog.py +186 -0
- stackos_connectors-0.1.0/tests/media/test_aignc_native.py +161 -0
- stackos_connectors-0.1.0/tests/media/test_generation_outcomes.py +263 -0
- stackos_connectors-0.1.0/tests/media/test_media_files.py +69 -0
- stackos_connectors-0.1.0/tests/media/test_named_media.py +488 -0
- stackos_connectors-0.1.0/tests/packaging/test_grouped_layout.py +134 -0
- stackos_connectors-0.1.0/tests/safe_refs/conftest.py +18 -0
- stackos_connectors-0.1.0/tests/safe_refs/test_linear_transport.py +351 -0
- stackos_connectors-0.1.0/tests/safe_refs/test_safe_refs_named_actions.py +395 -0
- stackos_connectors-0.1.0/tests/safe_refs/test_stripe_transport_transport.py +437 -0
- stackos_connectors-0.1.0/tests/telegram/__init__.py +1 -0
- stackos_connectors-0.1.0/tests/telegram/test_actions.py +249 -0
- stackos_connectors-0.1.0/tests/telegram/test_closure_outcomes.py +110 -0
- stackos_connectors-0.1.0/tests/telegram/test_native.py +174 -0
- stackos_connectors-0.1.0/tests/telegram/test_payloads.py +85 -0
- stackos_connectors-0.1.0/tests/telegram/test_proxy.py +149 -0
- stackos_connectors-0.1.0/tests/telegram/test_sessions.py +252 -0
- stackos_connectors-0.1.0/tests/trackbooth/__init__.py +1 -0
- stackos_connectors-0.1.0/tests/trackbooth/test_native.py +376 -0
- stackos_connectors-0.1.0/tests/web/__init__.py +0 -0
- stackos_connectors-0.1.0/tests/web/catalog_fixture.py +42 -0
- stackos_connectors-0.1.0/tests/web/conftest.py +23 -0
- stackos_connectors-0.1.0/tests/web/test_ahrefs.py +177 -0
- stackos_connectors-0.1.0/tests/web/test_boundary_timeout.py +88 -0
- stackos_connectors-0.1.0/tests/web/test_cloudflare.py +491 -0
- stackos_connectors-0.1.0/tests/web/test_dataforseo.py +153 -0
- stackos_connectors-0.1.0/tests/web/test_firecrawl.py +132 -0
- stackos_connectors-0.1.0/tests/web/test_ftp.py +173 -0
- stackos_connectors-0.1.0/tests/web/test_ftp_actions.py +650 -0
- stackos_connectors-0.1.0/tests/web/test_google_analytics.py +83 -0
- stackos_connectors-0.1.0/tests/web/test_google_indexing.py +130 -0
- stackos_connectors-0.1.0/tests/web/test_google_indexing_batch.py +208 -0
- stackos_connectors-0.1.0/tests/web/test_google_search_console.py +209 -0
- stackos_connectors-0.1.0/tests/web/test_google_search_console_batch.py +302 -0
- stackos_connectors-0.1.0/tests/web/test_google_tag_manager.py +126 -0
- stackos_connectors-0.1.0/tests/web/test_jina_reader.py +40 -0
- stackos_connectors-0.1.0/tests/web/test_named_clients.py +260 -0
- stackos_connectors-0.1.0/tests/web/test_native_boundary.py +127 -0
- stackos_connectors-0.1.0/tests/web/test_openrouter.py +52 -0
- stackos_connectors-0.1.0/tests/web/test_reddit.py +51 -0
- stackos_connectors-0.1.0/tests/web/test_s3.py +289 -0
- stackos_connectors-0.1.0/tests/web/test_s3_actions.py +1849 -0
- stackos_connectors-0.1.0/tests/web/test_serper.py +62 -0
- stackos_connectors-0.1.0/tests/web/test_shopify.py +64 -0
- stackos_connectors-0.1.0/tests/web/test_sitemap.py +161 -0
- stackos_connectors-0.1.0/tests/web/test_transport_defaults.py +65 -0
- stackos_connectors-0.1.0/tests/web/test_wordpress_ghost.py +132 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: pypi-publish
|
|
11
|
+
cancel-in-progress: false
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build:
|
|
15
|
+
if: github.ref == 'refs/heads/main'
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- name: Check out the selected commit
|
|
19
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
20
|
+
with:
|
|
21
|
+
ref: ${{ github.sha }}
|
|
22
|
+
persist-credentials: false
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
25
|
+
with:
|
|
26
|
+
python-version: '3.12'
|
|
27
|
+
- name: Install build tools
|
|
28
|
+
run: python -m pip install --upgrade build twine
|
|
29
|
+
- name: Build wheel and source distribution
|
|
30
|
+
run: python -m build
|
|
31
|
+
- name: Check distribution metadata
|
|
32
|
+
run: python -m twine check --strict dist/*
|
|
33
|
+
- name: Save distributions
|
|
34
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
35
|
+
with:
|
|
36
|
+
name: python-distributions
|
|
37
|
+
path: dist/
|
|
38
|
+
if-no-files-found: error
|
|
39
|
+
|
|
40
|
+
publish:
|
|
41
|
+
needs: build
|
|
42
|
+
if: github.ref == 'refs/heads/main'
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
environment:
|
|
45
|
+
name: pypi
|
|
46
|
+
url: https://pypi.org/p/stackos-connectors/
|
|
47
|
+
permissions:
|
|
48
|
+
contents: read
|
|
49
|
+
id-token: write
|
|
50
|
+
steps:
|
|
51
|
+
- name: Download the built distributions
|
|
52
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
53
|
+
with:
|
|
54
|
+
name: python-distributions
|
|
55
|
+
path: dist/
|
|
56
|
+
- name: Publish distributions to PyPI
|
|
57
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
58
|
+
with:
|
|
59
|
+
packages-dir: dist/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 StackOS contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: stackos-connectors
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Named provider connectors with plain data and caller-owned authentication.
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: boto3<1.44,>=1.43.51
|
|
9
|
+
Requires-Dist: botocore<1.44,>=1.43.51
|
|
10
|
+
Requires-Dist: cryptography>=43
|
|
11
|
+
Requires-Dist: httpx>=0.27
|
|
12
|
+
Requires-Dist: jsonschema>=4.23
|
|
13
|
+
Requires-Dist: pydantic>=2.6
|
|
14
|
+
Requires-Dist: s3transfer<0.20,>=0.19.1
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
|
|
17
|
+
# StackOS Connectors
|
|
18
|
+
|
|
19
|
+
A Python library of named provider connectors. A caller supplies a connector,
|
|
20
|
+
action, input data and resolved authentication. The library maps that action to
|
|
21
|
+
the provider protocol and returns provider output, metadata and file descriptors.
|
|
22
|
+
|
|
23
|
+
The consumer owns credential storage and refresh, authorization, persistent state,
|
|
24
|
+
workflow decisions and audit. Provider implementations use plain contracts and
|
|
25
|
+
can accept caller-owned HTTP clients, rate buckets and native protocol sessions.
|
|
26
|
+
|
|
27
|
+
Each integration is grouped under `src/stackos_connectors/connectors/`:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
connectors/<provider>/
|
|
31
|
+
actions.py # named action mapping
|
|
32
|
+
integration.py # provider protocol client, when separate
|
|
33
|
+
catalog.json # descriptions, schemas, auth methods and fixed bindings
|
|
34
|
+
schemas/ # provider-specific schema resources, when needed
|
|
35
|
+
assets/ # fixed GraphQL documents and other provider resources
|
|
36
|
+
docs/ # provider reference Markdown
|
|
37
|
+
shared/ # common transport, payload and protocol helpers
|
|
38
|
+
shared/google/ # Google OAuth and batch protocol helpers
|
|
39
|
+
catalog/ # common catalog schema and default resource index
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Folder names use Python identifiers, such as `aws_s3`; public connector keys
|
|
43
|
+
remain unchanged, such as `aws-s3`. Provider-only helper modules live beside
|
|
44
|
+
their actions. The root package contains the public contracts and execution API.
|
|
45
|
+
|
|
46
|
+
The default client loads the bundled connector catalogs. Use `list_connectors`
|
|
47
|
+
and `describe` to discover the installed actions and their input/auth schemas.
|
|
48
|
+
Generic HTTP accepts explicitly registered declarations; OpenRouter currently
|
|
49
|
+
provides a credential probe without a text-generation action.
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
from stackos_connectors import ConnectorAuth, get_default_client
|
|
53
|
+
|
|
54
|
+
client = get_default_client()
|
|
55
|
+
result = await client.execute(
|
|
56
|
+
connector="serper",
|
|
57
|
+
action="serper.search",
|
|
58
|
+
data={"query": "example search"},
|
|
59
|
+
auth=ConnectorAuth(method="api_key", fields={"api_key": resolved_api_key}),
|
|
60
|
+
)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`describe` supplies provider and action names, descriptions, native input/output
|
|
64
|
+
schemas, setup information and execution auth requirements. Auth method `setup`
|
|
65
|
+
describes credential acquisition; `fields_schema` and `config_schema` define the
|
|
66
|
+
resolved auth accepted for execution. `validate_data` checks input without resolving
|
|
67
|
+
credentials. `validate`, `estimate_cost` and `execute` also check the selected auth
|
|
68
|
+
method. Dynamic actions must be explicitly registered on a scoped client before
|
|
69
|
+
execution; existing names cannot be replaced.
|
|
70
|
+
|
|
71
|
+
`CallOptions.timeout=None` preserves each provider's default. A numeric timeout
|
|
72
|
+
overrides that default. A supplied HTTP client remains caller-owned.
|
|
73
|
+
|
|
74
|
+
For file-producing actions, pass `CallOptions(output_dir=Path(...))` and consume
|
|
75
|
+
the plain descriptors in `result.files`. The library does not create application
|
|
76
|
+
artifacts or public download URLs. Telegram actions require an already authorized
|
|
77
|
+
session through `CallOptions(native_session=session)`; the caller owns account
|
|
78
|
+
lifecycle, the TDLib binary, receipt persistence and session shutdown.
|
|
79
|
+
|
|
80
|
+
For a restricted catalog, construct `ConnectorClient(registry=load_registry(...))`
|
|
81
|
+
using `stackos_connectors.catalog.load_registry` and the provider-local resource
|
|
82
|
+
paths above. Register custom HTTP or Trackbooth declarations on that scoped client
|
|
83
|
+
before execution; request data cannot override a declaration's provider or route.
|
|
84
|
+
|
|
85
|
+
`ConnectorResult.output_json` contains native response data for in-process use,
|
|
86
|
+
including signed download URLs and pagination tokens. Exact resolved credential
|
|
87
|
+
values are scrubbed from that data. The consumer must project or redact it before
|
|
88
|
+
display, audit or persistent storage. Errors, progress, metadata and file
|
|
89
|
+
descriptors receive full key and text redaction. Results hide response data in
|
|
90
|
+
their default representation.
|
|
91
|
+
|
|
92
|
+
Provider protocol notes and source links live in each connector's `docs/`
|
|
93
|
+
directory. They cover authentication transport, requests, pagination, response
|
|
94
|
+
meaning and error handling. Use the executable catalog and `describe` for the
|
|
95
|
+
installed action contract.
|
|
96
|
+
|
|
97
|
+
Existing integration icons are bundled at `connectors/<provider>/assets/icon.*`.
|
|
98
|
+
Each catalog's `icon` object contains a package-relative `path`, `media_type` and
|
|
99
|
+
`kind`. Actions inherit the integration icon unless an action declares its own.
|
|
100
|
+
Kinds preserve the source presentation: `icon`, `wordmark`, `wordmark-dark` or
|
|
101
|
+
`wordmark-inverse`. Missing logos use the neutral `fallback` at
|
|
102
|
+
`shared/icons/integration.svg`. Standard package resources read the bytes without
|
|
103
|
+
a source checkout:
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from importlib.resources import files
|
|
107
|
+
|
|
108
|
+
description = client.describe("serper", "serper.search")
|
|
109
|
+
icon = description["actions"][0]["icon"]
|
|
110
|
+
icon_bytes = files("stackos_connectors").joinpath(*icon["path"].split("/")).read_bytes()
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Installation
|
|
114
|
+
|
|
115
|
+
Python 3.12 or newer is required. Source:
|
|
116
|
+
[flowmonkeyio/StackOSConnectors](https://github.com/flowmonkeyio/StackOSConnectors).
|
|
117
|
+
|
|
118
|
+
Published releases can be installed with:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
python -m pip install stackos-connectors==0.1.0
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Or add `stackos-connectors==0.1.0` to your Python dependency requirements.
|
|
125
|
+
|
|
126
|
+
Install from a local checkout with `pip install /path/to/StackOSConnectors`, or
|
|
127
|
+
build a wheel with `python -m build --wheel` and install that wheel. Runtime use
|
|
128
|
+
needs only the installed package and its declared dependencies.
|
|
129
|
+
|
|
130
|
+
## Publishing
|
|
131
|
+
|
|
132
|
+
The manual [publish workflow](.github/workflows/publish.yml) uses PyPI Trusted
|
|
133
|
+
Publishing through GitHub OIDC. It does not store a PyPI API token. Pushing a
|
|
134
|
+
commit does not publish a release.
|
|
135
|
+
|
|
136
|
+
Before running it, configure the GitHub `pypi` environment and a PyPI GitHub
|
|
137
|
+
trusted publisher with these exact values:
|
|
138
|
+
|
|
139
|
+
| Field | Value |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| PyPI project name | `stackos-connectors` |
|
|
142
|
+
| GitHub owner | `flowmonkeyio` |
|
|
143
|
+
| Repository | `StackOSConnectors` |
|
|
144
|
+
| Workflow filename | `publish.yml` |
|
|
145
|
+
| Environment | `pypi` |
|
|
146
|
+
|
|
147
|
+
Use a pending publisher for the first release. See the official
|
|
148
|
+
[PyPI trusted publisher setup](https://docs.pypi.org/trusted-publishers/adding-a-publisher/).
|
|
149
|
+
|
|
150
|
+
After configuration and release review, open **Actions → Publish to PyPI → Run
|
|
151
|
+
workflow** and select `main`. The build job checks out the selected commit,
|
|
152
|
+
builds the wheel and source distribution on Python 3.12, checks their metadata,
|
|
153
|
+
and uploads them as one workflow artifact. The separate publish job downloads
|
|
154
|
+
that artifact and requests the OIDC token inside the `pypi` environment.
|
|
155
|
+
Runs selected on other branches do not build or publish. Only the publish job
|
|
156
|
+
has `id-token: write` permission.
|
|
157
|
+
|
|
158
|
+
The workflow does not rerun the connector test suite; run the tests and review
|
|
159
|
+
the intended release commit before dispatch. A version already uploaded to
|
|
160
|
+
PyPI cannot be replaced; change the package version for a later release.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# StackOS Connectors
|
|
2
|
+
|
|
3
|
+
A Python library of named provider connectors. A caller supplies a connector,
|
|
4
|
+
action, input data and resolved authentication. The library maps that action to
|
|
5
|
+
the provider protocol and returns provider output, metadata and file descriptors.
|
|
6
|
+
|
|
7
|
+
The consumer owns credential storage and refresh, authorization, persistent state,
|
|
8
|
+
workflow decisions and audit. Provider implementations use plain contracts and
|
|
9
|
+
can accept caller-owned HTTP clients, rate buckets and native protocol sessions.
|
|
10
|
+
|
|
11
|
+
Each integration is grouped under `src/stackos_connectors/connectors/`:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
connectors/<provider>/
|
|
15
|
+
actions.py # named action mapping
|
|
16
|
+
integration.py # provider protocol client, when separate
|
|
17
|
+
catalog.json # descriptions, schemas, auth methods and fixed bindings
|
|
18
|
+
schemas/ # provider-specific schema resources, when needed
|
|
19
|
+
assets/ # fixed GraphQL documents and other provider resources
|
|
20
|
+
docs/ # provider reference Markdown
|
|
21
|
+
shared/ # common transport, payload and protocol helpers
|
|
22
|
+
shared/google/ # Google OAuth and batch protocol helpers
|
|
23
|
+
catalog/ # common catalog schema and default resource index
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Folder names use Python identifiers, such as `aws_s3`; public connector keys
|
|
27
|
+
remain unchanged, such as `aws-s3`. Provider-only helper modules live beside
|
|
28
|
+
their actions. The root package contains the public contracts and execution API.
|
|
29
|
+
|
|
30
|
+
The default client loads the bundled connector catalogs. Use `list_connectors`
|
|
31
|
+
and `describe` to discover the installed actions and their input/auth schemas.
|
|
32
|
+
Generic HTTP accepts explicitly registered declarations; OpenRouter currently
|
|
33
|
+
provides a credential probe without a text-generation action.
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from stackos_connectors import ConnectorAuth, get_default_client
|
|
37
|
+
|
|
38
|
+
client = get_default_client()
|
|
39
|
+
result = await client.execute(
|
|
40
|
+
connector="serper",
|
|
41
|
+
action="serper.search",
|
|
42
|
+
data={"query": "example search"},
|
|
43
|
+
auth=ConnectorAuth(method="api_key", fields={"api_key": resolved_api_key}),
|
|
44
|
+
)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`describe` supplies provider and action names, descriptions, native input/output
|
|
48
|
+
schemas, setup information and execution auth requirements. Auth method `setup`
|
|
49
|
+
describes credential acquisition; `fields_schema` and `config_schema` define the
|
|
50
|
+
resolved auth accepted for execution. `validate_data` checks input without resolving
|
|
51
|
+
credentials. `validate`, `estimate_cost` and `execute` also check the selected auth
|
|
52
|
+
method. Dynamic actions must be explicitly registered on a scoped client before
|
|
53
|
+
execution; existing names cannot be replaced.
|
|
54
|
+
|
|
55
|
+
`CallOptions.timeout=None` preserves each provider's default. A numeric timeout
|
|
56
|
+
overrides that default. A supplied HTTP client remains caller-owned.
|
|
57
|
+
|
|
58
|
+
For file-producing actions, pass `CallOptions(output_dir=Path(...))` and consume
|
|
59
|
+
the plain descriptors in `result.files`. The library does not create application
|
|
60
|
+
artifacts or public download URLs. Telegram actions require an already authorized
|
|
61
|
+
session through `CallOptions(native_session=session)`; the caller owns account
|
|
62
|
+
lifecycle, the TDLib binary, receipt persistence and session shutdown.
|
|
63
|
+
|
|
64
|
+
For a restricted catalog, construct `ConnectorClient(registry=load_registry(...))`
|
|
65
|
+
using `stackos_connectors.catalog.load_registry` and the provider-local resource
|
|
66
|
+
paths above. Register custom HTTP or Trackbooth declarations on that scoped client
|
|
67
|
+
before execution; request data cannot override a declaration's provider or route.
|
|
68
|
+
|
|
69
|
+
`ConnectorResult.output_json` contains native response data for in-process use,
|
|
70
|
+
including signed download URLs and pagination tokens. Exact resolved credential
|
|
71
|
+
values are scrubbed from that data. The consumer must project or redact it before
|
|
72
|
+
display, audit or persistent storage. Errors, progress, metadata and file
|
|
73
|
+
descriptors receive full key and text redaction. Results hide response data in
|
|
74
|
+
their default representation.
|
|
75
|
+
|
|
76
|
+
Provider protocol notes and source links live in each connector's `docs/`
|
|
77
|
+
directory. They cover authentication transport, requests, pagination, response
|
|
78
|
+
meaning and error handling. Use the executable catalog and `describe` for the
|
|
79
|
+
installed action contract.
|
|
80
|
+
|
|
81
|
+
Existing integration icons are bundled at `connectors/<provider>/assets/icon.*`.
|
|
82
|
+
Each catalog's `icon` object contains a package-relative `path`, `media_type` and
|
|
83
|
+
`kind`. Actions inherit the integration icon unless an action declares its own.
|
|
84
|
+
Kinds preserve the source presentation: `icon`, `wordmark`, `wordmark-dark` or
|
|
85
|
+
`wordmark-inverse`. Missing logos use the neutral `fallback` at
|
|
86
|
+
`shared/icons/integration.svg`. Standard package resources read the bytes without
|
|
87
|
+
a source checkout:
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
from importlib.resources import files
|
|
91
|
+
|
|
92
|
+
description = client.describe("serper", "serper.search")
|
|
93
|
+
icon = description["actions"][0]["icon"]
|
|
94
|
+
icon_bytes = files("stackos_connectors").joinpath(*icon["path"].split("/")).read_bytes()
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Installation
|
|
98
|
+
|
|
99
|
+
Python 3.12 or newer is required. Source:
|
|
100
|
+
[flowmonkeyio/StackOSConnectors](https://github.com/flowmonkeyio/StackOSConnectors).
|
|
101
|
+
|
|
102
|
+
Published releases can be installed with:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
python -m pip install stackos-connectors==0.1.0
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Or add `stackos-connectors==0.1.0` to your Python dependency requirements.
|
|
109
|
+
|
|
110
|
+
Install from a local checkout with `pip install /path/to/StackOSConnectors`, or
|
|
111
|
+
build a wheel with `python -m build --wheel` and install that wheel. Runtime use
|
|
112
|
+
needs only the installed package and its declared dependencies.
|
|
113
|
+
|
|
114
|
+
## Publishing
|
|
115
|
+
|
|
116
|
+
The manual [publish workflow](.github/workflows/publish.yml) uses PyPI Trusted
|
|
117
|
+
Publishing through GitHub OIDC. It does not store a PyPI API token. Pushing a
|
|
118
|
+
commit does not publish a release.
|
|
119
|
+
|
|
120
|
+
Before running it, configure the GitHub `pypi` environment and a PyPI GitHub
|
|
121
|
+
trusted publisher with these exact values:
|
|
122
|
+
|
|
123
|
+
| Field | Value |
|
|
124
|
+
| --- | --- |
|
|
125
|
+
| PyPI project name | `stackos-connectors` |
|
|
126
|
+
| GitHub owner | `flowmonkeyio` |
|
|
127
|
+
| Repository | `StackOSConnectors` |
|
|
128
|
+
| Workflow filename | `publish.yml` |
|
|
129
|
+
| Environment | `pypi` |
|
|
130
|
+
|
|
131
|
+
Use a pending publisher for the first release. See the official
|
|
132
|
+
[PyPI trusted publisher setup](https://docs.pypi.org/trusted-publishers/adding-a-publisher/).
|
|
133
|
+
|
|
134
|
+
After configuration and release review, open **Actions → Publish to PyPI → Run
|
|
135
|
+
workflow** and select `main`. The build job checks out the selected commit,
|
|
136
|
+
builds the wheel and source distribution on Python 3.12, checks their metadata,
|
|
137
|
+
and uploads them as one workflow artifact. The separate publish job downloads
|
|
138
|
+
that artifact and requests the OIDC token inside the `pypi` environment.
|
|
139
|
+
Runs selected on other branches do not build or publish. Only the publish job
|
|
140
|
+
has `id-token: write` permission.
|
|
141
|
+
|
|
142
|
+
The workflow does not rerun the connector test suite; run the tests and review
|
|
143
|
+
the intended release commit before dispatch. A version already uploaded to
|
|
144
|
+
PyPI cannot be replaced; change the package version for a later release.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "stackos-connectors"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Named provider connectors with plain data and caller-owned authentication."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
dependencies = [
|
|
13
|
+
"httpx>=0.27",
|
|
14
|
+
"jsonschema>=4.23",
|
|
15
|
+
"pydantic>=2.6",
|
|
16
|
+
"cryptography>=43",
|
|
17
|
+
"boto3>=1.43.51,<1.44",
|
|
18
|
+
"botocore>=1.43.51,<1.44",
|
|
19
|
+
"s3transfer>=0.19.1,<0.20",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
[dependency-groups]
|
|
23
|
+
dev = ["pytest>=8", "pytest-asyncio>=0.24", "pytest-httpx>=0.34", "ruff>=0.8", "build>=1.2"]
|
|
24
|
+
|
|
25
|
+
[tool.hatch.build.targets.wheel]
|
|
26
|
+
packages = ["src/stackos_connectors"]
|
|
27
|
+
|
|
28
|
+
[tool.pytest.ini_options]
|
|
29
|
+
testpaths = ["tests"]
|
|
30
|
+
asyncio_mode = "auto"
|
|
31
|
+
|
|
32
|
+
[tool.ruff]
|
|
33
|
+
target-version = "py312"
|
|
34
|
+
line-length = 100
|
|
35
|
+
|
|
36
|
+
[tool.ruff.lint]
|
|
37
|
+
select = ["E", "F", "W", "I", "B", "UP", "SIM", "RUF"]
|
|
38
|
+
|
|
39
|
+
[tool.ruff.lint.per-file-ignores]
|
|
40
|
+
"tests/**" = ["B011"]
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Execute a named connector action using plain data and resolved authentication."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from functools import lru_cache
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .contracts import (
|
|
8
|
+
ActionDefinition,
|
|
9
|
+
AuthMethodDefinition,
|
|
10
|
+
CallOptions,
|
|
11
|
+
Connector,
|
|
12
|
+
ConnectorAuth,
|
|
13
|
+
ConnectorFile,
|
|
14
|
+
ConnectorRequest,
|
|
15
|
+
ConnectorResult,
|
|
16
|
+
NativeSession,
|
|
17
|
+
RateLimiter,
|
|
18
|
+
ValidationIssue,
|
|
19
|
+
)
|
|
20
|
+
from .errors import ConnectorError, IntegrationDownError, RateLimitedError, ValidationError
|
|
21
|
+
from .registry import ConnectorClient, ConnectorRegistry
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@lru_cache(maxsize=1)
|
|
25
|
+
def get_default_client() -> ConnectorClient:
|
|
26
|
+
"""Load reviewed builtin descriptions on first use, without provider imports."""
|
|
27
|
+
from .catalog import default_registry
|
|
28
|
+
|
|
29
|
+
return ConnectorClient(registry=default_registry())
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
async def execute(
|
|
33
|
+
connector: str,
|
|
34
|
+
action: str,
|
|
35
|
+
data: Mapping[str, Any],
|
|
36
|
+
auth: ConnectorAuth | Mapping[str, Any] | None = None,
|
|
37
|
+
options: CallOptions | None = None,
|
|
38
|
+
) -> ConnectorResult:
|
|
39
|
+
return await get_default_client().execute(connector, action, data, auth, options)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def validate(
|
|
43
|
+
connector: str,
|
|
44
|
+
action: str,
|
|
45
|
+
data: Mapping[str, Any],
|
|
46
|
+
auth: ConnectorAuth | Mapping[str, Any] | None = None,
|
|
47
|
+
options: CallOptions | None = None,
|
|
48
|
+
) -> list[ValidationIssue]:
|
|
49
|
+
return get_default_client().validate(connector, action, data, auth, options)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def validate_data(connector: str, action: str, data: Mapping[str, Any]) -> list[ValidationIssue]:
|
|
53
|
+
return get_default_client().validate_data(connector, action, data)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def estimate_cost(
|
|
57
|
+
connector: str,
|
|
58
|
+
action: str,
|
|
59
|
+
data: Mapping[str, Any],
|
|
60
|
+
auth: ConnectorAuth | Mapping[str, Any] | None = None,
|
|
61
|
+
options: CallOptions | None = None,
|
|
62
|
+
) -> int:
|
|
63
|
+
return get_default_client().estimate_cost(connector, action, data, auth, options)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def list_connectors() -> list[str]:
|
|
67
|
+
return get_default_client().list_connectors()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def describe(connector: str, action: str | None = None) -> dict[str, Any]:
|
|
71
|
+
return get_default_client().describe(connector, action)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
__all__ = [
|
|
75
|
+
"ActionDefinition",
|
|
76
|
+
"AuthMethodDefinition",
|
|
77
|
+
"CallOptions",
|
|
78
|
+
"Connector",
|
|
79
|
+
"ConnectorAuth",
|
|
80
|
+
"ConnectorClient",
|
|
81
|
+
"ConnectorError",
|
|
82
|
+
"ConnectorFile",
|
|
83
|
+
"ConnectorRegistry",
|
|
84
|
+
"ConnectorRequest",
|
|
85
|
+
"ConnectorResult",
|
|
86
|
+
"IntegrationDownError",
|
|
87
|
+
"NativeSession",
|
|
88
|
+
"RateLimitedError",
|
|
89
|
+
"RateLimiter",
|
|
90
|
+
"ValidationError",
|
|
91
|
+
"ValidationIssue",
|
|
92
|
+
"describe",
|
|
93
|
+
"estimate_cost",
|
|
94
|
+
"execute",
|
|
95
|
+
"get_default_client",
|
|
96
|
+
"list_connectors",
|
|
97
|
+
"validate",
|
|
98
|
+
"validate_data",
|
|
99
|
+
]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "stackos.connectors.index.v1",
|
|
3
|
+
"connectors": [
|
|
4
|
+
"connectors/ahrefs/catalog.json",
|
|
5
|
+
"connectors/aignc/catalog.json",
|
|
6
|
+
"connectors/alibaba_wan/catalog.json",
|
|
7
|
+
"connectors/apollo/catalog.json",
|
|
8
|
+
"connectors/aws_s3/catalog.json",
|
|
9
|
+
"connectors/byteplus_seedance/catalog.json",
|
|
10
|
+
"connectors/byteplus_seedream/catalog.json",
|
|
11
|
+
"connectors/clay/catalog.json",
|
|
12
|
+
"connectors/cloudflare/catalog.json",
|
|
13
|
+
"connectors/dataforseo/catalog.json",
|
|
14
|
+
"connectors/firecrawl/catalog.json",
|
|
15
|
+
"connectors/ftp/catalog.json",
|
|
16
|
+
"connectors/ghost/catalog.json",
|
|
17
|
+
"connectors/google_ads/catalog.json",
|
|
18
|
+
"connectors/google_analytics/catalog.json",
|
|
19
|
+
"connectors/google_gemini_image/catalog.json",
|
|
20
|
+
"connectors/google_indexing/catalog.json",
|
|
21
|
+
"connectors/google_search_console/catalog.json",
|
|
22
|
+
"connectors/google_tag_manager/catalog.json",
|
|
23
|
+
"connectors/google_veo/catalog.json",
|
|
24
|
+
"connectors/google_workspace/catalog.json",
|
|
25
|
+
"connectors/http/catalog.json",
|
|
26
|
+
"connectors/hubspot/catalog.json",
|
|
27
|
+
"connectors/ideogram/catalog.json",
|
|
28
|
+
"connectors/imap/catalog.json",
|
|
29
|
+
"connectors/jina/catalog.json",
|
|
30
|
+
"connectors/kling_video/catalog.json",
|
|
31
|
+
"connectors/linear/catalog.json",
|
|
32
|
+
"connectors/meta_ads/catalog.json",
|
|
33
|
+
"connectors/microsoft_365/catalog.json",
|
|
34
|
+
"connectors/openai_images/catalog.json",
|
|
35
|
+
"connectors/openrouter/catalog.json",
|
|
36
|
+
"connectors/outreach/catalog.json",
|
|
37
|
+
"connectors/pipedrive/catalog.json",
|
|
38
|
+
"connectors/reddit/catalog.json",
|
|
39
|
+
"connectors/reve/catalog.json",
|
|
40
|
+
"connectors/salesforce/catalog.json",
|
|
41
|
+
"connectors/salesloft/catalog.json",
|
|
42
|
+
"connectors/serper/catalog.json",
|
|
43
|
+
"connectors/shopify/catalog.json",
|
|
44
|
+
"connectors/sitemap/catalog.json",
|
|
45
|
+
"connectors/slack_bot/catalog.json",
|
|
46
|
+
"connectors/smtp/catalog.json",
|
|
47
|
+
"connectors/stripe/catalog.json",
|
|
48
|
+
"connectors/taboola/catalog.json",
|
|
49
|
+
"connectors/telegram/catalog.json",
|
|
50
|
+
"connectors/trackbooth/catalog.json",
|
|
51
|
+
"connectors/wordpress/catalog.json",
|
|
52
|
+
"connectors/xai_imagine/catalog.json"
|
|
53
|
+
]
|
|
54
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$defs": {
|
|
4
|
+
"icon": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["path", "media_type", "kind"],
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"path": {"type": "string", "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9_-]*/)*[A-Za-z0-9_][A-Za-z0-9_-]*\\.(?:svg|png|jpg|jpeg|webp)$", "not": {"pattern": "[\\r\\n]"}},
|
|
10
|
+
"media_type": {"enum": ["image/svg+xml", "image/png", "image/jpeg", "image/webp"]},
|
|
11
|
+
"kind": {"enum": ["icon", "wordmark", "wordmark-dark", "wordmark-inverse", "fallback"]}
|
|
12
|
+
},
|
|
13
|
+
"allOf": [
|
|
14
|
+
{"if": {"properties": {"path": {"pattern": "\\.svg$"}}}, "then": {"properties": {"media_type": {"const": "image/svg+xml"}}}},
|
|
15
|
+
{"if": {"properties": {"path": {"pattern": "\\.png$"}}}, "then": {"properties": {"media_type": {"const": "image/png"}}}},
|
|
16
|
+
{"if": {"properties": {"path": {"pattern": "\\.jpe?g$"}}}, "then": {"properties": {"media_type": {"const": "image/jpeg"}}}},
|
|
17
|
+
{"if": {"properties": {"path": {"pattern": "\\.webp$"}}}, "then": {"properties": {"media_type": {"const": "image/webp"}}}}
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"presentation_metadata": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {"icon": {"$ref": "#/$defs/icon"}}
|
|
23
|
+
},
|
|
24
|
+
"index": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"required": ["schema_version", "connectors"],
|
|
27
|
+
"additionalProperties": false,
|
|
28
|
+
"properties": {
|
|
29
|
+
"schema_version": {"const": "stackos.connectors.index.v1"},
|
|
30
|
+
"connectors": {"type": "array", "uniqueItems": true, "items": {"type": "string", "pattern": "^(?:[a-z0-9][a-z0-9_-]*/)*[a-z0-9][a-z0-9_-]*\\.json$"}}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"auth_method": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"required": ["key", "fields_schema"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"key": {"type": "string", "minLength": 1},
|
|
38
|
+
"description": {"type": "string"},
|
|
39
|
+
"payload_format": {"enum": ["raw", "json", "none"]},
|
|
40
|
+
"payload_field": {"type": "string", "minLength": 1},
|
|
41
|
+
"fields_schema": {"type": "object"},
|
|
42
|
+
"config_schema": {"type": "object"}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"action": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"required": ["key", "operation", "input_schema", "auth_methods", "config"],
|
|
48
|
+
"properties": {
|
|
49
|
+
"key": {"type": "string", "minLength": 1},
|
|
50
|
+
"operation": {"type": "string", "minLength": 1},
|
|
51
|
+
"description": {"type": "string"},
|
|
52
|
+
"guidance": {"type": "string"},
|
|
53
|
+
"icon": {"$ref": "#/$defs/icon"},
|
|
54
|
+
"input_schema": {"type": "object"},
|
|
55
|
+
"output_schema": {"type": "object"},
|
|
56
|
+
"auth_methods": {"type": "array", "uniqueItems": true, "items": {"type": "string", "minLength": 1}},
|
|
57
|
+
"auth_optional": {"type": "boolean"},
|
|
58
|
+
"config": {"type": "object"},
|
|
59
|
+
"examples": {"type": "array", "items": {"type": "object"}},
|
|
60
|
+
"metadata": {"$ref": "#/$defs/presentation_metadata"}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"connector": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"required": ["schema_version", "connector", "name", "description", "auth_methods", "actions"],
|
|
66
|
+
"properties": {
|
|
67
|
+
"schema_version": {"const": "stackos.connector.v1"},
|
|
68
|
+
"connector": {"type": "string", "pattern": "^[a-z0-9][a-z0-9_-]*$"},
|
|
69
|
+
"name": {"type": "string", "minLength": 1},
|
|
70
|
+
"description": {"type": "string"},
|
|
71
|
+
"icon": {"$ref": "#/$defs/icon"},
|
|
72
|
+
"implementation": {"type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_.]*:[A-Za-z_][A-Za-z0-9_]*$"},
|
|
73
|
+
"auth_methods": {"type": "array", "items": {"$ref": "#/$defs/auth_method"}},
|
|
74
|
+
"actions": {"type": "array", "items": {"$ref": "#/$defs/action"}},
|
|
75
|
+
"metadata": {"$ref": "#/$defs/presentation_metadata"}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"$ref": "#/$defs/connector"
|
|
80
|
+
}
|