stackos-connectors 0.2.3__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.3 → stackos_connectors-0.2.4}/PKG-INFO +12 -3
  2. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/README.md +11 -2
  3. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/pyproject.toml +1 -1
  4. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/catalog.json +45 -0
  5. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/docs/auth.md +12 -0
  6. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/docs/quickbooks-online.md +5 -0
  7. stackos_connectors-0.2.4/src/stackos_connectors/connectors/quickbooks_online/probe.py +62 -0
  8. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/auth/test_probes.py +1 -1
  9. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/packaging/installed_auth_consumer.py +22 -2
  10. stackos_connectors-0.2.4/tests/quickbooks_online/test_probe.py +207 -0
  11. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/.github/workflows/publish.yml +0 -0
  12. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/.gitignore +0 -0
  13. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/LICENSE +0 -0
  14. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/__init__.py +0 -0
  15. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/auth.py +0 -0
  16. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog/index.json +0 -0
  17. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog/schema.json +0 -0
  18. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/catalog.py +0 -0
  19. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/__init__.py +0 -0
  20. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/__init__.py +0 -0
  21. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/actions.py +0 -0
  22. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/assets/icon.png +0 -0
  23. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/catalog.json +0 -0
  24. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ahrefs/integration.py +0 -0
  25. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/__init__.py +0 -0
  26. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/actions.py +0 -0
  27. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/catalog.json +0 -0
  28. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/contract.py +0 -0
  29. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/docs/aignc.md +0 -0
  30. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aignc/integration.py +0 -0
  31. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/__init__.py +0 -0
  32. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/actions.py +0 -0
  33. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/assets/icon.png +0 -0
  34. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/catalog.json +0 -0
  35. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/alibaba_wan/integration.py +0 -0
  36. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/__init__.py +0 -0
  37. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/actions.py +0 -0
  38. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/assets/icon.png +0 -0
  39. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/catalog.json +0 -0
  40. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/apollo/docs/protocol.md +0 -0
  41. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/__init__.py +0 -0
  42. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/actions.py +0 -0
  43. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/assets/icon.png +0 -0
  44. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/catalog.json +0 -0
  45. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/contract.py +0 -0
  46. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/docs/s3.md +0 -0
  47. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/integration.py +0 -0
  48. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/aws_s3/probe.py +0 -0
  49. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/__init__.py +0 -0
  50. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/actions.py +0 -0
  51. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedance/catalog.json +0 -0
  52. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/__init__.py +0 -0
  53. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/actions.py +0 -0
  54. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/catalog.json +0 -0
  55. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/byteplus_seedream/probe.py +0 -0
  56. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/__init__.py +0 -0
  57. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/actions.py +0 -0
  58. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/assets/icon.png +0 -0
  59. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/catalog.json +0 -0
  60. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/clay/docs/protocol.md +0 -0
  61. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/__init__.py +0 -0
  62. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/actions.py +0 -0
  63. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/assets/icon.png +0 -0
  64. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/catalog.json +0 -0
  65. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/docs/cloudflare-dns.md +0 -0
  66. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/cloudflare/integration.py +0 -0
  67. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/__init__.py +0 -0
  68. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/actions.py +0 -0
  69. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/assets/icon.jpeg +0 -0
  70. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/catalog.json +0 -0
  71. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/integration.py +0 -0
  72. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/dataforseo/probe.py +0 -0
  73. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/__init__.py +0 -0
  74. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/actions.py +0 -0
  75. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/assets/icon.png +0 -0
  76. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/catalog.json +0 -0
  77. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/firecrawl/integration.py +0 -0
  78. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/__init__.py +0 -0
  79. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/actions.py +0 -0
  80. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/assets/icon.svg +0 -0
  81. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/catalog.json +0 -0
  82. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/docs/ftp.md +0 -0
  83. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/integration.py +0 -0
  84. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/probe.py +0 -0
  85. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ftp/remote_tree.py +0 -0
  86. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/__init__.py +0 -0
  87. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/actions.py +0 -0
  88. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/assets/icon.png +0 -0
  89. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/catalog.json +0 -0
  90. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/integration.py +0 -0
  91. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ghost/probe.py +0 -0
  92. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/__init__.py +0 -0
  93. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/actions.py +0 -0
  94. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/assets/icon.png +0 -0
  95. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/catalog.json +0 -0
  96. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/docs/auth.md +0 -0
  97. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/docs/protocol.md +0 -0
  98. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_ads/probe.py +0 -0
  99. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/__init__.py +0 -0
  100. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/actions.py +0 -0
  101. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/assets/icon.png +0 -0
  102. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/catalog.json +0 -0
  103. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/docs/auth.md +0 -0
  104. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_analytics/integration.py +0 -0
  105. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/__init__.py +0 -0
  106. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/actions.py +0 -0
  107. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/assets/icon.webp +0 -0
  108. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/catalog.json +0 -0
  109. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_gemini_image/integration.py +0 -0
  110. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/__init__.py +0 -0
  111. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/actions.py +0 -0
  112. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/catalog.json +0 -0
  113. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/docs/auth.md +0 -0
  114. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/docs/google-indexing.md +0 -0
  115. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_indexing/integration.py +0 -0
  116. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/__init__.py +0 -0
  117. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/actions.py +0 -0
  118. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/assets/icon.png +0 -0
  119. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/auth.py +0 -0
  120. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/catalog.json +0 -0
  121. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/docs/auth.md +0 -0
  122. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/docs/google-search-console.md +0 -0
  123. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_search_console/integration.py +0 -0
  124. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/__init__.py +0 -0
  125. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/actions.py +0 -0
  126. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/assets/icon.png +0 -0
  127. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/catalog.json +0 -0
  128. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/docs/auth.md +0 -0
  129. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_tag_manager/integration.py +0 -0
  130. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/__init__.py +0 -0
  131. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/actions.py +0 -0
  132. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/assets/icon.png +0 -0
  133. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/catalog.json +0 -0
  134. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_veo/integration.py +0 -0
  135. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/__init__.py +0 -0
  136. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/actions.py +0 -0
  137. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/assets/icon.png +0 -0
  138. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/catalog.json +0 -0
  139. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/docs/auth.md +0 -0
  140. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/docs/protocol.md +0 -0
  141. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/google_workspace/probe.py +0 -0
  142. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/__init__.py +0 -0
  143. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/actions.py +0 -0
  144. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/http/catalog.json +0 -0
  145. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/__init__.py +0 -0
  146. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/actions.py +0 -0
  147. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/assets/icon.png +0 -0
  148. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/catalog.json +0 -0
  149. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/contract.py +0 -0
  150. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/auth.md +0 -0
  151. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/hubspot.md +0 -0
  152. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/docs/signatures.md +0 -0
  153. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/integration.py +0 -0
  154. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/hubspot/signature.py +0 -0
  155. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/__init__.py +0 -0
  156. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/actions.py +0 -0
  157. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/assets/icon.png +0 -0
  158. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/catalog.json +0 -0
  159. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/ideogram/integration.py +0 -0
  160. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/__init__.py +0 -0
  161. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/actions.py +0 -0
  162. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/assets/icon.svg +0 -0
  163. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/catalog.json +0 -0
  164. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/docs/protocol.md +0 -0
  165. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/integration.py +0 -0
  166. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/imap/probe.py +0 -0
  167. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/__init__.py +0 -0
  168. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/actions.py +0 -0
  169. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/assets/icon.png +0 -0
  170. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/catalog.json +0 -0
  171. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/jina/integration.py +0 -0
  172. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/__init__.py +0 -0
  173. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/actions.py +0 -0
  174. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/assets/icon.png +0 -0
  175. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/catalog.json +0 -0
  176. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/kling_video/integration.py +0 -0
  177. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/__init__.py +0 -0
  178. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/actions.py +0 -0
  179. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/auth/viewer-organization.graphql +0 -0
  180. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/create.graphql +0 -0
  181. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/delete.graphql +0 -0
  182. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/get.graphql +0 -0
  183. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/list.graphql +0 -0
  184. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/resolve.graphql +0 -0
  185. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/unresolve.graphql +0 -0
  186. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/comments/update.graphql +0 -0
  187. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/get.graphql +0 -0
  188. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/cycles/list.graphql +0 -0
  189. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/get.graphql +0 -0
  190. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-labels/list.graphql +0 -0
  191. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/create.graphql +0 -0
  192. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/delete.graphql +0 -0
  193. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/get.graphql +0 -0
  194. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/list.graphql +0 -0
  195. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issue-relations/update.graphql +0 -0
  196. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/add-label.graphql +0 -0
  197. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/archive.graphql +0 -0
  198. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/create.graphql +0 -0
  199. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/get.graphql +0 -0
  200. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/list.graphql +0 -0
  201. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/remove-label.graphql +0 -0
  202. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/search.graphql +0 -0
  203. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/unarchive.graphql +0 -0
  204. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/issues/update.graphql +0 -0
  205. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/projects/get.graphql +0 -0
  206. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/projects/list.graphql +0 -0
  207. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/teams/get.graphql +0 -0
  208. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/teams/list.graphql +0 -0
  209. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/users/get.graphql +0 -0
  210. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/users/list.graphql +0 -0
  211. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/viewer/get.graphql +0 -0
  212. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/get.graphql +0 -0
  213. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/graphql/workflow-states/list.graphql +0 -0
  214. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/assets/icon.png +0 -0
  215. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/catalog.json +0 -0
  216. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/contract.py +0 -0
  217. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/docs/auth.md +0 -0
  218. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/docs/linear.md +0 -0
  219. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/integration.py +0 -0
  220. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.json +0 -0
  221. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.metadata.json +0 -0
  222. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/linear/schemas/root-policy-2026-07-23.json +0 -0
  223. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/__init__.py +0 -0
  224. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/actions.py +0 -0
  225. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/assets/icon.png +0 -0
  226. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/auth.py +0 -0
  227. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/catalog.json +0 -0
  228. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/meta_ads/docs/auth.md +0 -0
  229. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/__init__.py +0 -0
  230. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/actions.py +0 -0
  231. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/assets/icon.png +0 -0
  232. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/auth.py +0 -0
  233. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/catalog.json +0 -0
  234. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/docs/auth.md +0 -0
  235. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/microsoft_365/docs/protocol.md +0 -0
  236. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/__init__.py +0 -0
  237. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/actions.py +0 -0
  238. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/assets/icon.webp +0 -0
  239. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/catalog.json +0 -0
  240. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openai_images/integration.py +0 -0
  241. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/__init__.py +0 -0
  242. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/assets/icon.png +0 -0
  243. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/catalog.json +0 -0
  244. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/integration.py +0 -0
  245. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/openrouter/probe.py +0 -0
  246. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/__init__.py +0 -0
  247. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/actions.py +0 -0
  248. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/assets/icon.png +0 -0
  249. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/catalog.json +0 -0
  250. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/docs/auth.md +0 -0
  251. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/outreach/docs/protocol.md +0 -0
  252. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/__init__.py +0 -0
  253. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/actions.py +0 -0
  254. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/assets/icon.png +0 -0
  255. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/catalog.json +0 -0
  256. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/docs/auth.md +0 -0
  257. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/docs/protocol.md +0 -0
  258. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/integration.py +0 -0
  259. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/pipedrive/probe.py +0 -0
  260. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/__init__.py +0 -0
  261. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/actions.py +0 -0
  262. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/integration.py +0 -0
  263. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/quickbooks_online/response.py +0 -0
  264. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/__init__.py +0 -0
  265. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/actions.py +0 -0
  266. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/assets/icon.png +0 -0
  267. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/catalog.json +0 -0
  268. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/docs/auth.md +0 -0
  269. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reddit/integration.py +0 -0
  270. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/__init__.py +0 -0
  271. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/actions.py +0 -0
  272. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/assets/icon.png +0 -0
  273. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/catalog.json +0 -0
  274. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/reve/integration.py +0 -0
  275. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/__init__.py +0 -0
  276. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/actions.py +0 -0
  277. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/assets/icon.png +0 -0
  278. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/auth.py +0 -0
  279. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/catalog.json +0 -0
  280. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/docs/auth.md +0 -0
  281. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesforce/docs/protocol.md +0 -0
  282. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/__init__.py +0 -0
  283. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/actions.py +0 -0
  284. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/assets/icon.jpeg +0 -0
  285. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/catalog.json +0 -0
  286. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/docs/auth.md +0 -0
  287. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/docs/protocol.md +0 -0
  288. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/salesloft/integration.py +0 -0
  289. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/__init__.py +0 -0
  290. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/actions.py +0 -0
  291. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/assets/icon.svg +0 -0
  292. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/catalog.json +0 -0
  293. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/serper/integration.py +0 -0
  294. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/__init__.py +0 -0
  295. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/actions.py +0 -0
  296. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/add-customer-tag.graphql +0 -0
  297. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/create-customer.graphql +0 -0
  298. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-lifetime-value.graphql +0 -0
  299. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-orders.graphql +0 -0
  300. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer.graphql +0 -0
  301. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/list-customers.graphql +0 -0
  302. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/remove-customer-tag.graphql +0 -0
  303. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/search-customers.graphql +0 -0
  304. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/customers/update-customer.graphql +0 -0
  305. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/adjust-inventory.graphql +0 -0
  306. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-by-sku.graphql +0 -0
  307. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-item.graphql +0 -0
  308. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/get-location-inventory.graphql +0 -0
  309. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-item-availability.graphql +0 -0
  310. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-levels.graphql +0 -0
  311. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/list-product-variant-inventory.graphql +0 -0
  312. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/inventory/set-inventory-level.graphql +0 -0
  313. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-note.graphql +0 -0
  314. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-tag.graphql +0 -0
  315. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/create-draft-order.graphql +0 -0
  316. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-by-name.graphql +0 -0
  317. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-fulfillment-status.graphql +0 -0
  318. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-timeline.graphql +0 -0
  319. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/get-order.graphql +0 -0
  320. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-order-variant-quantities.graphql +0 -0
  321. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/list-orders.graphql +0 -0
  322. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/mark-order-paid.graphql +0 -0
  323. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/search-orders.graphql +0 -0
  324. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-note.graphql +0 -0
  325. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-tags.graphql +0 -0
  326. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-collection.graphql +0 -0
  327. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product-variant.graphql +0 -0
  328. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/create-product.graphql +0 -0
  329. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-collection.graphql +0 -0
  330. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-by-handle.graphql +0 -0
  331. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product-variant.graphql +0 -0
  332. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/get-product.graphql +0 -0
  333. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-collections.graphql +0 -0
  334. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-product-variants.graphql +0 -0
  335. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/list-products.graphql +0 -0
  336. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/search-products.graphql +0 -0
  337. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-status.graphql +0 -0
  338. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product-variant.graphql +0 -0
  339. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/products/update-product.graphql +0 -0
  340. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/graphql/shopifyql.graphql +0 -0
  341. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/assets/icon.png +0 -0
  342. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/catalog.json +0 -0
  343. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/docs/shopify.md +0 -0
  344. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/integration.py +0 -0
  345. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/payloads.py +0 -0
  346. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/shopify/probe.py +0 -0
  347. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/__init__.py +0 -0
  348. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/actions.py +0 -0
  349. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/catalog.json +0 -0
  350. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/sitemap/integration.py +0 -0
  351. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/__init__.py +0 -0
  352. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/actions.py +0 -0
  353. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/assets/icon.png +0 -0
  354. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/auth.py +0 -0
  355. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/catalog.json +0 -0
  356. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/constants.py +0 -0
  357. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/docs/protocol.md +0 -0
  358. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/docs/signatures.md +0 -0
  359. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/files.py +0 -0
  360. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/http.py +0 -0
  361. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/integration.py +0 -0
  362. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/payloads.py +0 -0
  363. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/probe.py +0 -0
  364. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/results.py +0 -0
  365. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/slack_bot/validation.py +0 -0
  366. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/__init__.py +0 -0
  367. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/actions.py +0 -0
  368. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/assets/icon.svg +0 -0
  369. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/catalog.json +0 -0
  370. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/docs/protocol.md +0 -0
  371. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/integration.py +0 -0
  372. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/smtp/probe.py +0 -0
  373. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/__init__.py +0 -0
  374. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/actions.py +0 -0
  375. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/assets/icon.jpeg +0 -0
  376. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/catalog.json +0 -0
  377. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/contract.py +0 -0
  378. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/docs/stripe.md +0 -0
  379. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/stripe/integration.py +0 -0
  380. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/__init__.py +0 -0
  381. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/actions.py +0 -0
  382. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/assets/icon.svg +0 -0
  383. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/catalog.json +0 -0
  384. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/taboola/docs/auth.md +0 -0
  385. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/__init__.py +0 -0
  386. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/actions.py +0 -0
  387. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/assets/icon.png +0 -0
  388. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/auth.py +0 -0
  389. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/catalog.json +0 -0
  390. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/docs/auth-protocol.md +0 -0
  391. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/docs/protocol.md +0 -0
  392. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/payloads.py +0 -0
  393. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/schema.py +0 -0
  394. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/__init__.py +0 -0
  395. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/native.py +0 -0
  396. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/proxy.py +0 -0
  397. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/telegram/tdlib/sessions.py +0 -0
  398. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/__init__.py +0 -0
  399. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/actions.py +0 -0
  400. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/catalog.json +0 -0
  401. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/openapi.json +0 -0
  402. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/agent-api/stackos-tools.json +0 -0
  403. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets/icon.png +0 -0
  404. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/assets.py +0 -0
  405. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/catalog.json +0 -0
  406. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/contract.py +0 -0
  407. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/docs/agent-api/README.md +0 -0
  408. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/docs/trackbooth.md +0 -0
  409. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/integration.py +0 -0
  410. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/probe.py +0 -0
  411. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/schema.py +0 -0
  412. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/trackbooth/transport.py +0 -0
  413. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/__init__.py +0 -0
  414. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/actions.py +0 -0
  415. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/assets/icon.png +0 -0
  416. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/catalog.json +0 -0
  417. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/integration.py +0 -0
  418. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/wordpress/probe.py +0 -0
  419. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/__init__.py +0 -0
  420. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/actions.py +0 -0
  421. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/assets/icon.png +0 -0
  422. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/catalog.json +0 -0
  423. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/connectors/xai_imagine/integration.py +0 -0
  424. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/contracts.py +0 -0
  425. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/errors.py +0 -0
  426. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/probe.py +0 -0
  427. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/py.typed +0 -0
  428. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/redaction.py +0 -0
  429. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/registry.py +0 -0
  430. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/__init__.py +0 -0
  431. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/base.py +0 -0
  432. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/__init__.py +0 -0
  433. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/ark.py +0 -0
  434. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/byteplus/media.py +0 -0
  435. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/__init__.py +0 -0
  436. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/batch.py +0 -0
  437. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/oauth.py +0 -0
  438. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/probe.py +0 -0
  439. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/google/service_account.py +0 -0
  440. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/icons/integration.svg +0 -0
  441. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/media.py +0 -0
  442. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/oauth.py +0 -0
  443. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/provider_utils.py +0 -0
  444. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/rate_limit.py +0 -0
  445. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/shared/vendor_utils.py +0 -0
  446. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/src/stackos_connectors/validation.py +0 -0
  447. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/auth/test_auth_redaction.py +0 -0
  448. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/auth/test_google_service_account.py +0 -0
  449. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/auth/test_oauth_contracts.py +0 -0
  450. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/auth/test_oauth_protocol.py +0 -0
  451. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/auth/test_search_console_scopes.py +0 -0
  452. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/business/conftest.py +0 -0
  453. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/business/fixtures/wire-contracts.json +0 -0
  454. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/business/test_hubspot_signature_protocol.py +0 -0
  455. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/business/test_named_actions.py +0 -0
  456. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/business/test_pipedrive_probes.py +0 -0
  457. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/business/test_probe_boundary.py +0 -0
  458. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/business/test_salesloft_probes.py +0 -0
  459. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/catalog/test_catalog.py +0 -0
  460. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/catalog/test_nested_resources.py +0 -0
  461. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/catalog/test_presentation.py +0 -0
  462. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_contract.py +0 -0
  463. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_native_result_boundary.py +0 -0
  464. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_nested_auth_redaction.py +0 -0
  465. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_preflight_redaction.py +0 -0
  466. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_public_key_facts.py +0 -0
  467. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_runtime.py +0 -0
  468. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_timeout_options.py +0 -0
  469. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_validation_data.py +0 -0
  470. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/core/test_validation_execution_outcome.py +0 -0
  471. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/mail_slack/__init__.py +0 -0
  472. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/mail_slack/test_native.py +0 -0
  473. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/mail_slack/test_probes_catalog.py +0 -0
  474. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/mail_slack/test_signature_protocol.py +0 -0
  475. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/media/test_aignc_native.py +0 -0
  476. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/media/test_generation_outcomes.py +0 -0
  477. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/media/test_media_files.py +0 -0
  478. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/media/test_named_media.py +0 -0
  479. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/packaging/test_grouped_layout.py +0 -0
  480. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/quickbooks_online/__init__.py +0 -0
  481. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/quickbooks_online/conftest.py +0 -0
  482. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/quickbooks_online/test_auth.py +0 -0
  483. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/quickbooks_online/test_reads.py +0 -0
  484. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/safe_refs/conftest.py +0 -0
  485. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/safe_refs/test_linear_transport.py +0 -0
  486. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/safe_refs/test_safe_refs_named_actions.py +0 -0
  487. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/safe_refs/test_stripe_transport_transport.py +0 -0
  488. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/__init__.py +0 -0
  489. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/test_actions.py +0 -0
  490. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/test_authorization.py +0 -0
  491. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/test_closure_outcomes.py +0 -0
  492. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/test_native.py +0 -0
  493. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/test_payloads.py +0 -0
  494. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/test_proxy.py +0 -0
  495. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/telegram/test_sessions.py +0 -0
  496. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/trackbooth/__init__.py +0 -0
  497. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/trackbooth/test_native.py +0 -0
  498. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/__init__.py +0 -0
  499. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/catalog_fixture.py +0 -0
  500. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/conftest.py +0 -0
  501. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_ahrefs.py +0 -0
  502. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_boundary_timeout.py +0 -0
  503. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_cloudflare.py +0 -0
  504. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_dataforseo.py +0 -0
  505. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_firecrawl.py +0 -0
  506. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_ftp.py +0 -0
  507. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_ftp_actions.py +0 -0
  508. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_google_analytics.py +0 -0
  509. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_google_indexing.py +0 -0
  510. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_google_indexing_batch.py +0 -0
  511. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_google_search_console.py +0 -0
  512. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_google_search_console_batch.py +0 -0
  513. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_google_tag_manager.py +0 -0
  514. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_jina_reader.py +0 -0
  515. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_named_clients.py +0 -0
  516. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_native_boundary.py +0 -0
  517. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_openrouter.py +0 -0
  518. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_reddit.py +0 -0
  519. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_s3.py +0 -0
  520. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_s3_actions.py +0 -0
  521. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_serper.py +0 -0
  522. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_shopify.py +0 -0
  523. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_sitemap.py +0 -0
  524. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_transport_defaults.py +0 -0
  525. {stackos_connectors-0.2.3 → stackos_connectors-0.2.4}/tests/web/test_wordpress_ghost.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stackos-connectors
3
- Version: 0.2.3
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
@@ -191,15 +191,24 @@ 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.3
194
+ python -m pip install stackos-connectors==0.2.4
195
195
  ```
196
196
 
197
- Or add `stackos-connectors==0.2.3` 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
+
203
212
  ### 0.2.3 release notes
204
213
 
205
214
  - Restore Google Indexing service-account token acquisition through the canonical
@@ -175,15 +175,24 @@ 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.3
178
+ python -m pip install stackos-connectors==0.2.4
179
179
  ```
180
180
 
181
- Or add `stackos-connectors==0.2.3` 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
+
187
196
  ### 0.2.3 release notes
188
197
 
189
198
  - Restore Google Indexing service-account token acquisition through the canonical
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "stackos-connectors"
7
- version = "0.2.3"
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"
@@ -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
+ }
@@ -385,5 +385,5 @@ def test_probe_bindings_are_fixed_and_metadata_discovery_does_not_probe(monkeypa
385
385
  for key, metadata in get_default_client().registry.connector_metadata.items()
386
386
  if metadata.get("probe_implementation")
387
387
  }
388
- assert len(bound) == 37
388
+ assert len(bound) == 38
389
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():
@@ -202,7 +221,6 @@ async def main():
202
221
  assert result.access_token == ACCESS and result.scopes_present
203
222
  assert ACCESS not in repr(result) and SECRET not in repr(auth)
204
223
  assert len(grant_calls) == 17 # Meta explicitly performs its second exchange.
205
- await quickbooks_reads(client)
206
224
 
207
225
  async with httpx.AsyncClient(
208
226
  transport=httpx.MockTransport(
@@ -302,6 +320,7 @@ async def main():
302
320
 
303
321
  auth_api.request_token = implicit_grant
304
322
  oauth_protocol.request_token = implicit_grant
323
+ await quickbooks_reads(client)
305
324
  client.describe("google-workspace")
306
325
  config = project_probe_config(
307
326
  "wordpress", {"site_url": "https://fixture.test", "account_ref": "private"}
@@ -396,6 +415,7 @@ async def main():
396
415
  "slack_v0",
397
416
  "hubspot_v3",
398
417
  "quickbooks_exact_reads",
418
+ "quickbooks_company_probe",
399
419
  ],
400
420
  "network": "blocked; injected edges only",
401
421
  "origins": origins,
@@ -0,0 +1,207 @@
1
+ import json
2
+ import socket
3
+
4
+ import httpx
5
+ import pytest
6
+
7
+ from stackos_connectors import CallOptions, ConnectorAuth, get_default_client, probe_credentials
8
+ from stackos_connectors.errors import ConnectorError, IntegrationDownError, ValidationError
9
+ from stackos_connectors.probe import AuthProbeEvidence, project_probe_config
10
+
11
+ PROVIDER = "quickbooks-online"
12
+ TOKEN = "qbo-probe-access-canary"
13
+ CONFIG = {"environment": "sandbox", "realm_id": "123456789"}
14
+
15
+
16
+ @pytest.fixture(autouse=True)
17
+ def no_implicit_grant_or_network(monkeypatch):
18
+ def forbidden(*args, **kwargs):
19
+ raise AssertionError("probe must use the supplied token and injected HTTP transport")
20
+
21
+ monkeypatch.setattr(socket.socket, "connect", forbidden)
22
+ monkeypatch.setattr(socket, "getaddrinfo", forbidden)
23
+ monkeypatch.setattr("stackos_connectors.auth.request_token", forbidden)
24
+ monkeypatch.setattr("stackos_connectors.shared.oauth.request_token", forbidden)
25
+
26
+
27
+ @pytest.mark.parametrize("method", ["oauth2_authorization_code", "oauth2_token"])
28
+ def test_setup_declares_required_explicit_company_context(method):
29
+ description = get_default_client().describe(PROVIDER)
30
+ declaration = next(item for item in description["auth_methods"] if item["key"] == method)
31
+ setup = declaration["setup"]
32
+ assert setup["label"]
33
+ fields = {field["key"]: field for field in setup["fields"]}
34
+ environment, realm = fields["environment"], fields["realm_id"]
35
+ assert environment["type"] == "select" and environment["required"]
36
+ assert not environment["secret"]
37
+ assert {option["value"] for option in environment["options"]} == {"sandbox", "production"}
38
+ assert realm["type"] == "text" and realm["required"] and not realm["secret"]
39
+ assert "numeric" in realm["description"].lower()
40
+ schema = declaration["config_schema"]
41
+ assert schema["required"] == ["environment", "realm_id"]
42
+ assert schema["properties"]["realm_id"]["pattern"] == "^[0-9]{1,32}$"
43
+ assert "default" not in schema["properties"]["environment"]
44
+ assert "default" not in environment and not setup.get("config")
45
+ assert project_probe_config(PROVIDER, {**CONFIG, "account_ref": "private-host-ref"}) == CONFIG
46
+
47
+
48
+ @pytest.mark.parametrize("method", ["oauth2_authorization_code", "oauth2_token"])
49
+ @pytest.mark.parametrize(
50
+ "environment,host",
51
+ [("sandbox", "sandbox-quickbooks.api.intuit.com"), ("production", "quickbooks.api.intuit.com")],
52
+ )
53
+ async def test_probe_uses_company_read_and_preserves_distinct_identity(method, environment, host):
54
+ calls = []
55
+
56
+ class Limiter:
57
+ count = 0
58
+
59
+ async def acquire(self, n=1):
60
+ self.count += 1
61
+
62
+ limiter = Limiter()
63
+
64
+ def handle(request):
65
+ calls.append(request)
66
+ assert request.method == "GET"
67
+ assert str(request.url) == f"https://{host}/v3/company/123456789/companyinfo/123456789"
68
+ assert request.headers["authorization"] == f"Bearer {TOKEN}"
69
+ assert request.extensions["timeout"]["read"] == 0.5
70
+ return httpx.Response(
71
+ 200,
72
+ json={"CompanyInfo": {"Id": "1", "CompanyName": "Example", "Email": "private"}},
73
+ )
74
+
75
+ async with httpx.AsyncClient(transport=httpx.MockTransport(handle)) as http:
76
+ result = await probe_credentials(
77
+ PROVIDER,
78
+ auth=ConnectorAuth(
79
+ method, {"access_token": TOKEN}, {**CONFIG, "environment": environment}
80
+ ),
81
+ options=CallOptions(http=http, timeout=0.5, rate_limiter=limiter),
82
+ )
83
+ assert not http.is_closed
84
+ assert result["ok"] and result["vendor"] == PROVIDER and result["status"] == "ok"
85
+ evidence = result["metadata"]["evidence"]
86
+ assert evidence == {
87
+ "account": {
88
+ "provider_account_id": None,
89
+ "display_name": "Example",
90
+ "metadata": {
91
+ "company_id": "1",
92
+ "configured_realm_id": "123456789",
93
+ "environment": environment,
94
+ },
95
+ }
96
+ }
97
+ assert AuthProbeEvidence.model_validate(evidence).grants is None
98
+ assert TOKEN not in json.dumps(result) and "private" not in json.dumps(result)
99
+ assert len(calls) == 1 and limiter.count == 1
100
+
101
+
102
+ async def test_probe_optional_company_name_does_not_gain_scope_evidence():
103
+ async with httpx.AsyncClient(
104
+ transport=httpx.MockTransport(
105
+ lambda r: httpx.Response(200, json={"CompanyInfo": {"Id": "1"}})
106
+ )
107
+ ) as http:
108
+ result = await probe_credentials(
109
+ PROVIDER,
110
+ auth=ConnectorAuth("oauth2_token", {"access_token": TOKEN}, CONFIG),
111
+ options=CallOptions(http=http),
112
+ )
113
+ evidence = result["metadata"]["evidence"]
114
+ assert evidence["account"]["display_name"] is None
115
+ assert "grants" not in evidence and "scope" not in json.dumps(result)
116
+
117
+
118
+ @pytest.mark.parametrize(
119
+ "config",
120
+ [
121
+ {},
122
+ {"realm_id": "123"},
123
+ {"environment": "sandbox"},
124
+ {**CONFIG, "environment": "unknown"},
125
+ {**CONFIG, "realm_id": "../123"},
126
+ {**CONFIG, "realm_id": 123},
127
+ ],
128
+ )
129
+ async def test_probe_rejects_missing_or_invalid_context_before_io(config):
130
+ with pytest.raises(ValidationError, match="inputs are invalid"):
131
+ await probe_credentials(
132
+ PROVIDER, auth=ConnectorAuth("oauth2_token", {"access_token": TOKEN}, config)
133
+ )
134
+
135
+
136
+ @pytest.mark.parametrize(
137
+ "body",
138
+ [
139
+ b"not json",
140
+ b"{}",
141
+ b'{"CompanyInfo":{"Id":1}}',
142
+ b'{"CompanyInfo":{"Id":"1","Id":"2"}}',
143
+ b'{"CompanyInfo":{"Id":"1","CompanyName":""}}',
144
+ json.dumps({"CompanyInfo": {"Id": "1", "CompanyName": TOKEN}}).encode(),
145
+ json.dumps({"CompanyInfo": {"Id": "1", "private": TOKEN}}).encode(),
146
+ ],
147
+ )
148
+ async def test_probe_reuses_malformed_and_credential_echo_rejection(body):
149
+ async with httpx.AsyncClient(
150
+ transport=httpx.MockTransport(lambda r: httpx.Response(200, content=body))
151
+ ) as http:
152
+ with pytest.raises(IntegrationDownError) as caught:
153
+ await probe_credentials(
154
+ PROVIDER,
155
+ auth=ConnectorAuth("oauth2_token", {"access_token": TOKEN}, CONFIG),
156
+ options=CallOptions(http=http),
157
+ )
158
+ assert caught.value.data == {"stage": "test", "reason_code": "invalid_response"}
159
+ assert TOKEN not in str(caught.value.__dict__)
160
+ assert caught.value.__cause__ is None
161
+
162
+
163
+ @pytest.mark.parametrize(
164
+ "status,reason",
165
+ [
166
+ (401, "authentication_failed"),
167
+ (403, "permission_denied"),
168
+ (429, "rate_limited"),
169
+ (503, "provider_unavailable"),
170
+ ],
171
+ )
172
+ async def test_probe_preserves_safe_provider_error_without_body(status, reason):
173
+ async with httpx.AsyncClient(
174
+ transport=httpx.MockTransport(
175
+ lambda r: httpx.Response(
176
+ status,
177
+ json={"Fault": {"Error": [{"Message": f"private-body {TOKEN}"}]}},
178
+ headers={"Retry-After": "0.001"},
179
+ )
180
+ )
181
+ ) as http:
182
+ with pytest.raises(IntegrationDownError) as caught:
183
+ await probe_credentials(
184
+ PROVIDER,
185
+ auth=ConnectorAuth("oauth2_token", {"access_token": TOKEN}, CONFIG),
186
+ options=CallOptions(http=http),
187
+ )
188
+ assert caught.value.data == {"stage": "test", "status": status, "reason_code": reason}
189
+ assert TOKEN not in str(caught.value.__dict__) and "private-body" not in str(
190
+ caught.value.__dict__
191
+ )
192
+
193
+
194
+ async def test_probe_never_returns_unreviewed_exception_details(monkeypatch):
195
+ async def fail(*args, **kwargs):
196
+ raise ConnectorError(
197
+ f"unsafe-detail {TOKEN}",
198
+ provider_error={"reason_code": "unsafe-reason", "body": f"unsafe-body {TOKEN}"},
199
+ )
200
+
201
+ monkeypatch.setattr(get_default_client(), "execute", fail)
202
+ with pytest.raises(IntegrationDownError) as caught:
203
+ await probe_credentials(
204
+ PROVIDER, auth=ConnectorAuth("oauth2_token", {"access_token": TOKEN}, CONFIG)
205
+ )
206
+ assert caught.value.data == {"stage": "test", "reason_code": "probe_error"}
207
+ assert "unsafe" not in str(caught.value.__dict__) and TOKEN not in str(caught.value.__dict__)