runline 0.33.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/dist/auth/oauth2.d.ts +7 -1
  2. package/dist/auth/oauth2.js +10 -0
  3. package/dist/auth/token.d.ts +1 -0
  4. package/dist/auth/token.js +19 -1
  5. package/dist/auth/types.d.ts +22 -1
  6. package/dist/core/engine.d.ts +7 -0
  7. package/dist/core/engine.js +21 -8
  8. package/dist/credentials/policy.d.ts +53 -1
  9. package/dist/credentials/policy.js +146 -6
  10. package/dist/credentials/registry.d.ts +9 -0
  11. package/dist/credentials/registry.js +184 -22
  12. package/dist/credentials/transport.d.ts +48 -2
  13. package/dist/credentials/transport.js +248 -70
  14. package/dist/credentials/types.d.ts +177 -10
  15. package/dist/index.d.ts +6 -5
  16. package/dist/index.js +3 -2
  17. package/dist/plugin/api.d.ts +7 -0
  18. package/dist/plugin/api.js +7 -0
  19. package/dist/plugin/schema.d.ts +16 -4
  20. package/dist/plugin/schema.js +28 -5
  21. package/dist/plugin/types.d.ts +20 -0
  22. package/dist/plugins/_shared/base64.js +30 -0
  23. package/dist/plugins/_shared/credentialAdapter.js +99 -15
  24. package/dist/plugins/_shared/credentials.js +416 -0
  25. package/dist/plugins/_shared/googleAuth.js +69 -39
  26. package/dist/plugins/_shared/googleCredentials.js +68 -14
  27. package/dist/plugins/_shared/localFile.js +40 -0
  28. package/dist/plugins/_shared/mediaFile.js +12 -12
  29. package/dist/plugins/_shared/microsoftAuth.js +31 -47
  30. package/dist/plugins/_shared/microsoftCredentials.js +42 -15
  31. package/dist/plugins/_shared/provider.js +2 -14
  32. package/dist/plugins/_shared/shiftCloud.js +16 -56
  33. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  34. package/dist/plugins/_shared/shiftUpload.js +14 -10
  35. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  36. package/dist/plugins/actionNetwork/src/index.js +39 -50
  37. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  38. package/dist/plugins/activeCampaign/src/index.js +61 -132
  39. package/dist/plugins/adalo/src/credentials.js +16 -0
  40. package/dist/plugins/adalo/src/index.js +19 -43
  41. package/dist/plugins/affinity/src/credentials.js +19 -0
  42. package/dist/plugins/affinity/src/index.js +29 -54
  43. package/dist/plugins/agentMail/src/credentials.js +35 -0
  44. package/dist/plugins/agentMail/src/drafts.js +137 -0
  45. package/dist/plugins/agentMail/src/inboxes.js +95 -0
  46. package/dist/plugins/agentMail/src/index.js +35 -0
  47. package/dist/plugins/agentMail/src/messages.js +154 -0
  48. package/dist/plugins/agentMail/src/schemas.js +156 -0
  49. package/dist/plugins/agentMail/src/shared.js +203 -0
  50. package/dist/plugins/agentMail/src/threads.js +75 -0
  51. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  52. package/dist/plugins/agileCrm/src/index.js +46 -112
  53. package/dist/plugins/airtable/src/credentials.js +19 -0
  54. package/dist/plugins/airtable/src/index.js +37 -50
  55. package/dist/plugins/airtop/src/credentials.js +20 -0
  56. package/dist/plugins/airtop/src/index.js +51 -75
  57. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  58. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  59. package/dist/plugins/asana/src/credentials.js +19 -0
  60. package/dist/plugins/asana/src/index.js +51 -72
  61. package/dist/plugins/autopilot/src/credentials.js +19 -0
  62. package/dist/plugins/autopilot/src/index.js +38 -45
  63. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  64. package/dist/plugins/bambooHr/src/index.js +41 -67
  65. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  66. package/dist/plugins/bannerbear/src/index.js +15 -27
  67. package/dist/plugins/baserow/src/credentials.js +17 -0
  68. package/dist/plugins/baserow/src/index.js +23 -49
  69. package/dist/plugins/beeminder/src/credentials.js +19 -0
  70. package/dist/plugins/beeminder/src/index.js +32 -54
  71. package/dist/plugins/bitly/src/credentials.js +19 -0
  72. package/dist/plugins/bitly/src/index.js +12 -26
  73. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  74. package/dist/plugins/bitwarden/src/index.js +34 -80
  75. package/dist/plugins/box/src/credentials.js +19 -0
  76. package/dist/plugins/box/src/index.js +24 -49
  77. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  78. package/dist/plugins/brandfetch/src/index.js +12 -17
  79. package/dist/plugins/brevo/src/credentials.js +19 -0
  80. package/dist/plugins/brevo/src/index.js +30 -51
  81. package/dist/plugins/bubble/src/credentials.js +28 -0
  82. package/dist/plugins/bubble/src/index.js +29 -65
  83. package/dist/plugins/chargebee/src/credentials.js +16 -0
  84. package/dist/plugins/chargebee/src/index.js +15 -45
  85. package/dist/plugins/circleci/src/credentials.js +19 -0
  86. package/dist/plugins/circleci/src/index.js +19 -39
  87. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  88. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  89. package/dist/plugins/clearbit/src/credentials.js +22 -0
  90. package/dist/plugins/clearbit/src/index.js +11 -21
  91. package/dist/plugins/clickup/src/credentials.js +19 -0
  92. package/dist/plugins/clickup/src/index.js +85 -117
  93. package/dist/plugins/clockify/src/credentials.js +19 -0
  94. package/dist/plugins/clockify/src/index.js +46 -61
  95. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  96. package/dist/plugins/cloudflare/src/index.js +19 -34
  97. package/dist/plugins/cockpit/src/credentials.js +17 -0
  98. package/dist/plugins/cockpit/src/index.js +18 -31
  99. package/dist/plugins/coda/src/credentials.js +19 -0
  100. package/dist/plugins/coda/src/index.js +33 -50
  101. package/dist/plugins/coingecko/src/credentials.js +20 -0
  102. package/dist/plugins/coingecko/src/index.js +24 -34
  103. package/dist/plugins/contentful/src/credentials.js +26 -0
  104. package/dist/plugins/contentful/src/index.js +19 -40
  105. package/dist/plugins/convertkit/src/credentials.js +26 -0
  106. package/dist/plugins/convertkit/src/index.js +27 -45
  107. package/dist/plugins/copper/src/credentials.js +17 -0
  108. package/dist/plugins/copper/src/index.js +25 -47
  109. package/dist/plugins/cortex/src/credentials.js +28 -0
  110. package/dist/plugins/cortex/src/index.js +26 -49
  111. package/dist/plugins/currents/src/credentials.js +19 -0
  112. package/dist/plugins/currents/src/index.js +46 -59
  113. package/dist/plugins/customerIo/src/credentials.js +52 -0
  114. package/dist/plugins/customerIo/src/index.js +30 -58
  115. package/dist/plugins/databricks/src/credentials.js +13 -0
  116. package/dist/plugins/databricks/src/index.js +51 -103
  117. package/dist/plugins/deepl/src/credentials.js +19 -0
  118. package/dist/plugins/deepl/src/index.js +13 -39
  119. package/dist/plugins/demio/src/credentials.js +26 -0
  120. package/dist/plugins/demio/src/index.js +17 -41
  121. package/dist/plugins/dhl/src/credentials.js +13 -0
  122. package/dist/plugins/dhl/src/index.js +8 -19
  123. package/dist/plugins/discord/src/credentials.js +19 -0
  124. package/dist/plugins/discord/src/index.js +30 -58
  125. package/dist/plugins/discourse/src/credentials.js +18 -0
  126. package/dist/plugins/discourse/src/index.js +36 -53
  127. package/dist/plugins/disqus/src/credentials.js +13 -0
  128. package/dist/plugins/disqus/src/index.js +14 -32
  129. package/dist/plugins/drift/src/credentials.js +13 -0
  130. package/dist/plugins/drift/src/index.js +16 -26
  131. package/dist/plugins/dropbox/src/credentials.js +13 -0
  132. package/dist/plugins/dropbox/src/index.js +23 -30
  133. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  134. package/dist/plugins/dropcontact/src/index.js +13 -18
  135. package/dist/plugins/egoi/src/credentials.js +19 -0
  136. package/dist/plugins/egoi/src/index.js +23 -38
  137. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  138. package/dist/plugins/elasticsearch/src/index.js +27 -48
  139. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  140. package/dist/plugins/elevenlabs/src/index.js +4 -1
  141. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  142. package/dist/plugins/elevenlabs/src/shared.js +87 -62
  143. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  144. package/dist/plugins/emelia/src/credentials.js +14 -0
  145. package/dist/plugins/emelia/src/index.js +19 -23
  146. package/dist/plugins/erpnext/src/credentials.js +27 -0
  147. package/dist/plugins/erpnext/src/index.js +21 -42
  148. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  149. package/dist/plugins/facebookGraph/src/index.js +39 -37
  150. package/dist/plugins/fal/src/credentials.js +14 -0
  151. package/dist/plugins/fal/src/index.js +5 -3
  152. package/dist/plugins/fal/src/shared.js +58 -63
  153. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  154. package/dist/plugins/freshdesk/src/index.js +25 -46
  155. package/dist/plugins/freshservice/src/credentials.js +16 -0
  156. package/dist/plugins/freshservice/src/index.js +37 -58
  157. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  158. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  159. package/dist/plugins/getresponse/src/credentials.js +22 -0
  160. package/dist/plugins/getresponse/src/index.js +20 -32
  161. package/dist/plugins/gett/src/credentials.js +64 -0
  162. package/dist/plugins/gett/src/index.js +11 -6
  163. package/dist/plugins/gett/src/login.js +24 -0
  164. package/dist/plugins/gett/src/session.js +15 -38
  165. package/dist/plugins/gett/src/shared.js +41 -84
  166. package/dist/plugins/ghost/src/credentials.js +36 -0
  167. package/dist/plugins/ghost/src/index.js +18 -59
  168. package/dist/plugins/github/src/credentials.js +18 -0
  169. package/dist/plugins/github/src/index.js +55 -78
  170. package/dist/plugins/gitlab/src/credentials.js +24 -0
  171. package/dist/plugins/gitlab/src/index.js +29 -48
  172. package/dist/plugins/gmail/src/index.js +47 -108
  173. package/dist/plugins/gong/src/credentials.js +16 -0
  174. package/dist/plugins/gong/src/index.js +16 -32
  175. package/dist/plugins/googleAppsScript/src/index.js +109 -42
  176. package/dist/plugins/googleCalendar/src/index.js +20 -51
  177. package/dist/plugins/googleContacts/src/index.js +13 -40
  178. package/dist/plugins/googleDocs/src/index.js +3 -32
  179. package/dist/plugins/googleDocs/src/shared.js +2 -1
  180. package/dist/plugins/googleDrive/src/index.js +68 -97
  181. package/dist/plugins/googleImage/src/credentials.js +14 -0
  182. package/dist/plugins/googleImage/src/index.js +15 -26
  183. package/dist/plugins/googleSheets/src/index.js +27 -60
  184. package/dist/plugins/googleSlides/src/index.js +7 -35
  185. package/dist/plugins/googleTasks/src/index.js +14 -42
  186. package/dist/plugins/gotify/src/credentials.js +32 -0
  187. package/dist/plugins/gotify/src/index.js +14 -36
  188. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  189. package/dist/plugins/gotowebinar/src/index.js +52 -69
  190. package/dist/plugins/grafana/src/credentials.js +16 -0
  191. package/dist/plugins/grafana/src/index.js +34 -53
  192. package/dist/plugins/graphql/src/credentials.js +42 -0
  193. package/dist/plugins/graphql/src/index.js +21 -46
  194. package/dist/plugins/grist/src/credentials.js +30 -0
  195. package/dist/plugins/grist/src/index.js +14 -43
  196. package/dist/plugins/halopsa/src/credentials.js +56 -0
  197. package/dist/plugins/halopsa/src/index.js +20 -47
  198. package/dist/plugins/harvest/src/credentials.js +20 -0
  199. package/dist/plugins/harvest/src/index.js +24 -43
  200. package/dist/plugins/helpscout/src/credentials.js +13 -0
  201. package/dist/plugins/helpscout/src/index.js +26 -38
  202. package/dist/plugins/highlevel/src/credentials.js +19 -0
  203. package/dist/plugins/highlevel/src/index.js +42 -65
  204. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  205. package/dist/plugins/homeAssistant/src/index.js +34 -52
  206. package/dist/plugins/hubspot/src/credentials.js +16 -0
  207. package/dist/plugins/hubspot/src/index.js +29 -41
  208. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  209. package/dist/plugins/humanticAi/src/index.js +15 -22
  210. package/dist/plugins/hunter/src/credentials.js +13 -0
  211. package/dist/plugins/hunter/src/index.js +18 -17
  212. package/dist/plugins/intercom/src/credentials.js +19 -0
  213. package/dist/plugins/intercom/src/index.js +25 -38
  214. package/dist/plugins/iterable/src/credentials.js +17 -0
  215. package/dist/plugins/iterable/src/index.js +26 -40
  216. package/dist/plugins/jenkins/src/credentials.js +16 -0
  217. package/dist/plugins/jenkins/src/index.js +22 -36
  218. package/dist/plugins/jira/src/credentials.js +16 -0
  219. package/dist/plugins/jira/src/index.js +35 -61
  220. package/dist/plugins/keap/src/credentials.js +19 -0
  221. package/dist/plugins/keap/src/index.js +43 -71
  222. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  223. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  224. package/dist/plugins/lemlist/src/credentials.js +19 -0
  225. package/dist/plugins/lemlist/src/index.js +35 -47
  226. package/dist/plugins/linear/src/attachments.js +7 -7
  227. package/dist/plugins/linear/src/comments.js +7 -7
  228. package/dist/plugins/linear/src/credentials.js +17 -0
  229. package/dist/plugins/linear/src/cycles.js +5 -5
  230. package/dist/plugins/linear/src/index.js +2 -0
  231. package/dist/plugins/linear/src/initiatives.js +6 -6
  232. package/dist/plugins/linear/src/issues.js +14 -14
  233. package/dist/plugins/linear/src/labels.js +6 -6
  234. package/dist/plugins/linear/src/organization.js +2 -2
  235. package/dist/plugins/linear/src/projects.js +12 -12
  236. package/dist/plugins/linear/src/shared.js +34 -32
  237. package/dist/plugins/linear/src/states.js +3 -3
  238. package/dist/plugins/linear/src/teams.js +4 -4
  239. package/dist/plugins/linear/src/users.js +3 -3
  240. package/dist/plugins/linear/src/views.js +5 -5
  241. package/dist/plugins/linear/src/webhooks.js +5 -5
  242. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  243. package/dist/plugins/lingvanex/src/index.js +7 -9
  244. package/dist/plugins/linkedin/src/credentials.js +17 -0
  245. package/dist/plugins/linkedin/src/index.js +13 -17
  246. package/dist/plugins/lonescale/src/credentials.js +13 -0
  247. package/dist/plugins/lonescale/src/index.js +16 -26
  248. package/dist/plugins/magento/src/credentials.js +16 -0
  249. package/dist/plugins/magento/src/index.js +67 -84
  250. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  251. package/dist/plugins/mailcheck/src/index.js +7 -9
  252. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  253. package/dist/plugins/mailchimp/src/index.js +36 -44
  254. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  255. package/dist/plugins/mailerlite/src/index.js +19 -32
  256. package/dist/plugins/mailgun/src/credentials.js +21 -0
  257. package/dist/plugins/mailgun/src/index.js +15 -21
  258. package/dist/plugins/mailjet/src/credentials.js +38 -0
  259. package/dist/plugins/mailjet/src/index.js +60 -115
  260. package/dist/plugins/mandrill/src/credentials.js +17 -0
  261. package/dist/plugins/mandrill/src/index.js +11 -12
  262. package/dist/plugins/marketstack/src/credentials.js +16 -0
  263. package/dist/plugins/marketstack/src/index.js +18 -28
  264. package/dist/plugins/matrix/src/credentials.js +19 -0
  265. package/dist/plugins/matrix/src/index.js +23 -52
  266. package/dist/plugins/mattermost/src/credentials.js +19 -0
  267. package/dist/plugins/mattermost/src/index.js +41 -73
  268. package/dist/plugins/mautic/src/credentials.js +16 -0
  269. package/dist/plugins/mautic/src/index.js +46 -62
  270. package/dist/plugins/medium/src/credentials.js +20 -0
  271. package/dist/plugins/medium/src/index.js +18 -23
  272. package/dist/plugins/messagebird/src/credentials.js +22 -0
  273. package/dist/plugins/messagebird/src/index.js +13 -18
  274. package/dist/plugins/metabase/src/credentials.js +19 -0
  275. package/dist/plugins/metabase/src/index.js +24 -40
  276. package/dist/plugins/microsoftCalendar/src/index.js +49 -18
  277. package/dist/plugins/microsoftFiles/src/index.js +95 -31
  278. package/dist/plugins/microsoftMail/src/index.js +63 -21
  279. package/dist/plugins/misp/src/credentials.js +16 -0
  280. package/dist/plugins/misp/src/index.js +60 -71
  281. package/dist/plugins/mocean/src/credentials.js +17 -0
  282. package/dist/plugins/mocean/src/index.js +11 -23
  283. package/dist/plugins/monday/src/credentials.js +14 -0
  284. package/dist/plugins/monday/src/index.js +31 -44
  285. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  286. package/dist/plugins/monicaCrm/src/index.js +25 -42
  287. package/dist/plugins/msg91/src/credentials.js +10 -0
  288. package/dist/plugins/msg91/src/index.js +15 -11
  289. package/dist/plugins/nasa/src/credentials.js +22 -0
  290. package/dist/plugins/nasa/src/index.js +24 -28
  291. package/dist/plugins/netlify/src/credentials.js +19 -0
  292. package/dist/plugins/netlify/src/index.js +27 -51
  293. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  294. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  295. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  296. package/dist/plugins/nextcloud/src/index.js +55 -109
  297. package/dist/plugins/nocodb/src/credentials.js +16 -0
  298. package/dist/plugins/nocodb/src/index.js +19 -37
  299. package/dist/plugins/notion/src/credentials.js +21 -0
  300. package/dist/plugins/notion/src/index.js +25 -38
  301. package/dist/plugins/npm/src/credentials.js +19 -0
  302. package/dist/plugins/npm/src/index.js +22 -32
  303. package/dist/plugins/odoo/src/credentials.js +21 -0
  304. package/dist/plugins/odoo/src/index.js +53 -69
  305. package/dist/plugins/okta/src/credentials.js +23 -0
  306. package/dist/plugins/okta/src/index.js +30 -35
  307. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  308. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  309. package/dist/plugins/onfleet/src/credentials.js +23 -0
  310. package/dist/plugins/onfleet/src/index.js +42 -53
  311. package/dist/plugins/openai/src/credentials.js +13 -0
  312. package/dist/plugins/openai/src/index.js +16 -24
  313. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  314. package/dist/plugins/openweathermap/src/index.js +22 -22
  315. package/dist/plugins/oura/src/credentials.js +19 -0
  316. package/dist/plugins/oura/src/index.js +13 -18
  317. package/dist/plugins/paddle/src/credentials.js +27 -0
  318. package/dist/plugins/paddle/src/index.js +20 -36
  319. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  320. package/dist/plugins/pagerduty/src/index.js +30 -39
  321. package/dist/plugins/parallel/src/credentials.js +18 -0
  322. package/dist/plugins/parallel/src/index.js +16 -22
  323. package/dist/plugins/paypal/src/credentials.js +44 -0
  324. package/dist/plugins/paypal/src/index.js +14 -40
  325. package/dist/plugins/peekalink/src/credentials.js +16 -0
  326. package/dist/plugins/peekalink/src/index.js +10 -11
  327. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  328. package/dist/plugins/phantombuster/src/index.js +19 -32
  329. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  330. package/dist/plugins/philipsHue/src/index.js +15 -27
  331. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  332. package/dist/plugins/pipedrive/src/index.js +43 -73
  333. package/dist/plugins/plaud/src/index.js +2 -1
  334. package/dist/plugins/plaud/src/shared.js +23 -19
  335. package/dist/plugins/plivo/src/credentials.js +20 -0
  336. package/dist/plugins/plivo/src/index.js +13 -19
  337. package/dist/plugins/posthog/src/credentials.js +18 -0
  338. package/dist/plugins/posthog/src/index.js +14 -20
  339. package/dist/plugins/profitwell/src/credentials.js +22 -0
  340. package/dist/plugins/profitwell/src/index.js +10 -17
  341. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  342. package/dist/plugins/pushbullet/src/index.js +19 -27
  343. package/dist/plugins/pushcut/src/credentials.js +19 -0
  344. package/dist/plugins/pushcut/src/index.js +7 -8
  345. package/dist/plugins/pushover/src/credentials.js +14 -0
  346. package/dist/plugins/pushover/src/index.js +7 -12
  347. package/dist/plugins/quickbase/src/credentials.js +15 -0
  348. package/dist/plugins/quickbase/src/index.js +24 -34
  349. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  350. package/dist/plugins/quickbooks/src/index.js +17 -46
  351. package/dist/plugins/raindrop/src/credentials.js +19 -0
  352. package/dist/plugins/raindrop/src/index.js +30 -32
  353. package/dist/plugins/recraft/src/credentials.js +13 -0
  354. package/dist/plugins/recraft/src/index.js +39 -28
  355. package/dist/plugins/reddit/src/credentials.js +26 -0
  356. package/dist/plugins/reddit/src/index.js +30 -34
  357. package/dist/plugins/replicate/src/credentials.js +23 -0
  358. package/dist/plugins/replicate/src/index.js +18 -28
  359. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  360. package/dist/plugins/rocketchat/src/index.js +8 -19
  361. package/dist/plugins/rundeck/src/credentials.js +16 -0
  362. package/dist/plugins/rundeck/src/index.js +12 -28
  363. package/dist/plugins/salesforce/src/credentials.js +73 -0
  364. package/dist/plugins/salesforce/src/index.js +6 -0
  365. package/dist/plugins/salesforce/src/metadata.js +3 -16
  366. package/dist/plugins/salesforce/src/shared.js +25 -100
  367. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  368. package/dist/plugins/salesmate/src/credentials.js +17 -0
  369. package/dist/plugins/salesmate/src/index.js +20 -37
  370. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  371. package/dist/plugins/securityScorecard/src/index.js +24 -37
  372. package/dist/plugins/segment/src/credentials.js +16 -0
  373. package/dist/plugins/segment/src/index.js +12 -16
  374. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  375. package/dist/plugins/sendgrid/src/index.js +31 -35
  376. package/dist/plugins/sendy/src/credentials.js +18 -0
  377. package/dist/plugins/sendy/src/index.js +18 -24
  378. package/dist/plugins/sentry/src/credentials.js +16 -0
  379. package/dist/plugins/sentry/src/index.js +30 -98
  380. package/dist/plugins/servicenow/src/credentials.js +13 -0
  381. package/dist/plugins/servicenow/src/index.js +22 -41
  382. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  383. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  384. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  385. package/dist/plugins/shiftBwm/src/index.js +4 -2
  386. package/dist/plugins/shiftBwm/src/shared.js +41 -16
  387. package/dist/plugins/shiftCrm/src/access.js +2 -2
  388. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  389. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  390. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  391. package/dist/plugins/shiftCrm/src/index.js +2 -0
  392. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  393. package/dist/plugins/shiftCrm/src/people.js +3 -3
  394. package/dist/plugins/shiftCrm/src/records.js +2 -2
  395. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  396. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  397. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  398. package/dist/plugins/shiftObjects/src/index.js +2 -0
  399. package/dist/plugins/shiftObjects/src/objects.js +4 -3
  400. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  401. package/dist/plugins/shiftOcr/src/index.js +14 -8
  402. package/dist/plugins/shiftPages/src/index.js +2 -0
  403. package/dist/plugins/shiftPages/src/pages.js +5 -3
  404. package/dist/plugins/shiftPages/src/shared.js +3 -1
  405. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  406. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  407. package/dist/plugins/shiftTranscription/src/transcription.js +5 -5
  408. package/dist/plugins/shiftWork/src/index.js +2 -0
  409. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  410. package/dist/plugins/shiftWork/src/issues.js +11 -7
  411. package/dist/plugins/shiftWork/src/projects.js +3 -3
  412. package/dist/plugins/shiftWork/src/shared.js +3 -1
  413. package/dist/plugins/shopify/src/credentials.js +16 -0
  414. package/dist/plugins/shopify/src/index.js +32 -59
  415. package/dist/plugins/signl4/src/credentials.js +17 -0
  416. package/dist/plugins/signl4/src/index.js +28 -29
  417. package/dist/plugins/slack/src/credentials.js +19 -0
  418. package/dist/plugins/slack/src/index.js +51 -60
  419. package/dist/plugins/sms77/src/credentials.js +17 -0
  420. package/dist/plugins/sms77/src/index.js +11 -16
  421. package/dist/plugins/splunk/src/credentials.js +19 -0
  422. package/dist/plugins/splunk/src/index.js +32 -74
  423. package/dist/plugins/spotify/src/credentials.js +19 -0
  424. package/dist/plugins/spotify/src/index.js +40 -55
  425. package/dist/plugins/stackby/src/credentials.js +13 -0
  426. package/dist/plugins/stackby/src/index.js +14 -23
  427. package/dist/plugins/steel/src/auth.js +27 -0
  428. package/dist/plugins/steel/src/browser.js +4 -3
  429. package/dist/plugins/steel/src/captchas.js +4 -3
  430. package/dist/plugins/steel/src/extensions.js +3 -2
  431. package/dist/plugins/steel/src/files.js +9 -10
  432. package/dist/plugins/steel/src/index.js +2 -0
  433. package/dist/plugins/steel/src/page/tools.js +3 -3
  434. package/dist/plugins/steel/src/profiles.js +4 -3
  435. package/dist/plugins/steel/src/sessions.js +13 -13
  436. package/dist/plugins/steel/src/shared.js +21 -51
  437. package/dist/plugins/storyblok/src/credentials.js +37 -0
  438. package/dist/plugins/storyblok/src/index.js +22 -66
  439. package/dist/plugins/strapi/src/credentials.js +71 -0
  440. package/dist/plugins/strapi/src/index.js +36 -70
  441. package/dist/plugins/strava/src/credentials.js +19 -0
  442. package/dist/plugins/strava/src/index.js +16 -33
  443. package/dist/plugins/stripe/src/credentials.js +19 -0
  444. package/dist/plugins/stripe/src/index.js +44 -58
  445. package/dist/plugins/supabase/src/credentials.js +30 -0
  446. package/dist/plugins/supabase/src/index.js +18 -40
  447. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  448. package/dist/plugins/syncromsp/src/index.js +37 -70
  449. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  450. package/dist/plugins/tapfiliate/src/index.js +21 -31
  451. package/dist/plugins/telegram/src/credentials.js +20 -0
  452. package/dist/plugins/telegram/src/index.js +31 -39
  453. package/dist/plugins/thehive/src/credentials.js +14 -0
  454. package/dist/plugins/thehive/src/index.js +33 -50
  455. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  456. package/dist/plugins/thehiveProject/src/index.js +53 -122
  457. package/dist/plugins/todoist/src/credentials.js +26 -0
  458. package/dist/plugins/todoist/src/index.js +49 -79
  459. package/dist/plugins/together/src/credentials.js +16 -0
  460. package/dist/plugins/together/src/index.js +31 -33
  461. package/dist/plugins/travisci/src/credentials.js +24 -0
  462. package/dist/plugins/travisci/src/index.js +16 -30
  463. package/dist/plugins/trello/src/credentials.js +29 -0
  464. package/dist/plugins/trello/src/index.js +49 -64
  465. package/dist/plugins/twake/src/credentials.js +16 -0
  466. package/dist/plugins/twake/src/index.js +8 -10
  467. package/dist/plugins/twilio/src/credentials.js +23 -0
  468. package/dist/plugins/twilio/src/index.js +12 -26
  469. package/dist/plugins/twist/src/credentials.js +13 -0
  470. package/dist/plugins/twist/src/index.js +32 -44
  471. package/dist/plugins/twitter/src/credentials.js +16 -0
  472. package/dist/plugins/twitter/src/index.js +25 -37
  473. package/dist/plugins/typesafe/src/credentials.js +28 -0
  474. package/dist/plugins/typesafe/src/index.js +3 -1
  475. package/dist/plugins/typesafe/src/shared.js +23 -35
  476. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  477. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  478. package/dist/plugins/uplead/src/credentials.js +16 -0
  479. package/dist/plugins/uplead/src/index.js +11 -16
  480. package/dist/plugins/uproc/src/credentials.js +14 -0
  481. package/dist/plugins/uproc/src/index.js +7 -10
  482. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  483. package/dist/plugins/uptimerobot/src/index.js +28 -39
  484. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  485. package/dist/plugins/urlscanio/src/index.js +13 -22
  486. package/dist/plugins/vercel/src/credentials.js +19 -0
  487. package/dist/plugins/vercel/src/deployments.js +27 -11
  488. package/dist/plugins/vercel/src/env.js +31 -12
  489. package/dist/plugins/vercel/src/index.js +2 -0
  490. package/dist/plugins/vercel/src/projects.js +6 -3
  491. package/dist/plugins/vercel/src/shared.js +32 -37
  492. package/dist/plugins/vero/src/credentials.js +17 -0
  493. package/dist/plugins/vero/src/index.js +18 -21
  494. package/dist/plugins/vonage/src/credentials.js +17 -0
  495. package/dist/plugins/vonage/src/index.js +14 -18
  496. package/dist/plugins/wekan/src/credentials.js +16 -0
  497. package/dist/plugins/wekan/src/index.js +33 -46
  498. package/dist/plugins/wolt/src/account.js +6 -0
  499. package/dist/plugins/wolt/src/catalog.js +2 -2
  500. package/dist/plugins/wolt/src/credentials.js +64 -0
  501. package/dist/plugins/wolt/src/index.js +8 -3
  502. package/dist/plugins/wolt/src/orders.js +2 -2
  503. package/dist/plugins/wolt/src/public.js +91 -0
  504. package/dist/plugins/wolt/src/shared.js +49 -158
  505. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  506. package/dist/plugins/woocommerce/src/index.js +19 -37
  507. package/dist/plugins/wordpress/src/credentials.js +16 -0
  508. package/dist/plugins/wordpress/src/index.js +23 -42
  509. package/dist/plugins/xai/src/credentials.js +13 -0
  510. package/dist/plugins/xai/src/index.js +32 -31
  511. package/dist/plugins/xero/src/credentials.js +17 -0
  512. package/dist/plugins/xero/src/index.js +19 -36
  513. package/dist/plugins/yourls/src/credentials.js +17 -0
  514. package/dist/plugins/yourls/src/index.js +13 -23
  515. package/dist/plugins/zammad/src/credentials.js +15 -0
  516. package/dist/plugins/zammad/src/index.js +27 -47
  517. package/dist/plugins/zendesk/src/credentials.js +26 -0
  518. package/dist/plugins/zendesk/src/index.js +29 -48
  519. package/dist/plugins/zoho/src/credentials.js +17 -0
  520. package/dist/plugins/zoho/src/index.js +18 -38
  521. package/dist/plugins/zoom/src/credentials.js +19 -0
  522. package/dist/plugins/zoom/src/index.js +15 -30
  523. package/dist/plugins/zulip/src/credentials.js +16 -0
  524. package/dist/plugins/zulip/src/index.js +36 -42
  525. package/dist/sdk.d.ts +8 -0
  526. package/dist/sdk.js +3 -0
  527. package/package.json +2 -1
  528. package/dist/plugins/_shared/authedFetch.js +0 -33
  529. package/dist/plugins/_shared/tokenRefresh.js +0 -41
  530. package/dist/tests/helpers/engine-harness.d.ts +0 -1
  531. package/dist/tests/helpers/engine-harness.js +0 -236
@@ -1,45 +1,26 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { authedFetch } from "../../_shared/authedFetch.js";
3
- import { arr, num, numOrNull, obj, pick, readBounded, seg as segment, } from "../../_shared/provider.js";
4
- import { coordinatedAccessToken } from "../../_shared/tokenRefresh.js";
2
+ import { AuthError } from "runline";
3
+ import { credentialRequest, pathSegment } from "../../_shared/credentials.js";
4
+ import { arr, num, numOrNull, obj, pick } from "../../_shared/provider.js";
5
+ import { CONSUMER, clientHeaders, RESTAURANT, woltCredential, } from "./credentials.js";
6
+ import { answerOf, endpointOf } from "./public.js";
7
+ export { AUTH, CONSUMER, clientHeaders, RESTAURANT, } from "./credentials.js";
8
+ export { http, WoltError } from "./public.js";
5
9
  export { arr, num, numOrNull, obj, pick };
6
10
  /**
7
- * Transport and credentials for the Wolt consumer surface.
8
- *
9
- * Three hosts, two client personas. Catalogue reads are anonymous and go out as
10
- * the web app; everything authenticated goes out as the mobile app, because the
11
- * API only accepts the authed calls from a client that looks like the phone.
11
+ * The Wolt consumer surface. Catalogue reads are anonymous and go out as
12
+ * the web app (public.ts); everything authenticated goes out as the mobile
13
+ * app, signed through the declared credential, because the API only
14
+ * accepts the authed calls from a client that looks like the phone.
12
15
  */
13
- export const RESTAURANT = "restaurant-api.wolt.com";
14
- export const CONSUMER = "consumer-api.wolt.com";
15
- export const AUTH = "authentication.wolt.com";
16
16
  export const DEF_LAT = 32.0853;
17
17
  export const DEF_LON = 34.7818; // TLV
18
18
  export const AUDIENCE = "restaurant-api";
19
19
  export const CAPABILITIES = "access_confirmation";
20
- const MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
21
20
  const DEFAULT_TOKEN_TTL_MS = 3_600_000;
22
- const WEB_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36";
23
- /** Mobile client headers; the authed endpoints reject anything that is not the app. */
24
- const MOBILE = {
25
- "app-language": "en",
26
- "app-locale": "en-US",
27
- "client-version": "26.30.4",
28
- clientversionnumber: "142026304",
29
- platform: "Android",
30
- "user-agent": "Wolt/26.30.4; Build/142026304; Android/16; Google sdk_gphone",
31
- };
32
- const WEB = {
33
- "user-agent": WEB_UA,
34
- "accept-language": "en",
35
- "app-language": "en",
36
- platform: "Web",
37
- "client-version": "1.16.125",
38
- origin: "https://wolt.com",
39
- referer: "https://wolt.com/",
40
- };
41
21
  export const cfgOf = (ctx) => (ctx.connection.config || {});
42
- export const seg = (value, what) => segment(value, what, "wolt");
22
+ /** A configured or caller-supplied value as one path segment; surrounding whitespace is not part of it. */
23
+ export const seg = (value) => pathSegment(String(value ?? "").trim());
43
24
  /**
44
25
  * Normalize a phone to E.164 for Wolt, so a number given the local Israeli way
45
26
  * still routes. Handles intl "+972…"/"00972…", national "0500000000", and bare
@@ -58,77 +39,6 @@ export function normPhone(input) {
58
39
  export const formEncode = (body) => Object.entries(body)
59
40
  .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v ?? ""))}`)
60
41
  .join("&");
61
- /**
62
- * A failed request.
63
- *
64
- * The body stays private. Wolt puts meaningful data in its 4xx bodies — the
65
- * login escalation token, `error_code` — so the login flow needs to read it,
66
- * but those same bodies carry access and refresh tokens. `details()` is the
67
- * only way in, and the message never contains any of it.
68
- */
69
- export class WoltError extends Error {
70
- status;
71
- endpoint;
72
- #body;
73
- constructor(status, endpoint, body) {
74
- const retired = status === 410 ? " (endpoint retired by Wolt)" : "";
75
- super(`wolt: request failed (HTTP ${status})${retired} on ${endpoint}`);
76
- this.name = "WoltError";
77
- this.status = status;
78
- this.endpoint = endpoint;
79
- this.#body = body;
80
- }
81
- /** The parsed body, for the branches that must read it. Never logged. */
82
- details() {
83
- try {
84
- return obj(JSON.parse(this.#body));
85
- }
86
- catch {
87
- return {};
88
- }
89
- }
90
- }
91
- function endpointOf(host, path) {
92
- return `${host}${path.split("?")[0]}`;
93
- }
94
- export async function http(host, path, opts = {}) {
95
- const endpoint = endpointOf(host, path);
96
- const text = await httpText(host, path, opts);
97
- // Wolt answers 200 with nothing at all on endpoints it has retired.
98
- if (!text.trim())
99
- throw new Error(`wolt: ${endpoint} returned an empty body (endpoint retired)`);
100
- try {
101
- return obj(JSON.parse(text));
102
- }
103
- catch {
104
- throw new Error(`wolt: non-JSON response from ${endpoint}`);
105
- }
106
- }
107
- async function httpText(host, path, opts = {}) {
108
- const { method = "GET", body = null, headers = {}, web = true } = opts;
109
- const payload = body == null
110
- ? null
111
- : typeof body === "string"
112
- ? body
113
- : JSON.stringify(body);
114
- const merged = {
115
- ...(web ? WEB : {}),
116
- accept: "application/json",
117
- ...headers,
118
- };
119
- if (payload && !merged["content-type"])
120
- merged["content-type"] = "application/json";
121
- const endpoint = endpointOf(host, path);
122
- const res = await authedFetch(`https://${host}${path}`, {
123
- method,
124
- headers: merged,
125
- body: payload,
126
- });
127
- const text = await readBounded(res, MAX_RESPONSE_BYTES, `wolt: response exceeded the size limit on ${endpoint}`);
128
- if (res.status >= 400)
129
- throw new WoltError(res.status, endpoint, text);
130
- return text;
131
- }
132
42
  // ---------- identity ----------
133
43
  const ravelinDeviceId = () => `rvnand-6-${(randomUUID() + randomUUID()).replace(/-/g, "").toUpperCase().slice(0, 64)}`;
134
44
  const hex32 = () => (randomUUID() + randomUUID()).replace(/-/g, "").slice(0, 32);
@@ -151,68 +61,49 @@ export async function ensureIdentity(ctx) {
151
61
  await ctx.updateConnection(patch);
152
62
  return cfgOf(ctx);
153
63
  }
154
- /** Headers every authenticated or login call carries. */
155
- export function clientHeaders(cfg) {
156
- return {
157
- ...MOBILE,
158
- "w-wolt-session-id": cfg.woltSessionId ?? randomUUID(),
159
- "x-wolt-visitor-id": cfg.visitorId ?? randomUUID(),
160
- };
161
- }
162
64
  // ---------- credentials ----------
163
65
  export function expiresAt(expiresIn) {
164
66
  const seconds = numOrNull(expiresIn);
165
67
  return Date.now() + (seconds ? seconds * 1000 : DEFAULT_TOKEN_TTL_MS);
166
68
  }
167
69
  /**
168
- * The refresh grant. Called only from inside an update owner and always with
169
- * explicit values, so it can never re-enter the connection store.
70
+ * What a failed renewal means to the owner: no stored login, or a refresh
71
+ * token Wolt no longer honours — both mended by the owner login.
170
72
  */
171
- async function refreshGrant(cfg) {
172
- return http(AUTH, "/v1/wauth2/access_token", {
173
- method: "POST",
174
- web: false,
175
- body: formEncode({
176
- grant_type: "refresh_token",
177
- refresh_token: cfg.refreshToken,
178
- device_token: cfg.deviceToken ?? "",
179
- }),
180
- headers: {
181
- ...clientHeaders(cfg),
182
- "content-type": "application/x-www-form-urlencoded",
183
- },
184
- });
185
- }
186
- export async function accessToken(ctx, force = false) {
187
- const cfg = await ensureIdentity(ctx);
188
- if (!cfg.refreshToken)
189
- throw new Error("wolt: not connected — run the owner login (account.requestEmailCode / account.requestSmsCode / account.redeemLink)");
190
- // Renewal runs under the store's update ownership, so parallel actions
191
- // coalesce onto one grant. Wolt rotates the refresh token on every grant, so
192
- // a race would persist one the provider has already replaced.
193
- return coordinatedAccessToken(ctx, async (current) => {
194
- const resp = await refreshGrant(current);
195
- const issued = pick(resp.access_token);
196
- if (!issued)
197
- throw new Error("wolt: token refresh returned no access_token — the refresh token has expired, re-run the owner login");
198
- const rotated = pick(resp.refresh_token);
199
- return {
200
- accessToken: issued,
201
- accessTokenExpiresAt: expiresAt(resp.expires_in),
202
- ...(rotated ? { refreshToken: rotated } : {}),
203
- };
204
- }, force);
73
+ function sessionError(error) {
74
+ if (!(error instanceof AuthError))
75
+ return error;
76
+ if (error.code === "invalid_credentials")
77
+ return new Error("wolt: not connected — run the owner login (account.requestEmailCode / account.requestSmsCode / account.redeemLink)");
78
+ if (error.code === "reconnect_required" ||
79
+ (error.code === "provider_rejected" &&
80
+ (error.status === 400 || error.status === 401)))
81
+ return new Error("wolt: the refresh token has expired — re-run the owner login");
82
+ return error;
205
83
  }
84
+ /** Wolt's signed APIs, by the target each is declared as. */
85
+ const TARGETS = {
86
+ [RESTAURANT]: "restaurant",
87
+ [CONSUMER]: "consumer",
88
+ };
89
+ /** A call as the mobile app, signed with the session's access token and renewed on demand. */
206
90
  export async function authed(ctx, host, path, opts = {}) {
207
- const token = await accessToken(ctx);
208
- const cfg = cfgOf(ctx);
209
- return http(host, path, {
210
- ...opts,
211
- web: false,
212
- headers: {
213
- ...clientHeaders(cfg),
214
- authorization: `Bearer ${token}`,
215
- ...(opts.headers ?? {}),
216
- },
217
- });
91
+ const target = Object.hasOwn(TARGETS, host) ? TARGETS[host] : undefined;
92
+ if (!target)
93
+ throw new AuthError("request_not_allowed");
94
+ const cfg = await ensureIdentity(ctx);
95
+ let res;
96
+ try {
97
+ res = await credentialRequest(ctx, woltCredential, {
98
+ target,
99
+ path: path.replace(/^\//, ""),
100
+ method: opts.method ?? "GET",
101
+ headers: clientHeaders(cfg),
102
+ ...(opts.body == null ? {} : { json: opts.body }),
103
+ });
104
+ }
105
+ catch (error) {
106
+ throw sessionError(error);
107
+ }
108
+ return answerOf(res.status, endpointOf(host, path), await res.text());
218
109
  }
@@ -0,0 +1,16 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * The store's consumer key and secret as a Basic pair, beneath the
4
+ * connection's own store URL. The store must be HTTPS.
5
+ */
6
+ export const woocommerceCredential = staticCredential({
7
+ id: "woocommerce",
8
+ auth: { kind: "basic" },
9
+ local: { username: "consumerKey", password: "consumerSecret" },
10
+ targets: (config) => ({
11
+ api: {
12
+ baseUrl: httpsBase(config.url, "wp-json/wc/v3/"),
13
+ methods: ["GET", "POST", "PUT", "DELETE"],
14
+ },
15
+ }),
16
+ });
@@ -1,40 +1,21 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- return {
4
- url: c.url.replace(/\/$/, ""),
5
- consumerKey: c.consumerKey,
6
- consumerSecret: c.consumerSecret,
7
- };
8
- }
9
- async function apiRequest(conn, method, endpoint, body, qs) {
10
- const url = new URL(`${conn.url}/wp-json/wc/v3${endpoint}`);
11
- if (qs) {
12
- for (const [k, v] of Object.entries(qs)) {
13
- if (v !== undefined && v !== null)
14
- url.searchParams.set(k, String(v));
15
- }
16
- }
17
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { woocommerceCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, woocommerceCredential, "woocommerce", {
5
+ target: "api",
6
+ path,
18
7
  method,
19
- headers: {
20
- Authorization: `Basic ${btoa(`${conn.consumerKey}:${conn.consumerSecret}`)}`,
21
- "Content-Type": "application/json",
22
- },
23
- };
24
- if (body && Object.keys(body).length > 0)
25
- init.body = JSON.stringify(body);
26
- const res = await fetch(url.toString(), init);
27
- if (!res.ok)
28
- throw new Error(`WooCommerce error ${res.status}: ${await res.text()}`);
29
- return res.json();
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
30
11
  }
31
- function registerCrud(rl, resource, plural, conn, createSchema) {
12
+ function registerCrud(rl, resource, plural, createSchema) {
32
13
  rl.registerAction(`${resource}.create`, {
33
14
  access: "write",
34
15
  description: `Create a ${resource}`,
35
16
  inputSchema: createSchema,
36
17
  async execute(input, ctx) {
37
- return apiRequest(conn(ctx), "POST", `/${plural}`, input);
18
+ return apiRequest(ctx, "POST", plural, input);
38
19
  },
39
20
  });
40
21
  rl.registerAction(`${resource}.get`, {
@@ -42,7 +23,7 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
42
23
  description: `Get a ${resource} by ID`,
43
24
  inputSchema: { id: { type: "string", required: true } },
44
25
  async execute(input, ctx) {
45
- return apiRequest(conn(ctx), "GET", `/${plural}/${input.id}`);
26
+ return apiRequest(ctx, "GET", `${plural}/${pathSegment(input.id)}`);
46
27
  },
47
28
  });
48
29
  rl.registerAction(`${resource}.list`, {
@@ -62,7 +43,7 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
62
43
  qs.search = p.search;
63
44
  if (p.status)
64
45
  qs.status = p.status;
65
- return apiRequest(conn(ctx), "GET", `/${plural}`, undefined, qs);
46
+ return apiRequest(ctx, "GET", plural, undefined, qs);
66
47
  },
67
48
  });
68
49
  rl.registerAction(`${resource}.update`, {
@@ -74,7 +55,7 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
74
55
  },
75
56
  async execute(input, ctx) {
76
57
  const p = input;
77
- return apiRequest(conn(ctx), "PUT", `/${plural}/${p.id}`, p.data);
58
+ return apiRequest(ctx, "PUT", `${plural}/${pathSegment(p.id)}`, p.data);
78
59
  },
79
60
  });
80
61
  rl.registerAction(`${resource}.delete`, {
@@ -82,13 +63,14 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
82
63
  description: `Delete a ${resource}`,
83
64
  inputSchema: { id: { type: "string", required: true } },
84
65
  async execute(input, ctx) {
85
- return apiRequest(conn(ctx), "DELETE", `/${plural}/${input.id}`, undefined, { force: "true" });
66
+ return apiRequest(ctx, "DELETE", `${plural}/${pathSegment(input.id)}`, undefined, { force: "true" });
86
67
  },
87
68
  });
88
69
  }
89
70
  export default function woocommerce(rl) {
90
71
  rl.setName("woocommerce");
91
72
  rl.setVersion("0.1.0");
73
+ rl.setCredential(woocommerceCredential);
92
74
  rl.setConnectionSchema({
93
75
  url: {
94
76
  type: "string",
@@ -109,7 +91,7 @@ export default function woocommerce(rl) {
109
91
  env: "WOOCOMMERCE_CONSUMER_SECRET",
110
92
  },
111
93
  });
112
- registerCrud(rl, "product", "products", getConn, {
94
+ registerCrud(rl, "product", "products", {
113
95
  name: { type: "string", required: true },
114
96
  type: {
115
97
  type: "string",
@@ -120,7 +102,7 @@ export default function woocommerce(rl) {
120
102
  description: { type: "string", required: false },
121
103
  sku: { type: "string", required: false },
122
104
  });
123
- registerCrud(rl, "order", "orders", getConn, {
105
+ registerCrud(rl, "order", "orders", {
124
106
  status: {
125
107
  type: "string",
126
108
  required: false,
@@ -134,7 +116,7 @@ export default function woocommerce(rl) {
134
116
  },
135
117
  payment_method: { type: "string", required: false },
136
118
  });
137
- registerCrud(rl, "customer", "customers", getConn, {
119
+ registerCrud(rl, "customer", "customers", {
138
120
  email: { type: "string", required: true },
139
121
  first_name: { type: "string", required: false },
140
122
  last_name: { type: "string", required: false },
@@ -0,0 +1,16 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * A user's application password as the Basic pair, on the connection's own
4
+ * site beneath /wp-json/wp/v2/.
5
+ */
6
+ export const wordpressCredential = staticCredential({
7
+ id: "wordpress",
8
+ auth: { kind: "basic" },
9
+ local: { username: "username", password: "password" },
10
+ targets: (config) => ({
11
+ api: {
12
+ baseUrl: httpsBase(config.url, "wp-json/wp/v2/"),
13
+ methods: ["GET", "POST", "DELETE"],
14
+ },
15
+ }),
16
+ });
@@ -1,35 +1,15 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- return {
4
- url: c.url.replace(/\/$/, ""),
5
- username: c.username,
6
- password: c.password,
7
- };
8
- }
9
- async function apiRequest(conn, method, endpoint, body, qs) {
10
- const url = new URL(`${conn.url}/wp-json/wp/v2${endpoint}`);
11
- if (qs) {
12
- for (const [k, v] of Object.entries(qs)) {
13
- if (v !== undefined && v !== null)
14
- url.searchParams.set(k, String(v));
15
- }
16
- }
17
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { wordpressCredential } from "./credentials.js";
3
+ async function apiRequest(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, wordpressCredential, "wordpress", {
5
+ target: "api",
6
+ path,
18
7
  method,
19
- headers: {
20
- Authorization: `Basic ${btoa(`${conn.username}:${conn.password}`)}`,
21
- "Content-Type": "application/json",
22
- Accept: "application/json",
23
- },
24
- };
25
- if (body && Object.keys(body).length > 0)
26
- init.body = JSON.stringify(body);
27
- const res = await fetch(url.toString(), init);
28
- if (!res.ok)
29
- throw new Error(`WordPress error ${res.status}: ${await res.text()}`);
30
- return res.json();
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
31
11
  }
32
- function registerContentCrud(rl, resource, plural, conn) {
12
+ function registerContentCrud(rl, resource, plural) {
33
13
  rl.registerAction(`${resource}.create`, {
34
14
  access: "write",
35
15
  description: `Create a ${resource}`,
@@ -44,7 +24,7 @@ function registerContentCrud(rl, resource, plural, conn) {
44
24
  slug: { type: "string", required: false },
45
25
  },
46
26
  async execute(input, ctx) {
47
- return apiRequest(conn(ctx), "POST", `/${plural}`, input);
27
+ return apiRequest(ctx, "POST", plural, input);
48
28
  },
49
29
  });
50
30
  rl.registerAction(`${resource}.get`, {
@@ -52,7 +32,7 @@ function registerContentCrud(rl, resource, plural, conn) {
52
32
  description: `Get a ${resource} by ID`,
53
33
  inputSchema: { id: { type: "string", required: true } },
54
34
  async execute(input, ctx) {
55
- return apiRequest(conn(ctx), "GET", `/${plural}/${input.id}`);
35
+ return apiRequest(ctx, "GET", `${plural}/${pathSegment(input.id)}`);
56
36
  },
57
37
  });
58
38
  rl.registerAction(`${resource}.list`, {
@@ -75,7 +55,7 @@ function registerContentCrud(rl, resource, plural, conn) {
75
55
  qs.status = p.status;
76
56
  if (p.orderby)
77
57
  qs.orderby = p.orderby;
78
- return apiRequest(conn(ctx), "GET", `/${plural}`, undefined, qs);
58
+ return apiRequest(ctx, "GET", plural, undefined, qs);
79
59
  },
80
60
  });
81
61
  rl.registerAction(`${resource}.update`, {
@@ -90,7 +70,7 @@ function registerContentCrud(rl, resource, plural, conn) {
90
70
  },
91
71
  async execute(input, ctx) {
92
72
  const { id, ...fields } = input;
93
- return apiRequest(conn(ctx), "POST", `/${plural}/${id}`, fields);
73
+ return apiRequest(ctx, "POST", `${plural}/${pathSegment(id)}`, fields);
94
74
  },
95
75
  });
96
76
  rl.registerAction(`${resource}.delete`, {
@@ -105,13 +85,14 @@ function registerContentCrud(rl, resource, plural, conn) {
105
85
  const qs = {};
106
86
  if (p.force)
107
87
  qs.force = "true";
108
- return apiRequest(conn(ctx), "DELETE", `/${plural}/${p.id}`, undefined, qs);
88
+ return apiRequest(ctx, "DELETE", `${plural}/${pathSegment(p.id)}`, undefined, qs);
109
89
  },
110
90
  });
111
91
  }
112
92
  export default function wordpress(rl) {
113
93
  rl.setName("wordpress");
114
94
  rl.setVersion("0.1.0");
95
+ rl.setCredential(wordpressCredential);
115
96
  rl.setConnectionSchema({
116
97
  url: {
117
98
  type: "string",
@@ -132,8 +113,8 @@ export default function wordpress(rl) {
132
113
  env: "WORDPRESS_PASSWORD",
133
114
  },
134
115
  });
135
- registerContentCrud(rl, "post", "posts", getConn);
136
- registerContentCrud(rl, "page", "pages", getConn);
116
+ registerContentCrud(rl, "post", "posts");
117
+ registerContentCrud(rl, "page", "pages");
137
118
  // ── User ────────────────────────────────────────────
138
119
  rl.registerAction("user.create", {
139
120
  access: "write",
@@ -145,7 +126,7 @@ export default function wordpress(rl) {
145
126
  name: { type: "string", required: false },
146
127
  },
147
128
  async execute(input, ctx) {
148
- return apiRequest(getConn(ctx), "POST", "/users", input);
129
+ return apiRequest(ctx, "POST", "users", input);
149
130
  },
150
131
  });
151
132
  rl.registerAction("user.get", {
@@ -153,7 +134,7 @@ export default function wordpress(rl) {
153
134
  description: "Get a user by ID",
154
135
  inputSchema: { id: { type: "string", required: true } },
155
136
  async execute(input, ctx) {
156
- return apiRequest(getConn(ctx), "GET", `/users/${input.id}`);
137
+ return apiRequest(ctx, "GET", `users/${pathSegment(input.id)}`);
157
138
  },
158
139
  });
159
140
  rl.registerAction("user.list", {
@@ -170,7 +151,7 @@ export default function wordpress(rl) {
170
151
  qs.per_page = p.limit;
171
152
  if (p.search)
172
153
  qs.search = p.search;
173
- return apiRequest(getConn(ctx), "GET", "/users", undefined, qs);
154
+ return apiRequest(ctx, "GET", "users", undefined, qs);
174
155
  },
175
156
  });
176
157
  rl.registerAction("user.update", {
@@ -184,7 +165,7 @@ export default function wordpress(rl) {
184
165
  },
185
166
  async execute(input, ctx) {
186
167
  const { id, ...fields } = input;
187
- return apiRequest(getConn(ctx), "POST", `/users/${id}`, fields);
168
+ return apiRequest(ctx, "POST", `users/${pathSegment(id)}`, fields);
188
169
  },
189
170
  });
190
171
  rl.registerAction("user.delete", {
@@ -198,7 +179,7 @@ export default function wordpress(rl) {
198
179
  },
199
180
  },
200
181
  async execute(input, ctx) {
201
- return apiRequest(getConn(ctx), "DELETE", "/users/me", undefined, {
182
+ return apiRequest(ctx, "DELETE", "users/me", undefined, {
202
183
  reassign: input.reassign,
203
184
  force: "true",
204
185
  });
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key, sent as a bearer to xAI's one API origin. */
3
+ export const xaiCredential = staticCredential({
4
+ id: "xai",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.x.ai/v1/",
10
+ methods: ["POST"],
11
+ },
12
+ },
13
+ });