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,29 +1,17 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- const registryUrl = (c.registryUrl ?? "https://registry.npmjs.org").replace(/\/$/, "");
4
- const token = c.token;
5
- return { registryUrl, token };
6
- }
7
- async function apiRequest(conn, method, path, body, contentType) {
8
- const headers = {};
9
- if (conn.token)
10
- headers.Authorization = `Bearer ${conn.token}`;
11
- if (contentType)
12
- headers["Content-Type"] = contentType;
13
- else
14
- headers["Content-Type"] = "application/json";
15
- const init = { method, headers };
16
- if (body !== undefined)
17
- init.body = body;
18
- const res = await fetch(`${conn.registryUrl}${path}`, init);
19
- if (!res.ok)
20
- throw new Error(`npm registry error ${res.status}: ${await res.text()}`);
21
- const text = await res.text();
22
- return text ? JSON.parse(text) : {};
1
+ import { credentialJson, pathSegment, slashEncodedSegment, } from "../../_shared/credentials.js";
2
+ import { npmCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, options = {}) {
4
+ return credentialJson(ctx, npmCredential, "npm", {
5
+ target: "registry",
6
+ path,
7
+ method,
8
+ ...options,
9
+ });
23
10
  }
24
11
  export default function npm(rl) {
25
12
  rl.setName("npm");
26
13
  rl.setVersion("0.1.0");
14
+ rl.setCredential(npmCredential);
27
15
  rl.setConnectionSchema({
28
16
  registryUrl: {
29
17
  type: "string",
@@ -56,7 +44,7 @@ export default function npm(rl) {
56
44
  async execute(input, ctx) {
57
45
  const { packageName, version } = input;
58
46
  const v = version || "latest";
59
- return apiRequest(getConn(ctx), "GET", `/${encodeURIComponent(packageName)}/${v}`);
47
+ return apiRequest(ctx, "GET", `${slashEncodedSegment(packageName)}/${pathSegment(v)}`);
60
48
  },
61
49
  });
62
50
  rl.registerAction("package.getVersions", {
@@ -71,7 +59,7 @@ export default function npm(rl) {
71
59
  },
72
60
  async execute(input, ctx) {
73
61
  const { packageName } = input;
74
- const data = (await apiRequest(getConn(ctx), "GET", `/${encodeURIComponent(packageName)}`));
62
+ const data = (await apiRequest(ctx, "GET", slashEncodedSegment(packageName)));
75
63
  const time = (data.time ?? {});
76
64
  const versions = Object.entries(time)
77
65
  .filter(([v]) => /^\d+\.\d+\.\d+/.test(v))
@@ -99,12 +87,14 @@ export default function npm(rl) {
99
87
  },
100
88
  async execute(input, ctx) {
101
89
  const p = (input ?? {});
102
- const params = new URLSearchParams();
103
- params.set("text", p.query);
104
- params.set("size", String(p.limit ?? 10));
105
- params.set("from", String(p.offset ?? 0));
106
- params.set("popularity", "0.99");
107
- const data = (await apiRequest(getConn(ctx), "GET", `/-/v1/search?${params.toString()}`));
90
+ const data = (await apiRequest(ctx, "GET", "-/v1/search", {
91
+ query: {
92
+ text: p.query,
93
+ size: p.limit ?? 10,
94
+ from: p.offset ?? 0,
95
+ popularity: 0.99,
96
+ },
97
+ }));
108
98
  const objects = (data.objects ?? []);
109
99
  return objects.map(({ package: pkg }) => ({
110
100
  name: pkg.name,
@@ -125,7 +115,7 @@ export default function npm(rl) {
125
115
  },
126
116
  async execute(input, ctx) {
127
117
  const { packageName } = input;
128
- return apiRequest(getConn(ctx), "GET", `/-/package/${encodeURIComponent(packageName)}/dist-tags`);
118
+ return apiRequest(ctx, "GET", `-/package/${slashEncodedSegment(packageName)}/dist-tags`);
129
119
  },
130
120
  });
131
121
  rl.registerAction("distTag.update", {
@@ -150,7 +140,7 @@ export default function npm(rl) {
150
140
  },
151
141
  async execute(input, ctx) {
152
142
  const { packageName, tagName, version } = input;
153
- return apiRequest(getConn(ctx), "PUT", `/-/package/${encodeURIComponent(packageName)}/dist-tags/${encodeURIComponent(tagName)}`, version, "application/x-www-form-urlencoded");
143
+ return apiRequest(ctx, "PUT", `-/package/${slashEncodedSegment(packageName)}/dist-tags/${pathSegment(tagName)}`, { json: version });
154
144
  },
155
145
  });
156
146
  }
@@ -0,0 +1,21 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * The user's password or API key, which Odoo's JSON-RPC takes as the third
4
+ * argument of every call; the plugin leaves that slot null and the
5
+ * transport fills it. The instance URL is public config and must be HTTPS;
6
+ * the username and database are public config too.
7
+ */
8
+ export const odooCredential = staticCredential({
9
+ id: "odoo",
10
+ auth: {
11
+ kind: "static",
12
+ parts: ["password"],
13
+ placements: [
14
+ { in: "jsonPointer", part: "password", pointer: "/params/args/2" },
15
+ ],
16
+ },
17
+ local: { password: "password" },
18
+ targets: (config) => ({
19
+ rpc: { baseUrl: httpsBase(config.url, ""), methods: ["POST"] },
20
+ }),
21
+ });
@@ -1,60 +1,56 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- return {
4
- url: c.url.replace(/\/$/, ""),
5
- db: c.db,
6
- username: c.username,
7
- password: c.password,
8
- };
1
+ import { AuthError } from "runline";
2
+ import { answerFailed, credentialJson } from "../../_shared/credentials.js";
3
+ import { odooCredential } from "./credentials.js";
4
+ /**
5
+ * One JSON-RPC call. Every Odoo service takes the password as its third
6
+ * argument, so `args` carries null there for the transport to fill.
7
+ */
8
+ async function rpc(ctx, service, method, args) {
9
+ const answer = await credentialJson(ctx, odooCredential, "odoo", {
10
+ target: "rpc",
11
+ path: "jsonrpc",
12
+ method: "POST",
13
+ json: {
14
+ jsonrpc: "2.0",
15
+ method: "call",
16
+ params: { service, method, args },
17
+ id: 1,
18
+ },
19
+ });
20
+ if (answer.error)
21
+ throw answerFailed("odoo", {
22
+ code: answer.error.data?.name ?? answer.error.code,
23
+ message: answer.error.data?.message ?? answer.error.message,
24
+ });
25
+ return answer.result;
9
26
  }
10
- function getDBName(db, url) {
11
- if (db)
12
- return db;
27
+ /** The database the connection names, else the instance's first host label. */
28
+ function database(config) {
29
+ if (typeof config.db === "string" && config.db)
30
+ return config.db;
13
31
  try {
14
- return new URL(url).hostname.split(".")[0];
32
+ return new URL(String(config.url)).hostname.split(".")[0];
15
33
  }
16
34
  catch {
17
- return "";
35
+ throw new AuthError("invalid_credentials");
18
36
  }
19
37
  }
20
- async function jsonRpc(url, params) {
21
- const body = {
22
- jsonrpc: "2.0",
23
- method: "call",
24
- params,
25
- id: Math.floor(Math.random() * 1000),
26
- };
27
- const res = await fetch(`${url}/jsonrpc`, {
28
- method: "POST",
29
- headers: { "Content-Type": "application/json" },
30
- body: JSON.stringify(body),
31
- });
32
- if (!res.ok)
33
- throw new Error(`Odoo HTTP error ${res.status}: ${await res.text()}`);
34
- const json = (await res.json());
35
- if (json.error) {
36
- const err = json.error;
37
- const data = (err.data ?? err);
38
- throw new Error(`Odoo RPC error: ${data.message ?? JSON.stringify(err)}`);
39
- }
40
- return json.result;
41
- }
42
- async function login(url, db, username, password) {
43
- const uid = (await jsonRpc(url, {
44
- service: "common",
45
- method: "login",
46
- args: [db, username, password],
47
- }));
48
- if (!uid)
49
- throw new Error("Odoo login failed — check credentials");
50
- return uid;
38
+ /** The database and the logged-in user's ID, which every model call names. */
39
+ async function session(ctx) {
40
+ const db = database(ctx.connection.config);
41
+ const uid = await rpc(ctx, "common", "login", [
42
+ db,
43
+ ctx.connection.config.username,
44
+ null,
45
+ ]);
46
+ if (typeof uid !== "number")
47
+ throw new AuthError("invalid_credentials");
48
+ return { db, uid };
51
49
  }
52
- async function execute(url, db, uid, password, model, method, ...args) {
53
- return jsonRpc(url, {
54
- service: "object",
55
- method: "execute",
56
- args: [db, uid, password, model, method, ...args],
57
- });
50
+ /** A method on a model, as the logged-in user. */
51
+ async function call(ctx, model, method, ...args) {
52
+ const { db, uid } = await session(ctx);
53
+ return rpc(ctx, "object", "execute", [db, uid, null, model, method, ...args]);
58
54
  }
59
55
  const MODEL_MAP = {
60
56
  contact: "res.partner",
@@ -67,6 +63,7 @@ function resolveModel(resource) {
67
63
  export default function odoo(rl) {
68
64
  rl.setName("odoo");
69
65
  rl.setVersion("0.1.0");
66
+ rl.setCredential(odooCredential);
70
67
  rl.setConnectionSchema({
71
68
  url: {
72
69
  type: "string",
@@ -93,13 +90,6 @@ export default function odoo(rl) {
93
90
  env: "ODOO_PASSWORD",
94
91
  },
95
92
  });
96
- // Helper to get authenticated session
97
- async function getSession(ctx) {
98
- const c = getConn(ctx);
99
- const db = getDBName(c.db, c.url);
100
- const uid = await login(c.url, db, c.username, c.password);
101
- return { url: c.url, db, uid, password: c.password };
102
- }
103
93
  rl.registerAction("record.create", {
104
94
  access: "write",
105
95
  description: "Create a record in any Odoo model (contact, opportunity, note, or custom model name)",
@@ -117,8 +107,7 @@ export default function odoo(rl) {
117
107
  },
118
108
  async execute(input, ctx) {
119
109
  const { model, fields } = input;
120
- const s = await getSession(ctx);
121
- const id = await execute(s.url, s.db, s.uid, s.password, resolveModel(model), "create", fields);
110
+ const id = await call(ctx, resolveModel(model), "create", fields);
122
111
  return { id };
123
112
  },
124
113
  });
@@ -140,9 +129,8 @@ export default function odoo(rl) {
140
129
  },
141
130
  async execute(input, ctx) {
142
131
  const p = input;
143
- const s = await getSession(ctx);
144
132
  const fieldsToRead = p.fields ?? [];
145
- return execute(s.url, s.db, s.uid, s.password, resolveModel(p.model), "read", [p.id], fieldsToRead);
133
+ return call(ctx, resolveModel(p.model), "read", [p.id], fieldsToRead);
146
134
  },
147
135
  });
148
136
  rl.registerAction("record.list", {
@@ -177,12 +165,11 @@ export default function odoo(rl) {
177
165
  },
178
166
  async execute(input, ctx) {
179
167
  const p = input;
180
- const s = await getSession(ctx);
181
168
  const filters = p.filters ?? [];
182
169
  const fields = p.fields ?? [];
183
170
  const offset = p.offset ?? 0;
184
171
  const limit = p.limit ?? 0;
185
- return execute(s.url, s.db, s.uid, s.password, resolveModel(p.model), "search_read", filters, fields, offset, limit);
172
+ return call(ctx, resolveModel(p.model), "search_read", filters, fields, offset, limit);
186
173
  },
187
174
  });
188
175
  rl.registerAction("record.update", {
@@ -203,8 +190,7 @@ export default function odoo(rl) {
203
190
  },
204
191
  async execute(input, ctx) {
205
192
  const p = input;
206
- const s = await getSession(ctx);
207
- await execute(s.url, s.db, s.uid, s.password, resolveModel(p.model), "write", [p.id], p.fields);
193
+ await call(ctx, resolveModel(p.model), "write", [p.id], p.fields);
208
194
  return { id: p.id };
209
195
  },
210
196
  });
@@ -221,8 +207,7 @@ export default function odoo(rl) {
221
207
  },
222
208
  async execute(input, ctx) {
223
209
  const p = input;
224
- const s = await getSession(ctx);
225
- await execute(s.url, s.db, s.uid, s.password, resolveModel(p.model), "unlink", [p.id]);
210
+ await call(ctx, resolveModel(p.model), "unlink", [p.id]);
226
211
  return { success: true };
227
212
  },
228
213
  });
@@ -238,8 +223,7 @@ export default function odoo(rl) {
238
223
  },
239
224
  async execute(input, ctx) {
240
225
  const { model } = input;
241
- const s = await getSession(ctx);
242
- return execute(s.url, s.db, s.uid, s.password, resolveModel(model), "fields_get", [], ["string", "type", "help", "required", "name"]);
226
+ return call(ctx, resolveModel(model), "fields_get", [], ["string", "type", "help", "required", "name"]);
243
227
  },
244
228
  });
245
229
  }
@@ -0,0 +1,23 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An SSWS API token, sent as `Authorization: SSWS {token}` to the
4
+ * configured org's /api/v1/ base. The org URL is public config and must
5
+ * be HTTPS.
6
+ */
7
+ export const oktaCredential = staticCredential({
8
+ id: "okta",
9
+ auth: { kind: "apiKey", header: "Authorization", prefix: "SSWS " },
10
+ local: { secret: "apiToken" },
11
+ targets: (config) => ({
12
+ api: {
13
+ baseUrl: httpsBase(config.url, "api/v1/"),
14
+ methods: ["GET", "POST", "DELETE"],
15
+ },
16
+ }),
17
+ probe: {
18
+ target: "api",
19
+ path: "users/me",
20
+ method: "GET",
21
+ acceptedStatuses: [200],
22
+ },
23
+ });
@@ -1,40 +1,34 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- const url = c.url.replace(/\/$/, "");
4
- return { url, apiToken: c.apiToken };
5
- }
6
- async function apiRequest(conn, method, endpoint, body, qs) {
7
- const u = new URL(`${conn.url}${endpoint}`);
8
- if (qs) {
9
- for (const [k, v] of Object.entries(qs)) {
10
- if (v !== undefined && v !== null)
11
- u.searchParams.set(k, String(v));
12
- }
13
- }
14
- const init = {
1
+ import { AuthError } from "runline";
2
+ import { credentialOk, pathSegment } from "../../_shared/credentials.js";
3
+ import { oktaCredential } from "./credentials.js";
4
+ async function apiRequest(ctx, method, path, body, qs) {
5
+ const res = await credentialOk(ctx, oktaCredential, "okta", {
6
+ target: "api",
7
+ path,
15
8
  method,
16
- headers: {
17
- Authorization: `SSWS ${conn.apiToken}`,
18
- "Content-Type": "application/json",
19
- },
20
- };
21
- if (body && Object.keys(body).length > 0)
22
- init.body = JSON.stringify(body);
23
- const res = await fetch(u.toString(), init);
24
- if (!res.ok)
25
- throw new Error(`Okta API error ${res.status}: ${await res.text()}`);
9
+ query: qs,
10
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
11
+ });
26
12
  const text = await res.text();
27
- const data = text ? JSON.parse(text) : {};
13
+ let data = {};
14
+ if (text) {
15
+ try {
16
+ data = JSON.parse(text);
17
+ }
18
+ catch {
19
+ throw new AuthError("invalid_response");
20
+ }
21
+ }
28
22
  return { data, linkHeader: res.headers.get("link") ?? undefined };
29
23
  }
30
- async function paginate(conn, endpoint, qs = {}) {
24
+ async function paginate(ctx, path, qs = {}) {
31
25
  const all = [];
32
26
  let after;
33
27
  do {
34
28
  if (after)
35
29
  qs.after = after;
36
30
  qs.limit = 200;
37
- const { data, linkHeader } = await apiRequest(conn, "GET", endpoint, undefined, qs);
31
+ const { data, linkHeader } = await apiRequest(ctx, "GET", path, undefined, qs);
38
32
  const items = Array.isArray(data) ? data : [];
39
33
  all.push(...items);
40
34
  after = undefined;
@@ -49,6 +43,7 @@ async function paginate(conn, endpoint, qs = {}) {
49
43
  export default function okta(rl) {
50
44
  rl.setName("okta");
51
45
  rl.setVersion("0.1.0");
46
+ rl.setCredential(oktaCredential);
52
47
  rl.setConnectionSchema({
53
48
  url: {
54
49
  type: "string",
@@ -89,7 +84,6 @@ export default function okta(rl) {
89
84
  },
90
85
  async execute(input, ctx) {
91
86
  const p = input;
92
- const conn = getConn(ctx);
93
87
  const body = {
94
88
  profile: {
95
89
  firstName: p.firstName,
@@ -105,7 +99,7 @@ export default function okta(rl) {
105
99
  const qs = {
106
100
  activate: p.activate !== false ? "true" : "false",
107
101
  };
108
- const { data } = await apiRequest(conn, "POST", "/api/v1/users/", body, qs);
102
+ const { data } = await apiRequest(ctx, "POST", "users/", body, qs);
109
103
  return data;
110
104
  },
111
105
  });
@@ -121,7 +115,7 @@ export default function okta(rl) {
121
115
  },
122
116
  async execute(input, ctx) {
123
117
  const { userId } = input;
124
- const { data } = await apiRequest(getConn(ctx), "GET", `/api/v1/users/${userId}`);
118
+ const { data } = await apiRequest(ctx, "GET", `users/${pathSegment(userId)}`);
125
119
  return data;
126
120
  },
127
121
  });
@@ -142,16 +136,15 @@ export default function okta(rl) {
142
136
  },
143
137
  async execute(input, ctx) {
144
138
  const p = (input ?? {});
145
- const conn = getConn(ctx);
146
139
  const qs = {};
147
140
  if (p.search)
148
141
  qs.search = p.search;
149
142
  if (p.limit) {
150
143
  qs.limit = p.limit;
151
- const { data } = await apiRequest(conn, "GET", "/api/v1/users/", undefined, qs);
144
+ const { data } = await apiRequest(ctx, "GET", "users/", undefined, qs);
152
145
  return data;
153
146
  }
154
- return paginate(conn, "/api/v1/users/", qs);
147
+ return paginate(ctx, "users/", qs);
155
148
  },
156
149
  });
157
150
  rl.registerAction("user.update", {
@@ -167,7 +160,9 @@ export default function okta(rl) {
167
160
  },
168
161
  async execute(input, ctx) {
169
162
  const { userId, profile } = input;
170
- const { data } = await apiRequest(getConn(ctx), "POST", `/api/v1/users/${userId}`, { profile });
163
+ const { data } = await apiRequest(ctx, "POST", `users/${pathSegment(userId)}`, {
164
+ profile,
165
+ });
171
166
  return data;
172
167
  },
173
168
  });
@@ -179,7 +174,7 @@ export default function okta(rl) {
179
174
  },
180
175
  async execute(input, ctx) {
181
176
  const { userId } = input;
182
- await apiRequest(getConn(ctx), "DELETE", `/api/v1/users/${userId}`);
177
+ await apiRequest(ctx, "DELETE", `users/${pathSegment(userId)}`);
183
178
  return { success: true };
184
179
  },
185
180
  });
@@ -0,0 +1,16 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API token, appended by the transport as the token query parameter on
4
+ * OneSimpleAPI's one origin.
5
+ */
6
+ export const oneSimpleApiCredential = staticCredential({
7
+ id: "oneSimpleApi",
8
+ auth: { kind: "queryKey", param: "token" },
9
+ local: { secret: "apiToken" },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://onesimpleapi.com/api/",
13
+ methods: ["GET"],
14
+ },
15
+ },
16
+ });
@@ -1,20 +1,16 @@
1
- const BASE = "https://onesimpleapi.com/api";
2
- async function apiRequest(token, endpoint, qs = {}) {
3
- const url = new URL(`${BASE}${endpoint}`);
4
- url.searchParams.set("token", token);
5
- url.searchParams.set("output", "json");
6
- for (const [k, v] of Object.entries(qs)) {
7
- if (v !== undefined && v !== null)
8
- url.searchParams.set(k, String(v));
9
- }
10
- const res = await fetch(url.toString());
11
- if (!res.ok)
12
- throw new Error(`OneSimpleAPI error ${res.status}: ${await res.text()}`);
13
- return res.json();
1
+ import { credentialJson } from "../../_shared/credentials.js";
2
+ import { oneSimpleApiCredential } from "./credentials.js";
3
+ function apiRequest(ctx, path, qs = {}) {
4
+ return credentialJson(ctx, oneSimpleApiCredential, "oneSimpleApi", {
5
+ target: "api",
6
+ path,
7
+ query: { output: "json", ...qs },
8
+ });
14
9
  }
15
10
  export default function oneSimpleApi(rl) {
16
11
  rl.setName("oneSimpleApi");
17
12
  rl.setVersion("0.1.0");
13
+ rl.setCredential(oneSimpleApiCredential);
18
14
  rl.setConnectionSchema({
19
15
  apiToken: {
20
16
  type: "string",
@@ -23,7 +19,6 @@ export default function oneSimpleApi(rl) {
23
19
  env: "ONE_SIMPLE_API_TOKEN",
24
20
  },
25
21
  });
26
- const key = (ctx) => ctx.connection.config.apiToken;
27
22
  // ── Website ─────────────────────────────────────────
28
23
  rl.registerAction("website.pdf", {
29
24
  access: "write",
@@ -47,7 +42,7 @@ export default function oneSimpleApi(rl) {
47
42
  if (p.page)
48
43
  qs.page = p.page;
49
44
  qs.force = p.force ? "yes" : "no";
50
- return apiRequest(key(ctx), "/pdf", qs);
45
+ return apiRequest(ctx, "pdf", qs);
51
46
  },
52
47
  });
53
48
  rl.registerAction("website.screenshot", {
@@ -78,7 +73,7 @@ export default function oneSimpleApi(rl) {
78
73
  qs.screen = p.screen;
79
74
  qs.fullpage = p.fullpage ? "yes" : "no";
80
75
  qs.force = p.force ? "yes" : "no";
81
- return apiRequest(key(ctx), "/screenshot", qs);
76
+ return apiRequest(ctx, "screenshot", qs);
82
77
  },
83
78
  });
84
79
  rl.registerAction("website.seo", {
@@ -97,7 +92,7 @@ export default function oneSimpleApi(rl) {
97
92
  const qs = { url: p.url };
98
93
  if (p.headers)
99
94
  qs.headers = "yes";
100
- return apiRequest(key(ctx), "/page_info", qs);
95
+ return apiRequest(ctx, "page_info", qs);
101
96
  },
102
97
  });
103
98
  // ── Social Profile ──────────────────────────────────
@@ -113,7 +108,7 @@ export default function oneSimpleApi(rl) {
113
108
  },
114
109
  async execute(input, ctx) {
115
110
  const { profile } = input;
116
- return apiRequest(key(ctx), "/instagram_profile", { profile });
111
+ return apiRequest(ctx, "instagram_profile", { profile });
117
112
  },
118
113
  });
119
114
  rl.registerAction("socialProfile.spotify", {
@@ -128,7 +123,7 @@ export default function oneSimpleApi(rl) {
128
123
  },
129
124
  async execute(input, ctx) {
130
125
  const { profile } = input;
131
- return apiRequest(key(ctx), "/spotify_profile", { profile });
126
+ return apiRequest(ctx, "spotify_profile", { profile });
132
127
  },
133
128
  });
134
129
  // ── Information ─────────────────────────────────────
@@ -154,7 +149,7 @@ export default function oneSimpleApi(rl) {
154
149
  },
155
150
  async execute(input, ctx) {
156
151
  const { value, fromCurrency, toCurrency } = input;
157
- return apiRequest(key(ctx), "/exchange_rate", {
152
+ return apiRequest(ctx, "exchange_rate", {
158
153
  from_value: value,
159
154
  from_currency: fromCurrency,
160
155
  to_currency: toCurrency,
@@ -169,7 +164,7 @@ export default function oneSimpleApi(rl) {
169
164
  },
170
165
  async execute(input, ctx) {
171
166
  const { url } = input;
172
- return apiRequest(key(ctx), "/image_info", { url, raw: true });
167
+ return apiRequest(ctx, "image_info", { url, raw: true });
173
168
  },
174
169
  });
175
170
  // ── Utility ─────────────────────────────────────────
@@ -185,7 +180,7 @@ export default function oneSimpleApi(rl) {
185
180
  },
186
181
  async execute(input, ctx) {
187
182
  const { email } = input;
188
- return apiRequest(key(ctx), "/email", { email });
183
+ return apiRequest(ctx, "email", { email });
189
184
  },
190
185
  });
191
186
  rl.registerAction("utility.expandUrl", {
@@ -196,7 +191,7 @@ export default function oneSimpleApi(rl) {
196
191
  },
197
192
  async execute(input, ctx) {
198
193
  const { url } = input;
199
- return apiRequest(key(ctx), "/unshorten", { url });
194
+ return apiRequest(ctx, "unshorten", { url });
200
195
  },
201
196
  });
202
197
  rl.registerAction("utility.qrCode", {
@@ -226,7 +221,7 @@ export default function oneSimpleApi(rl) {
226
221
  qs.size = p.size;
227
222
  if (p.format)
228
223
  qs.format = p.format;
229
- return apiRequest(key(ctx), "/qr_code", qs);
224
+ return apiRequest(ctx, "qr_code", qs);
230
225
  },
231
226
  });
232
227
  }
@@ -0,0 +1,23 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API key as the Basic username, with an empty password, to Onfleet's
4
+ * one API origin. The fixed User-Agent is a public companion header.
5
+ */
6
+ export const onfleetCredential = staticCredential({
7
+ id: "onfleet",
8
+ auth: { kind: "basic" },
9
+ local: { username: "apiKey", password: { value: "" } },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://onfleet.com/api/v2/",
13
+ methods: ["GET", "POST", "PUT", "DELETE"],
14
+ allowedHeaders: ["User-Agent"],
15
+ },
16
+ },
17
+ probe: {
18
+ target: "api",
19
+ path: "organization",
20
+ method: "GET",
21
+ acceptedStatuses: [200],
22
+ },
23
+ });