outhad-integrations 0.32.0

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 (275) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +43 -0
  4. data/.ruby-version +1 -0
  5. data/.vscode/settings.json +5 -0
  6. data/README.md +76 -0
  7. data/Rakefile +12 -0
  8. data/lib/outhad/integrations/config.rb +14 -0
  9. data/lib/outhad/integrations/core/base_connector.rb +79 -0
  10. data/lib/outhad/integrations/core/constants.rb +103 -0
  11. data/lib/outhad/integrations/core/destination_connector.rb +20 -0
  12. data/lib/outhad/integrations/core/fullrefresher.rb +19 -0
  13. data/lib/outhad/integrations/core/http_client.rb +17 -0
  14. data/lib/outhad/integrations/core/http_helper.rb +36 -0
  15. data/lib/outhad/integrations/core/query_builder.rb +33 -0
  16. data/lib/outhad/integrations/core/rate_limiter.rb +19 -0
  17. data/lib/outhad/integrations/core/source_connector.rb +66 -0
  18. data/lib/outhad/integrations/core/streaming_http_client.rb +21 -0
  19. data/lib/outhad/integrations/core/unstructured_source_connector.rb +52 -0
  20. data/lib/outhad/integrations/core/utils.rb +123 -0
  21. data/lib/outhad/integrations/core/vector_source_connector.rb +14 -0
  22. data/lib/outhad/integrations/destination/airtable/client.rb +157 -0
  23. data/lib/outhad/integrations/destination/airtable/config/catalog.json +6 -0
  24. data/lib/outhad/integrations/destination/airtable/config/meta.json +15 -0
  25. data/lib/outhad/integrations/destination/airtable/config/spec.json +23 -0
  26. data/lib/outhad/integrations/destination/airtable/icon.svg +6 -0
  27. data/lib/outhad/integrations/destination/airtable/schema_helper.rb +141 -0
  28. data/lib/outhad/integrations/destination/ais_data_store/client.rb +130 -0
  29. data/lib/outhad/integrations/destination/ais_data_store/config/meta.json +15 -0
  30. data/lib/outhad/integrations/destination/ais_data_store/config/spec.json +68 -0
  31. data/lib/outhad/integrations/destination/ais_data_store/icon.svg +4 -0
  32. data/lib/outhad/integrations/destination/amazon_s3/client.rb +92 -0
  33. data/lib/outhad/integrations/destination/amazon_s3/config/catalog.json +16 -0
  34. data/lib/outhad/integrations/destination/amazon_s3/config/meta.json +15 -0
  35. data/lib/outhad/integrations/destination/amazon_s3/config/spec.json +56 -0
  36. data/lib/outhad/integrations/destination/amazon_s3/icon.svg +34 -0
  37. data/lib/outhad/integrations/destination/databricks_lakehouse/client.rb +147 -0
  38. data/lib/outhad/integrations/destination/databricks_lakehouse/config/meta.json +15 -0
  39. data/lib/outhad/integrations/destination/databricks_lakehouse/config/spec.json +44 -0
  40. data/lib/outhad/integrations/destination/databricks_lakehouse/icon.svg +65 -0
  41. data/lib/outhad/integrations/destination/facebook_custom_audience/client.rb +125 -0
  42. data/lib/outhad/integrations/destination/facebook_custom_audience/config/catalog.json +42 -0
  43. data/lib/outhad/integrations/destination/facebook_custom_audience/config/meta.json +15 -0
  44. data/lib/outhad/integrations/destination/facebook_custom_audience/config/spec.json +28 -0
  45. data/lib/outhad/integrations/destination/facebook_custom_audience/icon.svg +23 -0
  46. data/lib/outhad/integrations/destination/google_sheets/client.rb +240 -0
  47. data/lib/outhad/integrations/destination/google_sheets/config/catalog.json +6 -0
  48. data/lib/outhad/integrations/destination/google_sheets/config/meta.json +15 -0
  49. data/lib/outhad/integrations/destination/google_sheets/config/spec.json +75 -0
  50. data/lib/outhad/integrations/destination/google_sheets/icon.svg +1 -0
  51. data/lib/outhad/integrations/destination/http/client.rb +106 -0
  52. data/lib/outhad/integrations/destination/http/config/catalog.json +16 -0
  53. data/lib/outhad/integrations/destination/http/config/meta.json +15 -0
  54. data/lib/outhad/integrations/destination/http/config/spec.json +24 -0
  55. data/lib/outhad/integrations/destination/http/icon.svg +9 -0
  56. data/lib/outhad/integrations/destination/hubspot/client.rb +122 -0
  57. data/lib/outhad/integrations/destination/hubspot/config/catalog.json +351 -0
  58. data/lib/outhad/integrations/destination/hubspot/config/meta.json +15 -0
  59. data/lib/outhad/integrations/destination/hubspot/config/spec.json +18 -0
  60. data/lib/outhad/integrations/destination/hubspot/icon.svg +5 -0
  61. data/lib/outhad/integrations/destination/iterable/client.rb +111 -0
  62. data/lib/outhad/integrations/destination/iterable/config/catalog.json +47 -0
  63. data/lib/outhad/integrations/destination/iterable/config/meta.json +15 -0
  64. data/lib/outhad/integrations/destination/iterable/config/spec.json +19 -0
  65. data/lib/outhad/integrations/destination/iterable/icon.svg +71 -0
  66. data/lib/outhad/integrations/destination/klaviyo/client.rb +119 -0
  67. data/lib/outhad/integrations/destination/klaviyo/config/catalog.json +103 -0
  68. data/lib/outhad/integrations/destination/klaviyo/config/meta.json +15 -0
  69. data/lib/outhad/integrations/destination/klaviyo/config/spec.json +24 -0
  70. data/lib/outhad/integrations/destination/klaviyo/icon.svg +6 -0
  71. data/lib/outhad/integrations/destination/mailchimp/client.rb +141 -0
  72. data/lib/outhad/integrations/destination/mailchimp/config/catalog.json +142 -0
  73. data/lib/outhad/integrations/destination/mailchimp/config/meta.json +15 -0
  74. data/lib/outhad/integrations/destination/mailchimp/config/spec.json +28 -0
  75. data/lib/outhad/integrations/destination/mailchimp/icon.svg +4 -0
  76. data/lib/outhad/integrations/destination/maria_db/client.rb +114 -0
  77. data/lib/outhad/integrations/destination/maria_db/config/meta.json +15 -0
  78. data/lib/outhad/integrations/destination/maria_db/config/spec.json +48 -0
  79. data/lib/outhad/integrations/destination/maria_db/icon.svg +15 -0
  80. data/lib/outhad/integrations/destination/microsoft_dynamics/client.rb +150 -0
  81. data/lib/outhad/integrations/destination/microsoft_dynamics/config/catalog.json +161 -0
  82. data/lib/outhad/integrations/destination/microsoft_dynamics/config/meta.json +15 -0
  83. data/lib/outhad/integrations/destination/microsoft_dynamics/config/spec.json +35 -0
  84. data/lib/outhad/integrations/destination/microsoft_dynamics/icon.svg +2 -0
  85. data/lib/outhad/integrations/destination/microsoft_excel/client.rb +198 -0
  86. data/lib/outhad/integrations/destination/microsoft_excel/config/catalog.json +7 -0
  87. data/lib/outhad/integrations/destination/microsoft_excel/config/meta.json +15 -0
  88. data/lib/outhad/integrations/destination/microsoft_excel/config/spec.json +19 -0
  89. data/lib/outhad/integrations/destination/microsoft_excel/icon.svg +18 -0
  90. data/lib/outhad/integrations/destination/microsoft_sql/client.rb +137 -0
  91. data/lib/outhad/integrations/destination/microsoft_sql/config/meta.json +15 -0
  92. data/lib/outhad/integrations/destination/microsoft_sql/config/spec.json +68 -0
  93. data/lib/outhad/integrations/destination/microsoft_sql/icon.svg +22 -0
  94. data/lib/outhad/integrations/destination/odoo/client.rb +109 -0
  95. data/lib/outhad/integrations/destination/odoo/config/meta.json +15 -0
  96. data/lib/outhad/integrations/destination/odoo/config/spec.json +39 -0
  97. data/lib/outhad/integrations/destination/odoo/icon.svg +21 -0
  98. data/lib/outhad/integrations/destination/oracle_db/client.rb +112 -0
  99. data/lib/outhad/integrations/destination/oracle_db/config/meta.json +15 -0
  100. data/lib/outhad/integrations/destination/oracle_db/config/spec.json +47 -0
  101. data/lib/outhad/integrations/destination/oracle_db/icon.svg +4 -0
  102. data/lib/outhad/integrations/destination/pinecone_db/client.rb +154 -0
  103. data/lib/outhad/integrations/destination/pinecone_db/config/meta.json +15 -0
  104. data/lib/outhad/integrations/destination/pinecone_db/config/spec.json +32 -0
  105. data/lib/outhad/integrations/destination/pinecone_db/icon.svg +1 -0
  106. data/lib/outhad/integrations/destination/postgresql/client.rb +130 -0
  107. data/lib/outhad/integrations/destination/postgresql/config/meta.json +15 -0
  108. data/lib/outhad/integrations/destination/postgresql/config/spec.json +68 -0
  109. data/lib/outhad/integrations/destination/postgresql/icon.svg +20 -0
  110. data/lib/outhad/integrations/destination/qdrant/client.rb +184 -0
  111. data/lib/outhad/integrations/destination/qdrant/config/meta.json +15 -0
  112. data/lib/outhad/integrations/destination/qdrant/config/spec.json +23 -0
  113. data/lib/outhad/integrations/destination/qdrant/icon.svg +1 -0
  114. data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/client.rb +136 -0
  115. data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/config/catalog.json +6 -0
  116. data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/config/meta.json +16 -0
  117. data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/config/spec.json +52 -0
  118. data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/icon.svg +16 -0
  119. data/lib/outhad/integrations/destination/salesforce_consumer_goods_cloud/schema_helper.rb +132 -0
  120. data/lib/outhad/integrations/destination/salesforce_crm/client.rb +114 -0
  121. data/lib/outhad/integrations/destination/salesforce_crm/config/catalog.json +320 -0
  122. data/lib/outhad/integrations/destination/salesforce_crm/config/meta.json +15 -0
  123. data/lib/outhad/integrations/destination/salesforce_crm/config/spec.json +46 -0
  124. data/lib/outhad/integrations/destination/salesforce_crm/icon.svg +16 -0
  125. data/lib/outhad/integrations/destination/sftp/client.rb +186 -0
  126. data/lib/outhad/integrations/destination/sftp/config/catalog.json +16 -0
  127. data/lib/outhad/integrations/destination/sftp/config/meta.json +16 -0
  128. data/lib/outhad/integrations/destination/sftp/config/spec.json +73 -0
  129. data/lib/outhad/integrations/destination/sftp/icon.svg +1 -0
  130. data/lib/outhad/integrations/destination/slack/client.rb +125 -0
  131. data/lib/outhad/integrations/destination/slack/config/catalog.json +22 -0
  132. data/lib/outhad/integrations/destination/slack/config/meta.json +15 -0
  133. data/lib/outhad/integrations/destination/slack/config/spec.json +23 -0
  134. data/lib/outhad/integrations/destination/slack/icon.svg +26 -0
  135. data/lib/outhad/integrations/destination/stripe/client.rb +94 -0
  136. data/lib/outhad/integrations/destination/stripe/config/catalog.json +128 -0
  137. data/lib/outhad/integrations/destination/stripe/config/meta.json +15 -0
  138. data/lib/outhad/integrations/destination/stripe/config/spec.json +18 -0
  139. data/lib/outhad/integrations/destination/stripe/icon.svg +10 -0
  140. data/lib/outhad/integrations/destination/zendesk/client.rb +132 -0
  141. data/lib/outhad/integrations/destination/zendesk/config/catalog.json +110 -0
  142. data/lib/outhad/integrations/destination/zendesk/config/meta.json +18 -0
  143. data/lib/outhad/integrations/destination/zendesk/config/spec.json +32 -0
  144. data/lib/outhad/integrations/destination/zendesk/icon.svg +63 -0
  145. data/lib/outhad/integrations/protocol/protocol.json +189 -0
  146. data/lib/outhad/integrations/protocol/protocol.rb +228 -0
  147. data/lib/outhad/integrations/rollout.rb +66 -0
  148. data/lib/outhad/integrations/service.rb +55 -0
  149. data/lib/outhad/integrations/source/amazon_s3/client.rb +235 -0
  150. data/lib/outhad/integrations/source/amazon_s3/config/meta.json +16 -0
  151. data/lib/outhad/integrations/source/amazon_s3/config/spec.json +119 -0
  152. data/lib/outhad/integrations/source/amazon_s3/icon.svg +34 -0
  153. data/lib/outhad/integrations/source/anthropic/client.rb +135 -0
  154. data/lib/outhad/integrations/source/anthropic/config/catalog.json +6 -0
  155. data/lib/outhad/integrations/source/anthropic/config/meta.json +16 -0
  156. data/lib/outhad/integrations/source/anthropic/config/spec.json +56 -0
  157. data/lib/outhad/integrations/source/anthropic/icon.svg +1 -0
  158. data/lib/outhad/integrations/source/aws_athena/client.rb +109 -0
  159. data/lib/outhad/integrations/source/aws_athena/config/meta.json +16 -0
  160. data/lib/outhad/integrations/source/aws_athena/config/spec.json +63 -0
  161. data/lib/outhad/integrations/source/aws_athena/icon.svg +22 -0
  162. data/lib/outhad/integrations/source/aws_bedrock_model/client.rb +91 -0
  163. data/lib/outhad/integrations/source/aws_bedrock_model/config/catalog.json +6 -0
  164. data/lib/outhad/integrations/source/aws_bedrock_model/config/meta.json +16 -0
  165. data/lib/outhad/integrations/source/aws_bedrock_model/config/spec.json +58 -0
  166. data/lib/outhad/integrations/source/aws_bedrock_model/icon.svg +1 -0
  167. data/lib/outhad/integrations/source/aws_sagemaker_model/client.rb +79 -0
  168. data/lib/outhad/integrations/source/aws_sagemaker_model/config/catalog.json +6 -0
  169. data/lib/outhad/integrations/source/aws_sagemaker_model/config/meta.json +16 -0
  170. data/lib/outhad/integrations/source/aws_sagemaker_model/config/spec.json +52 -0
  171. data/lib/outhad/integrations/source/aws_sagemaker_model/icon.svg +7 -0
  172. data/lib/outhad/integrations/source/bigquery/client.rb +98 -0
  173. data/lib/outhad/integrations/source/bigquery/config/meta.json +16 -0
  174. data/lib/outhad/integrations/source/bigquery/config/spec.json +83 -0
  175. data/lib/outhad/integrations/source/bigquery/icon.svg +1 -0
  176. data/lib/outhad/integrations/source/clickhouse/client.rb +102 -0
  177. data/lib/outhad/integrations/source/clickhouse/config/meta.json +16 -0
  178. data/lib/outhad/integrations/source/clickhouse/config/spec.json +42 -0
  179. data/lib/outhad/integrations/source/clickhouse/icon.svg +25 -0
  180. data/lib/outhad/integrations/source/databricks/client.rb +98 -0
  181. data/lib/outhad/integrations/source/databricks/config/meta.json +17 -0
  182. data/lib/outhad/integrations/source/databricks/config/spec.json +56 -0
  183. data/lib/outhad/integrations/source/databricks/icon.svg +19 -0
  184. data/lib/outhad/integrations/source/databrics_model/client.rb +89 -0
  185. data/lib/outhad/integrations/source/databrics_model/config/catalog.json +6 -0
  186. data/lib/outhad/integrations/source/databrics_model/config/meta.json +17 -0
  187. data/lib/outhad/integrations/source/databrics_model/config/spec.json +63 -0
  188. data/lib/outhad/integrations/source/databrics_model/icon.svg +19 -0
  189. data/lib/outhad/integrations/source/firecrawl/client.rb +151 -0
  190. data/lib/outhad/integrations/source/firecrawl/config/catalog.json +29 -0
  191. data/lib/outhad/integrations/source/firecrawl/config/meta.json +17 -0
  192. data/lib/outhad/integrations/source/firecrawl/config/spec.json +31 -0
  193. data/lib/outhad/integrations/source/firecrawl/icon.svg +4 -0
  194. data/lib/outhad/integrations/source/generic_open_ai/client.rb +118 -0
  195. data/lib/outhad/integrations/source/generic_open_ai/config/catalog.json +6 -0
  196. data/lib/outhad/integrations/source/generic_open_ai/config/meta.json +16 -0
  197. data/lib/outhad/integrations/source/generic_open_ai/config/spec.json +63 -0
  198. data/lib/outhad/integrations/source/generic_open_ai/icon.svg +6 -0
  199. data/lib/outhad/integrations/source/google_vertex_model/client.rb +83 -0
  200. data/lib/outhad/integrations/source/google_vertex_model/config/catalog.json +6 -0
  201. data/lib/outhad/integrations/source/google_vertex_model/config/meta.json +17 -0
  202. data/lib/outhad/integrations/source/google_vertex_model/config/spec.json +105 -0
  203. data/lib/outhad/integrations/source/google_vertex_model/icon.svg +2 -0
  204. data/lib/outhad/integrations/source/http_model/client.rb +108 -0
  205. data/lib/outhad/integrations/source/http_model/config/catalog.json +6 -0
  206. data/lib/outhad/integrations/source/http_model/config/meta.json +16 -0
  207. data/lib/outhad/integrations/source/http_model/config/spec.json +70 -0
  208. data/lib/outhad/integrations/source/http_model/icon.svg +9 -0
  209. data/lib/outhad/integrations/source/intuit_quick_books/client.rb +213 -0
  210. data/lib/outhad/integrations/source/intuit_quick_books/config/catalog.json +6 -0
  211. data/lib/outhad/integrations/source/intuit_quick_books/config/meta.json +17 -0
  212. data/lib/outhad/integrations/source/intuit_quick_books/config/spec.json +44 -0
  213. data/lib/outhad/integrations/source/intuit_quick_books/icon.svg +1 -0
  214. data/lib/outhad/integrations/source/maria_db/client.rb +92 -0
  215. data/lib/outhad/integrations/source/maria_db/config/meta.json +16 -0
  216. data/lib/outhad/integrations/source/maria_db/config/spec.json +48 -0
  217. data/lib/outhad/integrations/source/maria_db/icon.svg +15 -0
  218. data/lib/outhad/integrations/source/odoo/client.rb +106 -0
  219. data/lib/outhad/integrations/source/odoo/config/meta.json +15 -0
  220. data/lib/outhad/integrations/source/odoo/config/spec.json +39 -0
  221. data/lib/outhad/integrations/source/odoo/icon.svg +21 -0
  222. data/lib/outhad/integrations/source/open_ai/client.rb +118 -0
  223. data/lib/outhad/integrations/source/open_ai/config/catalog.json +6 -0
  224. data/lib/outhad/integrations/source/open_ai/config/meta.json +16 -0
  225. data/lib/outhad/integrations/source/open_ai/config/spec.json +56 -0
  226. data/lib/outhad/integrations/source/open_ai/icon.svg +1 -0
  227. data/lib/outhad/integrations/source/oracle_db/client.rb +127 -0
  228. data/lib/outhad/integrations/source/oracle_db/config/meta.json +16 -0
  229. data/lib/outhad/integrations/source/oracle_db/config/spec.json +47 -0
  230. data/lib/outhad/integrations/source/oracle_db/icon.svg +4 -0
  231. data/lib/outhad/integrations/source/pinecone_db/client.rb +73 -0
  232. data/lib/outhad/integrations/source/pinecone_db/config/catalog.json +6 -0
  233. data/lib/outhad/integrations/source/pinecone_db/config/meta.json +16 -0
  234. data/lib/outhad/integrations/source/pinecone_db/config/spec.json +34 -0
  235. data/lib/outhad/integrations/source/pinecone_db/icon.svg +2 -0
  236. data/lib/outhad/integrations/source/postgresql/client.rb +112 -0
  237. data/lib/outhad/integrations/source/postgresql/config/meta.json +16 -0
  238. data/lib/outhad/integrations/source/postgresql/config/spec.json +86 -0
  239. data/lib/outhad/integrations/source/postgresql/icon.svg +20 -0
  240. data/lib/outhad/integrations/source/qdrant/client.rb +86 -0
  241. data/lib/outhad/integrations/source/qdrant/config/catalog.json +6 -0
  242. data/lib/outhad/integrations/source/qdrant/config/meta.json +16 -0
  243. data/lib/outhad/integrations/source/qdrant/config/spec.json +29 -0
  244. data/lib/outhad/integrations/source/qdrant/icon.svg +1 -0
  245. data/lib/outhad/integrations/source/redshift/client.rb +109 -0
  246. data/lib/outhad/integrations/source/redshift/config/meta.json +16 -0
  247. data/lib/outhad/integrations/source/redshift/config/spec.json +71 -0
  248. data/lib/outhad/integrations/source/redshift/icon.svg +15 -0
  249. data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/client.rb +133 -0
  250. data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/config/catalog.json +6 -0
  251. data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/config/meta.json +18 -0
  252. data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/config/spec.json +53 -0
  253. data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/icon.svg +16 -0
  254. data/lib/outhad/integrations/source/salesforce_consumer_goods_cloud/schema_helper.rb +130 -0
  255. data/lib/outhad/integrations/source/sftp/client.rb +133 -0
  256. data/lib/outhad/integrations/source/sftp/config/meta.json +16 -0
  257. data/lib/outhad/integrations/source/sftp/config/spec.json +59 -0
  258. data/lib/outhad/integrations/source/sftp/icon.svg +1 -0
  259. data/lib/outhad/integrations/source/snowflake/client.rb +92 -0
  260. data/lib/outhad/integrations/source/snowflake/config/meta.json +16 -0
  261. data/lib/outhad/integrations/source/snowflake/config/spec.json +82 -0
  262. data/lib/outhad/integrations/source/snowflake/icon.svg +10 -0
  263. data/lib/outhad/integrations/source/watsonx_ai/client.rb +194 -0
  264. data/lib/outhad/integrations/source/watsonx_ai/config/catalog.json +6 -0
  265. data/lib/outhad/integrations/source/watsonx_ai/config/meta.json +16 -0
  266. data/lib/outhad/integrations/source/watsonx_ai/config/spec.json +74 -0
  267. data/lib/outhad/integrations/source/watsonx_ai/icon.svg +1 -0
  268. data/lib/outhad/integrations/source/watsonx_data/client.rb +146 -0
  269. data/lib/outhad/integrations/source/watsonx_data/config/meta.json +17 -0
  270. data/lib/outhad/integrations/source/watsonx_data/config/spec.json +72 -0
  271. data/lib/outhad/integrations/source/watsonx_data/icon.svg +1 -0
  272. data/lib/outhad/integrations.rb +129 -0
  273. data/outhad-integrations.gemspec +79 -0
  274. data/sig/outhad/integrations.rbs +6 -0
  275. metadata +866 -0
@@ -0,0 +1,119 @@
1
+ {
2
+ "documentation_url": "https://docs.squared.ai/guides/sources/data-sources/amazon_s3",
3
+ "stream_type": "dynamic",
4
+ "connector_query_type": "raw_sql",
5
+ "connection_specification": {
6
+ "$schema": "http://json-schema.org/draft-07/schema#",
7
+ "title": "AmazonS3",
8
+ "type": "object",
9
+ "if": {
10
+ "properties": {
11
+ "auth_type": {
12
+ "enum": ["user"]
13
+ }
14
+ }
15
+ },
16
+ "then": {
17
+ "required": [
18
+ "auth_type",
19
+ "region",
20
+ "bucket",
21
+ "access_id",
22
+ "secret_access"
23
+ ]
24
+ },
25
+ "else": {
26
+ "required": [
27
+ "auth_type",
28
+ "region",
29
+ "bucket",
30
+ "arn",
31
+ "external_id"
32
+ ]
33
+ },
34
+ "properties": {
35
+ "data_type": {
36
+ "description": "Type of data in the files",
37
+ "type": "string",
38
+ "title": "Data Format Type",
39
+ "oneOf": [
40
+ { "const": "structured", "title": "Tables & Records (Structured)" },
41
+ { "const": "unstructured", "title": "Documents & Files (Unstructured)" }
42
+ ],
43
+ "default": "structured",
44
+ "order": 9
45
+ },
46
+ "auth_type": {
47
+ "title": "Authentication type",
48
+ "type": "string",
49
+ "default": "user",
50
+ "description": "Authenticate either by using an IAM User (Access Key ID & Secret Access Key) or an IAM Role (ARN)",
51
+ "enum": [
52
+ "user",
53
+ "role"
54
+ ],
55
+ "enumNames": [
56
+ "IAM User",
57
+ "IAM Role"
58
+ ],
59
+ "order": 0
60
+ },
61
+ "arn": {
62
+ "type": "string",
63
+ "title": "IAM Role ARN",
64
+ "order": 1
65
+ },
66
+ "external_id": {
67
+ "type": "string",
68
+ "title": "External Id",
69
+ "description": "Unique ID that allows handshake between AWS accounts.",
70
+ "order": 2
71
+ },
72
+ "access_id": {
73
+ "type": "string",
74
+ "title": "Access Id",
75
+ "order": 3
76
+ },
77
+ "secret_access": {
78
+ "type": "string",
79
+ "title": "Secret Access",
80
+ "outhad_secret": true,
81
+ "order": 4
82
+ },
83
+ "region": {
84
+ "description": "AWS region",
85
+ "examples": [
86
+ "us-east-2"
87
+ ],
88
+ "type": "string",
89
+ "title": "Region",
90
+ "order": 5
91
+ },
92
+ "bucket": {
93
+ "description": "Bucket Name",
94
+ "type": "string",
95
+ "title": "Bucket",
96
+ "order": 6
97
+ },
98
+ "path": {
99
+ "description": "Path to csv or parquet files",
100
+ "examples": [
101
+ "/path/to/files"
102
+ ],
103
+ "type": "string",
104
+ "title": "Path",
105
+ "order": 7
106
+ },
107
+ "file_type": {
108
+ "description": "The type of file to read",
109
+ "type": "string",
110
+ "title": "File Type",
111
+ "enum": [
112
+ "csv",
113
+ "parquet"
114
+ ],
115
+ "order": 8
116
+ }
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,34 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="428" height="512" viewBox="0 0 428 512">
2
+ <defs>
3
+ <style>
4
+ .cls-1 {
5
+ fill: #e25444;
6
+ }
7
+
8
+ .cls-1, .cls-2, .cls-3 {
9
+ fill-rule: evenodd;
10
+ }
11
+
12
+ .cls-2 {
13
+ fill: #7b1d13;
14
+ }
15
+
16
+ .cls-3 {
17
+ fill: #58150d;
18
+ }
19
+ </style>
20
+ </defs>
21
+ <path class="cls-1" d="M378,99L295,257l83,158,34-19V118Z"/>
22
+ <path class="cls-2" d="M378,99L212,118,127.5,257,212,396l166,19V99Z"/>
23
+ <path class="cls-3" d="M43,99L16,111V403l27,12L212,257Z"/>
24
+ <path class="cls-1" d="M42.637,98.667l169.587,47.111V372.444L42.637,415.111V98.667Z"/>
25
+ <path class="cls-3" d="M212.313,170.667l-72.008-11.556,72.008-81.778,71.83,81.778Z"/>
26
+ <path class="cls-3" d="M284.143,159.111l-71.919,11.733-71.919-11.733V77.333"/>
27
+ <path class="cls-3" d="M212.313,342.222l-72.008,13.334,72.008,70.222,71.83-70.222Z"/>
28
+ <path class="cls-2" d="M212,16L140,54V159l72.224-20.333Z"/>
29
+ <path class="cls-2" d="M212.224,196.444l-71.919,7.823V309.105l71.919,8.228V196.444Z"/>
30
+ <path class="cls-2" d="M212.224,373.333L140.305,355.3V458.363L212.224,496V373.333Z"/>
31
+ <path class="cls-1" d="M284.143,355.3l-71.919,18.038V496l71.919-37.637V355.3Z"/>
32
+ <path class="cls-1" d="M212.224,196.444l71.919,7.823V309.105l-71.919,8.228V196.444Z"/>
33
+ <path class="cls-1" d="M212,16l72,38V159l-72-20V16Z"/>
34
+ </svg>
@@ -0,0 +1,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Outhad::Integrations::Source
4
+ module Anthropic
5
+ include Outhad::Integrations::Core
6
+ class Client < SourceConnector
7
+ API_VERSION = "2023-06-01"
8
+ def check_connection(connection_config)
9
+ connection_config = prepare_config(connection_config)
10
+ response = make_request(ANTHROPIC_URL, HTTP_POST, connection_config[:request_format], connection_config)
11
+ success?(response) ? success_status : failure_status(nil)
12
+ rescue StandardError => e
13
+ handle_exception(e, { context: "ANTHROPIC:CHECK_CONNECTION:EXCEPTION", type: "error" })
14
+ failure_status(e)
15
+ end
16
+
17
+ def discover(_connection_config = nil)
18
+ catalog_json = read_json(CATALOG_SPEC_PATH)
19
+ catalog = build_catalog(catalog_json)
20
+ catalog.to_outhad_message
21
+ rescue StandardError => e
22
+ handle_exception(e, { context: "ANTHROPIC:DISCOVER:EXCEPTION", type: "error" })
23
+ end
24
+
25
+ def read(sync_config)
26
+ # The server checks the ConnectorQueryType.
27
+ # If it's "ai_ml," the server calculates the payload and passes it as a query in the sync config model protocol.
28
+ # This query is then sent to the AI/ML model.
29
+ connection_config = prepare_config(sync_config.source.connection_specification)
30
+ stream = connection_config[:is_stream] ||= false
31
+ payload = sync_config.model.query
32
+ if stream
33
+ run_model_stream(connection_config, payload) { |message| yield message if block_given? }
34
+ else
35
+ run_model(connection_config, payload)
36
+ end
37
+ rescue StandardError => e
38
+ handle_exception(e, { context: "ANTHROPIC:READ:EXCEPTION", type: "error" })
39
+ end
40
+
41
+ private
42
+
43
+ def prepare_config(config)
44
+ config.with_indifferent_access.tap do |conf|
45
+ conf[:config][:timeout] ||= 30
46
+ end
47
+ end
48
+
49
+ def parse_json(json_string)
50
+ JSON.parse(json_string)
51
+ rescue JSON::ParserError => e
52
+ handle_exception(e, { context: "ANTHROPIC:PARSE_JSON:EXCEPTION", type: "error" })
53
+ {}
54
+ end
55
+
56
+ def build_headers(connection_config, streaming: false)
57
+ {
58
+ "x-api-key" => connection_config[:api_key],
59
+ "anthropic-version" => API_VERSION,
60
+ "content-type" => "application/json"
61
+ }.tap do |headers|
62
+ headers["transfer-encoding"] = "chunked" if streaming
63
+ end
64
+ end
65
+
66
+ def make_request(url, http_method, payload, connection_config)
67
+ send_request(
68
+ url: url,
69
+ http_method: http_method,
70
+ payload: JSON.parse(payload),
71
+ headers: build_headers(connection_config, streaming: false),
72
+ config: connection_config[:config]
73
+ )
74
+ end
75
+
76
+ def run_model(connection_config, payload)
77
+ response = make_request(ANTHROPIC_URL, HTTP_POST, payload, connection_config)
78
+ process_response(response)
79
+ rescue StandardError => e
80
+ handle_exception(e, { context: "ANTHROPIC:RUN_MODEL:EXCEPTION", type: "error" })
81
+ end
82
+
83
+ def run_model_stream(connection_config, payload)
84
+ send_streaming_request(
85
+ url: ANTHROPIC_URL,
86
+ http_method: HTTP_POST,
87
+ payload: JSON.parse(payload),
88
+ headers: build_headers(connection_config, streaming: true),
89
+ config: connection_config[:config]
90
+ ) do |chunk|
91
+ process_streaming_response(chunk) { |message| yield message if block_given? }
92
+ end
93
+ rescue StandardError => e
94
+ handle_exception(e, { context: "ANTHROPIC:RUN_STREAM_MODEL:EXCEPTION", type: "error" })
95
+ end
96
+
97
+ def process_response(response)
98
+ if success?(response)
99
+ data = JSON.parse(response.body)
100
+ [RecordMessage.new(data: data, emitted_at: Time.now.to_i).to_outhad_message]
101
+ else
102
+ create_log_message("ANTHROPIC:RUN_MODEL", "error", "request failed: #{response.body}")
103
+ end
104
+ rescue StandardError => e
105
+ handle_exception(e, { context: "ANTHROPIC:PROCESS_RESPONSE:EXCEPTION", type: "error" })
106
+ end
107
+
108
+ def check_chunk_error(chunk)
109
+ return unless chunk.include?("{\"type\":\"error\"")
110
+
111
+ data = JSON.parse(chunk)
112
+ raise StandardError, "Error: #{data["error"]}" if data["error"] && data["error"]["message"]
113
+ end
114
+
115
+ def extract_content_event(chunk)
116
+ events = chunk.split("\n\n")
117
+ events.find { |e| e.include?("event: content_block_delta") }
118
+ end
119
+
120
+ def process_streaming_response(chunk)
121
+ check_chunk_error(chunk)
122
+
123
+ chunk.each_line do |event|
124
+ next unless event.include?("\"type\":\"content_block_delta\"")
125
+
126
+ json_string = event.split("\n").find { |line| line.start_with?("data: ") }&.sub(/^data: /, "")
127
+ next unless json_string
128
+
129
+ parsed_data = JSON.parse(json_string)
130
+ yield [RecordMessage.new(data: parsed_data, emitted_at: Time.now.to_i).to_outhad_message] if block_given?
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,6 @@
1
+ {
2
+ "request_rate_limit": 50,
3
+ "request_rate_limit_unit": "minute",
4
+ "request_rate_concurrency": 10,
5
+ "streams": []
6
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "data": {
3
+ "name": "Anthropic",
4
+ "title": "Anthropic Model Endpoint",
5
+ "connector_type": "source",
6
+ "category": "AI Model",
7
+ "sub_category": "LLM",
8
+ "documentation_url": "https://docs.squared.ai/activation/ai-ml-sources/anthropic-model",
9
+ "github_issue_label": "source-anthropic-model",
10
+ "icon": "icon.svg",
11
+ "license": "MIT",
12
+ "release_stage": "alpha",
13
+ "support_level": "community",
14
+ "tags": ["language:ruby", "outhad"]
15
+ }
16
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "documentation_url": "https://docs.squared.ai/activation/ai-ml-sources/anthropic-model",
3
+ "stream_type": "user_defined",
4
+ "connector_query_type": "ai_ml",
5
+ "connection_specification": {
6
+ "$schema": "http://json-schema.org/draft-07/schema#",
7
+ "title": "Anthropic Endpoint",
8
+ "type": "object",
9
+ "required": ["api_key", "request_format", "response_format"],
10
+ "properties": {
11
+ "api_key": {
12
+ "type": "string",
13
+ "outhad_secret": true,
14
+ "title": "API Key",
15
+ "order": 0
16
+ },
17
+ "is_stream": {
18
+ "type": "boolean",
19
+ "title": "Enable streaming",
20
+ "description": "Enables data streaming for such as chat, when supported by the model. When true, messages and model data are processed in chunks for immediate delivery, enhancing responsiveness. Default is false, processing only after the entire response is received.",
21
+ "default": false,
22
+ "order": 1
23
+ },
24
+ "config": {
25
+ "title": "",
26
+ "type": "object",
27
+ "properties": {
28
+ "timeout": {
29
+ "type": "string",
30
+ "default": "30",
31
+ "title": "HTTP Timeout",
32
+ "description": "The maximum time, in seconds, to wait for a response from the server before the request is canceled.",
33
+ "order": 0
34
+ }
35
+ },
36
+ "order": 2
37
+ },
38
+ "request_format": {
39
+ "title": "Request Format",
40
+ "description": "Sample Request Format",
41
+ "type": "string",
42
+ "default": "{\"model\":\"claude-3-opus-20240229\",\"max_tokens\": 256, \"messages\":[{\"role\": \"user\", \"content\": \"Hi.\"}], \"stream\": false}",
43
+ "x-request-format": true,
44
+ "order": 3
45
+ },
46
+ "response_format": {
47
+ "title": "Response Format",
48
+ "description": "Sample Response Format",
49
+ "type": "string",
50
+ "default": "{\"id\":\"msg_0123ABC\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-7-sonnet-20250219\",\"content\":[{\"type\":\"text\",\"text\":\"Hello there! How can I assist you today? Whether you have a question, need some information, or just want to chat, I'm here to help. What's on your mind?\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":10,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":41}}",
51
+ "x-response-format": true,
52
+ "order": 4
53
+ }
54
+ }
55
+ }
56
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" id="Anthropic-Icon--Streamline-Svg-Logos" height="24" width="24"><desc>Anthropic Icon Streamline Icon: https://streamlinehq.com</desc><path fill="#181818" d="m13.788825 3.932 6.43325 16.136075h3.5279L17.316725 3.932H13.788825Z" stroke-width="0.25"></path><path fill="#181818" d="m6.325375 13.682775 2.20125 -5.67065 2.201275 5.67065H6.325375ZM6.68225 3.932 0.25 20.068075h3.596525l1.3155 -3.3886h6.729425l1.315275 3.3886h3.59655L10.371 3.932H6.68225Z" stroke-width="0.25"></path></svg>
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Outhad::Integrations::Source
4
+ module AwsAthena
5
+ include Outhad::Integrations::Core
6
+ class Client < SourceConnector
7
+ def check_connection(connection_config)
8
+ connection_config = connection_config.with_indifferent_access
9
+ athena_client = create_connection(connection_config)
10
+ athena_client.list_work_groups
11
+ ConnectionStatus.new(status: ConnectionStatusType["succeeded"]).to_outhad_message
12
+ rescue StandardError => e
13
+ ConnectionStatus.new(status: ConnectionStatusType["failed"], message: e.message).to_outhad_message
14
+ end
15
+
16
+ def discover(connection_config)
17
+ connection_config = connection_config.with_indifferent_access
18
+ query = "SELECT table_name, column_name, data_type, is_nullable FROM information_schema.columns WHERE table_schema = '#{connection_config[:schema]}' ORDER BY table_name, ordinal_position;"
19
+ db = create_connection(connection_config)
20
+ results = query_execution(db, query)
21
+ catalog = Catalog.new(streams: create_streams(results))
22
+ catalog.to_outhad_message
23
+ rescue StandardError => e
24
+ handle_exception(e, {
25
+ context: "AWS:ATHENA:DISCOVER:EXCEPTION",
26
+ type: "error"
27
+ })
28
+ end
29
+
30
+ def read(sync_config)
31
+ connection_config = sync_config.source.connection_specification
32
+ connection_config = connection_config.with_indifferent_access
33
+ query = sync_config.model.query
34
+ query = batched_query(query, sync_config.limit, sync_config.offset) unless sync_config.limit.nil? && sync_config.offset.nil?
35
+ db = create_connection(connection_config)
36
+ query(db, query)
37
+ rescue StandardError => e
38
+ handle_exception(e, {
39
+ context: "AWS:ATHENA:READ:EXCEPTION",
40
+ type: "error",
41
+ sync_id: sync_config.sync_id,
42
+ sync_run_id: sync_config.sync_run_id
43
+ })
44
+ end
45
+
46
+ private
47
+
48
+ def create_connection(connection_config)
49
+ Aws.config.update({ credentials: Aws::Credentials.new(connection_config[:access_key], connection_config[:secret_access_key]), region: connection_config[:region] })
50
+ @database = connection_config[:schema]
51
+ @output_location = connection_config[:output_location]
52
+ Aws::Athena::Client.new
53
+ end
54
+
55
+ def query_execution(db, query)
56
+ response = db.start_query_execution(
57
+ query_string: query,
58
+ query_execution_context: { database: @database },
59
+ result_configuration: { output_location: @output_location }
60
+ )
61
+ query_execution_id = response[:query_execution_id]
62
+ loop do
63
+ response = db.get_query_execution(query_execution_id: query_execution_id)
64
+ status = response.query_execution.status.state
65
+ break if %w[SUCCEEDED FAILED CANCELLED].include?(status)
66
+ end
67
+ transform_results(db.get_query_results(query_execution_id: query_execution_id))
68
+ end
69
+
70
+ def create_streams(records)
71
+ group_by_table(records).map do |_, r|
72
+ Outhad::Integrations::Protocol::Stream.new(name: r[:tablename], action: StreamAction["fetch"], json_schema: convert_to_json_schema(r[:columns]))
73
+ end
74
+ end
75
+
76
+ def transform_results(results)
77
+ columns = results.result_set.result_set_metadata.column_info.map(&:name)
78
+ rows = results.result_set.rows.map do |row|
79
+ row.data.map(&:var_char_value)
80
+ end
81
+ rows.map { |row| columns.zip(row).to_h }
82
+ end
83
+
84
+ def query(db, query)
85
+ records = []
86
+ query_execution(db, query).map do |row|
87
+ records << RecordMessage.new(data: row, emitted_at: Time.now.to_i).to_outhad_message
88
+ end
89
+ records
90
+ end
91
+
92
+ def group_by_table(records)
93
+ result = {}
94
+ records.each_with_index do |entry, index|
95
+ table_name = entry["table_name"]
96
+ column_data = {
97
+ column_name: entry["column_name"],
98
+ data_type: entry["data_type"],
99
+ is_nullable: entry["is_nullable"] == "YES"
100
+ }
101
+ result[index] ||= {}
102
+ result[index][:tablename] = table_name
103
+ result[index][:columns] = [column_data]
104
+ end
105
+ result
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,16 @@
1
+ {
2
+ "data": {
3
+ "name": "AwsAthena",
4
+ "title": "AWS Athena",
5
+ "connector_type": "source",
6
+ "category": "Data Warehouse",
7
+ "sub_category": "Relational Database",
8
+ "documentation_url": "https://docs.squared.ai/guides/sources/data-sources/aws_athena",
9
+ "github_issue_label": "source-aws-athena",
10
+ "icon": "icon.svg",
11
+ "license": "MIT",
12
+ "release_stage": "alpha",
13
+ "support_level": "community",
14
+ "tags": ["language:ruby", "outhad"]
15
+ }
16
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "documentation_url": "https://docs.squared.ai/guides/sources/data-sources/aws_athena",
3
+ "stream_type": "dynamic",
4
+ "connector_query_type": "raw_sql",
5
+ "connection_specification": {
6
+ "$schema": "http://json-schema.org/draft-07/schema#",
7
+ "title": "AWS Athena",
8
+ "type": "object",
9
+ "required": ["access_key", "secret_access_key", "region", "workgroup", "catalog", "output_location"],
10
+ "properties": {
11
+ "access_key": {
12
+ "description": "The AWS Access Key ID to use for authentication.",
13
+ "examples": ["AWSATHENAACCESS"],
14
+ "type": "string",
15
+ "title": "Personal Access Key",
16
+ "order": 0
17
+ },
18
+ "secret_access_key": {
19
+ "description": "The AWS Secret Access Key to use for authentication.",
20
+ "examples": ["AWSATHENASECRET"],
21
+ "type": "string",
22
+ "outhad_secret": true,
23
+ "title": "Secret Access Key",
24
+ "order": 1
25
+ },
26
+ "region": {
27
+ "description": "AWS region where Athena is located.",
28
+ "examples": ["ATHENA_REGION"],
29
+ "type": "string",
30
+ "title": "Secret Access Key",
31
+ "order": 2
32
+ },
33
+ "workgroup": {
34
+ "description": "The Athena workgroup you previously set up in AWS.",
35
+ "examples": ["ATHENA_WORKGROUP"],
36
+ "type": "string",
37
+ "title": "Workgroup",
38
+ "order": 3
39
+ },
40
+ "catalog": {
41
+ "description": "The Data catalog name within Athena.",
42
+ "examples": ["ATHENA_CATALOG"],
43
+ "type": "string",
44
+ "title": "Catalog",
45
+ "order": 4
46
+ },
47
+ "schema": {
48
+ "description": "The specific Athena database/schema to connect to.",
49
+ "examples": ["ATHENA_DB"],
50
+ "type": "string",
51
+ "title": "Database",
52
+ "order": 5
53
+ },
54
+ "output_location": {
55
+ "description": "S3 path for query output.",
56
+ "examples": ["s3://example-bucket-name/query-results/"],
57
+ "type": "string",
58
+ "title": "Query",
59
+ "order": 6
60
+ }
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,22 @@
1
+ <svg height="100" viewBox="0 0 100 100" width="100" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="m84 64.68-34-4.19-34 4.19 34 26.62z" fill="#fcbf92"/>
3
+ <path d="m16 64.68 34 10.17v16.45l-34-17.05z" fill="#9d5025"/>
4
+ <path d="m84 64.68-34 10.17v16.45l34-17.05z" fill="#f58534"/>
5
+ <path d="m20.39 50.22h-4.39v9.67l4.39.8 4.88-5.18z" fill="#9d5025"/>
6
+ <path d="m25.27 60.29-4.88.4v-10.47h4.88z" fill="#f58534"/>
7
+ <path d="m28.56 38.16-5.78 1.09v21.94l5.78 1.2 5.29-12.17z" fill="#9d5025"/>
8
+ <path d="m33.85 61.79-5.29.6v-24.23l5.29.6z" fill="#f58534"/>
9
+ <path d="m39.83 43.04-7.98.8v19.24l7.98 1.6 8.47-10.87z" fill="#9d5025"/>
10
+ <path d="m45.21 63.78-5.38.9v-21.64l5.38.4z" fill="#f58534"/>
11
+ <g fill="#9d5025">
12
+ <path d="m50 25.59-5.38 1.7v38.29l5.38 1.09 5.38-20.54z"/>
13
+ <path d="m54.98 63.78 5.19.9 7.98-14.46-7.98-14.36-5.19.8z"/>
14
+ <path d="m68.15 50.22-7.98-14.36-5.19.8"/>
15
+ <path d="m66.05 61.79 5.39.6 5.78-18.25-5.78-18.15-5.39 1.3z"/>
16
+ <path d="m74.73 60.29 4.88.4 4.39-18.05-4.39-18.64-4.88 1.2z"/>
17
+ </g>
18
+ <path d="m50 25.59 5.38 1.7v38.29l-5.38 1.09z" fill="#f58534"/>
19
+ <path d="m68.15 37.46-7.98-1.6v28.82l7.98-1.6z" fill="#f58534"/>
20
+ <path d="m77.22 28.29-5.78-2.3v36.4l5.78-1.2z" fill="#f58534"/>
21
+ <path d="m84 26.19-4.39-2.19v36.69l4.39-.8z" fill="#f58534"/>
22
+ </svg>