stackos-connectors 0.2.1__tar.gz → 0.2.2__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 (522) hide show
  1. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/PKG-INFO +6 -3
  2. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/README.md +5 -2
  3. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/pyproject.toml +1 -1
  4. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/catalog/index.json +1 -0
  5. stackos_connectors-0.2.2/src/stackos_connectors/connectors/quickbooks_online/__init__.py +1 -0
  6. stackos_connectors-0.2.2/src/stackos_connectors/connectors/quickbooks_online/actions.py +110 -0
  7. stackos_connectors-0.2.2/src/stackos_connectors/connectors/quickbooks_online/catalog.json +309 -0
  8. stackos_connectors-0.2.2/src/stackos_connectors/connectors/quickbooks_online/docs/auth.md +13 -0
  9. stackos_connectors-0.2.2/src/stackos_connectors/connectors/quickbooks_online/docs/quickbooks-online.md +24 -0
  10. stackos_connectors-0.2.2/src/stackos_connectors/connectors/quickbooks_online/integration.py +75 -0
  11. stackos_connectors-0.2.2/src/stackos_connectors/connectors/quickbooks_online/response.py +263 -0
  12. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/catalog/test_presentation.py +2 -1
  13. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/packaging/installed_auth_consumer.py +62 -2
  14. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/packaging/test_grouped_layout.py +1 -1
  15. stackos_connectors-0.2.2/tests/quickbooks_online/conftest.py +57 -0
  16. stackos_connectors-0.2.2/tests/quickbooks_online/test_auth.py +108 -0
  17. stackos_connectors-0.2.2/tests/quickbooks_online/test_reads.py +343 -0
  18. stackos_connectors-0.2.2/tests/web/__init__.py +0 -0
  19. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/.github/workflows/publish.yml +0 -0
  20. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/.gitignore +0 -0
  21. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/LICENSE +0 -0
  22. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/__init__.py +0 -0
  23. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/auth.py +0 -0
  24. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/catalog/schema.json +0 -0
  25. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/catalog.py +0 -0
  26. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/__init__.py +0 -0
  27. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ahrefs/__init__.py +0 -0
  28. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ahrefs/actions.py +0 -0
  29. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ahrefs/assets/icon.png +0 -0
  30. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ahrefs/catalog.json +0 -0
  31. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ahrefs/integration.py +0 -0
  32. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aignc/__init__.py +0 -0
  33. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aignc/actions.py +0 -0
  34. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aignc/catalog.json +0 -0
  35. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aignc/contract.py +0 -0
  36. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aignc/docs/aignc.md +0 -0
  37. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aignc/integration.py +0 -0
  38. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/alibaba_wan/__init__.py +0 -0
  39. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/alibaba_wan/actions.py +0 -0
  40. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/alibaba_wan/assets/icon.png +0 -0
  41. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/alibaba_wan/catalog.json +0 -0
  42. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/alibaba_wan/integration.py +0 -0
  43. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/apollo/__init__.py +0 -0
  44. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/apollo/actions.py +0 -0
  45. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/apollo/assets/icon.png +0 -0
  46. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/apollo/catalog.json +0 -0
  47. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/apollo/docs/protocol.md +0 -0
  48. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/__init__.py +0 -0
  49. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/actions.py +0 -0
  50. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/assets/icon.png +0 -0
  51. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/catalog.json +0 -0
  52. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/contract.py +0 -0
  53. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/docs/s3.md +0 -0
  54. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/integration.py +0 -0
  55. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/aws_s3/probe.py +0 -0
  56. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/byteplus_seedance/__init__.py +0 -0
  57. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/byteplus_seedance/actions.py +0 -0
  58. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/byteplus_seedance/catalog.json +0 -0
  59. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/byteplus_seedream/__init__.py +0 -0
  60. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/byteplus_seedream/actions.py +0 -0
  61. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/byteplus_seedream/catalog.json +0 -0
  62. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/byteplus_seedream/probe.py +0 -0
  63. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/clay/__init__.py +0 -0
  64. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/clay/actions.py +0 -0
  65. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/clay/assets/icon.png +0 -0
  66. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/clay/catalog.json +0 -0
  67. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/clay/docs/protocol.md +0 -0
  68. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/cloudflare/__init__.py +0 -0
  69. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/cloudflare/actions.py +0 -0
  70. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/cloudflare/assets/icon.png +0 -0
  71. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/cloudflare/catalog.json +0 -0
  72. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/cloudflare/docs/cloudflare-dns.md +0 -0
  73. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/cloudflare/integration.py +0 -0
  74. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/dataforseo/__init__.py +0 -0
  75. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/dataforseo/actions.py +0 -0
  76. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/dataforseo/assets/icon.jpeg +0 -0
  77. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/dataforseo/catalog.json +0 -0
  78. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/dataforseo/integration.py +0 -0
  79. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/dataforseo/probe.py +0 -0
  80. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/firecrawl/__init__.py +0 -0
  81. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/firecrawl/actions.py +0 -0
  82. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/firecrawl/assets/icon.png +0 -0
  83. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/firecrawl/catalog.json +0 -0
  84. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/firecrawl/integration.py +0 -0
  85. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/__init__.py +0 -0
  86. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/actions.py +0 -0
  87. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/assets/icon.svg +0 -0
  88. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/catalog.json +0 -0
  89. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/docs/ftp.md +0 -0
  90. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/integration.py +0 -0
  91. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/probe.py +0 -0
  92. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ftp/remote_tree.py +0 -0
  93. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ghost/__init__.py +0 -0
  94. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ghost/actions.py +0 -0
  95. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ghost/assets/icon.png +0 -0
  96. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ghost/catalog.json +0 -0
  97. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ghost/integration.py +0 -0
  98. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ghost/probe.py +0 -0
  99. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_ads/__init__.py +0 -0
  100. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_ads/actions.py +0 -0
  101. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_ads/assets/icon.png +0 -0
  102. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_ads/catalog.json +0 -0
  103. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_ads/docs/auth.md +0 -0
  104. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_ads/docs/protocol.md +0 -0
  105. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_ads/probe.py +0 -0
  106. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_analytics/__init__.py +0 -0
  107. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_analytics/actions.py +0 -0
  108. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_analytics/assets/icon.png +0 -0
  109. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_analytics/catalog.json +0 -0
  110. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_analytics/docs/auth.md +0 -0
  111. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_analytics/integration.py +0 -0
  112. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_gemini_image/__init__.py +0 -0
  113. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_gemini_image/actions.py +0 -0
  114. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_gemini_image/assets/icon.webp +0 -0
  115. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_gemini_image/catalog.json +0 -0
  116. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_gemini_image/integration.py +0 -0
  117. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_indexing/__init__.py +0 -0
  118. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_indexing/actions.py +0 -0
  119. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_indexing/catalog.json +0 -0
  120. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_indexing/docs/google-indexing.md +0 -0
  121. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_indexing/integration.py +0 -0
  122. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/__init__.py +0 -0
  123. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/actions.py +0 -0
  124. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/assets/icon.png +0 -0
  125. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/auth.py +0 -0
  126. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/catalog.json +0 -0
  127. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/docs/auth.md +0 -0
  128. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/docs/google-search-console.md +0 -0
  129. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_search_console/integration.py +0 -0
  130. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_tag_manager/__init__.py +0 -0
  131. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_tag_manager/actions.py +0 -0
  132. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_tag_manager/assets/icon.png +0 -0
  133. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_tag_manager/catalog.json +0 -0
  134. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_tag_manager/docs/auth.md +0 -0
  135. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_tag_manager/integration.py +0 -0
  136. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_veo/__init__.py +0 -0
  137. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_veo/actions.py +0 -0
  138. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_veo/assets/icon.png +0 -0
  139. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_veo/catalog.json +0 -0
  140. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_veo/integration.py +0 -0
  141. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_workspace/__init__.py +0 -0
  142. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_workspace/actions.py +0 -0
  143. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_workspace/assets/icon.png +0 -0
  144. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_workspace/catalog.json +0 -0
  145. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_workspace/docs/auth.md +0 -0
  146. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_workspace/docs/protocol.md +0 -0
  147. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/google_workspace/probe.py +0 -0
  148. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/http/__init__.py +0 -0
  149. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/http/actions.py +0 -0
  150. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/http/catalog.json +0 -0
  151. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/__init__.py +0 -0
  152. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/actions.py +0 -0
  153. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/assets/icon.png +0 -0
  154. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/catalog.json +0 -0
  155. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/contract.py +0 -0
  156. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/docs/auth.md +0 -0
  157. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/docs/hubspot.md +0 -0
  158. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/docs/signatures.md +0 -0
  159. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/integration.py +0 -0
  160. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/hubspot/signature.py +0 -0
  161. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ideogram/__init__.py +0 -0
  162. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ideogram/actions.py +0 -0
  163. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ideogram/assets/icon.png +0 -0
  164. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ideogram/catalog.json +0 -0
  165. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/ideogram/integration.py +0 -0
  166. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/imap/__init__.py +0 -0
  167. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/imap/actions.py +0 -0
  168. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/imap/assets/icon.svg +0 -0
  169. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/imap/catalog.json +0 -0
  170. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/imap/docs/protocol.md +0 -0
  171. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/imap/integration.py +0 -0
  172. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/imap/probe.py +0 -0
  173. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/jina/__init__.py +0 -0
  174. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/jina/actions.py +0 -0
  175. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/jina/assets/icon.png +0 -0
  176. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/jina/catalog.json +0 -0
  177. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/jina/integration.py +0 -0
  178. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/kling_video/__init__.py +0 -0
  179. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/kling_video/actions.py +0 -0
  180. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/kling_video/assets/icon.png +0 -0
  181. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/kling_video/catalog.json +0 -0
  182. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/kling_video/integration.py +0 -0
  183. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/__init__.py +0 -0
  184. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/actions.py +0 -0
  185. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/auth/viewer-organization.graphql +0 -0
  186. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/comments/create.graphql +0 -0
  187. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/comments/delete.graphql +0 -0
  188. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/comments/get.graphql +0 -0
  189. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/comments/list.graphql +0 -0
  190. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/comments/resolve.graphql +0 -0
  191. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/comments/unresolve.graphql +0 -0
  192. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/comments/update.graphql +0 -0
  193. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/get.graphql +0 -0
  194. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/list.graphql +0 -0
  195. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/get.graphql +0 -0
  196. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/list.graphql +0 -0
  197. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/create.graphql +0 -0
  198. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/delete.graphql +0 -0
  199. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/get.graphql +0 -0
  200. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/list.graphql +0 -0
  201. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/update.graphql +0 -0
  202. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/add-label.graphql +0 -0
  203. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/archive.graphql +0 -0
  204. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/create.graphql +0 -0
  205. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/get.graphql +0 -0
  206. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/list.graphql +0 -0
  207. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/remove-label.graphql +0 -0
  208. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/search.graphql +0 -0
  209. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/unarchive.graphql +0 -0
  210. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/issues/update.graphql +0 -0
  211. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/projects/get.graphql +0 -0
  212. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/projects/list.graphql +0 -0
  213. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/teams/get.graphql +0 -0
  214. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/teams/list.graphql +0 -0
  215. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/users/get.graphql +0 -0
  216. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/users/list.graphql +0 -0
  217. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/viewer/get.graphql +0 -0
  218. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/get.graphql +0 -0
  219. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/list.graphql +0 -0
  220. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/assets/icon.png +0 -0
  221. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/catalog.json +0 -0
  222. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/contract.py +0 -0
  223. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/docs/auth.md +0 -0
  224. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/docs/linear.md +0 -0
  225. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/integration.py +0 -0
  226. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.json +0 -0
  227. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.metadata.json +0 -0
  228. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/linear/schemas/root-policy-2026-07-23.json +0 -0
  229. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/meta_ads/__init__.py +0 -0
  230. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/meta_ads/actions.py +0 -0
  231. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/meta_ads/assets/icon.png +0 -0
  232. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/meta_ads/auth.py +0 -0
  233. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/meta_ads/catalog.json +0 -0
  234. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/meta_ads/docs/auth.md +0 -0
  235. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/microsoft_365/__init__.py +0 -0
  236. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/microsoft_365/actions.py +0 -0
  237. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/microsoft_365/assets/icon.png +0 -0
  238. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/microsoft_365/auth.py +0 -0
  239. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/microsoft_365/catalog.json +0 -0
  240. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/microsoft_365/docs/auth.md +0 -0
  241. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/microsoft_365/docs/protocol.md +0 -0
  242. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openai_images/__init__.py +0 -0
  243. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openai_images/actions.py +0 -0
  244. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openai_images/assets/icon.webp +0 -0
  245. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openai_images/catalog.json +0 -0
  246. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openai_images/integration.py +0 -0
  247. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openrouter/__init__.py +0 -0
  248. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openrouter/assets/icon.png +0 -0
  249. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openrouter/catalog.json +0 -0
  250. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openrouter/integration.py +0 -0
  251. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/openrouter/probe.py +0 -0
  252. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/outreach/__init__.py +0 -0
  253. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/outreach/actions.py +0 -0
  254. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/outreach/assets/icon.png +0 -0
  255. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/outreach/catalog.json +0 -0
  256. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/outreach/docs/auth.md +0 -0
  257. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/outreach/docs/protocol.md +0 -0
  258. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/__init__.py +0 -0
  259. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/actions.py +0 -0
  260. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/assets/icon.png +0 -0
  261. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/catalog.json +0 -0
  262. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/docs/auth.md +0 -0
  263. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/docs/protocol.md +0 -0
  264. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/integration.py +0 -0
  265. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/pipedrive/probe.py +0 -0
  266. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reddit/__init__.py +0 -0
  267. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reddit/actions.py +0 -0
  268. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reddit/assets/icon.png +0 -0
  269. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reddit/catalog.json +0 -0
  270. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reddit/docs/auth.md +0 -0
  271. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reddit/integration.py +0 -0
  272. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reve/__init__.py +0 -0
  273. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reve/actions.py +0 -0
  274. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reve/assets/icon.png +0 -0
  275. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reve/catalog.json +0 -0
  276. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/reve/integration.py +0 -0
  277. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesforce/__init__.py +0 -0
  278. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesforce/actions.py +0 -0
  279. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesforce/assets/icon.png +0 -0
  280. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesforce/auth.py +0 -0
  281. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesforce/catalog.json +0 -0
  282. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesforce/docs/auth.md +0 -0
  283. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesforce/docs/protocol.md +0 -0
  284. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesloft/__init__.py +0 -0
  285. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesloft/actions.py +0 -0
  286. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesloft/assets/icon.jpeg +0 -0
  287. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesloft/catalog.json +0 -0
  288. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesloft/docs/auth.md +0 -0
  289. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesloft/docs/protocol.md +0 -0
  290. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/salesloft/integration.py +0 -0
  291. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/serper/__init__.py +0 -0
  292. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/serper/actions.py +0 -0
  293. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/serper/assets/icon.svg +0 -0
  294. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/serper/catalog.json +0 -0
  295. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/serper/integration.py +0 -0
  296. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/__init__.py +0 -0
  297. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/actions.py +0 -0
  298. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/add-customer-tag.graphql +0 -0
  299. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/create-customer.graphql +0 -0
  300. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-lifetime-value.graphql +0 -0
  301. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-orders.graphql +0 -0
  302. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer.graphql +0 -0
  303. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/list-customers.graphql +0 -0
  304. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/remove-customer-tag.graphql +0 -0
  305. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/search-customers.graphql +0 -0
  306. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/update-customer.graphql +0 -0
  307. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/adjust-inventory.graphql +0 -0
  308. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-by-sku.graphql +0 -0
  309. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-item.graphql +0 -0
  310. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-location-inventory.graphql +0 -0
  311. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-item-availability.graphql +0 -0
  312. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-levels.graphql +0 -0
  313. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-product-variant-inventory.graphql +0 -0
  314. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/set-inventory-level.graphql +0 -0
  315. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-note.graphql +0 -0
  316. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-tag.graphql +0 -0
  317. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/create-draft-order.graphql +0 -0
  318. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-by-name.graphql +0 -0
  319. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-fulfillment-status.graphql +0 -0
  320. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-timeline.graphql +0 -0
  321. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order.graphql +0 -0
  322. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-order-variant-quantities.graphql +0 -0
  323. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-orders.graphql +0 -0
  324. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/mark-order-paid.graphql +0 -0
  325. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/search-orders.graphql +0 -0
  326. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-note.graphql +0 -0
  327. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-tags.graphql +0 -0
  328. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-collection.graphql +0 -0
  329. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product-variant.graphql +0 -0
  330. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product.graphql +0 -0
  331. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-collection.graphql +0 -0
  332. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-by-handle.graphql +0 -0
  333. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-variant.graphql +0 -0
  334. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product.graphql +0 -0
  335. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-collections.graphql +0 -0
  336. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-product-variants.graphql +0 -0
  337. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-products.graphql +0 -0
  338. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/search-products.graphql +0 -0
  339. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-status.graphql +0 -0
  340. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-variant.graphql +0 -0
  341. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product.graphql +0 -0
  342. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/graphql/shopifyql.graphql +0 -0
  343. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/assets/icon.png +0 -0
  344. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/catalog.json +0 -0
  345. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/docs/shopify.md +0 -0
  346. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/integration.py +0 -0
  347. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/payloads.py +0 -0
  348. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/shopify/probe.py +0 -0
  349. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/sitemap/__init__.py +0 -0
  350. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/sitemap/actions.py +0 -0
  351. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/sitemap/catalog.json +0 -0
  352. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/sitemap/integration.py +0 -0
  353. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/__init__.py +0 -0
  354. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/actions.py +0 -0
  355. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/assets/icon.png +0 -0
  356. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/auth.py +0 -0
  357. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/catalog.json +0 -0
  358. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/constants.py +0 -0
  359. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/docs/protocol.md +0 -0
  360. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/docs/signatures.md +0 -0
  361. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/files.py +0 -0
  362. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/http.py +0 -0
  363. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/integration.py +0 -0
  364. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/payloads.py +0 -0
  365. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/probe.py +0 -0
  366. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/results.py +0 -0
  367. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/slack_bot/validation.py +0 -0
  368. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/smtp/__init__.py +0 -0
  369. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/smtp/actions.py +0 -0
  370. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/smtp/assets/icon.svg +0 -0
  371. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/smtp/catalog.json +0 -0
  372. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/smtp/docs/protocol.md +0 -0
  373. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/smtp/integration.py +0 -0
  374. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/smtp/probe.py +0 -0
  375. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/stripe/__init__.py +0 -0
  376. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/stripe/actions.py +0 -0
  377. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/stripe/assets/icon.jpeg +0 -0
  378. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/stripe/catalog.json +0 -0
  379. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/stripe/contract.py +0 -0
  380. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/stripe/docs/stripe.md +0 -0
  381. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/stripe/integration.py +0 -0
  382. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/taboola/__init__.py +0 -0
  383. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/taboola/actions.py +0 -0
  384. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/taboola/assets/icon.svg +0 -0
  385. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/taboola/catalog.json +0 -0
  386. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/taboola/docs/auth.md +0 -0
  387. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/__init__.py +0 -0
  388. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/actions.py +0 -0
  389. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/assets/icon.png +0 -0
  390. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/auth.py +0 -0
  391. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/catalog.json +0 -0
  392. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/docs/auth-protocol.md +0 -0
  393. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/docs/protocol.md +0 -0
  394. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/payloads.py +0 -0
  395. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/schema.py +0 -0
  396. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/tdlib/__init__.py +0 -0
  397. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/tdlib/native.py +0 -0
  398. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/tdlib/proxy.py +0 -0
  399. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/telegram/tdlib/sessions.py +0 -0
  400. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/__init__.py +0 -0
  401. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/actions.py +0 -0
  402. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/catalog.json +0 -0
  403. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/openapi.json +0 -0
  404. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/stackos-tools.json +0 -0
  405. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/assets/icon.png +0 -0
  406. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/assets.py +0 -0
  407. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/catalog.json +0 -0
  408. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/contract.py +0 -0
  409. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/docs/agent-api/README.md +0 -0
  410. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/docs/trackbooth.md +0 -0
  411. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/integration.py +0 -0
  412. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/probe.py +0 -0
  413. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/schema.py +0 -0
  414. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/trackbooth/transport.py +0 -0
  415. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/wordpress/__init__.py +0 -0
  416. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/wordpress/actions.py +0 -0
  417. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/wordpress/assets/icon.png +0 -0
  418. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/wordpress/catalog.json +0 -0
  419. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/wordpress/integration.py +0 -0
  420. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/wordpress/probe.py +0 -0
  421. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/xai_imagine/__init__.py +0 -0
  422. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/xai_imagine/actions.py +0 -0
  423. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/xai_imagine/assets/icon.png +0 -0
  424. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/xai_imagine/catalog.json +0 -0
  425. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/connectors/xai_imagine/integration.py +0 -0
  426. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/contracts.py +0 -0
  427. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/errors.py +0 -0
  428. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/probe.py +0 -0
  429. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/py.typed +0 -0
  430. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/redaction.py +0 -0
  431. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/registry.py +0 -0
  432. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/__init__.py +0 -0
  433. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/base.py +0 -0
  434. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/byteplus/__init__.py +0 -0
  435. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/byteplus/ark.py +0 -0
  436. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/byteplus/media.py +0 -0
  437. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/google/__init__.py +0 -0
  438. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/google/batch.py +0 -0
  439. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/google/oauth.py +0 -0
  440. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/google/probe.py +0 -0
  441. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/google/service_account.py +0 -0
  442. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/icons/integration.svg +0 -0
  443. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/media.py +0 -0
  444. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/oauth.py +0 -0
  445. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/provider_utils.py +0 -0
  446. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/rate_limit.py +0 -0
  447. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/shared/vendor_utils.py +0 -0
  448. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/src/stackos_connectors/validation.py +0 -0
  449. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/auth/test_auth_redaction.py +0 -0
  450. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/auth/test_google_service_account.py +0 -0
  451. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/auth/test_oauth_contracts.py +0 -0
  452. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/auth/test_oauth_protocol.py +0 -0
  453. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/auth/test_probes.py +0 -0
  454. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/auth/test_search_console_scopes.py +0 -0
  455. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/business/conftest.py +0 -0
  456. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/business/fixtures/wire-contracts.json +0 -0
  457. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/business/test_hubspot_signature_protocol.py +0 -0
  458. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/business/test_named_actions.py +0 -0
  459. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/business/test_pipedrive_probes.py +0 -0
  460. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/business/test_probe_boundary.py +0 -0
  461. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/business/test_salesloft_probes.py +0 -0
  462. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/catalog/test_catalog.py +0 -0
  463. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/catalog/test_nested_resources.py +0 -0
  464. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_contract.py +0 -0
  465. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_native_result_boundary.py +0 -0
  466. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_nested_auth_redaction.py +0 -0
  467. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_preflight_redaction.py +0 -0
  468. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_public_key_facts.py +0 -0
  469. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_runtime.py +0 -0
  470. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_timeout_options.py +0 -0
  471. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_validation_data.py +0 -0
  472. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/core/test_validation_execution_outcome.py +0 -0
  473. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/mail_slack/__init__.py +0 -0
  474. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/mail_slack/test_native.py +0 -0
  475. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/mail_slack/test_probes_catalog.py +0 -0
  476. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/mail_slack/test_signature_protocol.py +0 -0
  477. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/media/test_aignc_native.py +0 -0
  478. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/media/test_generation_outcomes.py +0 -0
  479. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/media/test_media_files.py +0 -0
  480. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/media/test_named_media.py +0 -0
  481. {stackos_connectors-0.2.1/tests/web → stackos_connectors-0.2.2/tests/quickbooks_online}/__init__.py +0 -0
  482. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/safe_refs/conftest.py +0 -0
  483. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/safe_refs/test_linear_transport.py +0 -0
  484. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/safe_refs/test_safe_refs_named_actions.py +0 -0
  485. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/safe_refs/test_stripe_transport_transport.py +0 -0
  486. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/__init__.py +0 -0
  487. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/test_actions.py +0 -0
  488. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/test_authorization.py +0 -0
  489. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/test_closure_outcomes.py +0 -0
  490. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/test_native.py +0 -0
  491. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/test_payloads.py +0 -0
  492. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/test_proxy.py +0 -0
  493. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/telegram/test_sessions.py +0 -0
  494. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/trackbooth/__init__.py +0 -0
  495. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/trackbooth/test_native.py +0 -0
  496. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/catalog_fixture.py +0 -0
  497. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/conftest.py +0 -0
  498. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_ahrefs.py +0 -0
  499. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_boundary_timeout.py +0 -0
  500. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_cloudflare.py +0 -0
  501. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_dataforseo.py +0 -0
  502. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_firecrawl.py +0 -0
  503. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_ftp.py +0 -0
  504. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_ftp_actions.py +0 -0
  505. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_google_analytics.py +0 -0
  506. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_google_indexing.py +0 -0
  507. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_google_indexing_batch.py +0 -0
  508. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_google_search_console.py +0 -0
  509. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_google_search_console_batch.py +0 -0
  510. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_google_tag_manager.py +0 -0
  511. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_jina_reader.py +0 -0
  512. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_named_clients.py +0 -0
  513. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_native_boundary.py +0 -0
  514. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_openrouter.py +0 -0
  515. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_reddit.py +0 -0
  516. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_s3.py +0 -0
  517. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_s3_actions.py +0 -0
  518. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_serper.py +0 -0
  519. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_shopify.py +0 -0
  520. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_sitemap.py +0 -0
  521. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/tests/web/test_transport_defaults.py +0 -0
  522. {stackos_connectors-0.2.1 → stackos_connectors-0.2.2}/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.1
3
+ Version: 0.2.2
4
4
  Summary: Named provider connectors with plain data and caller-owned authentication.
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -73,6 +73,9 @@ execution; existing names cannot be replaced.
73
73
  `CallOptions.timeout=None` preserves each provider's default. A numeric timeout
74
74
  overrides that default. A supplied HTTP client remains caller-owned.
75
75
 
76
+ QuickBooks Online provides bounded company/invoice reads with exact invoice JSON
77
+ fragments and explicit OAuth. See the [provider contract](src/stackos_connectors/connectors/quickbooks_online/docs/quickbooks-online.md).
78
+
76
79
  ## Explicit authentication
77
80
 
78
81
  `get_auth_contract(connector, method=..., config=...)` reads immutable provider
@@ -188,10 +191,10 @@ Python 3.12 or newer is required. Source:
188
191
  Published releases can be installed with:
189
192
 
190
193
  ```bash
191
- python -m pip install stackos-connectors==0.2.0
194
+ python -m pip install stackos-connectors==0.2.2
192
195
  ```
193
196
 
194
- Or add `stackos-connectors==0.2.0` to your Python dependency requirements.
197
+ Or add `stackos-connectors==0.2.2` to your Python dependency requirements.
195
198
 
196
199
  Install from a local checkout with `pip install /path/to/StackOSConnectors`, or
197
200
  build a wheel with `python -m build --wheel` and install that wheel. Runtime use
@@ -57,6 +57,9 @@ execution; existing names cannot be replaced.
57
57
  `CallOptions.timeout=None` preserves each provider's default. A numeric timeout
58
58
  overrides that default. A supplied HTTP client remains caller-owned.
59
59
 
60
+ QuickBooks Online provides bounded company/invoice reads with exact invoice JSON
61
+ fragments and explicit OAuth. See the [provider contract](src/stackos_connectors/connectors/quickbooks_online/docs/quickbooks-online.md).
62
+
60
63
  ## Explicit authentication
61
64
 
62
65
  `get_auth_contract(connector, method=..., config=...)` reads immutable provider
@@ -172,10 +175,10 @@ Python 3.12 or newer is required. Source:
172
175
  Published releases can be installed with:
173
176
 
174
177
  ```bash
175
- python -m pip install stackos-connectors==0.2.0
178
+ python -m pip install stackos-connectors==0.2.2
176
179
  ```
177
180
 
178
- Or add `stackos-connectors==0.2.0` to your Python dependency requirements.
181
+ Or add `stackos-connectors==0.2.2` to your Python dependency requirements.
179
182
 
180
183
  Install from a local checkout with `pip install /path/to/StackOSConnectors`, or
181
184
  build a wheel with `python -m build --wheel` and install that wheel. Runtime use
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "stackos-connectors"
7
- version = "0.2.1"
7
+ version = "0.2.2"
8
8
  description = "Named provider connectors with plain data and caller-owned authentication."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -35,6 +35,7 @@
35
35
  "connectors/openrouter/catalog.json",
36
36
  "connectors/outreach/catalog.json",
37
37
  "connectors/pipedrive/catalog.json",
38
+ "connectors/quickbooks_online/catalog.json",
38
39
  "connectors/reddit/catalog.json",
39
40
  "connectors/reve/catalog.json",
40
41
  "connectors/salesforce/catalog.json",
@@ -0,0 +1 @@
1
+ """QuickBooks Online named reads and explicit OAuth declarations."""
@@ -0,0 +1,110 @@
1
+ """The two bounded QuickBooks Online read actions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Callable
6
+ from contextlib import AsyncExitStack
7
+ from functools import partial
8
+
9
+ import httpx
10
+
11
+ from stackos_connectors import ConnectorRequest, ConnectorResult, ValidationIssue
12
+ from stackos_connectors.redaction import auth_secret_values, redact_secret_values
13
+
14
+ from .integration import QuickBooksIntegration
15
+ from .response import (
16
+ CompanyInfo,
17
+ InvoicePage,
18
+ calendar_date,
19
+ invalid_response,
20
+ parse_company_info,
21
+ parse_invoice_page,
22
+ )
23
+
24
+
25
+ class QuickBooksActionConnector:
26
+ key = "quickbooks-online"
27
+
28
+ def validate(self, request: ConnectorRequest) -> list[ValidationIssue]:
29
+ if request.operation != "invoices.list":
30
+ return []
31
+ try:
32
+ first = calendar_date(request.input_json["txn_date_from"])
33
+ last = calendar_date(request.input_json["txn_date_to"])
34
+ if first > last:
35
+ raise ValueError("reversed dates")
36
+ except ValueError:
37
+ return [
38
+ ValidationIssue(path="$.txn_date_from", message="Dates must be valid and ordered")
39
+ ]
40
+ return []
41
+
42
+ def estimate_cost_cents(self, request: ConnectorRequest) -> int:
43
+ return 0
44
+
45
+ async def execute(self, request: ConnectorRequest) -> ConnectorResult:
46
+ assert request.auth is not None
47
+ config = request.auth.config
48
+ secrets = auth_secret_values(request.auth)
49
+ realm = config["realm_id"]
50
+ path, params, parser = _read_parameters(request, secrets)
51
+ async with AsyncExitStack() as stack:
52
+ http = request.options.http
53
+ if http is None:
54
+ http = await stack.enter_async_context(
55
+ httpx.AsyncClient(timeout=30.0, follow_redirects=False)
56
+ )
57
+ integration = QuickBooksIntegration(
58
+ payload=b"",
59
+ http=http,
60
+ timeout=request.options.timeout,
61
+ rate_limiter=request.options.rate_limiter,
62
+ )
63
+ result = await integration.read(
64
+ op=request.operation,
65
+ environment=config["environment"],
66
+ realm_id=realm,
67
+ token=request.auth.fields["access_token"],
68
+ path=path,
69
+ params=params,
70
+ parser=parser,
71
+ )
72
+ if redact_secret_values(result.data, secrets) != result.data:
73
+ raise invalid_response()
74
+ return ConnectorResult(
75
+ output_json=result.data,
76
+ metadata_json={"vendor": self.key, "operation": request.operation},
77
+ )
78
+
79
+
80
+ def _read_parameters(
81
+ request: ConnectorRequest, secrets: tuple[str, ...]
82
+ ) -> tuple[str, dict[str, str] | None, Callable[[httpx.Response], CompanyInfo | InvoicePage]]:
83
+ assert request.auth is not None
84
+ realm = request.auth.config["realm_id"]
85
+ if request.operation == "company-info.get":
86
+ return (
87
+ f"companyinfo/{realm}",
88
+ None,
89
+ partial(parse_company_info, secrets=secrets, realm_id=realm),
90
+ )
91
+ data = request.input_json
92
+ parser = partial(
93
+ parse_invoice_page,
94
+ secrets=secrets,
95
+ start=data["start_position"],
96
+ limit=data["max_results"],
97
+ date_from=data["txn_date_from"],
98
+ date_to=data["txn_date_to"],
99
+ )
100
+ query = _invoice_query(
101
+ data["txn_date_from"], data["txn_date_to"], data["start_position"], data["max_results"]
102
+ )
103
+ return "query", {"query": query}, parser
104
+
105
+
106
+ def _invoice_query(date_from: str, date_to: str, start: int, limit: int) -> str:
107
+ return (
108
+ f"select * from Invoice where TxnDate >= '{date_from}' and TxnDate <= '{date_to}' "
109
+ f"STARTPOSITION {start} MAXRESULTS {limit}"
110
+ )
@@ -0,0 +1,309 @@
1
+ {
2
+ "schema_version": "stackos.connector.v1",
3
+ "connector": "quickbooks-online",
4
+ "name": "QuickBooks Online",
5
+ "description": "Bounded company and invoice reads with explicit caller-owned OAuth.",
6
+ "auth_type": "oauth",
7
+ "auth_methods": [
8
+ {
9
+ "key": "oauth2_authorization_code",
10
+ "description": "Caller-supplied resolved OAuth bearer token; grants are always explicit.",
11
+ "fields_schema": {
12
+ "type": "object",
13
+ "properties": {
14
+ "access_token": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "pattern": "^[^\\s]+$"
18
+ }
19
+ },
20
+ "required": [
21
+ "access_token"
22
+ ],
23
+ "additionalProperties": false
24
+ },
25
+ "config_schema": {
26
+ "type": "object",
27
+ "properties": {
28
+ "environment": {
29
+ "enum": [
30
+ "sandbox",
31
+ "production"
32
+ ]
33
+ },
34
+ "realm_id": {
35
+ "type": "string",
36
+ "pattern": "^[0-9]{1,32}$"
37
+ }
38
+ },
39
+ "required": [
40
+ "environment",
41
+ "realm_id"
42
+ ],
43
+ "additionalProperties": false
44
+ },
45
+ "setup": {
46
+ "auth_type": "oauth",
47
+ "interactive": true,
48
+ "description": "Register an Intuit app, verify callback state and realmId, and supply its resolved accounting access token.",
49
+ "fields": [
50
+ {
51
+ "key": "client_id",
52
+ "label": "Client Id",
53
+ "type": "secret",
54
+ "secret": true,
55
+ "required": true
56
+ },
57
+ {
58
+ "key": "client_secret",
59
+ "label": "Client Secret",
60
+ "type": "secret",
61
+ "secret": true,
62
+ "required": true
63
+ }
64
+ ]
65
+ },
66
+ "evidence_source": "oauth_response",
67
+ "protocol": {
68
+ "grant_types": [
69
+ "authorization_code",
70
+ "refresh_token"
71
+ ]
72
+ }
73
+ },
74
+ {
75
+ "key": "oauth2_token",
76
+ "description": "Caller-supplied resolved OAuth bearer token; grants are always explicit.",
77
+ "fields_schema": {
78
+ "type": "object",
79
+ "properties": {
80
+ "access_token": {
81
+ "type": "string",
82
+ "minLength": 1,
83
+ "pattern": "^[^\\s]+$"
84
+ }
85
+ },
86
+ "required": [
87
+ "access_token"
88
+ ],
89
+ "additionalProperties": false
90
+ },
91
+ "config_schema": {
92
+ "type": "object",
93
+ "properties": {
94
+ "environment": {
95
+ "enum": [
96
+ "sandbox",
97
+ "production"
98
+ ]
99
+ },
100
+ "realm_id": {
101
+ "type": "string",
102
+ "pattern": "^[0-9]{1,32}$"
103
+ }
104
+ },
105
+ "required": [
106
+ "environment",
107
+ "realm_id"
108
+ ],
109
+ "additionalProperties": false
110
+ },
111
+ "setup": {
112
+ "auth_type": "oauth",
113
+ "interactive": false,
114
+ "description": "Register an Intuit app, verify callback state and realmId, and supply its resolved accounting access token.",
115
+ "fields": [
116
+ {
117
+ "key": "access_token",
118
+ "label": "Access Token",
119
+ "type": "secret",
120
+ "secret": true,
121
+ "required": true
122
+ }
123
+ ]
124
+ },
125
+ "evidence_source": "unavailable",
126
+ "protocol": {
127
+ "grant_types": [
128
+ "refresh_token"
129
+ ]
130
+ }
131
+ }
132
+ ],
133
+ "auth_protocol": {
134
+ "flow": "authorization_code",
135
+ "authorization_endpoint": "https://appcenter.intuit.com/connect/oauth2",
136
+ "token_endpoint": "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer",
137
+ "client_auth_style": "basic",
138
+ "pkce_mode": "unavailable",
139
+ "scopes": [
140
+ "com.intuit.quickbooks.accounting"
141
+ ],
142
+ "response_account_id_field": null
143
+ },
144
+ "actions": [
145
+ {
146
+ "key": "quickbooks-online.company-info.get",
147
+ "operation": "company-info.get",
148
+ "input_schema": {
149
+ "type": "object",
150
+ "properties": {},
151
+ "required": [],
152
+ "additionalProperties": false
153
+ },
154
+ "output_schema": {
155
+ "type": "object",
156
+ "properties": {
157
+ "realm_id": {
158
+ "type": "string",
159
+ "minLength": 1
160
+ },
161
+ "company_id": {
162
+ "type": "string",
163
+ "minLength": 1
164
+ },
165
+ "company_name": {
166
+ "type": "string",
167
+ "minLength": 1
168
+ }
169
+ },
170
+ "required": [
171
+ "realm_id",
172
+ "company_id"
173
+ ],
174
+ "additionalProperties": false
175
+ },
176
+ "auth_methods": [
177
+ "oauth2_authorization_code",
178
+ "oauth2_token"
179
+ ],
180
+ "description": "Read CompanyInfo for the configured realm. Returned realm_id repeats request context, not independent provider attestation.",
181
+ "guidance": "Caller owns pagination, complete-scan limits and current-state semantics. total_count is supplied metadata only; missing currency remains unknown. See provider docs.",
182
+ "metadata": {
183
+ "name": "Read company info",
184
+ "risk_level": "read"
185
+ },
186
+ "config": {}
187
+ },
188
+ {
189
+ "key": "quickbooks-online.invoices.list",
190
+ "operation": "invoices.list",
191
+ "input_schema": {
192
+ "type": "object",
193
+ "properties": {
194
+ "txn_date_from": {
195
+ "type": "string",
196
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
197
+ },
198
+ "txn_date_to": {
199
+ "type": "string",
200
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
201
+ },
202
+ "start_position": {
203
+ "type": "integer",
204
+ "minimum": 1,
205
+ "maximum": 2147483647
206
+ },
207
+ "max_results": {
208
+ "type": "integer",
209
+ "minimum": 1,
210
+ "maximum": 100
211
+ }
212
+ },
213
+ "required": [
214
+ "txn_date_from",
215
+ "txn_date_to",
216
+ "start_position",
217
+ "max_results"
218
+ ],
219
+ "additionalProperties": false
220
+ },
221
+ "output_schema": {
222
+ "type": "object",
223
+ "properties": {
224
+ "invoices": {
225
+ "type": "array",
226
+ "items": {
227
+ "type": "object",
228
+ "properties": {
229
+ "native_id": {
230
+ "type": "string",
231
+ "minLength": 1
232
+ },
233
+ "raw_json": {
234
+ "type": "string",
235
+ "minLength": 1
236
+ },
237
+ "source_revision": {
238
+ "type": "string",
239
+ "minLength": 1
240
+ },
241
+ "source_updated_at": {
242
+ "type": "string",
243
+ "minLength": 1
244
+ }
245
+ },
246
+ "required": [
247
+ "native_id",
248
+ "raw_json"
249
+ ],
250
+ "additionalProperties": false
251
+ },
252
+ "maxItems": 100
253
+ },
254
+ "start_position": {
255
+ "type": "integer",
256
+ "minimum": 1
257
+ },
258
+ "max_results": {
259
+ "type": "integer",
260
+ "minimum": 0,
261
+ "maximum": 100
262
+ },
263
+ "count": {
264
+ "type": "integer",
265
+ "minimum": 0,
266
+ "maximum": 100
267
+ },
268
+ "total_count": {
269
+ "type": "integer",
270
+ "minimum": 0
271
+ }
272
+ },
273
+ "required": [
274
+ "invoices",
275
+ "start_position",
276
+ "max_results",
277
+ "count"
278
+ ],
279
+ "additionalProperties": false
280
+ },
281
+ "auth_methods": [
282
+ "oauth2_authorization_code",
283
+ "oauth2_token"
284
+ ],
285
+ "description": "Read one bounded Invoice page by inclusive TxnDate, retaining exact JSON source fragments without floating-point conversion.",
286
+ "guidance": "Caller owns pagination, complete-scan limits and current-state semantics. total_count is supplied metadata only; missing currency remains unknown. See provider docs.",
287
+ "metadata": {
288
+ "name": "Read invoice page",
289
+ "risk_level": "read"
290
+ },
291
+ "config": {}
292
+ }
293
+ ],
294
+ "implementation": "stackos_connectors.connectors.quickbooks_online.actions:QuickBooksActionConnector",
295
+ "icon": {
296
+ "path": "shared/icons/integration.svg",
297
+ "kind": "icon",
298
+ "media_type": "image/svg+xml"
299
+ },
300
+ "setup": {
301
+ "homepage_url": "https://developer.intuit.com/",
302
+ "docs_url": "https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/invoice",
303
+ "docs": [
304
+ "connectors/quickbooks_online/docs/quickbooks-online.md",
305
+ "connectors/quickbooks_online/docs/auth.md"
306
+ ],
307
+ "setup_note": "The caller stores tokens and binds environment plus realm_id after verified OAuth callback state. No implicit authorization or refresh."
308
+ }
309
+ }
@@ -0,0 +1,13 @@
1
+ # QuickBooks Online authentication
2
+
3
+ The [catalog](../catalog.json) owns fixed Intuit OAuth declarations. Use the public `build_authorization_request`, `request_token` and `get_auth_contract` functions. Neither read action authorizes or refreshes implicitly.
4
+
5
+ - `oauth2_authorization_code`: explicit code and refresh grants. Consent requests `com.intuit.quickbooks.accounting` with caller-generated state and callback URI.
6
+ - `oauth2_token`: resolved bearer-token reads, plus explicit refresh grants when application fields and a refresh token are supplied to `request_token`.
7
+ - Both grant requests use HTTP Basic application authentication at `https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer`. Consent uses `https://appcenter.intuit.com/connect/oauth2`. The shared grant transport issues one token POST without automatic retries. PKCE is not declared for this provider contract.
8
+
9
+ The caller owns application secrets, state verification, callback handling, binding the returned `realmId` to the intended company, token custody/expiration, refresh concurrency and permissions. Supply only resolved `access_token` in action auth fields, and `{ "environment": "sandbox", "realm_id": "123456789" }` in action auth config. The environment must be `sandbox` or `production`; endpoints cannot be overridden. Code/token grants accept application fields separately from action execution validation.
10
+
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
+
13
+ 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.
@@ -0,0 +1,24 @@
1
+ # QuickBooks Online bounded reads
2
+
3
+ `get_default_client().execute` exposes exactly two actions:
4
+
5
+ | Action | Inputs | Output |
6
+ | --- | --- | --- |
7
+ | `quickbooks-online.company-info.get` | Empty object | Configured `realm_id`, provider `company_id`, optional `company_name` |
8
+ | `quickbooks-online.invoices.list` | `txn_date_from`, `txn_date_to`, `start_position`, `max_results` | `invoices`, `start_position`, `max_results`, `count`, optional provider `total_count` |
9
+
10
+ Use `ConnectorAuth("oauth2_token", {"access_token": token}, config={"environment": "sandbox", "realm_id": realm_id})` and optional `CallOptions(http=caller_http, timeout=seconds, rate_limiter=caller_bucket)`. The caller owns an injected HTTP client; the connector closes only clients it creates. The numeric timeout overrides each HTTP request; a consumer that needs a whole-operation deadline must enforce it separately. Shared transport retries reads at most three times. Redirects are disabled even when a supplied client enables them. Numeric Retry-After is capped at 30 seconds per retry. OAuth renewal uses its separate explicit, non-retrying token transport.
11
+
12
+ Invoice queries use inclusive valid calendar dates on `TxnDate` and provider-order offset pagination. The query uses `STARTPOSITION` and `MAXRESULTS`, matching the [current official PHP SDK query builder](https://github.com/intuit/QuickBooks-V3-PHP-SDK/blob/master/src/QueryFilter/QueryMessage.php). Explicit ordering is omitted because this increment does not require it and Invoice `Id` sort support was not established by primary evidence. Dates must be ordered, start position is 1-based (maximum 2147483647), and page size is 1–100. There is no arbitrary SQL, URL, write, or minor-version override. Sandbox requests use `sandbox-quickbooks.api.intuit.com`; production requests use `quickbooks.api.intuit.com`.
13
+
14
+ Every invoice carries `native_id`, exact UTF-8 `raw_json`, optional `source_revision` from supplied `SyncToken` and optional `source_updated_at` from supplied offset-aware `MetaData.LastUpdatedTime`. Object text is sliced from the response, retaining whitespace, escaping, numeric precision and scale. Monetary numbers are validated with decimal decoding and are never decoded as binary floats or reserialized. Supplied totals/balances may be zero or negative. Missing currency and other optional fields remain missing; no currency is inferred. Amounts and balances describe the provider's current response, not historical balances or revenue.
15
+
16
+ The provider validates the returned envelope and metadata because the public output schema is descriptive. Duplicate JSON keys anywhere, duplicate invoice IDs in a page, invalid identities/amounts/dates, invoices outside the requested dates, inconsistent positions/counts, malformed metadata, records above 16 KiB and response bodies above 2 MiB fail safely. The response-size check occurs after shared HTTP buffering. Credential echoes in raw text or decoded keys/values fail before registry redaction; evidence is never silently scrubbed and returned as exact.
17
+
18
+ A missing `Invoice` array in an otherwise empty `QueryResponse` means an empty page. Empty pages may omit position/count metadata; returned position then repeats the requested position and count is zero. Nonempty pages require `startPosition` and `maxResults` matching the request and returned count. Supplied `totalCount` is retained only as a nonnegative integer; its semantics are not used for termination.
19
+
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
+
22
+ 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
+
24
+ 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,75 @@
1
+ """Fixed QuickBooks read routes using the shared bounded HTTP transport."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import math
6
+ from collections.abc import Callable
7
+
8
+ import httpx
9
+
10
+ from stackos_connectors.errors import ConnectorError, IntegrationDownError, RateLimitedError
11
+ from stackos_connectors.shared.base import BaseIntegration, IntegrationCallResult
12
+
13
+ from .response import CompanyInfo, InvoicePage
14
+
15
+ HOSTS = {
16
+ "sandbox": "https://sandbox-quickbooks.api.intuit.com",
17
+ "production": "https://quickbooks.api.intuit.com",
18
+ }
19
+
20
+
21
+ class QuickBooksIntegration(BaseIntegration):
22
+ kind = vendor = "quickbooks-online"
23
+
24
+ @classmethod
25
+ def _provider_error(cls, response: httpx.Response) -> dict[str, str]:
26
+ # Never decode/retain arbitrary provider bodies in diagnostics.
27
+ return {"reason_code": _reason(response.status_code)}
28
+
29
+ @staticmethod
30
+ def _parse_retry_after(response: httpx.Response) -> float | None:
31
+ value = BaseIntegration._parse_retry_after(response)
32
+ return (
33
+ min(value, 30.0) if value is not None and math.isfinite(value) and value >= 0 else None
34
+ )
35
+
36
+ async def read(
37
+ self,
38
+ *,
39
+ op: str,
40
+ environment: str,
41
+ realm_id: str,
42
+ token: str,
43
+ path: str,
44
+ parser: Callable[[httpx.Response], CompanyInfo | InvoicePage],
45
+ params: dict[str, str] | None = None,
46
+ ) -> IntegrationCallResult:
47
+ try:
48
+ return await self.call(
49
+ op=op,
50
+ method="GET",
51
+ url=f"{HOSTS[environment]}/v3/company/{realm_id}/{path}",
52
+ headers={"Authorization": f"Bearer {token}", "Accept": "application/json"},
53
+ params=params,
54
+ response_parser=parser,
55
+ )
56
+ except (IntegrationDownError, RateLimitedError) as exc:
57
+ status = exc.data.get("status")
58
+ status = status if type(status) is int else None
59
+ raise ConnectorError(
60
+ "QuickBooks read failed",
61
+ provider_status_code=status,
62
+ provider_error={"reason_code": _reason(status)},
63
+ ) from None
64
+
65
+
66
+ def _reason(status: int | None) -> str:
67
+ if status == 401:
68
+ return "authentication_failed"
69
+ if status == 403:
70
+ return "permission_denied"
71
+ if status == 429:
72
+ return "rate_limited"
73
+ if status is not None and status >= 500:
74
+ return "provider_unavailable"
75
+ return "provider_failure" if status is not None else "network_error"