runline 0.33.0 → 0.35.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 (531) hide show
  1. package/dist/auth/oauth2.d.ts +7 -1
  2. package/dist/auth/oauth2.js +10 -0
  3. package/dist/auth/token.d.ts +1 -0
  4. package/dist/auth/token.js +19 -1
  5. package/dist/auth/types.d.ts +22 -1
  6. package/dist/core/engine.d.ts +7 -0
  7. package/dist/core/engine.js +21 -8
  8. package/dist/credentials/policy.d.ts +53 -1
  9. package/dist/credentials/policy.js +146 -6
  10. package/dist/credentials/registry.d.ts +9 -0
  11. package/dist/credentials/registry.js +184 -22
  12. package/dist/credentials/transport.d.ts +48 -2
  13. package/dist/credentials/transport.js +248 -70
  14. package/dist/credentials/types.d.ts +177 -10
  15. package/dist/index.d.ts +6 -5
  16. package/dist/index.js +3 -2
  17. package/dist/plugin/api.d.ts +7 -0
  18. package/dist/plugin/api.js +7 -0
  19. package/dist/plugin/schema.d.ts +16 -4
  20. package/dist/plugin/schema.js +28 -5
  21. package/dist/plugin/types.d.ts +20 -0
  22. package/dist/plugins/_shared/base64.js +30 -0
  23. package/dist/plugins/_shared/credentialAdapter.js +99 -15
  24. package/dist/plugins/_shared/credentials.js +416 -0
  25. package/dist/plugins/_shared/googleAuth.js +69 -39
  26. package/dist/plugins/_shared/googleCredentials.js +68 -14
  27. package/dist/plugins/_shared/localFile.js +40 -0
  28. package/dist/plugins/_shared/mediaFile.js +12 -12
  29. package/dist/plugins/_shared/microsoftAuth.js +31 -47
  30. package/dist/plugins/_shared/microsoftCredentials.js +42 -15
  31. package/dist/plugins/_shared/provider.js +2 -14
  32. package/dist/plugins/_shared/shiftCloud.js +16 -56
  33. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  34. package/dist/plugins/_shared/shiftUpload.js +14 -10
  35. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  36. package/dist/plugins/actionNetwork/src/index.js +39 -50
  37. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  38. package/dist/plugins/activeCampaign/src/index.js +61 -132
  39. package/dist/plugins/adalo/src/credentials.js +16 -0
  40. package/dist/plugins/adalo/src/index.js +19 -43
  41. package/dist/plugins/affinity/src/credentials.js +19 -0
  42. package/dist/plugins/affinity/src/index.js +29 -54
  43. package/dist/plugins/agentMail/src/credentials.js +35 -0
  44. package/dist/plugins/agentMail/src/drafts.js +137 -0
  45. package/dist/plugins/agentMail/src/inboxes.js +95 -0
  46. package/dist/plugins/agentMail/src/index.js +35 -0
  47. package/dist/plugins/agentMail/src/messages.js +154 -0
  48. package/dist/plugins/agentMail/src/schemas.js +156 -0
  49. package/dist/plugins/agentMail/src/shared.js +203 -0
  50. package/dist/plugins/agentMail/src/threads.js +75 -0
  51. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  52. package/dist/plugins/agileCrm/src/index.js +46 -112
  53. package/dist/plugins/airtable/src/credentials.js +19 -0
  54. package/dist/plugins/airtable/src/index.js +37 -50
  55. package/dist/plugins/airtop/src/credentials.js +20 -0
  56. package/dist/plugins/airtop/src/index.js +51 -75
  57. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  58. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  59. package/dist/plugins/asana/src/credentials.js +19 -0
  60. package/dist/plugins/asana/src/index.js +51 -72
  61. package/dist/plugins/autopilot/src/credentials.js +19 -0
  62. package/dist/plugins/autopilot/src/index.js +38 -45
  63. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  64. package/dist/plugins/bambooHr/src/index.js +41 -67
  65. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  66. package/dist/plugins/bannerbear/src/index.js +15 -27
  67. package/dist/plugins/baserow/src/credentials.js +17 -0
  68. package/dist/plugins/baserow/src/index.js +23 -49
  69. package/dist/plugins/beeminder/src/credentials.js +19 -0
  70. package/dist/plugins/beeminder/src/index.js +32 -54
  71. package/dist/plugins/bitly/src/credentials.js +19 -0
  72. package/dist/plugins/bitly/src/index.js +12 -26
  73. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  74. package/dist/plugins/bitwarden/src/index.js +34 -80
  75. package/dist/plugins/box/src/credentials.js +19 -0
  76. package/dist/plugins/box/src/index.js +24 -49
  77. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  78. package/dist/plugins/brandfetch/src/index.js +12 -17
  79. package/dist/plugins/brevo/src/credentials.js +19 -0
  80. package/dist/plugins/brevo/src/index.js +30 -51
  81. package/dist/plugins/bubble/src/credentials.js +28 -0
  82. package/dist/plugins/bubble/src/index.js +29 -65
  83. package/dist/plugins/chargebee/src/credentials.js +16 -0
  84. package/dist/plugins/chargebee/src/index.js +15 -45
  85. package/dist/plugins/circleci/src/credentials.js +19 -0
  86. package/dist/plugins/circleci/src/index.js +19 -39
  87. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  88. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  89. package/dist/plugins/clearbit/src/credentials.js +22 -0
  90. package/dist/plugins/clearbit/src/index.js +11 -21
  91. package/dist/plugins/clickup/src/credentials.js +19 -0
  92. package/dist/plugins/clickup/src/index.js +85 -117
  93. package/dist/plugins/clockify/src/credentials.js +19 -0
  94. package/dist/plugins/clockify/src/index.js +46 -61
  95. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  96. package/dist/plugins/cloudflare/src/index.js +19 -34
  97. package/dist/plugins/cockpit/src/credentials.js +17 -0
  98. package/dist/plugins/cockpit/src/index.js +18 -31
  99. package/dist/plugins/coda/src/credentials.js +19 -0
  100. package/dist/plugins/coda/src/index.js +33 -50
  101. package/dist/plugins/coingecko/src/credentials.js +20 -0
  102. package/dist/plugins/coingecko/src/index.js +24 -34
  103. package/dist/plugins/contentful/src/credentials.js +26 -0
  104. package/dist/plugins/contentful/src/index.js +19 -40
  105. package/dist/plugins/convertkit/src/credentials.js +26 -0
  106. package/dist/plugins/convertkit/src/index.js +27 -45
  107. package/dist/plugins/copper/src/credentials.js +17 -0
  108. package/dist/plugins/copper/src/index.js +25 -47
  109. package/dist/plugins/cortex/src/credentials.js +28 -0
  110. package/dist/plugins/cortex/src/index.js +26 -49
  111. package/dist/plugins/currents/src/credentials.js +19 -0
  112. package/dist/plugins/currents/src/index.js +46 -59
  113. package/dist/plugins/customerIo/src/credentials.js +52 -0
  114. package/dist/plugins/customerIo/src/index.js +30 -58
  115. package/dist/plugins/databricks/src/credentials.js +13 -0
  116. package/dist/plugins/databricks/src/index.js +51 -103
  117. package/dist/plugins/deepl/src/credentials.js +19 -0
  118. package/dist/plugins/deepl/src/index.js +13 -39
  119. package/dist/plugins/demio/src/credentials.js +26 -0
  120. package/dist/plugins/demio/src/index.js +17 -41
  121. package/dist/plugins/dhl/src/credentials.js +13 -0
  122. package/dist/plugins/dhl/src/index.js +8 -19
  123. package/dist/plugins/discord/src/credentials.js +19 -0
  124. package/dist/plugins/discord/src/index.js +30 -58
  125. package/dist/plugins/discourse/src/credentials.js +18 -0
  126. package/dist/plugins/discourse/src/index.js +36 -53
  127. package/dist/plugins/disqus/src/credentials.js +13 -0
  128. package/dist/plugins/disqus/src/index.js +14 -32
  129. package/dist/plugins/drift/src/credentials.js +13 -0
  130. package/dist/plugins/drift/src/index.js +16 -26
  131. package/dist/plugins/dropbox/src/credentials.js +13 -0
  132. package/dist/plugins/dropbox/src/index.js +23 -30
  133. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  134. package/dist/plugins/dropcontact/src/index.js +13 -18
  135. package/dist/plugins/egoi/src/credentials.js +19 -0
  136. package/dist/plugins/egoi/src/index.js +23 -38
  137. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  138. package/dist/plugins/elasticsearch/src/index.js +27 -48
  139. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  140. package/dist/plugins/elevenlabs/src/index.js +4 -1
  141. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  142. package/dist/plugins/elevenlabs/src/shared.js +87 -62
  143. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  144. package/dist/plugins/emelia/src/credentials.js +14 -0
  145. package/dist/plugins/emelia/src/index.js +19 -23
  146. package/dist/plugins/erpnext/src/credentials.js +27 -0
  147. package/dist/plugins/erpnext/src/index.js +21 -42
  148. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  149. package/dist/plugins/facebookGraph/src/index.js +39 -37
  150. package/dist/plugins/fal/src/credentials.js +14 -0
  151. package/dist/plugins/fal/src/index.js +5 -3
  152. package/dist/plugins/fal/src/shared.js +58 -63
  153. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  154. package/dist/plugins/freshdesk/src/index.js +25 -46
  155. package/dist/plugins/freshservice/src/credentials.js +16 -0
  156. package/dist/plugins/freshservice/src/index.js +37 -58
  157. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  158. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  159. package/dist/plugins/getresponse/src/credentials.js +22 -0
  160. package/dist/plugins/getresponse/src/index.js +20 -32
  161. package/dist/plugins/gett/src/credentials.js +64 -0
  162. package/dist/plugins/gett/src/index.js +11 -6
  163. package/dist/plugins/gett/src/login.js +24 -0
  164. package/dist/plugins/gett/src/session.js +15 -38
  165. package/dist/plugins/gett/src/shared.js +41 -84
  166. package/dist/plugins/ghost/src/credentials.js +36 -0
  167. package/dist/plugins/ghost/src/index.js +18 -59
  168. package/dist/plugins/github/src/credentials.js +18 -0
  169. package/dist/plugins/github/src/index.js +55 -78
  170. package/dist/plugins/gitlab/src/credentials.js +24 -0
  171. package/dist/plugins/gitlab/src/index.js +29 -48
  172. package/dist/plugins/gmail/src/index.js +47 -108
  173. package/dist/plugins/gong/src/credentials.js +16 -0
  174. package/dist/plugins/gong/src/index.js +16 -32
  175. package/dist/plugins/googleAppsScript/src/index.js +109 -42
  176. package/dist/plugins/googleCalendar/src/index.js +20 -51
  177. package/dist/plugins/googleContacts/src/index.js +13 -40
  178. package/dist/plugins/googleDocs/src/index.js +3 -32
  179. package/dist/plugins/googleDocs/src/shared.js +2 -1
  180. package/dist/plugins/googleDrive/src/index.js +68 -97
  181. package/dist/plugins/googleImage/src/credentials.js +14 -0
  182. package/dist/plugins/googleImage/src/index.js +15 -26
  183. package/dist/plugins/googleSheets/src/index.js +27 -60
  184. package/dist/plugins/googleSlides/src/index.js +7 -35
  185. package/dist/plugins/googleTasks/src/index.js +14 -42
  186. package/dist/plugins/gotify/src/credentials.js +32 -0
  187. package/dist/plugins/gotify/src/index.js +14 -36
  188. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  189. package/dist/plugins/gotowebinar/src/index.js +52 -69
  190. package/dist/plugins/grafana/src/credentials.js +16 -0
  191. package/dist/plugins/grafana/src/index.js +34 -53
  192. package/dist/plugins/graphql/src/credentials.js +42 -0
  193. package/dist/plugins/graphql/src/index.js +21 -46
  194. package/dist/plugins/grist/src/credentials.js +30 -0
  195. package/dist/plugins/grist/src/index.js +14 -43
  196. package/dist/plugins/halopsa/src/credentials.js +56 -0
  197. package/dist/plugins/halopsa/src/index.js +20 -47
  198. package/dist/plugins/harvest/src/credentials.js +20 -0
  199. package/dist/plugins/harvest/src/index.js +24 -43
  200. package/dist/plugins/helpscout/src/credentials.js +13 -0
  201. package/dist/plugins/helpscout/src/index.js +26 -38
  202. package/dist/plugins/highlevel/src/credentials.js +19 -0
  203. package/dist/plugins/highlevel/src/index.js +42 -65
  204. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  205. package/dist/plugins/homeAssistant/src/index.js +34 -52
  206. package/dist/plugins/hubspot/src/credentials.js +16 -0
  207. package/dist/plugins/hubspot/src/index.js +29 -41
  208. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  209. package/dist/plugins/humanticAi/src/index.js +15 -22
  210. package/dist/plugins/hunter/src/credentials.js +13 -0
  211. package/dist/plugins/hunter/src/index.js +18 -17
  212. package/dist/plugins/intercom/src/credentials.js +19 -0
  213. package/dist/plugins/intercom/src/index.js +25 -38
  214. package/dist/plugins/iterable/src/credentials.js +17 -0
  215. package/dist/plugins/iterable/src/index.js +26 -40
  216. package/dist/plugins/jenkins/src/credentials.js +16 -0
  217. package/dist/plugins/jenkins/src/index.js +22 -36
  218. package/dist/plugins/jira/src/credentials.js +16 -0
  219. package/dist/plugins/jira/src/index.js +35 -61
  220. package/dist/plugins/keap/src/credentials.js +19 -0
  221. package/dist/plugins/keap/src/index.js +43 -71
  222. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  223. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  224. package/dist/plugins/lemlist/src/credentials.js +19 -0
  225. package/dist/plugins/lemlist/src/index.js +35 -47
  226. package/dist/plugins/linear/src/attachments.js +7 -7
  227. package/dist/plugins/linear/src/comments.js +7 -7
  228. package/dist/plugins/linear/src/credentials.js +17 -0
  229. package/dist/plugins/linear/src/cycles.js +5 -5
  230. package/dist/plugins/linear/src/index.js +2 -0
  231. package/dist/plugins/linear/src/initiatives.js +6 -6
  232. package/dist/plugins/linear/src/issues.js +14 -14
  233. package/dist/plugins/linear/src/labels.js +6 -6
  234. package/dist/plugins/linear/src/organization.js +2 -2
  235. package/dist/plugins/linear/src/projects.js +12 -12
  236. package/dist/plugins/linear/src/shared.js +34 -32
  237. package/dist/plugins/linear/src/states.js +3 -3
  238. package/dist/plugins/linear/src/teams.js +4 -4
  239. package/dist/plugins/linear/src/users.js +3 -3
  240. package/dist/plugins/linear/src/views.js +5 -5
  241. package/dist/plugins/linear/src/webhooks.js +5 -5
  242. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  243. package/dist/plugins/lingvanex/src/index.js +7 -9
  244. package/dist/plugins/linkedin/src/credentials.js +17 -0
  245. package/dist/plugins/linkedin/src/index.js +13 -17
  246. package/dist/plugins/lonescale/src/credentials.js +13 -0
  247. package/dist/plugins/lonescale/src/index.js +16 -26
  248. package/dist/plugins/magento/src/credentials.js +16 -0
  249. package/dist/plugins/magento/src/index.js +67 -84
  250. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  251. package/dist/plugins/mailcheck/src/index.js +7 -9
  252. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  253. package/dist/plugins/mailchimp/src/index.js +36 -44
  254. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  255. package/dist/plugins/mailerlite/src/index.js +19 -32
  256. package/dist/plugins/mailgun/src/credentials.js +21 -0
  257. package/dist/plugins/mailgun/src/index.js +15 -21
  258. package/dist/plugins/mailjet/src/credentials.js +38 -0
  259. package/dist/plugins/mailjet/src/index.js +60 -115
  260. package/dist/plugins/mandrill/src/credentials.js +17 -0
  261. package/dist/plugins/mandrill/src/index.js +11 -12
  262. package/dist/plugins/marketstack/src/credentials.js +16 -0
  263. package/dist/plugins/marketstack/src/index.js +18 -28
  264. package/dist/plugins/matrix/src/credentials.js +19 -0
  265. package/dist/plugins/matrix/src/index.js +23 -52
  266. package/dist/plugins/mattermost/src/credentials.js +19 -0
  267. package/dist/plugins/mattermost/src/index.js +41 -73
  268. package/dist/plugins/mautic/src/credentials.js +16 -0
  269. package/dist/plugins/mautic/src/index.js +46 -62
  270. package/dist/plugins/medium/src/credentials.js +20 -0
  271. package/dist/plugins/medium/src/index.js +18 -23
  272. package/dist/plugins/messagebird/src/credentials.js +22 -0
  273. package/dist/plugins/messagebird/src/index.js +13 -18
  274. package/dist/plugins/metabase/src/credentials.js +19 -0
  275. package/dist/plugins/metabase/src/index.js +24 -40
  276. package/dist/plugins/microsoftCalendar/src/index.js +49 -18
  277. package/dist/plugins/microsoftFiles/src/index.js +95 -31
  278. package/dist/plugins/microsoftMail/src/index.js +63 -21
  279. package/dist/plugins/misp/src/credentials.js +16 -0
  280. package/dist/plugins/misp/src/index.js +60 -71
  281. package/dist/plugins/mocean/src/credentials.js +17 -0
  282. package/dist/plugins/mocean/src/index.js +11 -23
  283. package/dist/plugins/monday/src/credentials.js +14 -0
  284. package/dist/plugins/monday/src/index.js +31 -44
  285. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  286. package/dist/plugins/monicaCrm/src/index.js +25 -42
  287. package/dist/plugins/msg91/src/credentials.js +10 -0
  288. package/dist/plugins/msg91/src/index.js +15 -11
  289. package/dist/plugins/nasa/src/credentials.js +22 -0
  290. package/dist/plugins/nasa/src/index.js +24 -28
  291. package/dist/plugins/netlify/src/credentials.js +19 -0
  292. package/dist/plugins/netlify/src/index.js +27 -51
  293. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  294. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  295. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  296. package/dist/plugins/nextcloud/src/index.js +55 -109
  297. package/dist/plugins/nocodb/src/credentials.js +16 -0
  298. package/dist/plugins/nocodb/src/index.js +19 -37
  299. package/dist/plugins/notion/src/credentials.js +21 -0
  300. package/dist/plugins/notion/src/index.js +25 -38
  301. package/dist/plugins/npm/src/credentials.js +19 -0
  302. package/dist/plugins/npm/src/index.js +22 -32
  303. package/dist/plugins/odoo/src/credentials.js +21 -0
  304. package/dist/plugins/odoo/src/index.js +53 -69
  305. package/dist/plugins/okta/src/credentials.js +23 -0
  306. package/dist/plugins/okta/src/index.js +30 -35
  307. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  308. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  309. package/dist/plugins/onfleet/src/credentials.js +23 -0
  310. package/dist/plugins/onfleet/src/index.js +42 -53
  311. package/dist/plugins/openai/src/credentials.js +13 -0
  312. package/dist/plugins/openai/src/index.js +16 -24
  313. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  314. package/dist/plugins/openweathermap/src/index.js +22 -22
  315. package/dist/plugins/oura/src/credentials.js +19 -0
  316. package/dist/plugins/oura/src/index.js +13 -18
  317. package/dist/plugins/paddle/src/credentials.js +27 -0
  318. package/dist/plugins/paddle/src/index.js +20 -36
  319. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  320. package/dist/plugins/pagerduty/src/index.js +30 -39
  321. package/dist/plugins/parallel/src/credentials.js +18 -0
  322. package/dist/plugins/parallel/src/index.js +16 -22
  323. package/dist/plugins/paypal/src/credentials.js +44 -0
  324. package/dist/plugins/paypal/src/index.js +14 -40
  325. package/dist/plugins/peekalink/src/credentials.js +16 -0
  326. package/dist/plugins/peekalink/src/index.js +10 -11
  327. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  328. package/dist/plugins/phantombuster/src/index.js +19 -32
  329. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  330. package/dist/plugins/philipsHue/src/index.js +15 -27
  331. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  332. package/dist/plugins/pipedrive/src/index.js +43 -73
  333. package/dist/plugins/plaud/src/index.js +2 -1
  334. package/dist/plugins/plaud/src/shared.js +23 -19
  335. package/dist/plugins/plivo/src/credentials.js +20 -0
  336. package/dist/plugins/plivo/src/index.js +13 -19
  337. package/dist/plugins/posthog/src/credentials.js +18 -0
  338. package/dist/plugins/posthog/src/index.js +14 -20
  339. package/dist/plugins/profitwell/src/credentials.js +22 -0
  340. package/dist/plugins/profitwell/src/index.js +10 -17
  341. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  342. package/dist/plugins/pushbullet/src/index.js +19 -27
  343. package/dist/plugins/pushcut/src/credentials.js +19 -0
  344. package/dist/plugins/pushcut/src/index.js +7 -8
  345. package/dist/plugins/pushover/src/credentials.js +14 -0
  346. package/dist/plugins/pushover/src/index.js +7 -12
  347. package/dist/plugins/quickbase/src/credentials.js +15 -0
  348. package/dist/plugins/quickbase/src/index.js +24 -34
  349. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  350. package/dist/plugins/quickbooks/src/index.js +17 -46
  351. package/dist/plugins/raindrop/src/credentials.js +19 -0
  352. package/dist/plugins/raindrop/src/index.js +30 -32
  353. package/dist/plugins/recraft/src/credentials.js +13 -0
  354. package/dist/plugins/recraft/src/index.js +39 -28
  355. package/dist/plugins/reddit/src/credentials.js +26 -0
  356. package/dist/plugins/reddit/src/index.js +30 -34
  357. package/dist/plugins/replicate/src/credentials.js +23 -0
  358. package/dist/plugins/replicate/src/index.js +18 -28
  359. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  360. package/dist/plugins/rocketchat/src/index.js +8 -19
  361. package/dist/plugins/rundeck/src/credentials.js +16 -0
  362. package/dist/plugins/rundeck/src/index.js +12 -28
  363. package/dist/plugins/salesforce/src/credentials.js +73 -0
  364. package/dist/plugins/salesforce/src/index.js +6 -0
  365. package/dist/plugins/salesforce/src/metadata.js +3 -16
  366. package/dist/plugins/salesforce/src/shared.js +25 -100
  367. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  368. package/dist/plugins/salesmate/src/credentials.js +17 -0
  369. package/dist/plugins/salesmate/src/index.js +20 -37
  370. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  371. package/dist/plugins/securityScorecard/src/index.js +24 -37
  372. package/dist/plugins/segment/src/credentials.js +16 -0
  373. package/dist/plugins/segment/src/index.js +12 -16
  374. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  375. package/dist/plugins/sendgrid/src/index.js +31 -35
  376. package/dist/plugins/sendy/src/credentials.js +18 -0
  377. package/dist/plugins/sendy/src/index.js +18 -24
  378. package/dist/plugins/sentry/src/credentials.js +16 -0
  379. package/dist/plugins/sentry/src/index.js +30 -98
  380. package/dist/plugins/servicenow/src/credentials.js +13 -0
  381. package/dist/plugins/servicenow/src/index.js +22 -41
  382. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  383. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  384. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  385. package/dist/plugins/shiftBwm/src/index.js +4 -2
  386. package/dist/plugins/shiftBwm/src/shared.js +41 -16
  387. package/dist/plugins/shiftCrm/src/access.js +2 -2
  388. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  389. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  390. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  391. package/dist/plugins/shiftCrm/src/index.js +2 -0
  392. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  393. package/dist/plugins/shiftCrm/src/people.js +3 -3
  394. package/dist/plugins/shiftCrm/src/records.js +2 -2
  395. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  396. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  397. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  398. package/dist/plugins/shiftObjects/src/index.js +2 -0
  399. package/dist/plugins/shiftObjects/src/objects.js +4 -3
  400. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  401. package/dist/plugins/shiftOcr/src/index.js +14 -8
  402. package/dist/plugins/shiftPages/src/index.js +2 -0
  403. package/dist/plugins/shiftPages/src/pages.js +5 -3
  404. package/dist/plugins/shiftPages/src/shared.js +3 -1
  405. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  406. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  407. package/dist/plugins/shiftTranscription/src/transcription.js +5 -5
  408. package/dist/plugins/shiftWork/src/index.js +2 -0
  409. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  410. package/dist/plugins/shiftWork/src/issues.js +11 -7
  411. package/dist/plugins/shiftWork/src/projects.js +3 -3
  412. package/dist/plugins/shiftWork/src/shared.js +3 -1
  413. package/dist/plugins/shopify/src/credentials.js +16 -0
  414. package/dist/plugins/shopify/src/index.js +32 -59
  415. package/dist/plugins/signl4/src/credentials.js +17 -0
  416. package/dist/plugins/signl4/src/index.js +28 -29
  417. package/dist/plugins/slack/src/credentials.js +19 -0
  418. package/dist/plugins/slack/src/index.js +51 -60
  419. package/dist/plugins/sms77/src/credentials.js +17 -0
  420. package/dist/plugins/sms77/src/index.js +11 -16
  421. package/dist/plugins/splunk/src/credentials.js +19 -0
  422. package/dist/plugins/splunk/src/index.js +32 -74
  423. package/dist/plugins/spotify/src/credentials.js +19 -0
  424. package/dist/plugins/spotify/src/index.js +40 -55
  425. package/dist/plugins/stackby/src/credentials.js +13 -0
  426. package/dist/plugins/stackby/src/index.js +14 -23
  427. package/dist/plugins/steel/src/auth.js +27 -0
  428. package/dist/plugins/steel/src/browser.js +4 -3
  429. package/dist/plugins/steel/src/captchas.js +4 -3
  430. package/dist/plugins/steel/src/extensions.js +3 -2
  431. package/dist/plugins/steel/src/files.js +9 -10
  432. package/dist/plugins/steel/src/index.js +2 -0
  433. package/dist/plugins/steel/src/page/tools.js +3 -3
  434. package/dist/plugins/steel/src/profiles.js +4 -3
  435. package/dist/plugins/steel/src/sessions.js +13 -13
  436. package/dist/plugins/steel/src/shared.js +21 -51
  437. package/dist/plugins/storyblok/src/credentials.js +37 -0
  438. package/dist/plugins/storyblok/src/index.js +22 -66
  439. package/dist/plugins/strapi/src/credentials.js +71 -0
  440. package/dist/plugins/strapi/src/index.js +36 -70
  441. package/dist/plugins/strava/src/credentials.js +19 -0
  442. package/dist/plugins/strava/src/index.js +16 -33
  443. package/dist/plugins/stripe/src/credentials.js +19 -0
  444. package/dist/plugins/stripe/src/index.js +44 -58
  445. package/dist/plugins/supabase/src/credentials.js +30 -0
  446. package/dist/plugins/supabase/src/index.js +18 -40
  447. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  448. package/dist/plugins/syncromsp/src/index.js +37 -70
  449. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  450. package/dist/plugins/tapfiliate/src/index.js +21 -31
  451. package/dist/plugins/telegram/src/credentials.js +20 -0
  452. package/dist/plugins/telegram/src/index.js +31 -39
  453. package/dist/plugins/thehive/src/credentials.js +14 -0
  454. package/dist/plugins/thehive/src/index.js +33 -50
  455. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  456. package/dist/plugins/thehiveProject/src/index.js +53 -122
  457. package/dist/plugins/todoist/src/credentials.js +26 -0
  458. package/dist/plugins/todoist/src/index.js +49 -79
  459. package/dist/plugins/together/src/credentials.js +16 -0
  460. package/dist/plugins/together/src/index.js +31 -33
  461. package/dist/plugins/travisci/src/credentials.js +24 -0
  462. package/dist/plugins/travisci/src/index.js +16 -30
  463. package/dist/plugins/trello/src/credentials.js +29 -0
  464. package/dist/plugins/trello/src/index.js +49 -64
  465. package/dist/plugins/twake/src/credentials.js +16 -0
  466. package/dist/plugins/twake/src/index.js +8 -10
  467. package/dist/plugins/twilio/src/credentials.js +23 -0
  468. package/dist/plugins/twilio/src/index.js +12 -26
  469. package/dist/plugins/twist/src/credentials.js +13 -0
  470. package/dist/plugins/twist/src/index.js +32 -44
  471. package/dist/plugins/twitter/src/credentials.js +16 -0
  472. package/dist/plugins/twitter/src/index.js +25 -37
  473. package/dist/plugins/typesafe/src/credentials.js +28 -0
  474. package/dist/plugins/typesafe/src/index.js +3 -1
  475. package/dist/plugins/typesafe/src/shared.js +23 -35
  476. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  477. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  478. package/dist/plugins/uplead/src/credentials.js +16 -0
  479. package/dist/plugins/uplead/src/index.js +11 -16
  480. package/dist/plugins/uproc/src/credentials.js +14 -0
  481. package/dist/plugins/uproc/src/index.js +7 -10
  482. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  483. package/dist/plugins/uptimerobot/src/index.js +28 -39
  484. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  485. package/dist/plugins/urlscanio/src/index.js +13 -22
  486. package/dist/plugins/vercel/src/credentials.js +19 -0
  487. package/dist/plugins/vercel/src/deployments.js +27 -11
  488. package/dist/plugins/vercel/src/env.js +31 -12
  489. package/dist/plugins/vercel/src/index.js +2 -0
  490. package/dist/plugins/vercel/src/projects.js +6 -3
  491. package/dist/plugins/vercel/src/shared.js +32 -37
  492. package/dist/plugins/vero/src/credentials.js +17 -0
  493. package/dist/plugins/vero/src/index.js +18 -21
  494. package/dist/plugins/vonage/src/credentials.js +17 -0
  495. package/dist/plugins/vonage/src/index.js +14 -18
  496. package/dist/plugins/wekan/src/credentials.js +16 -0
  497. package/dist/plugins/wekan/src/index.js +33 -46
  498. package/dist/plugins/wolt/src/account.js +6 -0
  499. package/dist/plugins/wolt/src/catalog.js +2 -2
  500. package/dist/plugins/wolt/src/credentials.js +64 -0
  501. package/dist/plugins/wolt/src/index.js +8 -3
  502. package/dist/plugins/wolt/src/orders.js +2 -2
  503. package/dist/plugins/wolt/src/public.js +91 -0
  504. package/dist/plugins/wolt/src/shared.js +49 -158
  505. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  506. package/dist/plugins/woocommerce/src/index.js +19 -37
  507. package/dist/plugins/wordpress/src/credentials.js +16 -0
  508. package/dist/plugins/wordpress/src/index.js +23 -42
  509. package/dist/plugins/xai/src/credentials.js +13 -0
  510. package/dist/plugins/xai/src/index.js +32 -31
  511. package/dist/plugins/xero/src/credentials.js +17 -0
  512. package/dist/plugins/xero/src/index.js +19 -36
  513. package/dist/plugins/yourls/src/credentials.js +17 -0
  514. package/dist/plugins/yourls/src/index.js +13 -23
  515. package/dist/plugins/zammad/src/credentials.js +15 -0
  516. package/dist/plugins/zammad/src/index.js +27 -47
  517. package/dist/plugins/zendesk/src/credentials.js +26 -0
  518. package/dist/plugins/zendesk/src/index.js +29 -48
  519. package/dist/plugins/zoho/src/credentials.js +17 -0
  520. package/dist/plugins/zoho/src/index.js +18 -38
  521. package/dist/plugins/zoom/src/credentials.js +19 -0
  522. package/dist/plugins/zoom/src/index.js +15 -30
  523. package/dist/plugins/zulip/src/credentials.js +16 -0
  524. package/dist/plugins/zulip/src/index.js +36 -42
  525. package/dist/sdk.d.ts +8 -0
  526. package/dist/sdk.js +3 -0
  527. package/package.json +2 -1
  528. package/dist/plugins/_shared/authedFetch.js +0 -33
  529. package/dist/plugins/_shared/tokenRefresh.js +0 -41
  530. package/dist/tests/helpers/engine-harness.d.ts +0 -1
  531. package/dist/tests/helpers/engine-harness.js +0 -236
@@ -1,40 +1,25 @@
1
- const BASE_URL = "https://coda.io/apis/v1";
2
- async function apiRequest(token, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { codaCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, query) {
4
+ return credentialJson(ctx, codaCredential, "coda", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- "Content-Type": "application/json",
14
- Authorization: `Bearer ${token}`,
15
- },
16
- };
17
- if (body &&
18
- Object.keys(body).length > 0 &&
19
- method !== "GET" &&
20
- method !== "DELETE") {
21
- opts.body = JSON.stringify(body);
22
- }
23
- const res = await fetch(url.toString(), opts);
24
- if (!res.ok)
25
- throw new Error(`Coda API error ${res.status}: ${await res.text()}`);
26
- if (res.status === 204)
27
- return { success: true };
28
- return res.json();
8
+ query,
9
+ // DELETE carries a body where Coda names the rows to delete.
10
+ ...(body && Object.keys(body).length > 0 && method !== "GET"
11
+ ? { json: body }
12
+ : {}),
13
+ });
29
14
  }
30
- async function paginateAll(token, endpoint, qs, limit) {
15
+ async function paginateAll(ctx, path, qs, limit) {
31
16
  const results = [];
32
17
  let pageToken;
33
18
  while (true) {
34
19
  const q = { ...qs };
35
20
  if (pageToken)
36
21
  q.pageToken = pageToken;
37
- const data = (await apiRequest(token, "GET", endpoint, undefined, q));
22
+ const data = (await apiRequest(ctx, "GET", path, undefined, q));
38
23
  const items = data.items ?? [];
39
24
  results.push(...items);
40
25
  if (limit && results.length >= limit)
@@ -45,12 +30,10 @@ async function paginateAll(token, endpoint, qs, limit) {
45
30
  }
46
31
  return results;
47
32
  }
48
- function getToken(ctx) {
49
- return ctx.connection.config.accessToken;
50
- }
51
33
  export default function coda(rl) {
52
34
  rl.setName("coda");
53
35
  rl.setVersion("0.1.0");
36
+ rl.setCredential(codaCredential);
54
37
  rl.setConnectionSchema({
55
38
  accessToken: {
56
39
  type: "string",
@@ -91,7 +74,7 @@ export default function coda(rl) {
91
74
  const body = { rows: [{ cells: row }] };
92
75
  if (keyColumns)
93
76
  body.keyColumns = keyColumns;
94
- return apiRequest(getToken(ctx), "POST", `/docs/${docId}/tables/${tableId}/rows`, body, qs);
77
+ return apiRequest(ctx, "POST", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/rows`, body, qs);
95
78
  },
96
79
  });
97
80
  rl.registerAction("table.getRow", {
@@ -117,7 +100,7 @@ export default function coda(rl) {
117
100
  const qs = { useColumnNames };
118
101
  if (valueFormat)
119
102
  qs.valueFormat = valueFormat;
120
- const data = (await apiRequest(getToken(ctx), "GET", `/docs/${docId}/tables/${tableId}/rows/${rowId}`, undefined, qs));
103
+ const data = (await apiRequest(ctx, "GET", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/rows/${pathSegment(rowId)}`, undefined, qs));
121
104
  return { id: data.id, ...data.values };
122
105
  },
123
106
  });
@@ -157,7 +140,7 @@ export default function coda(rl) {
157
140
  qs.valueFormat = valueFormat;
158
141
  if (visibleOnly)
159
142
  qs.visibleOnly = visibleOnly;
160
- const rows = await paginateAll(getToken(ctx), `/docs/${docId}/tables/${tableId}/rows`, qs, limit);
143
+ const rows = await paginateAll(ctx, `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/rows`, qs, limit);
161
144
  return rows.map((r) => {
162
145
  const row = r;
163
146
  return { id: row.id, ...row.values };
@@ -174,7 +157,7 @@ export default function coda(rl) {
174
157
  },
175
158
  async execute(input, ctx) {
176
159
  const { docId, tableId, rowId } = input;
177
- return apiRequest(getToken(ctx), "DELETE", `/docs/${docId}/tables/${tableId}/rows`, { rowIds: [rowId] });
160
+ return apiRequest(ctx, "DELETE", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/rows`, { rowIds: [rowId] });
178
161
  },
179
162
  });
180
163
  rl.registerAction("table.pushButton", {
@@ -192,7 +175,7 @@ export default function coda(rl) {
192
175
  },
193
176
  async execute(input, ctx) {
194
177
  const { docId, tableId, rowId, columnId } = input;
195
- return apiRequest(getToken(ctx), "POST", `/docs/${docId}/tables/${tableId}/rows/${rowId}/buttons/${columnId}`);
178
+ return apiRequest(ctx, "POST", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/rows/${pathSegment(rowId)}/buttons/${pathSegment(columnId)}`);
196
179
  },
197
180
  });
198
181
  // ── Table Column ────────────────────────────────────
@@ -206,7 +189,7 @@ export default function coda(rl) {
206
189
  },
207
190
  async execute(input, ctx) {
208
191
  const { docId, tableId, columnId } = input;
209
- return apiRequest(getToken(ctx), "GET", `/docs/${docId}/tables/${tableId}/columns/${columnId}`);
192
+ return apiRequest(ctx, "GET", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/columns/${pathSegment(columnId)}`);
210
193
  },
211
194
  });
212
195
  rl.registerAction("table.listColumns", {
@@ -219,7 +202,7 @@ export default function coda(rl) {
219
202
  },
220
203
  async execute(input, ctx) {
221
204
  const { docId, tableId, limit } = (input ?? {});
222
- return paginateAll(getToken(ctx), `/docs/${docId}/tables/${tableId}/columns`, undefined, limit);
205
+ return paginateAll(ctx, `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/columns`, undefined, limit);
223
206
  },
224
207
  });
225
208
  // ── Formula ─────────────────────────────────────────
@@ -232,7 +215,7 @@ export default function coda(rl) {
232
215
  },
233
216
  async execute(input, ctx) {
234
217
  const { docId, formulaId } = input;
235
- return apiRequest(getToken(ctx), "GET", `/docs/${docId}/formulas/${formulaId}`);
218
+ return apiRequest(ctx, "GET", `docs/${pathSegment(docId)}/formulas/${pathSegment(formulaId)}`);
236
219
  },
237
220
  });
238
221
  rl.registerAction("formula.list", {
@@ -244,7 +227,7 @@ export default function coda(rl) {
244
227
  },
245
228
  async execute(input, ctx) {
246
229
  const { docId, limit } = (input ?? {});
247
- return paginateAll(getToken(ctx), `/docs/${docId}/formulas`, undefined, limit);
230
+ return paginateAll(ctx, `docs/${pathSegment(docId)}/formulas`, undefined, limit);
248
231
  },
249
232
  });
250
233
  // ── Control ─────────────────────────────────────────
@@ -257,7 +240,7 @@ export default function coda(rl) {
257
240
  },
258
241
  async execute(input, ctx) {
259
242
  const { docId, controlId } = input;
260
- return apiRequest(getToken(ctx), "GET", `/docs/${docId}/controls/${controlId}`);
243
+ return apiRequest(ctx, "GET", `docs/${pathSegment(docId)}/controls/${pathSegment(controlId)}`);
261
244
  },
262
245
  });
263
246
  rl.registerAction("control.list", {
@@ -269,7 +252,7 @@ export default function coda(rl) {
269
252
  },
270
253
  async execute(input, ctx) {
271
254
  const { docId, limit } = (input ?? {});
272
- return paginateAll(getToken(ctx), `/docs/${docId}/controls`, undefined, limit);
255
+ return paginateAll(ctx, `docs/${pathSegment(docId)}/controls`, undefined, limit);
273
256
  },
274
257
  });
275
258
  // ── View ────────────────────────────────────────────
@@ -282,7 +265,7 @@ export default function coda(rl) {
282
265
  },
283
266
  async execute(input, ctx) {
284
267
  const { docId, viewId } = input;
285
- return apiRequest(getToken(ctx), "GET", `/docs/${docId}/tables/${viewId}`);
268
+ return apiRequest(ctx, "GET", `docs/${pathSegment(docId)}/tables/${pathSegment(viewId)}`);
286
269
  },
287
270
  });
288
271
  rl.registerAction("view.list", {
@@ -294,7 +277,7 @@ export default function coda(rl) {
294
277
  },
295
278
  async execute(input, ctx) {
296
279
  const { docId, limit } = (input ?? {});
297
- return paginateAll(getToken(ctx), `/docs/${docId}/tables`, { tableTypes: "view" }, limit);
280
+ return paginateAll(ctx, `docs/${pathSegment(docId)}/tables`, { tableTypes: "view" }, limit);
298
281
  },
299
282
  });
300
283
  rl.registerAction("view.listRows", {
@@ -326,7 +309,7 @@ export default function coda(rl) {
326
309
  qs.sortBy = sortBy;
327
310
  if (valueFormat)
328
311
  qs.valueFormat = valueFormat;
329
- const rows = await paginateAll(getToken(ctx), `/docs/${docId}/tables/${viewId}/rows`, qs, limit);
312
+ const rows = await paginateAll(ctx, `docs/${pathSegment(docId)}/tables/${pathSegment(viewId)}/rows`, qs, limit);
330
313
  return rows.map((r) => {
331
314
  const row = r;
332
315
  return { id: row.id, ...row.values };
@@ -343,7 +326,7 @@ export default function coda(rl) {
343
326
  },
344
327
  async execute(input, ctx) {
345
328
  const { docId, viewId, rowId } = input;
346
- return apiRequest(getToken(ctx), "DELETE", `/docs/${docId}/tables/${viewId}/rows/${rowId}`);
329
+ return apiRequest(ctx, "DELETE", `docs/${pathSegment(docId)}/tables/${pathSegment(viewId)}/rows/${pathSegment(rowId)}`);
347
330
  },
348
331
  });
349
332
  rl.registerAction("view.updateRow", {
@@ -370,7 +353,7 @@ export default function coda(rl) {
370
353
  if (disableParsing)
371
354
  qs.disableParsing = true;
372
355
  const row = Object.entries(cells).map(([column, value]) => ({ column, value }));
373
- return apiRequest(getToken(ctx), "PUT", `/docs/${docId}/tables/${viewId}/rows/${rowId}`, { row: { cells: row } }, qs);
356
+ return apiRequest(ctx, "PUT", `docs/${pathSegment(docId)}/tables/${pathSegment(viewId)}/rows/${pathSegment(rowId)}`, { row: { cells: row } }, qs);
374
357
  },
375
358
  });
376
359
  rl.registerAction("view.pushButton", {
@@ -388,7 +371,7 @@ export default function coda(rl) {
388
371
  },
389
372
  async execute(input, ctx) {
390
373
  const { docId, viewId, rowId, columnId } = input;
391
- return apiRequest(getToken(ctx), "POST", `/docs/${docId}/tables/${viewId}/rows/${rowId}/buttons/${columnId}`);
374
+ return apiRequest(ctx, "POST", `docs/${pathSegment(docId)}/tables/${pathSegment(viewId)}/rows/${pathSegment(rowId)}/buttons/${pathSegment(columnId)}`);
392
375
  },
393
376
  });
394
377
  rl.registerAction("view.listColumns", {
@@ -401,7 +384,7 @@ export default function coda(rl) {
401
384
  },
402
385
  async execute(input, ctx) {
403
386
  const { docId, viewId, limit } = (input ?? {});
404
- return paginateAll(getToken(ctx), `/docs/${docId}/tables/${viewId}/columns`, undefined, limit);
387
+ return paginateAll(ctx, `docs/${pathSegment(docId)}/tables/${pathSegment(viewId)}/columns`, undefined, limit);
405
388
  },
406
389
  });
407
390
  }
@@ -0,0 +1,20 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An optional demo API key, sent in the x-cg-demo-api-key header to
4
+ * CoinGecko's public API; without one, requests go unsigned.
5
+ */
6
+ export const coingeckoCredential = staticCredential({
7
+ id: "coingecko",
8
+ auth: { kind: "apiKey", header: "x-cg-demo-api-key" },
9
+ local: { secret: "apiKey" },
10
+ optional: true,
11
+ targets: {
12
+ api: { baseUrl: "https://api.coingecko.com/api/v3/", methods: ["GET"] },
13
+ },
14
+ probe: {
15
+ target: "api",
16
+ path: "ping",
17
+ method: "GET",
18
+ acceptedStatuses: [200],
19
+ },
20
+ });
@@ -1,23 +1,16 @@
1
- const BASE_URL = "https://api.coingecko.com/api/v3";
2
- async function apiRequest(endpoint, qs, apiKey) {
3
- const url = new URL(`${BASE_URL}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const headers = { Accept: "application/json" };
11
- if (apiKey)
12
- headers["x-cg-demo-api-key"] = apiKey;
13
- const res = await fetch(url.toString(), { headers });
14
- if (!res.ok)
15
- throw new Error(`CoinGecko API error ${res.status}: ${await res.text()}`);
16
- return res.json();
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { coingeckoCredential } from "./credentials.js";
3
+ function apiRequest(ctx, path, query) {
4
+ return credentialJson(ctx, coingeckoCredential, "coingecko", {
5
+ target: "api",
6
+ path,
7
+ query,
8
+ });
17
9
  }
18
10
  export default function coingecko(rl) {
19
11
  rl.setName("coingecko");
20
12
  rl.setVersion("0.1.0");
13
+ rl.setCredential(coingeckoCredential);
21
14
  rl.setConnectionSchema({
22
15
  apiKey: {
23
16
  type: "string",
@@ -26,9 +19,6 @@ export default function coingecko(rl) {
26
19
  env: "COINGECKO_API_KEY",
27
20
  },
28
21
  });
29
- function getKey(ctx) {
30
- return ctx.connection.config.apiKey;
31
- }
32
22
  // ── Coin ────────────────────────────────────────────
33
23
  rl.registerAction("coin.get", {
34
24
  access: "read",
@@ -81,9 +71,9 @@ export default function coingecko(rl) {
81
71
  tickers: tickers ?? false,
82
72
  };
83
73
  if (contractAddress && platformId) {
84
- return apiRequest(`/coins/${platformId}/contract/${contractAddress}`, qs, getKey(ctx));
74
+ return apiRequest(ctx, `coins/${pathSegment(platformId)}/contract/${pathSegment(contractAddress)}`, qs);
85
75
  }
86
- return apiRequest(`/coins/${coinId}`, qs, getKey(ctx));
76
+ return apiRequest(ctx, `coins/${pathSegment(coinId)}`, qs);
87
77
  },
88
78
  });
89
79
  rl.registerAction("coin.list", {
@@ -94,7 +84,7 @@ export default function coingecko(rl) {
94
84
  },
95
85
  async execute(input, ctx) {
96
86
  const { limit } = (input ?? {});
97
- const data = (await apiRequest("/coins/list", undefined, getKey(ctx)));
87
+ const data = (await apiRequest(ctx, "coins/list"));
98
88
  if (limit)
99
89
  return data.slice(0, limit);
100
90
  return data;
@@ -144,7 +134,7 @@ export default function coingecko(rl) {
144
134
  qs.price_change_percentage = priceChangePercentage;
145
135
  if (limit)
146
136
  qs.per_page = limit;
147
- return apiRequest("/coins/markets", qs, getKey(ctx));
137
+ return apiRequest(ctx, "coins/markets", qs);
148
138
  },
149
139
  });
150
140
  rl.registerAction("coin.price", {
@@ -189,7 +179,7 @@ export default function coingecko(rl) {
189
179
  qs.include_24hr_vol = true;
190
180
  if (include24hrChange)
191
181
  qs.include_24hr_change = true;
192
- return apiRequest("/simple/price", qs, getKey(ctx));
182
+ return apiRequest(ctx, "simple/price", qs);
193
183
  },
194
184
  });
195
185
  rl.registerAction("coin.tokenPrice", {
@@ -214,10 +204,10 @@ export default function coingecko(rl) {
214
204
  },
215
205
  async execute(input, ctx) {
216
206
  const { platformId, contractAddresses, vsCurrencies } = input;
217
- return apiRequest(`/simple/token_price/${platformId}`, {
207
+ return apiRequest(ctx, `simple/token_price/${pathSegment(platformId)}`, {
218
208
  contract_addresses: contractAddresses,
219
209
  vs_currencies: vsCurrencies,
220
- }, getKey(ctx));
210
+ });
221
211
  },
222
212
  });
223
213
  rl.registerAction("coin.ticker", {
@@ -237,7 +227,7 @@ export default function coingecko(rl) {
237
227
  const qs = {};
238
228
  if (exchangeIds)
239
229
  qs.exchange_ids = exchangeIds;
240
- const data = (await apiRequest(`/coins/${coinId}/tickers`, qs, getKey(ctx)));
230
+ const data = (await apiRequest(ctx, `coins/${pathSegment(coinId)}/tickers`, qs));
241
231
  const tickers = data.tickers ?? [];
242
232
  if (limit)
243
233
  return tickers.slice(0, limit);
@@ -265,7 +255,7 @@ export default function coingecko(rl) {
265
255
  const qs = { date };
266
256
  if (localization !== undefined)
267
257
  qs.localization = localization;
268
- return apiRequest(`/coins/${coinId}/history`, qs, getKey(ctx));
258
+ return apiRequest(ctx, `coins/${pathSegment(coinId)}/history`, qs);
269
259
  },
270
260
  });
271
261
  rl.registerAction("coin.marketChart", {
@@ -299,12 +289,12 @@ export default function coingecko(rl) {
299
289
  const qs = { vs_currency: vsCurrency, days };
300
290
  let endpoint;
301
291
  if (contractAddress && platformId) {
302
- endpoint = `/coins/${platformId}/contract/${contractAddress}/market_chart`;
292
+ endpoint = `coins/${pathSegment(platformId)}/contract/${pathSegment(contractAddress)}/market_chart`;
303
293
  }
304
294
  else {
305
- endpoint = `/coins/${coinId}/market_chart`;
295
+ endpoint = `coins/${pathSegment(coinId)}/market_chart`;
306
296
  }
307
- const data = (await apiRequest(endpoint, qs, getKey(ctx)));
297
+ const data = (await apiRequest(ctx, endpoint, qs));
308
298
  const prices = data.prices ?? [];
309
299
  return prices.map((p, idx) => ({
310
300
  time: new Date(p[0]).toISOString(),
@@ -332,10 +322,10 @@ export default function coingecko(rl) {
332
322
  },
333
323
  async execute(input, ctx) {
334
324
  const { coinId, vsCurrency, days } = input;
335
- const data = (await apiRequest(`/coins/${coinId}/ohlc`, {
325
+ const data = (await apiRequest(ctx, `coins/${pathSegment(coinId)}/ohlc`, {
336
326
  vs_currency: vsCurrency,
337
327
  days,
338
- }, getKey(ctx)));
328
+ }));
339
329
  return data.map(([time, open, high, low, close]) => ({
340
330
  time: new Date(time).toISOString(),
341
331
  open,
@@ -371,7 +361,7 @@ export default function coingecko(rl) {
371
361
  qs.type = type;
372
362
  if (limit)
373
363
  qs.per_page = limit;
374
- const data = (await apiRequest("/events", qs, getKey(ctx)));
364
+ const data = (await apiRequest(ctx, "events", qs));
375
365
  return data.data;
376
366
  },
377
367
  });
@@ -0,0 +1,26 @@
1
+ import { configChoice, staticCredential } from "../../_shared/credentials.js";
2
+ const delivery = staticCredential({
3
+ id: "contentful",
4
+ auth: { kind: "queryKey", param: "access_token" },
5
+ local: { secret: "deliveryAccessToken" },
6
+ targets: {
7
+ api: { baseUrl: "https://cdn.contentful.com/", methods: ["GET"] },
8
+ },
9
+ });
10
+ const preview = staticCredential({
11
+ id: "contentful",
12
+ auth: { kind: "queryKey", param: "access_token" },
13
+ local: { secret: "previewAccessToken" },
14
+ targets: {
15
+ api: { baseUrl: "https://preview.contentful.com/", methods: ["GET"] },
16
+ },
17
+ });
18
+ /**
19
+ * The delivery or preview access token, chosen by the connection's
20
+ * `source`, appended by the transport as access_token on the matching
21
+ * Contentful host. One connection signs one way.
22
+ */
23
+ export const contentfulCredential = (config) => (configChoice(config.source, ["delivery", "preview"], "delivery") ===
24
+ "preview"
25
+ ? preview
26
+ : delivery)(config);
@@ -1,25 +1,18 @@
1
- async function apiRequest(host, token, endpoint, qs) {
2
- const url = new URL(`https://${host}${endpoint}`);
3
- url.searchParams.set("access_token", token);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const res = await fetch(url.toString(), {
11
- headers: { Accept: "application/json" },
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { contentfulCredential } from "./credentials.js";
3
+ function apiRequest(ctx, path, qs) {
4
+ return credentialJson(ctx, contentfulCredential, "contentful", {
5
+ target: "api",
6
+ path,
7
+ query: qs,
12
8
  });
13
- if (!res.ok)
14
- throw new Error(`Contentful API error ${res.status}: ${await res.text()}`);
15
- return res.json();
16
9
  }
17
- async function paginateAll(host, token, endpoint, qs, limit) {
10
+ async function paginateAll(ctx, path, qs, limit) {
18
11
  const results = [];
19
12
  let skip = 0;
20
13
  const size = 100;
21
14
  while (true) {
22
- const data = (await apiRequest(host, token, endpoint, {
15
+ const data = (await apiRequest(ctx, path, {
23
16
  ...qs,
24
17
  skip,
25
18
  limit: size,
@@ -34,20 +27,13 @@ async function paginateAll(host, token, endpoint, qs, limit) {
34
27
  }
35
28
  return results;
36
29
  }
37
- function getConn(ctx) {
38
- const cfg = ctx.connection.config;
39
- const isPreview = cfg.source === "preview";
40
- return {
41
- host: isPreview ? "preview.contentful.com" : "cdn.contentful.com",
42
- token: (isPreview
43
- ? cfg.previewAccessToken
44
- : cfg.deliveryAccessToken),
45
- spaceId: cfg.spaceId,
46
- };
30
+ function spaceOf(ctx) {
31
+ return pathSegment(ctx.connection.config.spaceId);
47
32
  }
48
33
  export default function contentful(rl) {
49
34
  rl.setName("contentful");
50
35
  rl.setVersion("0.1.0");
36
+ rl.setCredential(contentfulCredential);
51
37
  rl.setConnectionSchema({
52
38
  spaceId: {
53
39
  type: "string",
@@ -79,8 +65,7 @@ export default function contentful(rl) {
79
65
  access: "read",
80
66
  description: "Get space details",
81
67
  async execute(_input, ctx) {
82
- const { host, token, spaceId } = getConn(ctx);
83
- return apiRequest(host, token, `/spaces/${spaceId}`);
68
+ return apiRequest(ctx, `spaces/${spaceOf(ctx)}`);
84
69
  },
85
70
  });
86
71
  // ── Content Type ────────────────────────────────────
@@ -101,8 +86,7 @@ export default function contentful(rl) {
101
86
  },
102
87
  async execute(input, ctx) {
103
88
  const { environmentId, contentTypeId } = input;
104
- const { host, token, spaceId } = getConn(ctx);
105
- return apiRequest(host, token, `/spaces/${spaceId}/environments/${environmentId}/content_types/${contentTypeId}`);
89
+ return apiRequest(ctx, `spaces/${spaceOf(ctx)}/environments/${pathSegment(environmentId)}/content_types/${pathSegment(contentTypeId)}`);
106
90
  },
107
91
  });
108
92
  // ── Entry ───────────────────────────────────────────
@@ -119,8 +103,7 @@ export default function contentful(rl) {
119
103
  },
120
104
  async execute(input, ctx) {
121
105
  const { environmentId, entryId } = input;
122
- const { host, token, spaceId } = getConn(ctx);
123
- return apiRequest(host, token, `/spaces/${spaceId}/environments/${environmentId}/entries/${entryId}`);
106
+ return apiRequest(ctx, `spaces/${spaceOf(ctx)}/environments/${pathSegment(environmentId)}/entries/${pathSegment(entryId)}`);
124
107
  },
125
108
  });
126
109
  rl.registerAction("entry.list", {
@@ -152,7 +135,6 @@ export default function contentful(rl) {
152
135
  },
153
136
  async execute(input, ctx) {
154
137
  const { environmentId, contentType, query, select, order, limit } = (input ?? {});
155
- const { host, token, spaceId } = getConn(ctx);
156
138
  const qs = {};
157
139
  if (contentType)
158
140
  qs.content_type = contentType;
@@ -162,7 +144,7 @@ export default function contentful(rl) {
162
144
  qs.select = select;
163
145
  if (order)
164
146
  qs.order = order;
165
- return paginateAll(host, token, `/spaces/${spaceId}/environments/${environmentId}/entries`, qs, limit);
147
+ return paginateAll(ctx, `spaces/${spaceOf(ctx)}/environments/${pathSegment(environmentId)}/entries`, qs, limit);
166
148
  },
167
149
  });
168
150
  // ── Asset ───────────────────────────────────────────
@@ -179,8 +161,7 @@ export default function contentful(rl) {
179
161
  },
180
162
  async execute(input, ctx) {
181
163
  const { environmentId, assetId } = input;
182
- const { host, token, spaceId } = getConn(ctx);
183
- return apiRequest(host, token, `/spaces/${spaceId}/environments/${environmentId}/assets/${assetId}`);
164
+ return apiRequest(ctx, `spaces/${spaceOf(ctx)}/environments/${pathSegment(environmentId)}/assets/${pathSegment(assetId)}`);
184
165
  },
185
166
  });
186
167
  rl.registerAction("asset.list", {
@@ -196,8 +177,7 @@ export default function contentful(rl) {
196
177
  },
197
178
  async execute(input, ctx) {
198
179
  const { environmentId, limit } = (input ?? {});
199
- const { host, token, spaceId } = getConn(ctx);
200
- return paginateAll(host, token, `/spaces/${spaceId}/environments/${environmentId}/assets`, undefined, limit);
180
+ return paginateAll(ctx, `spaces/${spaceOf(ctx)}/environments/${pathSegment(environmentId)}/assets`, undefined, limit);
201
181
  },
202
182
  });
203
183
  // ── Locale ──────────────────────────────────────────
@@ -214,8 +194,7 @@ export default function contentful(rl) {
214
194
  },
215
195
  async execute(input, ctx) {
216
196
  const { environmentId, limit } = (input ?? {});
217
- const { host, token, spaceId } = getConn(ctx);
218
- return paginateAll(host, token, `/spaces/${spaceId}/environments/${environmentId}/locales`, undefined, limit);
197
+ return paginateAll(ctx, `spaces/${spaceOf(ctx)}/environments/${pathSegment(environmentId)}/locales`, undefined, limit);
219
198
  },
220
199
  });
221
200
  }
@@ -0,0 +1,26 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * The API secret, added by the transport as api_secret: a field of every
4
+ * write's JSON body, and a query parameter on reads and deletes.
5
+ */
6
+ export const convertkitCredential = staticCredential({
7
+ id: "convertkit",
8
+ auth: {
9
+ kind: "static",
10
+ parts: ["secret"],
11
+ placements: [{ in: "body", part: "secret", name: "api_secret" }],
12
+ },
13
+ local: { secret: "apiSecret" },
14
+ targets: {
15
+ api: {
16
+ baseUrl: "https://api.convertkit.com/v3/",
17
+ methods: ["GET", "POST", "PUT", "DELETE"],
18
+ },
19
+ },
20
+ probe: {
21
+ target: "api",
22
+ path: "account",
23
+ method: "GET",
24
+ acceptedStatuses: [200],
25
+ },
26
+ });