stackos-connectors 0.1.0__py3-none-any.whl

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 (388) hide show
  1. stackos_connectors/__init__.py +99 -0
  2. stackos_connectors/catalog/index.json +54 -0
  3. stackos_connectors/catalog/schema.json +80 -0
  4. stackos_connectors/catalog.py +160 -0
  5. stackos_connectors/connectors/__init__.py +1 -0
  6. stackos_connectors/connectors/ahrefs/__init__.py +1 -0
  7. stackos_connectors/connectors/ahrefs/actions.py +107 -0
  8. stackos_connectors/connectors/ahrefs/assets/icon.png +0 -0
  9. stackos_connectors/connectors/ahrefs/catalog.json +186 -0
  10. stackos_connectors/connectors/ahrefs/integration.py +184 -0
  11. stackos_connectors/connectors/aignc/__init__.py +1 -0
  12. stackos_connectors/connectors/aignc/actions.py +82 -0
  13. stackos_connectors/connectors/aignc/catalog.json +662 -0
  14. stackos_connectors/connectors/aignc/contract.py +31 -0
  15. stackos_connectors/connectors/aignc/docs/aignc.md +33 -0
  16. stackos_connectors/connectors/aignc/integration.py +572 -0
  17. stackos_connectors/connectors/alibaba_wan/__init__.py +1 -0
  18. stackos_connectors/connectors/alibaba_wan/actions.py +85 -0
  19. stackos_connectors/connectors/alibaba_wan/assets/icon.png +0 -0
  20. stackos_connectors/connectors/alibaba_wan/catalog.json +221 -0
  21. stackos_connectors/connectors/alibaba_wan/integration.py +392 -0
  22. stackos_connectors/connectors/apollo/__init__.py +1 -0
  23. stackos_connectors/connectors/apollo/actions.py +213 -0
  24. stackos_connectors/connectors/apollo/assets/icon.png +0 -0
  25. stackos_connectors/connectors/apollo/catalog.json +313 -0
  26. stackos_connectors/connectors/apollo/docs/protocol.md +19 -0
  27. stackos_connectors/connectors/aws_s3/__init__.py +1 -0
  28. stackos_connectors/connectors/aws_s3/actions.py +3082 -0
  29. stackos_connectors/connectors/aws_s3/assets/icon.png +0 -0
  30. stackos_connectors/connectors/aws_s3/catalog.json +1048 -0
  31. stackos_connectors/connectors/aws_s3/contract.py +89 -0
  32. stackos_connectors/connectors/aws_s3/docs/s3.md +49 -0
  33. stackos_connectors/connectors/aws_s3/integration.py +369 -0
  34. stackos_connectors/connectors/byteplus_seedance/__init__.py +1 -0
  35. stackos_connectors/connectors/byteplus_seedance/actions.py +85 -0
  36. stackos_connectors/connectors/byteplus_seedance/catalog.json +246 -0
  37. stackos_connectors/connectors/byteplus_seedream/__init__.py +1 -0
  38. stackos_connectors/connectors/byteplus_seedream/actions.py +88 -0
  39. stackos_connectors/connectors/byteplus_seedream/catalog.json +292 -0
  40. stackos_connectors/connectors/clay/__init__.py +1 -0
  41. stackos_connectors/connectors/clay/actions.py +100 -0
  42. stackos_connectors/connectors/clay/assets/icon.png +0 -0
  43. stackos_connectors/connectors/clay/catalog.json +139 -0
  44. stackos_connectors/connectors/clay/docs/protocol.md +16 -0
  45. stackos_connectors/connectors/cloudflare/__init__.py +1 -0
  46. stackos_connectors/connectors/cloudflare/actions.py +705 -0
  47. stackos_connectors/connectors/cloudflare/assets/icon.png +0 -0
  48. stackos_connectors/connectors/cloudflare/catalog.json +6381 -0
  49. stackos_connectors/connectors/cloudflare/docs/cloudflare-dns.md +37 -0
  50. stackos_connectors/connectors/cloudflare/integration.py +397 -0
  51. stackos_connectors/connectors/dataforseo/__init__.py +1 -0
  52. stackos_connectors/connectors/dataforseo/actions.py +147 -0
  53. stackos_connectors/connectors/dataforseo/assets/icon.jpeg +0 -0
  54. stackos_connectors/connectors/dataforseo/catalog.json +1275 -0
  55. stackos_connectors/connectors/dataforseo/integration.py +252 -0
  56. stackos_connectors/connectors/firecrawl/__init__.py +1 -0
  57. stackos_connectors/connectors/firecrawl/actions.py +100 -0
  58. stackos_connectors/connectors/firecrawl/assets/icon.png +0 -0
  59. stackos_connectors/connectors/firecrawl/catalog.json +189 -0
  60. stackos_connectors/connectors/firecrawl/integration.py +168 -0
  61. stackos_connectors/connectors/ftp/__init__.py +1 -0
  62. stackos_connectors/connectors/ftp/actions.py +1190 -0
  63. stackos_connectors/connectors/ftp/assets/icon.svg +7 -0
  64. stackos_connectors/connectors/ftp/catalog.json +1091 -0
  65. stackos_connectors/connectors/ftp/docs/ftp.md +40 -0
  66. stackos_connectors/connectors/ftp/integration.py +271 -0
  67. stackos_connectors/connectors/ftp/remote_tree.py +342 -0
  68. stackos_connectors/connectors/ghost/__init__.py +1 -0
  69. stackos_connectors/connectors/ghost/actions.py +80 -0
  70. stackos_connectors/connectors/ghost/assets/icon.png +0 -0
  71. stackos_connectors/connectors/ghost/catalog.json +214 -0
  72. stackos_connectors/connectors/ghost/integration.py +159 -0
  73. stackos_connectors/connectors/google_ads/__init__.py +1 -0
  74. stackos_connectors/connectors/google_ads/actions.py +279 -0
  75. stackos_connectors/connectors/google_ads/assets/icon.png +0 -0
  76. stackos_connectors/connectors/google_ads/catalog.json +797 -0
  77. stackos_connectors/connectors/google_ads/docs/protocol.md +22 -0
  78. stackos_connectors/connectors/google_analytics/__init__.py +1 -0
  79. stackos_connectors/connectors/google_analytics/actions.py +224 -0
  80. stackos_connectors/connectors/google_analytics/assets/icon.png +0 -0
  81. stackos_connectors/connectors/google_analytics/catalog.json +442 -0
  82. stackos_connectors/connectors/google_analytics/integration.py +112 -0
  83. stackos_connectors/connectors/google_gemini_image/__init__.py +1 -0
  84. stackos_connectors/connectors/google_gemini_image/actions.py +90 -0
  85. stackos_connectors/connectors/google_gemini_image/assets/icon.webp +0 -0
  86. stackos_connectors/connectors/google_gemini_image/catalog.json +275 -0
  87. stackos_connectors/connectors/google_gemini_image/integration.py +420 -0
  88. stackos_connectors/connectors/google_indexing/__init__.py +1 -0
  89. stackos_connectors/connectors/google_indexing/actions.py +148 -0
  90. stackos_connectors/connectors/google_indexing/catalog.json +224 -0
  91. stackos_connectors/connectors/google_indexing/docs/google-indexing.md +38 -0
  92. stackos_connectors/connectors/google_indexing/integration.py +261 -0
  93. stackos_connectors/connectors/google_search_console/__init__.py +1 -0
  94. stackos_connectors/connectors/google_search_console/actions.py +486 -0
  95. stackos_connectors/connectors/google_search_console/assets/icon.png +0 -0
  96. stackos_connectors/connectors/google_search_console/catalog.json +714 -0
  97. stackos_connectors/connectors/google_search_console/docs/google-search-console.md +37 -0
  98. stackos_connectors/connectors/google_search_console/integration.py +367 -0
  99. stackos_connectors/connectors/google_tag_manager/__init__.py +1 -0
  100. stackos_connectors/connectors/google_tag_manager/actions.py +241 -0
  101. stackos_connectors/connectors/google_tag_manager/assets/icon.png +0 -0
  102. stackos_connectors/connectors/google_tag_manager/catalog.json +477 -0
  103. stackos_connectors/connectors/google_tag_manager/integration.py +133 -0
  104. stackos_connectors/connectors/google_veo/__init__.py +1 -0
  105. stackos_connectors/connectors/google_veo/actions.py +85 -0
  106. stackos_connectors/connectors/google_veo/assets/icon.png +0 -0
  107. stackos_connectors/connectors/google_veo/catalog.json +211 -0
  108. stackos_connectors/connectors/google_veo/integration.py +337 -0
  109. stackos_connectors/connectors/google_workspace/__init__.py +1 -0
  110. stackos_connectors/connectors/google_workspace/actions.py +148 -0
  111. stackos_connectors/connectors/google_workspace/assets/icon.png +0 -0
  112. stackos_connectors/connectors/google_workspace/catalog.json +302 -0
  113. stackos_connectors/connectors/google_workspace/docs/protocol.md +19 -0
  114. stackos_connectors/connectors/http/__init__.py +1 -0
  115. stackos_connectors/connectors/http/actions.py +280 -0
  116. stackos_connectors/connectors/http/catalog.json +100 -0
  117. stackos_connectors/connectors/hubspot/__init__.py +1 -0
  118. stackos_connectors/connectors/hubspot/actions.py +144 -0
  119. stackos_connectors/connectors/hubspot/assets/icon.png +0 -0
  120. stackos_connectors/connectors/hubspot/catalog.json +4959 -0
  121. stackos_connectors/connectors/hubspot/contract.py +534 -0
  122. stackos_connectors/connectors/hubspot/docs/hubspot.md +41 -0
  123. stackos_connectors/connectors/hubspot/integration.py +209 -0
  124. stackos_connectors/connectors/ideogram/__init__.py +1 -0
  125. stackos_connectors/connectors/ideogram/actions.py +88 -0
  126. stackos_connectors/connectors/ideogram/assets/icon.png +0 -0
  127. stackos_connectors/connectors/ideogram/catalog.json +282 -0
  128. stackos_connectors/connectors/ideogram/integration.py +310 -0
  129. stackos_connectors/connectors/imap/__init__.py +1 -0
  130. stackos_connectors/connectors/imap/actions.py +1186 -0
  131. stackos_connectors/connectors/imap/assets/icon.svg +7 -0
  132. stackos_connectors/connectors/imap/catalog.json +520 -0
  133. stackos_connectors/connectors/imap/docs/protocol.md +19 -0
  134. stackos_connectors/connectors/imap/integration.py +300 -0
  135. stackos_connectors/connectors/jina/__init__.py +1 -0
  136. stackos_connectors/connectors/jina/actions.py +57 -0
  137. stackos_connectors/connectors/jina/assets/icon.png +0 -0
  138. stackos_connectors/connectors/jina/catalog.json +102 -0
  139. stackos_connectors/connectors/jina/integration.py +63 -0
  140. stackos_connectors/connectors/kling_video/__init__.py +1 -0
  141. stackos_connectors/connectors/kling_video/actions.py +86 -0
  142. stackos_connectors/connectors/kling_video/assets/icon.png +0 -0
  143. stackos_connectors/connectors/kling_video/catalog.json +232 -0
  144. stackos_connectors/connectors/kling_video/integration.py +413 -0
  145. stackos_connectors/connectors/linear/__init__.py +1 -0
  146. stackos_connectors/connectors/linear/actions.py +103 -0
  147. stackos_connectors/connectors/linear/assets/graphql/auth/viewer-organization.graphql +10 -0
  148. stackos_connectors/connectors/linear/assets/graphql/comments/create.graphql +25 -0
  149. stackos_connectors/connectors/linear/assets/graphql/comments/delete.graphql +6 -0
  150. stackos_connectors/connectors/linear/assets/graphql/comments/get.graphql +25 -0
  151. stackos_connectors/connectors/linear/assets/graphql/comments/list.graphql +45 -0
  152. stackos_connectors/connectors/linear/assets/graphql/comments/resolve.graphql +11 -0
  153. stackos_connectors/connectors/linear/assets/graphql/comments/unresolve.graphql +11 -0
  154. stackos_connectors/connectors/linear/assets/graphql/comments/update.graphql +14 -0
  155. stackos_connectors/connectors/linear/assets/graphql/cycles/get.graphql +17 -0
  156. stackos_connectors/connectors/linear/assets/graphql/cycles/list.graphql +37 -0
  157. stackos_connectors/connectors/linear/assets/graphql/issue-labels/get.graphql +15 -0
  158. stackos_connectors/connectors/linear/assets/graphql/issue-labels/list.graphql +35 -0
  159. stackos_connectors/connectors/linear/assets/graphql/issue-relations/create.graphql +21 -0
  160. stackos_connectors/connectors/linear/assets/graphql/issue-relations/delete.graphql +6 -0
  161. stackos_connectors/connectors/linear/assets/graphql/issue-relations/get.graphql +19 -0
  162. stackos_connectors/connectors/linear/assets/graphql/issue-relations/list.graphql +42 -0
  163. stackos_connectors/connectors/linear/assets/graphql/issue-relations/update.graphql +21 -0
  164. stackos_connectors/connectors/linear/assets/graphql/issues/add-label.graphql +17 -0
  165. stackos_connectors/connectors/linear/assets/graphql/issues/archive.graphql +11 -0
  166. stackos_connectors/connectors/linear/assets/graphql/issues/create.graphql +27 -0
  167. stackos_connectors/connectors/linear/assets/graphql/issues/get.graphql +51 -0
  168. stackos_connectors/connectors/linear/assets/graphql/issues/list.graphql +71 -0
  169. stackos_connectors/connectors/linear/assets/graphql/issues/remove-label.graphql +17 -0
  170. stackos_connectors/connectors/linear/assets/graphql/issues/search.graphql +62 -0
  171. stackos_connectors/connectors/linear/assets/graphql/issues/unarchive.graphql +11 -0
  172. stackos_connectors/connectors/linear/assets/graphql/issues/update.graphql +23 -0
  173. stackos_connectors/connectors/linear/assets/graphql/projects/get.graphql +18 -0
  174. stackos_connectors/connectors/linear/assets/graphql/projects/list.graphql +38 -0
  175. stackos_connectors/connectors/linear/assets/graphql/teams/get.graphql +12 -0
  176. stackos_connectors/connectors/linear/assets/graphql/teams/list.graphql +30 -0
  177. stackos_connectors/connectors/linear/assets/graphql/users/get.graphql +10 -0
  178. stackos_connectors/connectors/linear/assets/graphql/users/list.graphql +30 -0
  179. stackos_connectors/connectors/linear/assets/graphql/viewer/get.graphql +14 -0
  180. stackos_connectors/connectors/linear/assets/graphql/workflow-states/get.graphql +16 -0
  181. stackos_connectors/connectors/linear/assets/graphql/workflow-states/list.graphql +36 -0
  182. stackos_connectors/connectors/linear/assets/icon.png +0 -0
  183. stackos_connectors/connectors/linear/catalog.json +2794 -0
  184. stackos_connectors/connectors/linear/contract.py +101 -0
  185. stackos_connectors/connectors/linear/docs/linear.md +35 -0
  186. stackos_connectors/connectors/linear/integration.py +518 -0
  187. stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.json +1 -0
  188. stackos_connectors/connectors/linear/schemas/introspection-2026-07-23.metadata.json +18 -0
  189. stackos_connectors/connectors/linear/schemas/root-policy-2026-07-23.json +552 -0
  190. stackos_connectors/connectors/meta_ads/__init__.py +1 -0
  191. stackos_connectors/connectors/meta_ads/actions.py +357 -0
  192. stackos_connectors/connectors/meta_ads/assets/icon.png +0 -0
  193. stackos_connectors/connectors/meta_ads/catalog.json +977 -0
  194. stackos_connectors/connectors/microsoft_365/__init__.py +1 -0
  195. stackos_connectors/connectors/microsoft_365/actions.py +121 -0
  196. stackos_connectors/connectors/microsoft_365/assets/icon.png +0 -0
  197. stackos_connectors/connectors/microsoft_365/catalog.json +261 -0
  198. stackos_connectors/connectors/microsoft_365/docs/protocol.md +17 -0
  199. stackos_connectors/connectors/openai_images/__init__.py +1 -0
  200. stackos_connectors/connectors/openai_images/actions.py +85 -0
  201. stackos_connectors/connectors/openai_images/assets/icon.webp +0 -0
  202. stackos_connectors/connectors/openai_images/catalog.json +282 -0
  203. stackos_connectors/connectors/openai_images/integration.py +327 -0
  204. stackos_connectors/connectors/openrouter/__init__.py +1 -0
  205. stackos_connectors/connectors/openrouter/assets/icon.png +0 -0
  206. stackos_connectors/connectors/openrouter/catalog.json +114 -0
  207. stackos_connectors/connectors/openrouter/integration.py +69 -0
  208. stackos_connectors/connectors/outreach/__init__.py +1 -0
  209. stackos_connectors/connectors/outreach/actions.py +107 -0
  210. stackos_connectors/connectors/outreach/assets/icon.png +0 -0
  211. stackos_connectors/connectors/outreach/catalog.json +197 -0
  212. stackos_connectors/connectors/outreach/docs/protocol.md +18 -0
  213. stackos_connectors/connectors/pipedrive/__init__.py +1 -0
  214. stackos_connectors/connectors/pipedrive/actions.py +173 -0
  215. stackos_connectors/connectors/pipedrive/assets/icon.png +0 -0
  216. stackos_connectors/connectors/pipedrive/catalog.json +449 -0
  217. stackos_connectors/connectors/pipedrive/docs/protocol.md +22 -0
  218. stackos_connectors/connectors/pipedrive/integration.py +160 -0
  219. stackos_connectors/connectors/reddit/__init__.py +1 -0
  220. stackos_connectors/connectors/reddit/actions.py +85 -0
  221. stackos_connectors/connectors/reddit/assets/icon.png +0 -0
  222. stackos_connectors/connectors/reddit/catalog.json +173 -0
  223. stackos_connectors/connectors/reddit/integration.py +117 -0
  224. stackos_connectors/connectors/reve/__init__.py +1 -0
  225. stackos_connectors/connectors/reve/actions.py +89 -0
  226. stackos_connectors/connectors/reve/assets/icon.png +0 -0
  227. stackos_connectors/connectors/reve/catalog.json +354 -0
  228. stackos_connectors/connectors/reve/integration.py +463 -0
  229. stackos_connectors/connectors/salesforce/__init__.py +1 -0
  230. stackos_connectors/connectors/salesforce/actions.py +173 -0
  231. stackos_connectors/connectors/salesforce/assets/icon.png +0 -0
  232. stackos_connectors/connectors/salesforce/catalog.json +490 -0
  233. stackos_connectors/connectors/salesforce/docs/protocol.md +17 -0
  234. stackos_connectors/connectors/salesloft/__init__.py +1 -0
  235. stackos_connectors/connectors/salesloft/actions.py +96 -0
  236. stackos_connectors/connectors/salesloft/assets/icon.jpeg +0 -0
  237. stackos_connectors/connectors/salesloft/catalog.json +239 -0
  238. stackos_connectors/connectors/salesloft/docs/protocol.md +17 -0
  239. stackos_connectors/connectors/salesloft/integration.py +119 -0
  240. stackos_connectors/connectors/serper/__init__.py +1 -0
  241. stackos_connectors/connectors/serper/actions.py +71 -0
  242. stackos_connectors/connectors/serper/assets/icon.svg +6 -0
  243. stackos_connectors/connectors/serper/catalog.json +124 -0
  244. stackos_connectors/connectors/serper/integration.py +83 -0
  245. stackos_connectors/connectors/shopify/__init__.py +1 -0
  246. stackos_connectors/connectors/shopify/actions.py +430 -0
  247. stackos_connectors/connectors/shopify/assets/graphql/customers/add-customer-tag.graphql +11 -0
  248. stackos_connectors/connectors/shopify/assets/graphql/customers/create-customer.graphql +24 -0
  249. stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-lifetime-value.graphql +30 -0
  250. stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer-orders.graphql +27 -0
  251. stackos_connectors/connectors/shopify/assets/graphql/customers/get-customer.graphql +45 -0
  252. stackos_connectors/connectors/shopify/assets/graphql/customers/list-customers.graphql +29 -0
  253. stackos_connectors/connectors/shopify/assets/graphql/customers/remove-customer-tag.graphql +11 -0
  254. stackos_connectors/connectors/shopify/assets/graphql/customers/search-customers.graphql +29 -0
  255. stackos_connectors/connectors/shopify/assets/graphql/customers/update-customer.graphql +24 -0
  256. stackos_connectors/connectors/shopify/assets/graphql/inventory/adjust-inventory.graphql +25 -0
  257. stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-by-sku.graphql +28 -0
  258. stackos_connectors/connectors/shopify/assets/graphql/inventory/get-inventory-item.graphql +26 -0
  259. stackos_connectors/connectors/shopify/assets/graphql/inventory/get-location-inventory.graphql +26 -0
  260. stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-item-availability.graphql +40 -0
  261. stackos_connectors/connectors/shopify/assets/graphql/inventory/list-inventory-levels.graphql +30 -0
  262. stackos_connectors/connectors/shopify/assets/graphql/inventory/list-product-variant-inventory.graphql +20 -0
  263. stackos_connectors/connectors/shopify/assets/graphql/inventory/set-inventory-level.graphql +25 -0
  264. stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-note.graphql +13 -0
  265. stackos_connectors/connectors/shopify/assets/graphql/orders/add-order-tag.graphql +11 -0
  266. stackos_connectors/connectors/shopify/assets/graphql/orders/create-draft-order.graphql +67 -0
  267. stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-by-name.graphql +91 -0
  268. stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-fulfillment-status.graphql +17 -0
  269. stackos_connectors/connectors/shopify/assets/graphql/orders/get-order-timeline.graphql +15 -0
  270. stackos_connectors/connectors/shopify/assets/graphql/orders/get-order.graphql +87 -0
  271. stackos_connectors/connectors/shopify/assets/graphql/orders/list-order-variant-quantities.graphql +18 -0
  272. stackos_connectors/connectors/shopify/assets/graphql/orders/list-orders.graphql +54 -0
  273. stackos_connectors/connectors/shopify/assets/graphql/orders/mark-order-paid.graphql +13 -0
  274. stackos_connectors/connectors/shopify/assets/graphql/orders/search-orders.graphql +54 -0
  275. stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-note.graphql +13 -0
  276. stackos_connectors/connectors/shopify/assets/graphql/orders/update-order-tags.graphql +13 -0
  277. stackos_connectors/connectors/shopify/assets/graphql/products/create-collection.graphql +17 -0
  278. stackos_connectors/connectors/shopify/assets/graphql/products/create-product-variant.graphql +20 -0
  279. stackos_connectors/connectors/shopify/assets/graphql/products/create-product.graphql +29 -0
  280. stackos_connectors/connectors/shopify/assets/graphql/products/get-collection.graphql +41 -0
  281. stackos_connectors/connectors/shopify/assets/graphql/products/get-product-by-handle.graphql +61 -0
  282. stackos_connectors/connectors/shopify/assets/graphql/products/get-product-variant.graphql +31 -0
  283. stackos_connectors/connectors/shopify/assets/graphql/products/get-product.graphql +61 -0
  284. stackos_connectors/connectors/shopify/assets/graphql/products/list-collections.graphql +24 -0
  285. stackos_connectors/connectors/shopify/assets/graphql/products/list-product-variants.graphql +27 -0
  286. stackos_connectors/connectors/shopify/assets/graphql/products/list-products.graphql +38 -0
  287. stackos_connectors/connectors/shopify/assets/graphql/products/search-products.graphql +38 -0
  288. stackos_connectors/connectors/shopify/assets/graphql/products/update-product-status.graphql +14 -0
  289. stackos_connectors/connectors/shopify/assets/graphql/products/update-product-variant.graphql +20 -0
  290. stackos_connectors/connectors/shopify/assets/graphql/products/update-product.graphql +19 -0
  291. stackos_connectors/connectors/shopify/assets/graphql/shopifyql.graphql +13 -0
  292. stackos_connectors/connectors/shopify/assets/icon.png +0 -0
  293. stackos_connectors/connectors/shopify/catalog.json +3178 -0
  294. stackos_connectors/connectors/shopify/docs/shopify.md +51 -0
  295. stackos_connectors/connectors/shopify/integration.py +228 -0
  296. stackos_connectors/connectors/shopify/payloads.py +592 -0
  297. stackos_connectors/connectors/sitemap/__init__.py +1 -0
  298. stackos_connectors/connectors/sitemap/actions.py +88 -0
  299. stackos_connectors/connectors/sitemap/catalog.json +72 -0
  300. stackos_connectors/connectors/sitemap/integration.py +324 -0
  301. stackos_connectors/connectors/slack_bot/__init__.py +1 -0
  302. stackos_connectors/connectors/slack_bot/actions.py +47 -0
  303. stackos_connectors/connectors/slack_bot/assets/icon.png +0 -0
  304. stackos_connectors/connectors/slack_bot/catalog.json +557 -0
  305. stackos_connectors/connectors/slack_bot/constants.py +14 -0
  306. stackos_connectors/connectors/slack_bot/docs/protocol.md +20 -0
  307. stackos_connectors/connectors/slack_bot/files.py +111 -0
  308. stackos_connectors/connectors/slack_bot/http.py +163 -0
  309. stackos_connectors/connectors/slack_bot/integration.py +87 -0
  310. stackos_connectors/connectors/slack_bot/payloads.py +38 -0
  311. stackos_connectors/connectors/slack_bot/results.py +30 -0
  312. stackos_connectors/connectors/slack_bot/validation.py +145 -0
  313. stackos_connectors/connectors/smtp/__init__.py +1 -0
  314. stackos_connectors/connectors/smtp/actions.py +324 -0
  315. stackos_connectors/connectors/smtp/assets/icon.svg +7 -0
  316. stackos_connectors/connectors/smtp/catalog.json +238 -0
  317. stackos_connectors/connectors/smtp/docs/protocol.md +13 -0
  318. stackos_connectors/connectors/smtp/integration.py +104 -0
  319. stackos_connectors/connectors/stripe/__init__.py +1 -0
  320. stackos_connectors/connectors/stripe/actions.py +265 -0
  321. stackos_connectors/connectors/stripe/assets/icon.jpeg +0 -0
  322. stackos_connectors/connectors/stripe/catalog.json +2315 -0
  323. stackos_connectors/connectors/stripe/contract.py +92 -0
  324. stackos_connectors/connectors/stripe/docs/stripe.md +58 -0
  325. stackos_connectors/connectors/stripe/integration.py +668 -0
  326. stackos_connectors/connectors/taboola/__init__.py +1 -0
  327. stackos_connectors/connectors/taboola/actions.py +286 -0
  328. stackos_connectors/connectors/taboola/assets/icon.svg +18 -0
  329. stackos_connectors/connectors/taboola/catalog.json +593 -0
  330. stackos_connectors/connectors/telegram/__init__.py +1 -0
  331. stackos_connectors/connectors/telegram/actions.py +291 -0
  332. stackos_connectors/connectors/telegram/assets/icon.png +0 -0
  333. stackos_connectors/connectors/telegram/catalog.json +2121 -0
  334. stackos_connectors/connectors/telegram/docs/protocol.md +20 -0
  335. stackos_connectors/connectors/telegram/payloads.py +278 -0
  336. stackos_connectors/connectors/telegram/schema.py +35 -0
  337. stackos_connectors/connectors/telegram/tdlib/__init__.py +1 -0
  338. stackos_connectors/connectors/telegram/tdlib/native.py +513 -0
  339. stackos_connectors/connectors/telegram/tdlib/proxy.py +347 -0
  340. stackos_connectors/connectors/telegram/tdlib/sessions.py +256 -0
  341. stackos_connectors/connectors/trackbooth/__init__.py +5 -0
  342. stackos_connectors/connectors/trackbooth/actions.py +220 -0
  343. stackos_connectors/connectors/trackbooth/assets/agent-api/catalog.json +53858 -0
  344. stackos_connectors/connectors/trackbooth/assets/agent-api/openapi.json +25942 -0
  345. stackos_connectors/connectors/trackbooth/assets/agent-api/stackos-tools.json +17122 -0
  346. stackos_connectors/connectors/trackbooth/assets/icon.png +0 -0
  347. stackos_connectors/connectors/trackbooth/assets.py +279 -0
  348. stackos_connectors/connectors/trackbooth/catalog.json +168 -0
  349. stackos_connectors/connectors/trackbooth/contract.py +8 -0
  350. stackos_connectors/connectors/trackbooth/docs/agent-api/README.md +17 -0
  351. stackos_connectors/connectors/trackbooth/docs/trackbooth.md +33 -0
  352. stackos_connectors/connectors/trackbooth/integration.py +202 -0
  353. stackos_connectors/connectors/trackbooth/schema.py +78 -0
  354. stackos_connectors/connectors/trackbooth/transport.py +107 -0
  355. stackos_connectors/connectors/wordpress/__init__.py +1 -0
  356. stackos_connectors/connectors/wordpress/actions.py +69 -0
  357. stackos_connectors/connectors/wordpress/assets/icon.png +0 -0
  358. stackos_connectors/connectors/wordpress/catalog.json +183 -0
  359. stackos_connectors/connectors/wordpress/integration.py +121 -0
  360. stackos_connectors/connectors/xai_imagine/__init__.py +1 -0
  361. stackos_connectors/connectors/xai_imagine/actions.py +89 -0
  362. stackos_connectors/connectors/xai_imagine/assets/icon.png +0 -0
  363. stackos_connectors/connectors/xai_imagine/catalog.json +402 -0
  364. stackos_connectors/connectors/xai_imagine/integration.py +420 -0
  365. stackos_connectors/contracts.py +177 -0
  366. stackos_connectors/errors.py +63 -0
  367. stackos_connectors/probe.py +26 -0
  368. stackos_connectors/py.typed +0 -0
  369. stackos_connectors/redaction.py +140 -0
  370. stackos_connectors/registry.py +419 -0
  371. stackos_connectors/shared/__init__.py +1 -0
  372. stackos_connectors/shared/base.py +380 -0
  373. stackos_connectors/shared/byteplus/__init__.py +1 -0
  374. stackos_connectors/shared/byteplus/ark.py +794 -0
  375. stackos_connectors/shared/byteplus/media.py +178 -0
  376. stackos_connectors/shared/google/__init__.py +1 -0
  377. stackos_connectors/shared/google/batch.py +219 -0
  378. stackos_connectors/shared/google/oauth.py +51 -0
  379. stackos_connectors/shared/icons/integration.svg +8 -0
  380. stackos_connectors/shared/media.py +263 -0
  381. stackos_connectors/shared/provider_utils.py +350 -0
  382. stackos_connectors/shared/rate_limit.py +72 -0
  383. stackos_connectors/shared/vendor_utils.py +182 -0
  384. stackos_connectors/validation.py +25 -0
  385. stackos_connectors-0.1.0.dist-info/METADATA +160 -0
  386. stackos_connectors-0.1.0.dist-info/RECORD +388 -0
  387. stackos_connectors-0.1.0.dist-info/WHEEL +4 -0
  388. stackos_connectors-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,186 @@
1
+ {
2
+ "schema_version": "stackos.connector.v1",
3
+ "connector": "ahrefs",
4
+ "name": "Ahrefs",
5
+ "description": "Organic keyword and backlink research provider; requires eligible API access and API units.",
6
+ "auth_methods": [
7
+ {
8
+ "key": "api_key",
9
+ "description": "Supply the Ahrefs API key for bearer authentication.",
10
+ "fields_schema": {
11
+ "type": "object",
12
+ "properties": {
13
+ "api_key": {
14
+ "description": "API Key",
15
+ "type": "string",
16
+ "minLength": 1
17
+ }
18
+ },
19
+ "required": [
20
+ "api_key"
21
+ ]
22
+ },
23
+ "config_schema": {
24
+ "type": "object",
25
+ "properties": {},
26
+ "required": []
27
+ },
28
+ "payload_format": "raw",
29
+ "payload_field": "api_key",
30
+ "setup": {
31
+ "label": "API key",
32
+ "description": "Ahrefs API v3 calls consume API units and require eligible Direct API access. Obtain an API key in the Ahrefs app. The limits_and_usage action reads subscription information, including plan and key limits and remaining units.",
33
+ "fields": [
34
+ {
35
+ "description": null,
36
+ "key": "api_key",
37
+ "label": "API Key",
38
+ "options": null,
39
+ "placeholder": null,
40
+ "required": true,
41
+ "secret": true,
42
+ "type": "secret"
43
+ }
44
+ ]
45
+ }
46
+ }
47
+ ],
48
+ "actions": [
49
+ {
50
+ "key": "competitor.keywords",
51
+ "operation": "competitor.keywords",
52
+ "input_schema": {
53
+ "additionalProperties": false,
54
+ "properties": {
55
+ "country": {
56
+ "type": "string"
57
+ },
58
+ "date": {
59
+ "type": "string"
60
+ },
61
+ "limit": {
62
+ "description": "Positive number of rows requested from Ahrefs. Defaults to 100; provider plan restrictions are returned by Ahrefs.",
63
+ "minimum": 1,
64
+ "type": "integer"
65
+ },
66
+ "target": {
67
+ "type": "string"
68
+ }
69
+ },
70
+ "required": [
71
+ "target"
72
+ ],
73
+ "type": "object"
74
+ },
75
+ "output_schema": {
76
+ "additionalProperties": true,
77
+ "type": "object"
78
+ },
79
+ "auth_methods": [
80
+ "api_key"
81
+ ],
82
+ "auth_optional": false,
83
+ "config": {},
84
+ "description": "Fetch organic keywords for a target. Returns provider data and API-unit response headers. Does not make an implicit limits request.",
85
+ "metadata": {
86
+ "capability": "seo-research",
87
+ "name": "Competitor Keywords",
88
+ "risk_level": "cost"
89
+ }
90
+ },
91
+ {
92
+ "key": "backlink.research",
93
+ "operation": "backlink.research",
94
+ "input_schema": {
95
+ "additionalProperties": false,
96
+ "properties": {
97
+ "limit": {
98
+ "description": "Positive number of rows requested from Ahrefs. Defaults to 100; provider plan restrictions are returned by Ahrefs.",
99
+ "minimum": 1,
100
+ "type": "integer"
101
+ },
102
+ "mode": {
103
+ "enum": [
104
+ "exact",
105
+ "prefix",
106
+ "domain",
107
+ "subdomains"
108
+ ],
109
+ "type": "string"
110
+ },
111
+ "target": {
112
+ "type": "string"
113
+ }
114
+ },
115
+ "required": [
116
+ "target"
117
+ ],
118
+ "type": "object"
119
+ },
120
+ "output_schema": {
121
+ "additionalProperties": true,
122
+ "type": "object"
123
+ },
124
+ "auth_methods": [
125
+ "api_key"
126
+ ],
127
+ "auth_optional": false,
128
+ "config": {},
129
+ "description": "Fetch backlinks for a target. Returns provider data and API-unit response headers. Does not make an implicit limits request.",
130
+ "metadata": {
131
+ "capability": "seo-research",
132
+ "name": "Backlink Research",
133
+ "risk_level": "cost"
134
+ }
135
+ },
136
+ {
137
+ "key": "limits_and_usage",
138
+ "operation": "limits_and_usage",
139
+ "input_schema": {
140
+ "type": "object",
141
+ "properties": {},
142
+ "additionalProperties": false
143
+ },
144
+ "output_schema": {
145
+ "type": "object",
146
+ "additionalProperties": true
147
+ },
148
+ "auth_methods": [
149
+ "api_key"
150
+ ],
151
+ "config": {},
152
+ "description": "Fetch subscription limits and usage with GET /v3/subscription-info/limits-and-usage. Returns provider facts without enforcing caller admission policy.",
153
+ "metadata": {
154
+ "name": "Limits and usage",
155
+ "risk_level": "read"
156
+ }
157
+ }
158
+ ],
159
+ "setup": {
160
+ "billing_url": "https://app.ahrefs.com/account/subscription",
161
+ "console_url": "https://app.ahrefs.com/",
162
+ "credential_label": "Ahrefs API key",
163
+ "credential_url": "https://app.ahrefs.com/api",
164
+ "docs_url": "https://docs.ahrefs.com/",
165
+ "fallback_reason": "API access is plan/account gated; official API docs and Ahrefs app are the nearest setup path.",
166
+ "fallback_url": "https://docs.ahrefs.com/",
167
+ "homepage_url": "https://ahrefs.com/",
168
+ "setup_note": "Ahrefs API v3 calls consume API units and require eligible Direct API access. Obtain an API key in the Ahrefs app. The limits_and_usage action reads subscription information, including plan and key limits and remaining units.",
169
+ "signup_url": "https://app.ahrefs.com/user/sign-up",
170
+ "docs": [
171
+ "https://docs.ahrefs.com/en/api/docs/introduction",
172
+ "https://docs.ahrefs.com/en/api/docs/api-keys-creation-and-management",
173
+ "https://docs.ahrefs.com/en/api/docs/limits-consumption",
174
+ "https://docs.ahrefs.com/en/api/reference/subscription-info/get-limits-and-usage",
175
+ "https://docs.ahrefs.com/en/api/reference/site-explorer",
176
+ "https://docs.ahrefs.com/en/api/reference/site-explorer/get-organic-keywords",
177
+ "https://docs.ahrefs.com/en/api/reference/site-explorer/get-all-backlinks"
178
+ ]
179
+ },
180
+ "implementation": "stackos_connectors.connectors.ahrefs.actions:AhrefsActionConnector",
181
+ "icon": {
182
+ "media_type": "image/png",
183
+ "kind": "icon",
184
+ "path": "connectors/ahrefs/assets/icon.png"
185
+ }
186
+ }
@@ -0,0 +1,184 @@
1
+ """Ahrefs integration wrapper (PLAN.md L1047).
2
+
3
+ Authentication: Bearer ``Authorization: Bearer <api_key>``. Ahrefs only
4
+ serves this wrapper when the operator has a paid plan/API units that
5
+ allow direct API v3 calls; for solo/SMB operators DataForSEO covers most
6
+ of the same surface area.
7
+
8
+ Operations:
9
+
10
+ - ``keywords_for_site(target, country)`` — keyword inventory.
11
+ - ``top_backlinks(target, mode, limit)`` — top inbound links.
12
+
13
+ Graceful degrade: if no credential payload is present,
14
+ ``test_credentials`` raises ``IntegrationDownError`` with a documented
15
+ fallback hint. Wrapper construction itself does NOT raise — the skill code
16
+ checks ``test_credentials`` before issuing the first real op.
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ from datetime import date, timedelta
22
+ from typing import Any
23
+
24
+ from stackos_connectors.errors import IntegrationDownError
25
+ from stackos_connectors.shared.base import BaseIntegration, IntegrationCallResult
26
+
27
+ _AHREFS_UNIT_HEADERS = {
28
+ "x-api-rows": "rows",
29
+ "x-api-units-cost-row": "cost_row",
30
+ "x-api-units-cost-total": "cost_total",
31
+ "x-api-units-cost-total-actual": "cost_total_actual",
32
+ }
33
+
34
+
35
+ class AhrefsIntegration(BaseIntegration):
36
+ """Wrapper for ``https://api.ahrefs.com/v3``."""
37
+
38
+ kind = "ahrefs"
39
+ vendor = "ahrefs"
40
+ # Official refs: https://docs.ahrefs.com/en/api/docs/introduction and
41
+ # https://docs.ahrefs.com/en/api/docs/limits-consumption. Ahrefs bills in
42
+ # API units; unit headers are metadata until StackOS models unit budgets.
43
+ default_qps = 1.0
44
+
45
+ BASE_URL = "https://api.ahrefs.com/v3"
46
+
47
+ def __init__(self, **kwargs: Any) -> None:
48
+ super().__init__(**kwargs)
49
+ self._api_key = self.payload.decode("utf-8").strip() if self.payload else ""
50
+
51
+ def _require_key(self) -> str:
52
+ if not self._api_key:
53
+ raise IntegrationDownError(
54
+ "Ahrefs API key is not configured.",
55
+ data={
56
+ "vendor": "ahrefs",
57
+ "hint": "Pass a non-empty API key using the api_key authentication method.",
58
+ },
59
+ )
60
+ return self._api_key
61
+
62
+ def _auth_headers(self) -> dict[str, str]:
63
+ return {
64
+ "Authorization": f"Bearer {self._require_key()}",
65
+ "Accept": "application/json",
66
+ }
67
+
68
+ @staticmethod
69
+ def _default_report_date() -> str:
70
+ """Use yesterday: Ahrefs reports are date-bound and may lag today."""
71
+ return (date.today() - timedelta(days=1)).isoformat()
72
+
73
+ @staticmethod
74
+ def _parse_int(value: str | None) -> int | None:
75
+ if value is None:
76
+ return None
77
+ try:
78
+ return int(value)
79
+ except ValueError:
80
+ return None
81
+
82
+ def _extract_response_metadata(
83
+ self,
84
+ op: str,
85
+ *,
86
+ request: Any,
87
+ response: Any,
88
+ http_response: Any,
89
+ ) -> dict[str, Any] | None:
90
+ """Capture Ahrefs unit-accounting headers documented for API v3."""
91
+ del op, request, response
92
+ api_units: dict[str, Any] = {}
93
+ for header, key in _AHREFS_UNIT_HEADERS.items():
94
+ parsed = self._parse_int(http_response.headers.get(header))
95
+ if parsed is not None:
96
+ api_units[key] = parsed
97
+ cache_header = http_response.headers.get("x-api-cache")
98
+ if cache_header:
99
+ api_units["cache"] = cache_header
100
+ if not api_units:
101
+ return None
102
+ metadata: dict[str, Any] = {"api_units": api_units}
103
+ if isinstance(cache_header, str) and cache_header.lower() == "hit":
104
+ metadata["cached"] = True
105
+ return metadata
106
+
107
+ async def limits_and_usage(self) -> IntegrationCallResult:
108
+ """Read the free subscription/usage endpoint before paid row calls."""
109
+ return await self.call(
110
+ op="limits_and_usage",
111
+ method="GET",
112
+ url=f"{self.BASE_URL}/subscription-info/limits-and-usage",
113
+ headers=self._auth_headers(),
114
+ )
115
+
116
+ async def keywords_for_site(
117
+ self,
118
+ *,
119
+ target: str,
120
+ country: str = "us",
121
+ limit: int = 100,
122
+ date_: str | None = None,
123
+ ) -> IntegrationCallResult:
124
+ """Keyword inventory for the target domain."""
125
+ # Endpoint ref:
126
+ # https://docs.ahrefs.com/en/api/reference/site-explorer/get-organic-keywords
127
+ params = {
128
+ "target": target,
129
+ "country": country,
130
+ "limit": str(limit),
131
+ "date": date_ or self._default_report_date(),
132
+ "select": "keyword,volume,cpc,best_position,keyword_difficulty",
133
+ }
134
+ return await self.call(
135
+ op="keywords_for_site",
136
+ method="GET",
137
+ url=f"{self.BASE_URL}/site-explorer/organic-keywords",
138
+ params=params,
139
+ headers=self._auth_headers(),
140
+ )
141
+
142
+ async def top_backlinks(
143
+ self,
144
+ *,
145
+ target: str,
146
+ mode: str = "domain",
147
+ limit: int = 100,
148
+ ) -> IntegrationCallResult:
149
+ """Top inbound backlinks; ``mode`` is ``domain`` or ``exact``."""
150
+ # Endpoint ref:
151
+ # https://docs.ahrefs.com/en/api/reference/site-explorer/get-all-backlinks
152
+ params = {
153
+ "target": target,
154
+ "mode": mode,
155
+ "limit": str(limit),
156
+ "select": "url_from,url_to,domain_rating_source,first_seen",
157
+ }
158
+ return await self.call(
159
+ op="top_backlinks",
160
+ method="GET",
161
+ url=f"{self.BASE_URL}/site-explorer/all-backlinks",
162
+ params=params,
163
+ headers=self._auth_headers(),
164
+ )
165
+
166
+ async def test_credentials(self) -> dict[str, Any]:
167
+ """Cheap auth probe — call a free ``domain-rating`` query.
168
+
169
+ Raises ``IntegrationDownError`` with the Ahrefs setup hint when no
170
+ key is configured (graceful degrade — the keyword-discovery skill
171
+ picks this up and falls back to DataForSEO).
172
+ """
173
+ self._require_key()
174
+ result = await self.call(
175
+ op="test",
176
+ method="GET",
177
+ url=f"{self.BASE_URL}/site-explorer/domain-rating",
178
+ params={"target": "wordcount.com", "date": self._default_report_date()},
179
+ headers=self._auth_headers(),
180
+ )
181
+ return {"ok": True, "vendor": "ahrefs", "data": result.data}
182
+
183
+
184
+ __all__ = ["AhrefsIntegration"]
@@ -0,0 +1 @@
1
+ """AIGNC native protocol connector."""
@@ -0,0 +1,82 @@
1
+ """Named AIGNC requests with caller-owned files and resolved bearer credentials."""
2
+
3
+ from contextlib import nullcontext
4
+ from pathlib import Path
5
+
6
+ import httpx
7
+
8
+ from stackos_connectors.connectors.aignc.integration import AigncIntegration
9
+ from stackos_connectors.contracts import ConnectorRequest, ConnectorResult, ValidationIssue
10
+ from stackos_connectors.shared.provider_utils import credential_value, issue
11
+
12
+
13
+ class AigncActionConnector:
14
+ key = "aignc"
15
+
16
+ def validate(self, request: ConnectorRequest) -> list[ValidationIssue]:
17
+ issues = []
18
+ if request.operation == "image.generate" and request.options.output_dir is None:
19
+ issues.append(
20
+ issue("$.options.output_dir", "output_dir is required for generated media")
21
+ )
22
+ for name in ("max_response_bytes", "max_image_bytes", "max_audio_bytes"):
23
+ value = request.options.provider_context.get(name)
24
+ if value is not None and (type(value) is not int or value <= 0):
25
+ issues.append(
26
+ issue(
27
+ f"$.options.provider_context.{name}", f"{name} must be a positive integer"
28
+ )
29
+ )
30
+ return issues
31
+
32
+ def estimate_cost_cents(self, _request: ConnectorRequest) -> int:
33
+ return 0
34
+
35
+ async def execute(self, request: ConnectorRequest) -> ConnectorResult:
36
+ data = request.input_json
37
+ async with (
38
+ nullcontext(request.options.http)
39
+ if request.options.http is not None
40
+ else httpx.AsyncClient()
41
+ ) as http:
42
+ client = AigncIntegration(
43
+ payload=credential_value(request, "api_key").encode(),
44
+ http=http,
45
+ timeout=request.options.timeout,
46
+ rate_limiter=request.options.rate_limiter,
47
+ output_dir=request.options.output_dir,
48
+ **{
49
+ name: request.options.provider_context.get(name)
50
+ for name in ("max_response_bytes", "max_image_bytes", "max_audio_bytes")
51
+ },
52
+ )
53
+ if request.operation == "models.list":
54
+ result = await client.models()
55
+ elif request.operation == "chat.complete":
56
+ result = await client.chat_complete(
57
+ model=data["model"],
58
+ messages=data["messages"],
59
+ max_tokens=data["max_tokens"],
60
+ google_search=data.get("google_search", False),
61
+ )
62
+ elif request.operation == "image.generate":
63
+ result = await client.generate_image(
64
+ prompt=data["prompt"], max_tokens=data["max_tokens"]
65
+ )
66
+ elif request.operation == "audio.analyze":
67
+ result = await client.analyze_audio(
68
+ model=data["model"],
69
+ instruction=data["instruction"],
70
+ audio_path=Path(data["audio_path"]),
71
+ format=data["format"],
72
+ max_tokens=data["max_tokens"],
73
+ )
74
+ else:
75
+ from stackos_connectors.errors import ValidationError
76
+
77
+ raise ValidationError("unsupported AIGNC operation")
78
+ return ConnectorResult(
79
+ output_json=result.data,
80
+ metadata_json={"vendor": "aignc", **(result.metadata or {})},
81
+ files=client.files,
82
+ )