runline 0.32.0 → 0.34.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 (521) 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 +9 -0
  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 +179 -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 +167 -10
  15. package/dist/index.d.ts +5 -5
  16. package/dist/index.js +2 -2
  17. package/dist/plugin/api.d.ts +7 -0
  18. package/dist/plugin/api.js +7 -0
  19. package/dist/plugin/types.d.ts +12 -0
  20. package/dist/plugins/_shared/credentialAdapter.js +79 -15
  21. package/dist/plugins/_shared/credentials.js +389 -0
  22. package/dist/plugins/_shared/googleAuth.js +9 -40
  23. package/dist/plugins/_shared/googleCredentials.js +28 -7
  24. package/dist/plugins/_shared/microsoftAuth.js +13 -44
  25. package/dist/plugins/_shared/microsoftCredentials.js +30 -8
  26. package/dist/plugins/_shared/provider.js +2 -14
  27. package/dist/plugins/_shared/shiftCloud.js +22 -34
  28. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  29. package/dist/plugins/_shared/shiftUpload.js +1 -1
  30. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  31. package/dist/plugins/actionNetwork/src/index.js +39 -50
  32. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  33. package/dist/plugins/activeCampaign/src/index.js +61 -132
  34. package/dist/plugins/adalo/src/credentials.js +16 -0
  35. package/dist/plugins/adalo/src/index.js +19 -43
  36. package/dist/plugins/affinity/src/credentials.js +19 -0
  37. package/dist/plugins/affinity/src/index.js +29 -54
  38. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  39. package/dist/plugins/agileCrm/src/index.js +46 -112
  40. package/dist/plugins/airtable/src/credentials.js +19 -0
  41. package/dist/plugins/airtable/src/index.js +37 -50
  42. package/dist/plugins/airtop/src/credentials.js +20 -0
  43. package/dist/plugins/airtop/src/index.js +51 -75
  44. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  45. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  46. package/dist/plugins/asana/src/credentials.js +19 -0
  47. package/dist/plugins/asana/src/index.js +51 -72
  48. package/dist/plugins/autopilot/src/credentials.js +19 -0
  49. package/dist/plugins/autopilot/src/index.js +38 -45
  50. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  51. package/dist/plugins/bambooHr/src/index.js +41 -67
  52. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  53. package/dist/plugins/bannerbear/src/index.js +15 -27
  54. package/dist/plugins/baserow/src/credentials.js +17 -0
  55. package/dist/plugins/baserow/src/index.js +23 -49
  56. package/dist/plugins/beeminder/src/credentials.js +19 -0
  57. package/dist/plugins/beeminder/src/index.js +32 -54
  58. package/dist/plugins/bitly/src/credentials.js +19 -0
  59. package/dist/plugins/bitly/src/index.js +12 -26
  60. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  61. package/dist/plugins/bitwarden/src/index.js +34 -80
  62. package/dist/plugins/box/src/credentials.js +19 -0
  63. package/dist/plugins/box/src/index.js +24 -49
  64. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  65. package/dist/plugins/brandfetch/src/index.js +12 -17
  66. package/dist/plugins/brevo/src/credentials.js +19 -0
  67. package/dist/plugins/brevo/src/index.js +30 -51
  68. package/dist/plugins/bubble/src/credentials.js +28 -0
  69. package/dist/plugins/bubble/src/index.js +29 -65
  70. package/dist/plugins/chargebee/src/credentials.js +16 -0
  71. package/dist/plugins/chargebee/src/index.js +15 -45
  72. package/dist/plugins/circleci/src/credentials.js +19 -0
  73. package/dist/plugins/circleci/src/index.js +19 -39
  74. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  75. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  76. package/dist/plugins/clearbit/src/credentials.js +22 -0
  77. package/dist/plugins/clearbit/src/index.js +11 -21
  78. package/dist/plugins/clickup/src/credentials.js +19 -0
  79. package/dist/plugins/clickup/src/index.js +85 -117
  80. package/dist/plugins/clockify/src/credentials.js +19 -0
  81. package/dist/plugins/clockify/src/index.js +46 -61
  82. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  83. package/dist/plugins/cloudflare/src/index.js +19 -34
  84. package/dist/plugins/cockpit/src/credentials.js +17 -0
  85. package/dist/plugins/cockpit/src/index.js +18 -31
  86. package/dist/plugins/coda/src/credentials.js +19 -0
  87. package/dist/plugins/coda/src/index.js +33 -50
  88. package/dist/plugins/coingecko/src/credentials.js +20 -0
  89. package/dist/plugins/coingecko/src/index.js +24 -34
  90. package/dist/plugins/contentful/src/credentials.js +26 -0
  91. package/dist/plugins/contentful/src/index.js +19 -40
  92. package/dist/plugins/convertkit/src/credentials.js +26 -0
  93. package/dist/plugins/convertkit/src/index.js +27 -45
  94. package/dist/plugins/copper/src/credentials.js +17 -0
  95. package/dist/plugins/copper/src/index.js +25 -47
  96. package/dist/plugins/cortex/src/credentials.js +28 -0
  97. package/dist/plugins/cortex/src/index.js +26 -49
  98. package/dist/plugins/currents/src/credentials.js +19 -0
  99. package/dist/plugins/currents/src/index.js +46 -59
  100. package/dist/plugins/customerIo/src/credentials.js +52 -0
  101. package/dist/plugins/customerIo/src/index.js +30 -58
  102. package/dist/plugins/databricks/src/credentials.js +13 -0
  103. package/dist/plugins/databricks/src/index.js +51 -103
  104. package/dist/plugins/deepl/src/credentials.js +19 -0
  105. package/dist/plugins/deepl/src/index.js +13 -39
  106. package/dist/plugins/demio/src/credentials.js +26 -0
  107. package/dist/plugins/demio/src/index.js +17 -41
  108. package/dist/plugins/dhl/src/credentials.js +13 -0
  109. package/dist/plugins/dhl/src/index.js +8 -19
  110. package/dist/plugins/discord/src/credentials.js +19 -0
  111. package/dist/plugins/discord/src/index.js +30 -58
  112. package/dist/plugins/discourse/src/credentials.js +18 -0
  113. package/dist/plugins/discourse/src/index.js +36 -53
  114. package/dist/plugins/disqus/src/credentials.js +13 -0
  115. package/dist/plugins/disqus/src/index.js +14 -32
  116. package/dist/plugins/drift/src/credentials.js +13 -0
  117. package/dist/plugins/drift/src/index.js +16 -26
  118. package/dist/plugins/dropbox/src/credentials.js +13 -0
  119. package/dist/plugins/dropbox/src/index.js +23 -30
  120. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  121. package/dist/plugins/dropcontact/src/index.js +13 -18
  122. package/dist/plugins/egoi/src/credentials.js +19 -0
  123. package/dist/plugins/egoi/src/index.js +23 -38
  124. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  125. package/dist/plugins/elasticsearch/src/index.js +27 -48
  126. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  127. package/dist/plugins/elevenlabs/src/index.js +4 -1
  128. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  129. package/dist/plugins/elevenlabs/src/shared.js +74 -35
  130. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  131. package/dist/plugins/emelia/src/credentials.js +14 -0
  132. package/dist/plugins/emelia/src/index.js +19 -23
  133. package/dist/plugins/erpnext/src/credentials.js +27 -0
  134. package/dist/plugins/erpnext/src/index.js +21 -42
  135. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  136. package/dist/plugins/facebookGraph/src/index.js +39 -37
  137. package/dist/plugins/fal/src/credentials.js +14 -0
  138. package/dist/plugins/fal/src/index.js +4 -2
  139. package/dist/plugins/fal/src/shared.js +58 -63
  140. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  141. package/dist/plugins/freshdesk/src/index.js +25 -46
  142. package/dist/plugins/freshservice/src/credentials.js +16 -0
  143. package/dist/plugins/freshservice/src/index.js +37 -58
  144. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  145. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  146. package/dist/plugins/getresponse/src/credentials.js +22 -0
  147. package/dist/plugins/getresponse/src/index.js +20 -32
  148. package/dist/plugins/gett/src/credentials.js +64 -0
  149. package/dist/plugins/gett/src/index.js +11 -6
  150. package/dist/plugins/gett/src/login.js +24 -0
  151. package/dist/plugins/gett/src/session.js +15 -38
  152. package/dist/plugins/gett/src/shared.js +41 -84
  153. package/dist/plugins/ghost/src/credentials.js +36 -0
  154. package/dist/plugins/ghost/src/index.js +18 -59
  155. package/dist/plugins/github/src/credentials.js +18 -0
  156. package/dist/plugins/github/src/index.js +55 -78
  157. package/dist/plugins/gitlab/src/credentials.js +24 -0
  158. package/dist/plugins/gitlab/src/index.js +29 -48
  159. package/dist/plugins/gmail/src/index.js +26 -24
  160. package/dist/plugins/gong/src/credentials.js +16 -0
  161. package/dist/plugins/gong/src/index.js +16 -32
  162. package/dist/plugins/googleAppsScript/src/index.js +108 -42
  163. package/dist/plugins/googleCalendar/src/index.js +15 -13
  164. package/dist/plugins/googleContacts/src/index.js +12 -9
  165. package/dist/plugins/googleDocs/src/index.js +2 -0
  166. package/dist/plugins/googleDocs/src/shared.js +2 -1
  167. package/dist/plugins/googleDrive/src/index.js +50 -53
  168. package/dist/plugins/googleImage/src/credentials.js +14 -0
  169. package/dist/plugins/googleImage/src/index.js +14 -25
  170. package/dist/plugins/googleSheets/src/index.js +26 -27
  171. package/dist/plugins/googleSlides/src/index.js +6 -4
  172. package/dist/plugins/googleTasks/src/index.js +13 -11
  173. package/dist/plugins/gotify/src/credentials.js +32 -0
  174. package/dist/plugins/gotify/src/index.js +14 -36
  175. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  176. package/dist/plugins/gotowebinar/src/index.js +52 -69
  177. package/dist/plugins/grafana/src/credentials.js +16 -0
  178. package/dist/plugins/grafana/src/index.js +34 -53
  179. package/dist/plugins/graphql/src/credentials.js +42 -0
  180. package/dist/plugins/graphql/src/index.js +21 -46
  181. package/dist/plugins/grist/src/credentials.js +30 -0
  182. package/dist/plugins/grist/src/index.js +14 -43
  183. package/dist/plugins/halopsa/src/credentials.js +56 -0
  184. package/dist/plugins/halopsa/src/index.js +20 -47
  185. package/dist/plugins/harvest/src/credentials.js +20 -0
  186. package/dist/plugins/harvest/src/index.js +24 -43
  187. package/dist/plugins/helpscout/src/credentials.js +13 -0
  188. package/dist/plugins/helpscout/src/index.js +26 -38
  189. package/dist/plugins/highlevel/src/credentials.js +19 -0
  190. package/dist/plugins/highlevel/src/index.js +34 -63
  191. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  192. package/dist/plugins/homeAssistant/src/index.js +34 -52
  193. package/dist/plugins/hubspot/src/credentials.js +16 -0
  194. package/dist/plugins/hubspot/src/index.js +29 -41
  195. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  196. package/dist/plugins/humanticAi/src/index.js +15 -22
  197. package/dist/plugins/hunter/src/credentials.js +13 -0
  198. package/dist/plugins/hunter/src/index.js +18 -17
  199. package/dist/plugins/intercom/src/credentials.js +19 -0
  200. package/dist/plugins/intercom/src/index.js +25 -38
  201. package/dist/plugins/iterable/src/credentials.js +17 -0
  202. package/dist/plugins/iterable/src/index.js +26 -40
  203. package/dist/plugins/jenkins/src/credentials.js +16 -0
  204. package/dist/plugins/jenkins/src/index.js +22 -36
  205. package/dist/plugins/jira/src/credentials.js +16 -0
  206. package/dist/plugins/jira/src/index.js +35 -61
  207. package/dist/plugins/keap/src/credentials.js +19 -0
  208. package/dist/plugins/keap/src/index.js +43 -71
  209. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  210. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  211. package/dist/plugins/lemlist/src/credentials.js +19 -0
  212. package/dist/plugins/lemlist/src/index.js +35 -47
  213. package/dist/plugins/linear/src/attachments.js +7 -7
  214. package/dist/plugins/linear/src/comments.js +7 -7
  215. package/dist/plugins/linear/src/credentials.js +17 -0
  216. package/dist/plugins/linear/src/cycles.js +5 -5
  217. package/dist/plugins/linear/src/index.js +2 -0
  218. package/dist/plugins/linear/src/initiatives.js +6 -6
  219. package/dist/plugins/linear/src/issues.js +14 -14
  220. package/dist/plugins/linear/src/labels.js +6 -6
  221. package/dist/plugins/linear/src/organization.js +2 -2
  222. package/dist/plugins/linear/src/projects.js +12 -12
  223. package/dist/plugins/linear/src/shared.js +34 -32
  224. package/dist/plugins/linear/src/states.js +3 -3
  225. package/dist/plugins/linear/src/teams.js +4 -4
  226. package/dist/plugins/linear/src/users.js +3 -3
  227. package/dist/plugins/linear/src/views.js +5 -5
  228. package/dist/plugins/linear/src/webhooks.js +5 -5
  229. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  230. package/dist/plugins/lingvanex/src/index.js +7 -9
  231. package/dist/plugins/linkedin/src/credentials.js +17 -0
  232. package/dist/plugins/linkedin/src/index.js +13 -17
  233. package/dist/plugins/lonescale/src/credentials.js +13 -0
  234. package/dist/plugins/lonescale/src/index.js +16 -26
  235. package/dist/plugins/magento/src/credentials.js +16 -0
  236. package/dist/plugins/magento/src/index.js +67 -84
  237. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  238. package/dist/plugins/mailcheck/src/index.js +7 -9
  239. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  240. package/dist/plugins/mailchimp/src/index.js +36 -44
  241. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  242. package/dist/plugins/mailerlite/src/index.js +19 -32
  243. package/dist/plugins/mailgun/src/credentials.js +21 -0
  244. package/dist/plugins/mailgun/src/index.js +15 -21
  245. package/dist/plugins/mailjet/src/credentials.js +38 -0
  246. package/dist/plugins/mailjet/src/index.js +60 -115
  247. package/dist/plugins/mandrill/src/credentials.js +17 -0
  248. package/dist/plugins/mandrill/src/index.js +11 -12
  249. package/dist/plugins/marketstack/src/credentials.js +16 -0
  250. package/dist/plugins/marketstack/src/index.js +18 -28
  251. package/dist/plugins/matrix/src/credentials.js +19 -0
  252. package/dist/plugins/matrix/src/index.js +23 -52
  253. package/dist/plugins/mattermost/src/credentials.js +19 -0
  254. package/dist/plugins/mattermost/src/index.js +41 -73
  255. package/dist/plugins/mautic/src/credentials.js +16 -0
  256. package/dist/plugins/mautic/src/index.js +46 -62
  257. package/dist/plugins/medium/src/credentials.js +20 -0
  258. package/dist/plugins/medium/src/index.js +18 -23
  259. package/dist/plugins/messagebird/src/credentials.js +22 -0
  260. package/dist/plugins/messagebird/src/index.js +13 -18
  261. package/dist/plugins/metabase/src/credentials.js +19 -0
  262. package/dist/plugins/metabase/src/index.js +24 -40
  263. package/dist/plugins/microsoftCalendar/src/index.js +48 -12
  264. package/dist/plugins/microsoftFiles/src/index.js +90 -25
  265. package/dist/plugins/microsoftMail/src/index.js +62 -15
  266. package/dist/plugins/misp/src/credentials.js +16 -0
  267. package/dist/plugins/misp/src/index.js +60 -71
  268. package/dist/plugins/mocean/src/credentials.js +17 -0
  269. package/dist/plugins/mocean/src/index.js +11 -23
  270. package/dist/plugins/monday/src/credentials.js +14 -0
  271. package/dist/plugins/monday/src/index.js +31 -44
  272. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  273. package/dist/plugins/monicaCrm/src/index.js +25 -42
  274. package/dist/plugins/msg91/src/credentials.js +10 -0
  275. package/dist/plugins/msg91/src/index.js +15 -11
  276. package/dist/plugins/nasa/src/credentials.js +22 -0
  277. package/dist/plugins/nasa/src/index.js +24 -28
  278. package/dist/plugins/netlify/src/credentials.js +19 -0
  279. package/dist/plugins/netlify/src/index.js +27 -51
  280. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  281. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  282. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  283. package/dist/plugins/nextcloud/src/index.js +55 -109
  284. package/dist/plugins/nocodb/src/credentials.js +16 -0
  285. package/dist/plugins/nocodb/src/index.js +19 -37
  286. package/dist/plugins/notion/src/credentials.js +21 -0
  287. package/dist/plugins/notion/src/index.js +25 -38
  288. package/dist/plugins/npm/src/credentials.js +19 -0
  289. package/dist/plugins/npm/src/index.js +22 -32
  290. package/dist/plugins/odoo/src/credentials.js +21 -0
  291. package/dist/plugins/odoo/src/index.js +53 -69
  292. package/dist/plugins/okta/src/credentials.js +23 -0
  293. package/dist/plugins/okta/src/index.js +30 -35
  294. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  295. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  296. package/dist/plugins/onfleet/src/credentials.js +23 -0
  297. package/dist/plugins/onfleet/src/index.js +42 -53
  298. package/dist/plugins/openai/src/credentials.js +13 -0
  299. package/dist/plugins/openai/src/index.js +15 -23
  300. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  301. package/dist/plugins/openweathermap/src/index.js +22 -22
  302. package/dist/plugins/oura/src/credentials.js +19 -0
  303. package/dist/plugins/oura/src/index.js +13 -18
  304. package/dist/plugins/paddle/src/credentials.js +27 -0
  305. package/dist/plugins/paddle/src/index.js +20 -36
  306. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  307. package/dist/plugins/pagerduty/src/index.js +30 -39
  308. package/dist/plugins/parallel/src/credentials.js +18 -0
  309. package/dist/plugins/parallel/src/index.js +16 -22
  310. package/dist/plugins/paypal/src/credentials.js +44 -0
  311. package/dist/plugins/paypal/src/index.js +14 -40
  312. package/dist/plugins/peekalink/src/credentials.js +16 -0
  313. package/dist/plugins/peekalink/src/index.js +10 -11
  314. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  315. package/dist/plugins/phantombuster/src/index.js +19 -32
  316. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  317. package/dist/plugins/philipsHue/src/index.js +15 -27
  318. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  319. package/dist/plugins/pipedrive/src/index.js +43 -73
  320. package/dist/plugins/plaud/src/index.js +2 -1
  321. package/dist/plugins/plaud/src/shared.js +23 -19
  322. package/dist/plugins/plivo/src/credentials.js +20 -0
  323. package/dist/plugins/plivo/src/index.js +13 -19
  324. package/dist/plugins/posthog/src/credentials.js +18 -0
  325. package/dist/plugins/posthog/src/index.js +14 -20
  326. package/dist/plugins/profitwell/src/credentials.js +22 -0
  327. package/dist/plugins/profitwell/src/index.js +10 -17
  328. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  329. package/dist/plugins/pushbullet/src/index.js +19 -27
  330. package/dist/plugins/pushcut/src/credentials.js +19 -0
  331. package/dist/plugins/pushcut/src/index.js +7 -8
  332. package/dist/plugins/pushover/src/credentials.js +14 -0
  333. package/dist/plugins/pushover/src/index.js +7 -12
  334. package/dist/plugins/quickbase/src/credentials.js +15 -0
  335. package/dist/plugins/quickbase/src/index.js +24 -34
  336. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  337. package/dist/plugins/quickbooks/src/index.js +17 -46
  338. package/dist/plugins/raindrop/src/credentials.js +19 -0
  339. package/dist/plugins/raindrop/src/index.js +30 -32
  340. package/dist/plugins/recraft/src/credentials.js +13 -0
  341. package/dist/plugins/recraft/src/index.js +38 -27
  342. package/dist/plugins/reddit/src/credentials.js +26 -0
  343. package/dist/plugins/reddit/src/index.js +30 -34
  344. package/dist/plugins/replicate/src/credentials.js +23 -0
  345. package/dist/plugins/replicate/src/index.js +17 -27
  346. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  347. package/dist/plugins/rocketchat/src/index.js +8 -19
  348. package/dist/plugins/rundeck/src/credentials.js +16 -0
  349. package/dist/plugins/rundeck/src/index.js +12 -28
  350. package/dist/plugins/salesforce/src/credentials.js +73 -0
  351. package/dist/plugins/salesforce/src/index.js +6 -0
  352. package/dist/plugins/salesforce/src/metadata.js +3 -16
  353. package/dist/plugins/salesforce/src/shared.js +25 -100
  354. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  355. package/dist/plugins/salesmate/src/credentials.js +17 -0
  356. package/dist/plugins/salesmate/src/index.js +20 -37
  357. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  358. package/dist/plugins/securityScorecard/src/index.js +24 -37
  359. package/dist/plugins/segment/src/credentials.js +16 -0
  360. package/dist/plugins/segment/src/index.js +12 -16
  361. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  362. package/dist/plugins/sendgrid/src/index.js +31 -35
  363. package/dist/plugins/sendy/src/credentials.js +18 -0
  364. package/dist/plugins/sendy/src/index.js +18 -24
  365. package/dist/plugins/sentry/src/credentials.js +16 -0
  366. package/dist/plugins/sentry/src/index.js +30 -98
  367. package/dist/plugins/servicenow/src/credentials.js +13 -0
  368. package/dist/plugins/servicenow/src/index.js +22 -41
  369. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  370. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  371. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  372. package/dist/plugins/shiftBwm/src/collections.js +201 -0
  373. package/dist/plugins/shiftBwm/src/index.js +35 -0
  374. package/dist/plugins/shiftBwm/src/records.js +180 -0
  375. package/dist/plugins/shiftBwm/src/shared.js +168 -0
  376. package/dist/plugins/shiftBwm/src/vendor/client.js +227 -0
  377. package/dist/plugins/shiftBwm/src/vendor/contracts.js +59 -0
  378. package/dist/plugins/shiftBwm/src/vendor/models.js +525 -0
  379. package/dist/plugins/shiftCrm/src/access.js +2 -2
  380. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  381. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  382. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  383. package/dist/plugins/shiftCrm/src/index.js +2 -0
  384. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  385. package/dist/plugins/shiftCrm/src/people.js +3 -3
  386. package/dist/plugins/shiftCrm/src/records.js +2 -2
  387. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  388. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  389. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  390. package/dist/plugins/shiftObjects/src/index.js +2 -0
  391. package/dist/plugins/shiftObjects/src/objects.js +3 -3
  392. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  393. package/dist/plugins/shiftOcr/src/index.js +5 -2
  394. package/dist/plugins/shiftPages/src/index.js +2 -0
  395. package/dist/plugins/shiftPages/src/pages.js +5 -3
  396. package/dist/plugins/shiftPages/src/shared.js +3 -1
  397. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  398. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  399. package/dist/plugins/shiftTranscription/src/transcription.js +3 -2
  400. package/dist/plugins/shiftWork/src/index.js +2 -0
  401. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  402. package/dist/plugins/shiftWork/src/issues.js +11 -7
  403. package/dist/plugins/shiftWork/src/projects.js +3 -3
  404. package/dist/plugins/shiftWork/src/shared.js +3 -1
  405. package/dist/plugins/shopify/src/credentials.js +16 -0
  406. package/dist/plugins/shopify/src/index.js +32 -59
  407. package/dist/plugins/signl4/src/credentials.js +17 -0
  408. package/dist/plugins/signl4/src/index.js +28 -29
  409. package/dist/plugins/slack/src/credentials.js +19 -0
  410. package/dist/plugins/slack/src/index.js +51 -60
  411. package/dist/plugins/sms77/src/credentials.js +17 -0
  412. package/dist/plugins/sms77/src/index.js +11 -16
  413. package/dist/plugins/splunk/src/credentials.js +19 -0
  414. package/dist/plugins/splunk/src/index.js +32 -74
  415. package/dist/plugins/spotify/src/credentials.js +19 -0
  416. package/dist/plugins/spotify/src/index.js +40 -55
  417. package/dist/plugins/stackby/src/credentials.js +13 -0
  418. package/dist/plugins/stackby/src/index.js +14 -23
  419. package/dist/plugins/steel/src/auth.js +27 -0
  420. package/dist/plugins/steel/src/browser.js +4 -3
  421. package/dist/plugins/steel/src/captchas.js +4 -3
  422. package/dist/plugins/steel/src/extensions.js +3 -2
  423. package/dist/plugins/steel/src/files.js +9 -10
  424. package/dist/plugins/steel/src/index.js +2 -0
  425. package/dist/plugins/steel/src/page/tools.js +3 -3
  426. package/dist/plugins/steel/src/profiles.js +4 -3
  427. package/dist/plugins/steel/src/sessions.js +13 -13
  428. package/dist/plugins/steel/src/shared.js +21 -51
  429. package/dist/plugins/storyblok/src/credentials.js +37 -0
  430. package/dist/plugins/storyblok/src/index.js +22 -66
  431. package/dist/plugins/strapi/src/credentials.js +71 -0
  432. package/dist/plugins/strapi/src/index.js +36 -70
  433. package/dist/plugins/strava/src/credentials.js +19 -0
  434. package/dist/plugins/strava/src/index.js +16 -33
  435. package/dist/plugins/stripe/src/credentials.js +19 -0
  436. package/dist/plugins/stripe/src/index.js +44 -58
  437. package/dist/plugins/supabase/src/credentials.js +30 -0
  438. package/dist/plugins/supabase/src/index.js +18 -40
  439. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  440. package/dist/plugins/syncromsp/src/index.js +37 -70
  441. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  442. package/dist/plugins/tapfiliate/src/index.js +21 -31
  443. package/dist/plugins/telegram/src/credentials.js +20 -0
  444. package/dist/plugins/telegram/src/index.js +31 -39
  445. package/dist/plugins/thehive/src/credentials.js +14 -0
  446. package/dist/plugins/thehive/src/index.js +33 -50
  447. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  448. package/dist/plugins/thehiveProject/src/index.js +53 -122
  449. package/dist/plugins/todoist/src/credentials.js +26 -0
  450. package/dist/plugins/todoist/src/index.js +49 -79
  451. package/dist/plugins/together/src/credentials.js +16 -0
  452. package/dist/plugins/together/src/index.js +30 -32
  453. package/dist/plugins/travisci/src/credentials.js +24 -0
  454. package/dist/plugins/travisci/src/index.js +16 -30
  455. package/dist/plugins/trello/src/credentials.js +29 -0
  456. package/dist/plugins/trello/src/index.js +49 -64
  457. package/dist/plugins/twake/src/credentials.js +16 -0
  458. package/dist/plugins/twake/src/index.js +8 -10
  459. package/dist/plugins/twilio/src/credentials.js +23 -0
  460. package/dist/plugins/twilio/src/index.js +12 -26
  461. package/dist/plugins/twist/src/credentials.js +13 -0
  462. package/dist/plugins/twist/src/index.js +32 -44
  463. package/dist/plugins/twitter/src/credentials.js +16 -0
  464. package/dist/plugins/twitter/src/index.js +25 -37
  465. package/dist/plugins/typesafe/src/credentials.js +28 -0
  466. package/dist/plugins/typesafe/src/index.js +3 -1
  467. package/dist/plugins/typesafe/src/shared.js +23 -35
  468. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  469. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  470. package/dist/plugins/uplead/src/credentials.js +16 -0
  471. package/dist/plugins/uplead/src/index.js +11 -16
  472. package/dist/plugins/uproc/src/credentials.js +14 -0
  473. package/dist/plugins/uproc/src/index.js +7 -10
  474. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  475. package/dist/plugins/uptimerobot/src/index.js +28 -39
  476. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  477. package/dist/plugins/urlscanio/src/index.js +13 -22
  478. package/dist/plugins/vercel/src/credentials.js +19 -0
  479. package/dist/plugins/vercel/src/deployments.js +27 -11
  480. package/dist/plugins/vercel/src/env.js +31 -12
  481. package/dist/plugins/vercel/src/index.js +2 -0
  482. package/dist/plugins/vercel/src/projects.js +6 -3
  483. package/dist/plugins/vercel/src/shared.js +32 -37
  484. package/dist/plugins/vero/src/credentials.js +17 -0
  485. package/dist/plugins/vero/src/index.js +18 -21
  486. package/dist/plugins/vonage/src/credentials.js +17 -0
  487. package/dist/plugins/vonage/src/index.js +14 -18
  488. package/dist/plugins/wekan/src/credentials.js +16 -0
  489. package/dist/plugins/wekan/src/index.js +33 -46
  490. package/dist/plugins/wolt/src/account.js +6 -0
  491. package/dist/plugins/wolt/src/catalog.js +2 -2
  492. package/dist/plugins/wolt/src/credentials.js +64 -0
  493. package/dist/plugins/wolt/src/index.js +8 -3
  494. package/dist/plugins/wolt/src/orders.js +2 -2
  495. package/dist/plugins/wolt/src/public.js +91 -0
  496. package/dist/plugins/wolt/src/shared.js +49 -158
  497. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  498. package/dist/plugins/woocommerce/src/index.js +19 -37
  499. package/dist/plugins/wordpress/src/credentials.js +16 -0
  500. package/dist/plugins/wordpress/src/index.js +23 -42
  501. package/dist/plugins/xai/src/credentials.js +13 -0
  502. package/dist/plugins/xai/src/index.js +31 -30
  503. package/dist/plugins/xero/src/credentials.js +17 -0
  504. package/dist/plugins/xero/src/index.js +19 -36
  505. package/dist/plugins/yourls/src/credentials.js +17 -0
  506. package/dist/plugins/yourls/src/index.js +13 -23
  507. package/dist/plugins/zammad/src/credentials.js +15 -0
  508. package/dist/plugins/zammad/src/index.js +27 -47
  509. package/dist/plugins/zendesk/src/credentials.js +26 -0
  510. package/dist/plugins/zendesk/src/index.js +29 -48
  511. package/dist/plugins/zoho/src/credentials.js +17 -0
  512. package/dist/plugins/zoho/src/index.js +18 -38
  513. package/dist/plugins/zoom/src/credentials.js +19 -0
  514. package/dist/plugins/zoom/src/index.js +15 -30
  515. package/dist/plugins/zulip/src/credentials.js +16 -0
  516. package/dist/plugins/zulip/src/index.js +36 -42
  517. package/dist/sdk.d.ts +8 -0
  518. package/dist/sdk.js +3 -0
  519. package/package.json +3 -2
  520. package/dist/plugins/_shared/authedFetch.js +0 -33
  521. package/dist/plugins/_shared/tokenRefresh.js +0 -41
@@ -1,40 +1,18 @@
1
- async function apiRequest(domain, apiKey, method, endpoint, body, qs) {
2
- const url = new URL(`https://${domain}.freshservice.com/api/v2${endpoint}`);
3
- if (qs) {
4
- for (const [k, v] of Object.entries(qs)) {
5
- if (v !== undefined && v !== null)
6
- url.searchParams.set(k, String(v));
7
- }
8
- }
9
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { freshserviceCredential } from "./credentials.js";
3
+ function req(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, freshserviceCredential, "freshservice", {
5
+ target: "api",
6
+ path,
10
7
  method,
11
- headers: {
12
- Authorization: `Basic ${btoa(`${apiKey}:X`)}`,
13
- "Content-Type": "application/json",
14
- },
15
- };
16
- if (body &&
17
- Object.keys(body).length > 0 &&
18
- method !== "GET" &&
19
- method !== "DELETE") {
20
- opts.body = JSON.stringify(body);
21
- }
22
- const res = await fetch(url.toString(), opts);
23
- if (!res.ok)
24
- throw new Error(`Freshservice API error ${res.status}: ${await res.text()}`);
25
- if (res.status === 204)
26
- return { success: true };
27
- return res.json();
28
- }
29
- function getConn(ctx) {
30
- return {
31
- domain: ctx.connection.config.domain,
32
- apiKey: ctx.connection.config.apiKey,
33
- };
34
- }
35
- function req(ctx, method, endpoint, body, qs) {
36
- const { domain, apiKey } = getConn(ctx);
37
- return apiRequest(domain, apiKey, method, endpoint, body, qs);
8
+ query: qs,
9
+ ...(body &&
10
+ Object.keys(body).length > 0 &&
11
+ method !== "GET" &&
12
+ method !== "DELETE"
13
+ ? { json: body }
14
+ : {}),
15
+ });
38
16
  }
39
17
  function unwrap(data) {
40
18
  if (data && typeof data === "object" && !Array.isArray(data)) {
@@ -44,7 +22,7 @@ function unwrap(data) {
44
22
  }
45
23
  return data;
46
24
  }
47
- function registerCrud(rl, resource, apiPath, singularKey, opts) {
25
+ function registerCrud(rl, resource, apiPath, opts) {
48
26
  rl.registerAction(`${resource}.create`, {
49
27
  access: "write",
50
28
  description: `Create a ${resource}`,
@@ -69,7 +47,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
69
47
  id: { type: "number", required: true, description: `${resource} ID` },
70
48
  },
71
49
  async execute(input, ctx) {
72
- return unwrap(await req(ctx, "GET", `${apiPath}/${input.id}`));
50
+ return unwrap(await req(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`));
73
51
  },
74
52
  });
75
53
  rl.registerAction(`${resource}.list`, {
@@ -102,7 +80,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
102
80
  },
103
81
  async execute(input, ctx) {
104
82
  const { id, properties } = input;
105
- return unwrap(await req(ctx, "PUT", `${apiPath}/${id}`, properties));
83
+ return unwrap(await req(ctx, "PUT", `${apiPath}/${pathSegment(id)}`, properties));
106
84
  },
107
85
  });
108
86
  if (!opts?.noDelete) {
@@ -113,7 +91,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
113
91
  id: { type: "number", required: true, description: `${resource} ID` },
114
92
  },
115
93
  async execute(input, ctx) {
116
- await req(ctx, "DELETE", `${apiPath}/${input.id}`);
94
+ await req(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
117
95
  return { success: true };
118
96
  },
119
97
  });
@@ -122,6 +100,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
122
100
  export default function freshservice(rl) {
123
101
  rl.setName("freshservice");
124
102
  rl.setVersion("0.1.0");
103
+ rl.setCredential(freshserviceCredential);
125
104
  rl.setConnectionSchema({
126
105
  domain: {
127
106
  type: "string",
@@ -136,22 +115,22 @@ export default function freshservice(rl) {
136
115
  env: "FRESHSERVICE_API_KEY",
137
116
  },
138
117
  });
139
- // 16 resources, all CRUD
140
- registerCrud(rl, "agent", "/agents", "agent");
141
- registerCrud(rl, "agentGroup", "/groups", "group");
142
- registerCrud(rl, "announcement", "/announcements", "announcement");
143
- registerCrud(rl, "asset", "/assets", "asset");
144
- registerCrud(rl, "assetType", "/asset_types", "asset_type");
145
- registerCrud(rl, "change", "/changes", "change");
146
- registerCrud(rl, "department", "/departments", "department");
147
- registerCrud(rl, "location", "/locations", "location");
148
- registerCrud(rl, "problem", "/problems", "problem");
149
- registerCrud(rl, "product", "/products", "product");
150
- registerCrud(rl, "release", "/releases", "release");
151
- registerCrud(rl, "requester", "/requesters", "requester");
152
- registerCrud(rl, "requesterGroup", "/requester_groups", "requester_group");
153
- registerCrud(rl, "software", "/applications", "application");
154
- registerCrud(rl, "ticket", "/tickets", "ticket");
118
+ // 15 resources, all CRUD
119
+ registerCrud(rl, "agent", "agents");
120
+ registerCrud(rl, "agentGroup", "groups");
121
+ registerCrud(rl, "announcement", "announcements");
122
+ registerCrud(rl, "asset", "assets");
123
+ registerCrud(rl, "assetType", "asset_types");
124
+ registerCrud(rl, "change", "changes");
125
+ registerCrud(rl, "department", "departments");
126
+ registerCrud(rl, "location", "locations");
127
+ registerCrud(rl, "problem", "problems");
128
+ registerCrud(rl, "product", "products");
129
+ registerCrud(rl, "release", "releases");
130
+ registerCrud(rl, "requester", "requesters");
131
+ registerCrud(rl, "requesterGroup", "requester_groups");
132
+ registerCrud(rl, "software", "applications");
133
+ registerCrud(rl, "ticket", "tickets");
155
134
  // agentRole is read-only (get + list only)
156
135
  rl.registerAction("agentRole.get", {
157
136
  access: "read",
@@ -160,7 +139,7 @@ export default function freshservice(rl) {
160
139
  id: { type: "number", required: true, description: "Role ID" },
161
140
  },
162
141
  async execute(input, ctx) {
163
- return unwrap(await req(ctx, "GET", `/roles/${input.id}`));
142
+ return unwrap(await req(ctx, "GET", `roles/${pathSegment(input.id)}`));
164
143
  },
165
144
  });
166
145
  rl.registerAction("agentRole.list", {
@@ -177,7 +156,7 @@ export default function freshservice(rl) {
177
156
  qs.per_page = limit;
178
157
  if (page)
179
158
  qs.page = page;
180
- return unwrap(await req(ctx, "GET", "/roles", undefined, qs));
159
+ return unwrap(await req(ctx, "GET", "roles", undefined, qs));
181
160
  },
182
161
  });
183
162
  }
@@ -0,0 +1,16 @@
1
+ import { hostLabel, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * The API key in Freshworks' `Token token=` Authorization scheme, sent to
4
+ * the connection's own bundle domain.
5
+ */
6
+ export const freshworksCrmCredential = staticCredential({
7
+ id: "freshworksCrm",
8
+ auth: { kind: "apiKey", header: "Authorization", prefix: "Token token=" },
9
+ local: { secret: "apiKey" },
10
+ targets: (config) => ({
11
+ api: {
12
+ baseUrl: `https://${hostLabel(config.domain)}.myfreshworks.com/crm/sales/api/`,
13
+ methods: ["GET", "POST", "PUT", "DELETE"],
14
+ },
15
+ }),
16
+ });
@@ -1,40 +1,18 @@
1
- async function apiRequest(domain, apiKey, method, endpoint, body, qs) {
2
- const url = new URL(`https://${domain}.myfreshworks.com/crm/sales/api${endpoint}`);
3
- if (qs) {
4
- for (const [k, v] of Object.entries(qs)) {
5
- if (v !== undefined && v !== null)
6
- url.searchParams.set(k, String(v));
7
- }
8
- }
9
- const opts = {
10
- method,
11
- headers: {
12
- Authorization: `Token token=${apiKey}`,
13
- "Content-Type": "application/json",
14
- },
15
- };
16
- if (body &&
17
- Object.keys(body).length > 0 &&
18
- method !== "GET" &&
19
- method !== "DELETE") {
20
- opts.body = JSON.stringify(body);
21
- }
22
- const res = await fetch(url.toString(), opts);
23
- if (!res.ok)
24
- throw new Error(`Freshworks CRM API error ${res.status}: ${await res.text()}`);
25
- if (res.status === 204)
26
- return { success: true };
27
- return res.json();
28
- }
29
- function getConn(ctx) {
30
- return {
31
- domain: ctx.connection.config.domain,
32
- apiKey: ctx.connection.config.apiKey,
33
- };
34
- }
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { freshworksCrmCredential } from "./credentials.js";
35
3
  function req(ctx, method, endpoint, body, qs) {
36
- const { domain, apiKey } = getConn(ctx);
37
- return apiRequest(domain, apiKey, method, endpoint, body, qs);
4
+ return credentialJson(ctx, freshworksCrmCredential, "freshworksCrm", {
5
+ target: "api",
6
+ path: endpoint.replace(/^\//, ""),
7
+ method,
8
+ query: qs,
9
+ ...(body &&
10
+ Object.keys(body).length > 0 &&
11
+ method !== "GET" &&
12
+ method !== "DELETE"
13
+ ? { json: body }
14
+ : {}),
15
+ });
38
16
  }
39
17
  function unwrap(data) {
40
18
  if (data && typeof data === "object" && !Array.isArray(data)) {
@@ -68,7 +46,7 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
68
46
  id: { type: "number", required: true, description: `${resource} ID` },
69
47
  },
70
48
  async execute(input, ctx) {
71
- return unwrap(await req(ctx, "GET", `${apiPath}/${input.id}`));
49
+ return unwrap(await req(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`));
72
50
  },
73
51
  });
74
52
  }
@@ -104,7 +82,9 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
104
82
  },
105
83
  async execute(input, ctx) {
106
84
  const { id, properties } = input;
107
- return unwrap(await req(ctx, "PUT", `${apiPath}/${id}`, { [wrapKey]: properties }));
85
+ return unwrap(await req(ctx, "PUT", `${apiPath}/${pathSegment(id)}`, {
86
+ [wrapKey]: properties,
87
+ }));
108
88
  },
109
89
  });
110
90
  if (!opts?.noDelete) {
@@ -115,7 +95,7 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
115
95
  id: { type: "number", required: true, description: `${resource} ID` },
116
96
  },
117
97
  async execute(input, ctx) {
118
- await req(ctx, "DELETE", `${apiPath}/${input.id}`);
98
+ await req(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
119
99
  return { success: true };
120
100
  },
121
101
  });
@@ -124,6 +104,7 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
124
104
  export default function freshworksCrm(rl) {
125
105
  rl.setName("freshworksCrm");
126
106
  rl.setVersion("0.1.0");
107
+ rl.setCredential(freshworksCrmCredential);
127
108
  rl.setConnectionSchema({
128
109
  domain: {
129
110
  type: "string",
@@ -0,0 +1,22 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API key, sent as `X-Auth-Token: api-key {key}` to GetResponse's v3
4
+ * API base.
5
+ */
6
+ export const getresponseCredential = staticCredential({
7
+ id: "getresponse",
8
+ auth: { kind: "apiKey", header: "X-Auth-Token", prefix: "api-key " },
9
+ local: { secret: "apiKey" },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://api.getresponse.com/v3/",
13
+ methods: ["GET", "POST", "DELETE"],
14
+ },
15
+ },
16
+ probe: {
17
+ target: "api",
18
+ path: "accounts",
19
+ method: "GET",
20
+ acceptedStatuses: [200],
21
+ },
22
+ });
@@ -1,35 +1,24 @@
1
- const BASE_URL = "https://api.getresponse.com/v3";
2
- async function apiRequest(apiKey, 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 = {
11
- method,
12
- headers: {
13
- "X-Auth-Token": `api-key ${apiKey}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body &&
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { getresponseCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs) {
4
+ const json = body &&
18
5
  Object.keys(body).length > 0 &&
19
6
  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(`GetResponse API error ${res.status}: ${await res.text()}`);
26
- if (res.status === 204 || res.status === 202)
27
- return { success: true };
28
- return res.json();
7
+ method !== "DELETE"
8
+ ? body
9
+ : undefined;
10
+ return credentialJson(ctx, getresponseCredential, "getresponse", {
11
+ target: "api",
12
+ path,
13
+ method,
14
+ query: qs,
15
+ ...(json !== undefined ? { json } : {}),
16
+ });
29
17
  }
30
18
  export default function getresponse(rl) {
31
19
  rl.setName("getresponse");
32
20
  rl.setVersion("0.1.0");
21
+ rl.setCredential(getresponseCredential);
33
22
  rl.setConnectionSchema({
34
23
  apiKey: {
35
24
  type: "string",
@@ -38,7 +27,6 @@ export default function getresponse(rl) {
38
27
  env: "GETRESPONSE_API_KEY",
39
28
  },
40
29
  });
41
- const key = (ctx) => ctx.connection.config.apiKey;
42
30
  rl.registerAction("contact.create", {
43
31
  access: "write",
44
32
  description: "Create a contact",
@@ -77,7 +65,7 @@ export default function getresponse(rl) {
77
65
  body.tags = tags;
78
66
  if (customFieldValues)
79
67
  body.customFieldValues = customFieldValues;
80
- await apiRequest(key(ctx), "POST", "/contacts", body);
68
+ await apiRequest(ctx, "POST", "contacts", body);
81
69
  return { success: true };
82
70
  },
83
71
  });
@@ -97,7 +85,7 @@ export default function getresponse(rl) {
97
85
  const qs = {};
98
86
  if (fields)
99
87
  qs.fields = fields;
100
- return apiRequest(key(ctx), "GET", `/contacts/${contactId}`, undefined, qs);
88
+ return apiRequest(ctx, "GET", `contacts/${pathSegment(contactId)}`, undefined, qs);
101
89
  },
102
90
  });
103
91
  rl.registerAction("contact.list", {
@@ -145,7 +133,7 @@ export default function getresponse(rl) {
145
133
  qs["query[campaignId]"] = campaignId;
146
134
  if (sortBy)
147
135
  qs[`sort[${sortBy}]`] = sortOrder ?? "ASC";
148
- return apiRequest(key(ctx), "GET", "/contacts", undefined, qs);
136
+ return apiRequest(ctx, "GET", "contacts", undefined, qs);
149
137
  },
150
138
  });
151
139
  rl.registerAction("contact.update", {
@@ -181,7 +169,7 @@ export default function getresponse(rl) {
181
169
  body.tags = tags;
182
170
  if (customFieldValues)
183
171
  body.customFieldValues = customFieldValues;
184
- return apiRequest(key(ctx), "POST", `/contacts/${contactId}`, body);
172
+ return apiRequest(ctx, "POST", `contacts/${pathSegment(contactId)}`, body);
185
173
  },
186
174
  });
187
175
  rl.registerAction("contact.delete", {
@@ -207,7 +195,7 @@ export default function getresponse(rl) {
207
195
  qs.messageId = messageId;
208
196
  if (ipAddress)
209
197
  qs.ipAddress = ipAddress;
210
- await apiRequest(key(ctx), "DELETE", `/contacts/${contactId}`, undefined, qs);
198
+ await apiRequest(ctx, "DELETE", `contacts/${pathSegment(contactId)}`, undefined, qs);
211
199
  return { success: true };
212
200
  },
213
201
  });
@@ -0,0 +1,64 @@
1
+ import { AuthError } from "runline";
2
+ import { grantSchema, pathSegment } from "../../_shared/credentials.js";
3
+ export const HOST = "b2cgateway.gett.com";
4
+ export const APP_VERSION = "10.48.187";
5
+ /** What the Android app sends on every call: its own identity, and the device's. */
6
+ export function appHeaders(config) {
7
+ return {
8
+ "user-agent": `Gett/android/${APP_VERSION}`,
9
+ "app-platform": "android",
10
+ "app-version": APP_VERSION,
11
+ "x-device-id": String(config.deviceId ?? ""),
12
+ "x-client-device-unique-id": String(config.clientDeviceUniqueId ?? ""),
13
+ "x-country-code": "IL",
14
+ };
15
+ }
16
+ /**
17
+ * The owner's Gett session: a long-lived refresh token, renewed at the
18
+ * account's GL token endpoint — as the app does it, with the app's headers
19
+ * and the refresh token as bearer — into access tokens that sign every call
20
+ * to the gateway. The phone and device IDs are public config; the owner
21
+ * login seeds the grant.
22
+ */
23
+ export const gettCredential = (config) => {
24
+ if (typeof config.phone !== "string" || !config.phone.trim())
25
+ throw new AuthError("invalid_credentials");
26
+ const phone = pathSegment(config.phone.trim());
27
+ const headers = appHeaders(config);
28
+ return {
29
+ type: {
30
+ id: "gett",
31
+ methods: {
32
+ oauth2: {
33
+ schema: grantSchema,
34
+ authentication: {
35
+ kind: "oauth2",
36
+ field: "grant",
37
+ renewal: "refresh",
38
+ definition: {
39
+ id: "gett.oauth2",
40
+ provider: "gett",
41
+ // `?lc=en` is required: without it the grant 400s with an empty body.
42
+ refresh: {
43
+ url: `https://${HOST}/gl/api/v2/phone/${phone}/auth/token?lc=en`,
44
+ clientAuthentication: "none",
45
+ encoding: "json",
46
+ headers,
47
+ refreshTokenBearer: true,
48
+ },
49
+ },
50
+ },
51
+ targets: {
52
+ api: {
53
+ baseUrl: `https://${HOST}/`,
54
+ methods: ["GET", "POST"],
55
+ allowedHeaders: Object.keys(headers),
56
+ maxResponseBytes: 4 * 1024 * 1024,
57
+ },
58
+ },
59
+ },
60
+ },
61
+ },
62
+ method: "oauth2",
63
+ };
64
+ };
@@ -1,8 +1,10 @@
1
1
  import * as t from "typebox";
2
+ import { refuseUnderHost } from "../../_shared/credentials.js";
3
+ import { gettCredential } from "./credentials.js";
2
4
  import { search } from "./places.js";
3
5
  import { book, optionsOf, plan, previewOf, quoteFor } from "./rides.js";
4
6
  import { createSession, identityOf, requestCode, status, verifyCard, verifyCode, } from "./session.js";
5
- import { accepted, accessToken, arr, authed, cfgOf, DEF_LAT, DEF_LON, num, numOrNull, obj, pick, seg, } from "./shared.js";
7
+ import { accepted, arr, authed, cfgOf, DEF_LAT, DEF_LON, num, numOrNull, obj, pick, seg, } from "./shared.js";
6
8
  /**
7
9
  * gett — Gett (taxi, Israel) consumer connector.
8
10
  *
@@ -51,6 +53,7 @@ function bias(input, ctx) {
51
53
  export default function gett(rl) {
52
54
  rl.setName("gett");
53
55
  rl.setVersion("0.1.0");
56
+ rl.setCredential(gettCredential);
54
57
  rl.setConnectionSchema(t.Object({
55
58
  phone: t.Optional(t.String({
56
59
  env: "GETT_PHONE",
@@ -143,10 +146,12 @@ export default function gett(rl) {
143
146
  });
144
147
  rl.registerAction("account.refresh", {
145
148
  access: "write",
146
- description: "Force a fresh access token from the stored refresh token. Rarely needed: every action renews on demand, and the refresh token is long-lived (~90 days), so no keepalive schedule is required. Useful to prove a stored session is still good.",
149
+ description: "Force a fresh access token from the stored refresh token and prove it on a live call. Rarely needed: every action renews on demand, and the refresh token is long-lived (~90 days), so no keepalive schedule is required. Runs where the grant lives: locally, not under a host that keeps it.",
147
150
  inputSchema: t.Object({}, STRICT),
148
151
  async execute(_input, ctx) {
149
- await accessToken(ctx, true);
152
+ refuseUnderHost(ctx);
153
+ await ctx.updateConnection({ accessTokenExpiresAt: 1 });
154
+ await createSession(ctx, DEF_LAT, DEF_LON);
150
155
  const cfg = cfgOf(ctx);
151
156
  return {
152
157
  refreshed: true,
@@ -309,7 +314,7 @@ export default function gett(rl) {
309
314
  async execute(input, ctx) {
310
315
  const { order_id } = input;
311
316
  const cfg = cfgOf(ctx);
312
- const r = await authed(ctx, `/gl/server/3_3/phone/${seg(cfg.phone, "phone")}/orders/${seg(order_id, "order_id")}`);
317
+ const r = await authed(ctx, `/gl/server/3_3/phone/${seg(cfg.phone)}/orders/${seg(order_id)}`);
313
318
  return {
314
319
  order_id: pick(r.id) ?? order_id,
315
320
  status: pick(r.status),
@@ -339,8 +344,8 @@ export default function gett(rl) {
339
344
  const cfg = cfgOf(ctx);
340
345
  if (!cfg.allowOrdering)
341
346
  throw new Error("gett ride.cancel: ordering is disabled for this connection (set allowOrdering:true).");
342
- const phone = seg(cfg.phone, "phone");
343
- const order = seg(order_id, "order_id");
347
+ const phone = seg(cfg.phone);
348
+ const order = seg(order_id);
344
349
  // The reason is optional metadata; a rejection there must not block the
345
350
  // cancel, but the caller is told whether it landed rather than left to guess.
346
351
  let reasonRecorded = null;
@@ -0,0 +1,24 @@
1
+ import { refuseUnderHost } from "../../_shared/credentials.js";
2
+ import { readBounded } from "../../_shared/provider.js";
3
+ import { appHeaders, HOST } from "./credentials.js";
4
+ import { bodyOf, endpointOf } from "./shared.js";
5
+ /**
6
+ * One unsigned login call. It carries no stored credential — the phone, the
7
+ * texted code and the card digits come from the person logging in — and its
8
+ * answer may carry the tokens the login then stores.
9
+ */
10
+ export async function loginRequest(ctx, path, body) {
11
+ refuseUnderHost(ctx);
12
+ const res = await fetch(`https://${HOST}${path}`, {
13
+ method: "POST",
14
+ headers: {
15
+ ...appHeaders(ctx.connection.config),
16
+ accept: "application/json",
17
+ "content-type": "application/json; charset=UTF-8",
18
+ },
19
+ body: JSON.stringify(body),
20
+ redirect: "error",
21
+ });
22
+ const text = await readBounded(res, 4 * 1024 * 1024, `gett: response exceeded the size limit on ${endpointOf(path)}`);
23
+ return bodyOf(new Response(text, { status: res.status }), path);
24
+ }
@@ -1,5 +1,8 @@
1
- import { APP_VERSION, accepted, arr, authed, cfgOf, DEF_LAT, DEF_LON, ensureDevice, expiresAt, http, normPhone, num, numOrNull, obj, pick, seg, } from "./shared.js";
1
+ import { refuseUnderHost } from "../../_shared/credentials.js";
2
+ import { loginRequest } from "./login.js";
3
+ import { APP_VERSION, accepted, arr, authed, cfgOf, DEF_LAT, DEF_LON, ensureDevice, expiresAt, normPhone, num, numOrNull, obj, pick, seg, } from "./shared.js";
2
4
  export async function requestCode(ctx, phone) {
5
+ refuseUnderHost(ctx);
3
6
  await ensureDevice(ctx);
4
7
  let cfg = cfgOf(ctx);
5
8
  if (phone) {
@@ -18,7 +21,7 @@ export async function requestCode(ctx, phone) {
18
21
  appsflyer_uid: `${Date.now()}-${Math.floor(Math.random() * 1e18)}`,
19
22
  gaid: "",
20
23
  };
21
- const r = await http(ctx, `/gl/api/v2/phone/${seg(cfg.phone, "phone")}/auth/otp/challenge`, { method: "POST", body });
24
+ const r = await loginRequest(ctx, `/gl/api/v2/phone/${seg(cfg.phone)}/auth/otp/challenge`, body);
22
25
  // Gett answers 200 even when it refuses to send, so a refusal is reported
23
26
  // rather than an SMS claimed that will never arrive.
24
27
  const status = pick(r.status);
@@ -52,10 +55,11 @@ function tokensIn(r) {
52
55
  return null;
53
56
  }
54
57
  export async function verifyCode(ctx, code) {
58
+ refuseUnderHost(ctx);
55
59
  const cfg = cfgOf(ctx);
56
60
  if (!cfg.phone)
57
61
  throw new Error("gett: no phone — call account.requestCode first");
58
- const r = await http(ctx, `/gl/api/v2/phone/${seg(cfg.phone, "phone")}/auth/otp/verify`, { method: "POST", body: { code } });
62
+ const r = await loginRequest(ctx, `/gl/api/v2/phone/${seg(cfg.phone)}/auth/otp/verify`, { code });
59
63
  const toks = tokensIn(r);
60
64
  if (toks) {
61
65
  const warnings = await finishTokens(ctx, toks);
@@ -79,13 +83,11 @@ export async function verifyCode(ctx, code) {
79
83
  };
80
84
  }
81
85
  export async function verifyCard(ctx, digits) {
86
+ refuseUnderHost(ctx);
82
87
  const cfg = cfgOf(ctx);
83
88
  if (!cfg.pendingTempCode)
84
89
  throw new Error("gett: no pending MFA — call account.verifyCode first");
85
- const r = await http(ctx, `/gl/api/v2/phone/${seg(cfg.phone, "phone")}/auth/mfa/verify`, {
86
- method: "POST",
87
- body: { temp_code: cfg.pendingTempCode, card_digits: digits },
88
- });
90
+ const r = await loginRequest(ctx, `/gl/api/v2/phone/${seg(cfg.phone)}/auth/mfa/verify`, { temp_code: cfg.pendingTempCode, card_digits: digits });
89
91
  const toks = tokensIn(r);
90
92
  if (!toks) {
91
93
  const reported = pick(r.status);
@@ -96,13 +98,12 @@ export async function verifyCard(ctx, digits) {
96
98
  return { warnings, ...(await status(ctx)) };
97
99
  }
98
100
  /**
99
- * Store the IL-scoped tokens, convert to the GL family the app uses for ongoing
100
- * refresh, then learn identity and the saved card.
101
+ * Store the login's tokens, then learn identity and the saved card.
101
102
  *
102
- * The conversion and the discovery are both optional: an IL token still serves
103
- * reads, and a missing card only blocks booking. Neither failure is allowed to
104
- * lose a login that otherwise succeeded, so both are reported as warnings rather
105
- * than swallowed or thrown.
103
+ * The tokens are IL-scoped; the first renewal, at the GL token endpoint the
104
+ * credential declares, is what converts them to the GL family the app keeps
105
+ * refreshing. The discovery is optional: a missing card only blocks booking,
106
+ * so its failure is reported as a warning rather than losing the login.
106
107
  */
107
108
  async function finishTokens(ctx, toks) {
108
109
  const warnings = [];
@@ -111,30 +112,6 @@ async function finishTokens(ctx, toks) {
111
112
  accessToken: pick(toks.access_token),
112
113
  accessTokenExpiresAt: expiresAt(toks.expires_in),
113
114
  });
114
- const cfg = cfgOf(ctx);
115
- try {
116
- // `?lc=en` is required here too: the conversion 400s without it even with a
117
- // valid IL bearer.
118
- const gl = await http(ctx, `/gl/api/v2/phone/${seg(cfg.phone, "phone")}/auth/token?lc=en`, {
119
- method: "POST",
120
- token: cfg.accessToken,
121
- body: { grant_type: "refresh_token", refresh_token: cfg.refreshToken },
122
- });
123
- const patch = {};
124
- const rotated = pick(gl.refresh_token);
125
- const issued = pick(gl.access_token);
126
- if (rotated)
127
- patch.refreshToken = rotated;
128
- if (issued) {
129
- patch.accessToken = issued;
130
- patch.accessTokenExpiresAt = expiresAt(gl.expires_in);
131
- }
132
- if (Object.keys(patch).length)
133
- await ctx.updateConnection(patch);
134
- }
135
- catch (e) {
136
- warnings.push(`IL->GL token conversion failed (${e.message}); reads work, but the session may need an earlier re-login.`);
137
- }
138
115
  try {
139
116
  await createSession(ctx, DEF_LAT, DEF_LON);
140
117
  }
@@ -203,7 +180,7 @@ export async function createSession(ctx, lat, lon) {
203
180
  platform: "android",
204
181
  gaid: cfg.gaid,
205
182
  };
206
- const r = await authed(ctx, `/gl/rider-facade/phone/${seg(cfg.phone, "phone")}/create_session`, { method: "POST", body });
183
+ const r = await authed(ctx, `/gl/rider-facade/phone/${seg(cfg.phone)}/create_session`, { method: "POST", body });
207
184
  const profile = obj(r.user_profile);
208
185
  const patch = {};
209
186
  const globalUserId = pick(profile.global_user_id);