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.
Files changed (525) hide show
  1. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/PKG-INFO +23 -6
  2. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/README.md +22 -5
  3. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/pyproject.toml +1 -1
  4. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/catalog.json +21 -1
  5. stackos_connectors-0.2.4/src/stackos_connectors/connectors/google_indexing/docs/auth.md +30 -0
  6. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/docs/auth.md +1 -1
  7. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/catalog.json +45 -0
  8. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/docs/auth.md +12 -0
  9. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/docs/quickbooks-online.md +5 -0
  10. stackos_connectors-0.2.4/src/stackos_connectors/connectors/quickbooks_online/probe.py +62 -0
  11. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/service_account.py +1 -0
  12. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_google_service_account.py +35 -2
  13. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_oauth_contracts.py +29 -1
  14. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_probes.py +7 -2
  15. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/packaging/installed_auth_consumer.py +50 -3
  16. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/packaging/test_grouped_layout.py +2 -2
  17. stackos_connectors-0.2.4/tests/quickbooks_online/test_probe.py +207 -0
  18. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/.github/workflows/publish.yml +0 -0
  19. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/.gitignore +0 -0
  20. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/LICENSE +0 -0
  21. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/__init__.py +0 -0
  22. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/auth.py +0 -0
  23. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog/index.json +0 -0
  24. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog/schema.json +0 -0
  25. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog.py +0 -0
  26. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/__init__.py +0 -0
  27. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/__init__.py +0 -0
  28. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/actions.py +0 -0
  29. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/assets/icon.png +0 -0
  30. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/catalog.json +0 -0
  31. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/integration.py +0 -0
  32. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/__init__.py +0 -0
  33. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/actions.py +0 -0
  34. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/catalog.json +0 -0
  35. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/contract.py +0 -0
  36. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/docs/aignc.md +0 -0
  37. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/integration.py +0 -0
  38. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/__init__.py +0 -0
  39. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/actions.py +0 -0
  40. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/assets/icon.png +0 -0
  41. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/catalog.json +0 -0
  42. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/integration.py +0 -0
  43. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/__init__.py +0 -0
  44. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/actions.py +0 -0
  45. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/assets/icon.png +0 -0
  46. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/catalog.json +0 -0
  47. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/docs/protocol.md +0 -0
  48. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/__init__.py +0 -0
  49. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/actions.py +0 -0
  50. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/assets/icon.png +0 -0
  51. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/catalog.json +0 -0
  52. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/contract.py +0 -0
  53. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/docs/s3.md +0 -0
  54. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/integration.py +0 -0
  55. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/probe.py +0 -0
  56. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/__init__.py +0 -0
  57. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/actions.py +0 -0
  58. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/catalog.json +0 -0
  59. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/__init__.py +0 -0
  60. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/actions.py +0 -0
  61. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/catalog.json +0 -0
  62. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/probe.py +0 -0
  63. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/__init__.py +0 -0
  64. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/actions.py +0 -0
  65. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/assets/icon.png +0 -0
  66. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/catalog.json +0 -0
  67. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/docs/protocol.md +0 -0
  68. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/__init__.py +0 -0
  69. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/actions.py +0 -0
  70. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/assets/icon.png +0 -0
  71. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/catalog.json +0 -0
  72. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/docs/cloudflare-dns.md +0 -0
  73. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/integration.py +0 -0
  74. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/__init__.py +0 -0
  75. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/actions.py +0 -0
  76. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/assets/icon.jpeg +0 -0
  77. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/catalog.json +0 -0
  78. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/integration.py +0 -0
  79. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/probe.py +0 -0
  80. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/__init__.py +0 -0
  81. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/actions.py +0 -0
  82. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/assets/icon.png +0 -0
  83. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/catalog.json +0 -0
  84. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/integration.py +0 -0
  85. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/__init__.py +0 -0
  86. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/actions.py +0 -0
  87. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/assets/icon.svg +0 -0
  88. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/catalog.json +0 -0
  89. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/docs/ftp.md +0 -0
  90. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/integration.py +0 -0
  91. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/probe.py +0 -0
  92. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/remote_tree.py +0 -0
  93. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/__init__.py +0 -0
  94. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/actions.py +0 -0
  95. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/assets/icon.png +0 -0
  96. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/catalog.json +0 -0
  97. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/integration.py +0 -0
  98. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/probe.py +0 -0
  99. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/__init__.py +0 -0
  100. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/actions.py +0 -0
  101. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/assets/icon.png +0 -0
  102. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/catalog.json +0 -0
  103. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/docs/auth.md +0 -0
  104. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/docs/protocol.md +0 -0
  105. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/probe.py +0 -0
  106. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/__init__.py +0 -0
  107. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/actions.py +0 -0
  108. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/assets/icon.png +0 -0
  109. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/catalog.json +0 -0
  110. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/docs/auth.md +0 -0
  111. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/integration.py +0 -0
  112. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/__init__.py +0 -0
  113. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/actions.py +0 -0
  114. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/assets/icon.webp +0 -0
  115. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/catalog.json +0 -0
  116. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/integration.py +0 -0
  117. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/__init__.py +0 -0
  118. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/actions.py +0 -0
  119. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/docs/google-indexing.md +0 -0
  120. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/integration.py +0 -0
  121. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/__init__.py +0 -0
  122. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/actions.py +0 -0
  123. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/assets/icon.png +0 -0
  124. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/auth.py +0 -0
  125. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/catalog.json +0 -0
  126. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/docs/google-search-console.md +0 -0
  127. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/integration.py +0 -0
  128. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/__init__.py +0 -0
  129. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/actions.py +0 -0
  130. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/assets/icon.png +0 -0
  131. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/catalog.json +0 -0
  132. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/docs/auth.md +0 -0
  133. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/integration.py +0 -0
  134. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/__init__.py +0 -0
  135. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/actions.py +0 -0
  136. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/assets/icon.png +0 -0
  137. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/catalog.json +0 -0
  138. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/integration.py +0 -0
  139. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/__init__.py +0 -0
  140. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/actions.py +0 -0
  141. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/assets/icon.png +0 -0
  142. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/catalog.json +0 -0
  143. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/docs/auth.md +0 -0
  144. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/docs/protocol.md +0 -0
  145. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/probe.py +0 -0
  146. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/__init__.py +0 -0
  147. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/actions.py +0 -0
  148. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/catalog.json +0 -0
  149. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/__init__.py +0 -0
  150. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/actions.py +0 -0
  151. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/assets/icon.png +0 -0
  152. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/catalog.json +0 -0
  153. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/contract.py +0 -0
  154. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/auth.md +0 -0
  155. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/hubspot.md +0 -0
  156. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/signatures.md +0 -0
  157. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/integration.py +0 -0
  158. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/signature.py +0 -0
  159. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/__init__.py +0 -0
  160. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/actions.py +0 -0
  161. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/assets/icon.png +0 -0
  162. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/catalog.json +0 -0
  163. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/integration.py +0 -0
  164. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/__init__.py +0 -0
  165. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/actions.py +0 -0
  166. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/assets/icon.svg +0 -0
  167. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/catalog.json +0 -0
  168. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/docs/protocol.md +0 -0
  169. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/integration.py +0 -0
  170. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/probe.py +0 -0
  171. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/__init__.py +0 -0
  172. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/actions.py +0 -0
  173. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/assets/icon.png +0 -0
  174. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/catalog.json +0 -0
  175. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/integration.py +0 -0
  176. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/__init__.py +0 -0
  177. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/actions.py +0 -0
  178. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/assets/icon.png +0 -0
  179. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/catalog.json +0 -0
  180. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/integration.py +0 -0
  181. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/__init__.py +0 -0
  182. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/actions.py +0 -0
  183. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/auth/viewer-organization.graphql +0 -0
  184. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/create.graphql +0 -0
  185. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/delete.graphql +0 -0
  186. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/get.graphql +0 -0
  187. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/list.graphql +0 -0
  188. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/resolve.graphql +0 -0
  189. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/unresolve.graphql +0 -0
  190. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/update.graphql +0 -0
  191. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/get.graphql +0 -0
  192. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/list.graphql +0 -0
  193. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/get.graphql +0 -0
  194. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/list.graphql +0 -0
  195. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/create.graphql +0 -0
  196. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/delete.graphql +0 -0
  197. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/get.graphql +0 -0
  198. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/list.graphql +0 -0
  199. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/update.graphql +0 -0
  200. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/add-label.graphql +0 -0
  201. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/archive.graphql +0 -0
  202. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/create.graphql +0 -0
  203. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/get.graphql +0 -0
  204. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/list.graphql +0 -0
  205. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/remove-label.graphql +0 -0
  206. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/search.graphql +0 -0
  207. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/unarchive.graphql +0 -0
  208. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/update.graphql +0 -0
  209. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/projects/get.graphql +0 -0
  210. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/projects/list.graphql +0 -0
  211. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/teams/get.graphql +0 -0
  212. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/teams/list.graphql +0 -0
  213. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/users/get.graphql +0 -0
  214. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/users/list.graphql +0 -0
  215. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/viewer/get.graphql +0 -0
  216. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/get.graphql +0 -0
  217. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/list.graphql +0 -0
  218. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/icon.png +0 -0
  219. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/catalog.json +0 -0
  220. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/contract.py +0 -0
  221. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/docs/auth.md +0 -0
  222. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/docs/linear.md +0 -0
  223. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/integration.py +0 -0
  224. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.json +0 -0
  225. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.metadata.json +0 -0
  226. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/root-policy-2026-07-23.json +0 -0
  227. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/__init__.py +0 -0
  228. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/actions.py +0 -0
  229. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/assets/icon.png +0 -0
  230. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/auth.py +0 -0
  231. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/catalog.json +0 -0
  232. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/docs/auth.md +0 -0
  233. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/__init__.py +0 -0
  234. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/actions.py +0 -0
  235. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/assets/icon.png +0 -0
  236. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/auth.py +0 -0
  237. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/catalog.json +0 -0
  238. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/docs/auth.md +0 -0
  239. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/docs/protocol.md +0 -0
  240. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/__init__.py +0 -0
  241. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/actions.py +0 -0
  242. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/assets/icon.webp +0 -0
  243. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/catalog.json +0 -0
  244. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/integration.py +0 -0
  245. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/__init__.py +0 -0
  246. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/assets/icon.png +0 -0
  247. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/catalog.json +0 -0
  248. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/integration.py +0 -0
  249. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/probe.py +0 -0
  250. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/__init__.py +0 -0
  251. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/actions.py +0 -0
  252. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/assets/icon.png +0 -0
  253. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/catalog.json +0 -0
  254. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/docs/auth.md +0 -0
  255. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/docs/protocol.md +0 -0
  256. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/__init__.py +0 -0
  257. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/actions.py +0 -0
  258. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/assets/icon.png +0 -0
  259. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/catalog.json +0 -0
  260. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/docs/auth.md +0 -0
  261. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/docs/protocol.md +0 -0
  262. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/integration.py +0 -0
  263. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/probe.py +0 -0
  264. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/__init__.py +0 -0
  265. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/actions.py +0 -0
  266. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/integration.py +0 -0
  267. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/response.py +0 -0
  268. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/__init__.py +0 -0
  269. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/actions.py +0 -0
  270. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/assets/icon.png +0 -0
  271. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/catalog.json +0 -0
  272. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/docs/auth.md +0 -0
  273. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/integration.py +0 -0
  274. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/__init__.py +0 -0
  275. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/actions.py +0 -0
  276. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/assets/icon.png +0 -0
  277. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/catalog.json +0 -0
  278. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/integration.py +0 -0
  279. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/__init__.py +0 -0
  280. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/actions.py +0 -0
  281. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/assets/icon.png +0 -0
  282. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/auth.py +0 -0
  283. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/catalog.json +0 -0
  284. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/docs/auth.md +0 -0
  285. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/docs/protocol.md +0 -0
  286. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/__init__.py +0 -0
  287. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/actions.py +0 -0
  288. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/assets/icon.jpeg +0 -0
  289. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/catalog.json +0 -0
  290. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/docs/auth.md +0 -0
  291. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/docs/protocol.md +0 -0
  292. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/integration.py +0 -0
  293. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/__init__.py +0 -0
  294. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/actions.py +0 -0
  295. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/assets/icon.svg +0 -0
  296. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/catalog.json +0 -0
  297. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/integration.py +0 -0
  298. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/__init__.py +0 -0
  299. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/actions.py +0 -0
  300. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/add-customer-tag.graphql +0 -0
  301. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/create-customer.graphql +0 -0
  302. {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
  303. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-orders.graphql +0 -0
  304. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer.graphql +0 -0
  305. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/list-customers.graphql +0 -0
  306. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/remove-customer-tag.graphql +0 -0
  307. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/search-customers.graphql +0 -0
  308. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/update-customer.graphql +0 -0
  309. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/adjust-inventory.graphql +0 -0
  310. {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
  311. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-item.graphql +0 -0
  312. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-location-inventory.graphql +0 -0
  313. {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
  314. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-levels.graphql +0 -0
  315. {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
  316. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/set-inventory-level.graphql +0 -0
  317. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-note.graphql +0 -0
  318. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-tag.graphql +0 -0
  319. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/create-draft-order.graphql +0 -0
  320. {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
  321. {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
  322. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-timeline.graphql +0 -0
  323. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order.graphql +0 -0
  324. {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
  325. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-orders.graphql +0 -0
  326. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/mark-order-paid.graphql +0 -0
  327. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/search-orders.graphql +0 -0
  328. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-note.graphql +0 -0
  329. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-tags.graphql +0 -0
  330. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-collection.graphql +0 -0
  331. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product-variant.graphql +0 -0
  332. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product.graphql +0 -0
  333. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-collection.graphql +0 -0
  334. {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
  335. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-variant.graphql +0 -0
  336. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product.graphql +0 -0
  337. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-collections.graphql +0 -0
  338. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-product-variants.graphql +0 -0
  339. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-products.graphql +0 -0
  340. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/search-products.graphql +0 -0
  341. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-status.graphql +0 -0
  342. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-variant.graphql +0 -0
  343. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product.graphql +0 -0
  344. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/shopifyql.graphql +0 -0
  345. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/icon.png +0 -0
  346. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/catalog.json +0 -0
  347. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/docs/shopify.md +0 -0
  348. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/integration.py +0 -0
  349. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/payloads.py +0 -0
  350. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/probe.py +0 -0
  351. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/__init__.py +0 -0
  352. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/actions.py +0 -0
  353. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/catalog.json +0 -0
  354. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/integration.py +0 -0
  355. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/__init__.py +0 -0
  356. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/actions.py +0 -0
  357. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/assets/icon.png +0 -0
  358. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/auth.py +0 -0
  359. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/catalog.json +0 -0
  360. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/constants.py +0 -0
  361. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/docs/protocol.md +0 -0
  362. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/docs/signatures.md +0 -0
  363. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/files.py +0 -0
  364. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/http.py +0 -0
  365. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/integration.py +0 -0
  366. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/payloads.py +0 -0
  367. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/probe.py +0 -0
  368. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/results.py +0 -0
  369. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/validation.py +0 -0
  370. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/__init__.py +0 -0
  371. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/actions.py +0 -0
  372. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/assets/icon.svg +0 -0
  373. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/catalog.json +0 -0
  374. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/docs/protocol.md +0 -0
  375. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/integration.py +0 -0
  376. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/probe.py +0 -0
  377. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/__init__.py +0 -0
  378. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/actions.py +0 -0
  379. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/assets/icon.jpeg +0 -0
  380. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/catalog.json +0 -0
  381. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/contract.py +0 -0
  382. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/docs/stripe.md +0 -0
  383. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/integration.py +0 -0
  384. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/__init__.py +0 -0
  385. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/actions.py +0 -0
  386. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/assets/icon.svg +0 -0
  387. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/catalog.json +0 -0
  388. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/docs/auth.md +0 -0
  389. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/__init__.py +0 -0
  390. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/actions.py +0 -0
  391. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/assets/icon.png +0 -0
  392. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/auth.py +0 -0
  393. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/catalog.json +0 -0
  394. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/docs/auth-protocol.md +0 -0
  395. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/docs/protocol.md +0 -0
  396. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/payloads.py +0 -0
  397. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/schema.py +0 -0
  398. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/__init__.py +0 -0
  399. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/native.py +0 -0
  400. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/proxy.py +0 -0
  401. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/sessions.py +0 -0
  402. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/__init__.py +0 -0
  403. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/actions.py +0 -0
  404. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/catalog.json +0 -0
  405. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/openapi.json +0 -0
  406. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/stackos-tools.json +0 -0
  407. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/icon.png +0 -0
  408. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets.py +0 -0
  409. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/catalog.json +0 -0
  410. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/contract.py +0 -0
  411. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/docs/agent-api/README.md +0 -0
  412. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/docs/trackbooth.md +0 -0
  413. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/integration.py +0 -0
  414. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/probe.py +0 -0
  415. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/schema.py +0 -0
  416. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/transport.py +0 -0
  417. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/__init__.py +0 -0
  418. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/actions.py +0 -0
  419. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/assets/icon.png +0 -0
  420. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/catalog.json +0 -0
  421. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/integration.py +0 -0
  422. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/probe.py +0 -0
  423. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/__init__.py +0 -0
  424. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/actions.py +0 -0
  425. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/assets/icon.png +0 -0
  426. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/catalog.json +0 -0
  427. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/integration.py +0 -0
  428. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/contracts.py +0 -0
  429. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/errors.py +0 -0
  430. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/probe.py +0 -0
  431. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/py.typed +0 -0
  432. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/redaction.py +0 -0
  433. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/registry.py +0 -0
  434. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/__init__.py +0 -0
  435. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/base.py +0 -0
  436. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/__init__.py +0 -0
  437. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/ark.py +0 -0
  438. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/media.py +0 -0
  439. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/__init__.py +0 -0
  440. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/batch.py +0 -0
  441. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/oauth.py +0 -0
  442. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/probe.py +0 -0
  443. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/icons/integration.svg +0 -0
  444. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/media.py +0 -0
  445. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/oauth.py +0 -0
  446. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/provider_utils.py +0 -0
  447. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/rate_limit.py +0 -0
  448. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/vendor_utils.py +0 -0
  449. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/src/stackos_connectors/validation.py +0 -0
  450. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_auth_redaction.py +0 -0
  451. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_oauth_protocol.py +0 -0
  452. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/auth/test_search_console_scopes.py +0 -0
  453. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/conftest.py +0 -0
  454. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/fixtures/wire-contracts.json +0 -0
  455. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_hubspot_signature_protocol.py +0 -0
  456. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_named_actions.py +0 -0
  457. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_pipedrive_probes.py +0 -0
  458. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_probe_boundary.py +0 -0
  459. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/business/test_salesloft_probes.py +0 -0
  460. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/catalog/test_catalog.py +0 -0
  461. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/catalog/test_nested_resources.py +0 -0
  462. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/catalog/test_presentation.py +0 -0
  463. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_contract.py +0 -0
  464. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_native_result_boundary.py +0 -0
  465. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_nested_auth_redaction.py +0 -0
  466. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_preflight_redaction.py +0 -0
  467. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_public_key_facts.py +0 -0
  468. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_runtime.py +0 -0
  469. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_timeout_options.py +0 -0
  470. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_validation_data.py +0 -0
  471. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/core/test_validation_execution_outcome.py +0 -0
  472. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/__init__.py +0 -0
  473. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/test_native.py +0 -0
  474. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/test_probes_catalog.py +0 -0
  475. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/mail_slack/test_signature_protocol.py +0 -0
  476. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_aignc_native.py +0 -0
  477. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_generation_outcomes.py +0 -0
  478. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_media_files.py +0 -0
  479. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/media/test_named_media.py +0 -0
  480. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/__init__.py +0 -0
  481. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/conftest.py +0 -0
  482. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/test_auth.py +0 -0
  483. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/quickbooks_online/test_reads.py +0 -0
  484. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/conftest.py +0 -0
  485. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/test_linear_transport.py +0 -0
  486. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/test_safe_refs_named_actions.py +0 -0
  487. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/safe_refs/test_stripe_transport_transport.py +0 -0
  488. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/__init__.py +0 -0
  489. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_actions.py +0 -0
  490. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_authorization.py +0 -0
  491. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_closure_outcomes.py +0 -0
  492. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_native.py +0 -0
  493. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_payloads.py +0 -0
  494. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_proxy.py +0 -0
  495. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/telegram/test_sessions.py +0 -0
  496. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/trackbooth/__init__.py +0 -0
  497. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/trackbooth/test_native.py +0 -0
  498. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/__init__.py +0 -0
  499. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/catalog_fixture.py +0 -0
  500. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/conftest.py +0 -0
  501. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_ahrefs.py +0 -0
  502. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_boundary_timeout.py +0 -0
  503. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_cloudflare.py +0 -0
  504. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_dataforseo.py +0 -0
  505. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_firecrawl.py +0 -0
  506. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_ftp.py +0 -0
  507. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_ftp_actions.py +0 -0
  508. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_analytics.py +0 -0
  509. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_indexing.py +0 -0
  510. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_indexing_batch.py +0 -0
  511. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_search_console.py +0 -0
  512. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_search_console_batch.py +0 -0
  513. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_google_tag_manager.py +0 -0
  514. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_jina_reader.py +0 -0
  515. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_named_clients.py +0 -0
  516. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_native_boundary.py +0 -0
  517. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_openrouter.py +0 -0
  518. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_reddit.py +0 -0
  519. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_s3.py +0 -0
  520. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_s3_actions.py +0 -0
  521. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_serper.py +0 -0
  522. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_shopify.py +0 -0
  523. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_sitemap.py +0 -0
  524. {stackos_connectors-0.2.2 → stackos_connectors-0.2.4}/tests/web/test_transport_defaults.py +0 -0
  525. {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.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 five declared service-account
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 retains its existing resolved-token action/probe contract; this
134
- release adds no Indexing JWT acquisition method.
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.2
194
+ python -m pip install stackos-connectors==0.2.4
195
195
  ```
196
196
 
197
- Or add `stackos-connectors==0.2.2` to your Python dependency requirements.
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 five declared service-account
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 retains its existing resolved-token action/probe contract; this
118
- release adds no Indexing JWT acquisition method.
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.2
178
+ python -m pip install stackos-connectors==0.2.4
179
179
  ```
180
180
 
181
- Or add `stackos-connectors==0.2.2` to your Python dependency requirements.
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "stackos-connectors"
7
- version = "0.2.2"
7
+ version = "0.2.4"
8
8
  description = "Named provider connectors with plain data and caller-owned authentication."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -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 outside this library. Execution accepts the resolved access_token; provider resource access must be granted separately."
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 is a separate resolved-token contract; no new Indexing JWT grant is supplied.
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
+ }
@@ -19,6 +19,7 @@ JWT_GRANT = "urn:ietf:params:oauth:grant-type:jwt-bearer"
19
19
  GOOGLE_SERVICE_ACCOUNT_PROVIDERS = frozenset(
20
20
  {
21
21
  "google-search-console",
22
+ "google-indexing",
22
23
  "google-analytics",
23
24
  "google-tag-manager",
24
25
  "google-ads",
@@ -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 test_five_released_jwt_providers(provider):
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", "service-account"),
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" not in description
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) == 37
388
+ assert len(bound) == 38
384
389
  assert all(project_probe_config(key, {}) == {} for key in bound)
@@ -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) == 2
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) == 16 and "google-indexing" not in 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,
@@ -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) == 16
20
- assert "google-indexing" not in protocols
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()