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,18 @@
1
- const BASE = "https://api.twist.com/api/v3";
2
- async function api(token, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const init = {
1
+ import { credentialJson } from "../../_shared/credentials.js";
2
+ import { twistCredential } from "./credentials.js";
3
+ function api(ctx, method, endpoint, body, qs) {
4
+ return credentialJson(ctx, twistCredential, "twist", {
5
+ target: "api",
6
+ path: endpoint.replace(/^\//, ""),
11
7
  method,
12
- headers: {
13
- Authorization: `Bearer ${token}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body && Object.keys(body).length > 0)
18
- init.body = JSON.stringify(body);
19
- const res = await fetch(url.toString(), init);
20
- if (!res.ok)
21
- throw new Error(`Twist error ${res.status}: ${await res.text()}`);
22
- return res.json();
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
23
11
  }
24
12
  export default function twist(rl) {
25
13
  rl.setName("twist");
26
14
  rl.setVersion("0.1.0");
15
+ rl.setCredential(twistCredential);
27
16
  rl.setConnectionSchema({
28
17
  accessToken: {
29
18
  type: "string",
@@ -32,7 +21,6 @@ export default function twist(rl) {
32
21
  env: "TWIST_ACCESS_TOKEN",
33
22
  },
34
23
  });
35
- const t = (ctx) => ctx.connection.config.accessToken;
36
24
  // ── Channel ─────────────────────────────────────────
37
25
  rl.registerAction("channel.create", {
38
26
  access: "write",
@@ -42,7 +30,7 @@ export default function twist(rl) {
42
30
  name: { type: "string", required: true },
43
31
  },
44
32
  async execute(input, ctx) {
45
- return api(t(ctx), "POST", "/channels/add", {
33
+ return api(ctx, "POST", "/channels/add", {
46
34
  workspace_id: input.workspaceId,
47
35
  name: input.name,
48
36
  });
@@ -53,7 +41,7 @@ export default function twist(rl) {
53
41
  description: "Get a channel",
54
42
  inputSchema: { id: { type: "number", required: true } },
55
43
  async execute(input, ctx) {
56
- return api(t(ctx), "GET", "/channels/getone", undefined, {
44
+ return api(ctx, "GET", "/channels/getone", undefined, {
57
45
  id: input.id,
58
46
  });
59
47
  },
@@ -67,7 +55,7 @@ export default function twist(rl) {
67
55
  },
68
56
  async execute(input, ctx) {
69
57
  const p = input;
70
- const data = (await api(t(ctx), "GET", "/channels/get", undefined, {
58
+ const data = (await api(ctx, "GET", "/channels/get", undefined, {
71
59
  workspace_id: p.workspaceId,
72
60
  }));
73
61
  return p.limit ? data.slice(0, p.limit) : data;
@@ -82,7 +70,7 @@ export default function twist(rl) {
82
70
  description: { type: "string", required: false },
83
71
  },
84
72
  async execute(input, ctx) {
85
- return api(t(ctx), "POST", "/channels/update", input);
73
+ return api(ctx, "POST", "/channels/update", input);
86
74
  },
87
75
  });
88
76
  rl.registerAction("channel.delete", {
@@ -90,7 +78,7 @@ export default function twist(rl) {
90
78
  description: "Delete a channel",
91
79
  inputSchema: { id: { type: "number", required: true } },
92
80
  async execute(input, ctx) {
93
- return api(t(ctx), "POST", "/channels/remove", undefined, {
81
+ return api(ctx, "POST", "/channels/remove", undefined, {
94
82
  id: input.id,
95
83
  });
96
84
  },
@@ -100,7 +88,7 @@ export default function twist(rl) {
100
88
  description: "Archive a channel",
101
89
  inputSchema: { id: { type: "number", required: true } },
102
90
  async execute(input, ctx) {
103
- return api(t(ctx), "POST", "/channels/archive", undefined, {
91
+ return api(ctx, "POST", "/channels/archive", undefined, {
104
92
  id: input.id,
105
93
  });
106
94
  },
@@ -110,7 +98,7 @@ export default function twist(rl) {
110
98
  description: "Unarchive a channel",
111
99
  inputSchema: { id: { type: "number", required: true } },
112
100
  async execute(input, ctx) {
113
- return api(t(ctx), "POST", "/channels/unarchive", undefined, {
101
+ return api(ctx, "POST", "/channels/unarchive", undefined, {
114
102
  id: input.id,
115
103
  });
116
104
  },
@@ -126,7 +114,7 @@ export default function twist(rl) {
126
114
  },
127
115
  async execute(input, ctx) {
128
116
  const p = input;
129
- return api(t(ctx), "POST", "/threads/add", {
117
+ return api(ctx, "POST", "/threads/add", {
130
118
  channel_id: p.channelId,
131
119
  title: p.title,
132
120
  content: p.content,
@@ -138,7 +126,7 @@ export default function twist(rl) {
138
126
  description: "Get a thread",
139
127
  inputSchema: { id: { type: "number", required: true } },
140
128
  async execute(input, ctx) {
141
- return api(t(ctx), "GET", "/threads/getone", undefined, {
129
+ return api(ctx, "GET", "/threads/getone", undefined, {
142
130
  id: input.id,
143
131
  });
144
132
  },
@@ -155,7 +143,7 @@ export default function twist(rl) {
155
143
  const qs = { channel_id: p.channelId };
156
144
  if (p.limit)
157
145
  qs.limit = p.limit;
158
- return api(t(ctx), "GET", "/threads/get", undefined, qs);
146
+ return api(ctx, "GET", "/threads/get", undefined, qs);
159
147
  },
160
148
  });
161
149
  rl.registerAction("thread.update", {
@@ -167,7 +155,7 @@ export default function twist(rl) {
167
155
  content: { type: "string", required: false },
168
156
  },
169
157
  async execute(input, ctx) {
170
- return api(t(ctx), "POST", "/threads/update", input);
158
+ return api(ctx, "POST", "/threads/update", input);
171
159
  },
172
160
  });
173
161
  rl.registerAction("thread.delete", {
@@ -175,7 +163,7 @@ export default function twist(rl) {
175
163
  description: "Delete a thread",
176
164
  inputSchema: { id: { type: "number", required: true } },
177
165
  async execute(input, ctx) {
178
- return api(t(ctx), "POST", "/threads/remove", undefined, {
166
+ return api(ctx, "POST", "/threads/remove", undefined, {
179
167
  id: input.id,
180
168
  });
181
169
  },
@@ -190,7 +178,7 @@ export default function twist(rl) {
190
178
  },
191
179
  async execute(input, ctx) {
192
180
  const p = input;
193
- return api(t(ctx), "POST", "/comments/add", {
181
+ return api(ctx, "POST", "/comments/add", {
194
182
  thread_id: p.threadId,
195
183
  content: p.content,
196
184
  });
@@ -201,7 +189,7 @@ export default function twist(rl) {
201
189
  description: "Get a comment",
202
190
  inputSchema: { id: { type: "number", required: true } },
203
191
  async execute(input, ctx) {
204
- const data = (await api(t(ctx), "GET", "/comments/getone", undefined, {
192
+ const data = (await api(ctx, "GET", "/comments/getone", undefined, {
205
193
  id: input.id,
206
194
  }));
207
195
  return data.comment ?? data;
@@ -219,7 +207,7 @@ export default function twist(rl) {
219
207
  const qs = { thread_id: p.threadId };
220
208
  if (p.limit)
221
209
  qs.limit = p.limit;
222
- return api(t(ctx), "GET", "/comments/get", undefined, qs);
210
+ return api(ctx, "GET", "/comments/get", undefined, qs);
223
211
  },
224
212
  });
225
213
  rl.registerAction("comment.update", {
@@ -230,7 +218,7 @@ export default function twist(rl) {
230
218
  content: { type: "string", required: false },
231
219
  },
232
220
  async execute(input, ctx) {
233
- return api(t(ctx), "POST", "/comments/update", input);
221
+ return api(ctx, "POST", "/comments/update", input);
234
222
  },
235
223
  });
236
224
  rl.registerAction("comment.delete", {
@@ -238,7 +226,7 @@ export default function twist(rl) {
238
226
  description: "Delete a comment",
239
227
  inputSchema: { id: { type: "number", required: true } },
240
228
  async execute(input, ctx) {
241
- return api(t(ctx), "POST", "/comments/remove", undefined, {
229
+ return api(ctx, "POST", "/comments/remove", undefined, {
242
230
  id: input.id,
243
231
  });
244
232
  },
@@ -254,7 +242,7 @@ export default function twist(rl) {
254
242
  },
255
243
  async execute(input, ctx) {
256
244
  const p = input;
257
- return api(t(ctx), "POST", "/conversation_messages/add", {
245
+ return api(ctx, "POST", "/conversation_messages/add", {
258
246
  workspace_id: p.workspaceId,
259
247
  conversation_id: p.conversationId,
260
248
  content: p.content,
@@ -266,7 +254,7 @@ export default function twist(rl) {
266
254
  description: "Get a conversation message",
267
255
  inputSchema: { id: { type: "number", required: true } },
268
256
  async execute(input, ctx) {
269
- return api(t(ctx), "GET", "/conversation_messages/getone", undefined, {
257
+ return api(ctx, "GET", "/conversation_messages/getone", undefined, {
270
258
  id: input.id,
271
259
  });
272
260
  },
@@ -276,7 +264,7 @@ export default function twist(rl) {
276
264
  description: "List messages in a conversation",
277
265
  inputSchema: { conversationId: { type: "number", required: true } },
278
266
  async execute(input, ctx) {
279
- return api(t(ctx), "GET", "/conversation_messages/get", undefined, {
267
+ return api(ctx, "GET", "/conversation_messages/get", undefined, {
280
268
  conversation_id: input.conversationId,
281
269
  });
282
270
  },
@@ -289,7 +277,7 @@ export default function twist(rl) {
289
277
  content: { type: "string", required: false },
290
278
  },
291
279
  async execute(input, ctx) {
292
- return api(t(ctx), "POST", "/conversation_messages/update", input);
280
+ return api(ctx, "POST", "/conversation_messages/update", input);
293
281
  },
294
282
  });
295
283
  rl.registerAction("messageConversation.delete", {
@@ -297,7 +285,7 @@ export default function twist(rl) {
297
285
  description: "Delete a conversation message",
298
286
  inputSchema: { id: { type: "number", required: true } },
299
287
  async execute(input, ctx) {
300
- return api(t(ctx), "POST", "/conversation_messages/remove", undefined, {
288
+ return api(ctx, "POST", "/conversation_messages/remove", undefined, {
301
289
  id: input.id,
302
290
  });
303
291
  },
@@ -0,0 +1,16 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An OAuth2 token (app-only or user-context), sent as a bearer to the
4
+ * Twitter/X v2 API origin.
5
+ */
6
+ export const twitterCredential = staticCredential({
7
+ id: "twitter",
8
+ auth: { kind: "bearer" },
9
+ local: { secret: "bearerToken" },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://api.twitter.com/2/",
13
+ methods: ["GET", "POST", "DELETE"],
14
+ },
15
+ },
16
+ });
@@ -1,35 +1,23 @@
1
- const BASE = "https://api.twitter.com/2";
2
- async function api(token, method, endpoint, body, qs, fullOutput = false) {
3
- const url = new URL(`${BASE}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { twitterCredential } from "./credentials.js";
3
+ async function api(ctx, method, path, body, qs, fullOutput = false) {
4
+ const json = (await credentialJson(ctx, twitterCredential, "twitter", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- Authorization: `Bearer ${token}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body && Object.keys(body).length > 0)
18
- init.body = JSON.stringify(body);
19
- const res = await fetch(url.toString(), init);
20
- if (!res.ok)
21
- throw new Error(`Twitter error ${res.status}: ${await res.text()}`);
22
- const json = (await res.json());
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ }));
23
11
  return fullOutput ? json : json.data;
24
12
  }
25
- async function paginate(token, endpoint, qs = {}, limit) {
13
+ async function paginate(ctx, path, qs = {}, limit) {
26
14
  const results = [];
27
15
  let nextToken;
28
16
  qs.max_results = limit && limit < 100 ? limit : 10;
29
17
  do {
30
18
  if (nextToken)
31
19
  qs.next_token = nextToken;
32
- const res = (await api(token, "GET", endpoint, undefined, { ...qs }, true));
20
+ const res = (await api(ctx, "GET", path, undefined, { ...qs }, true));
33
21
  const data = res.data;
34
22
  if (data)
35
23
  results.push(...data);
@@ -43,6 +31,7 @@ async function paginate(token, endpoint, qs = {}, limit) {
43
31
  export default function twitter(rl) {
44
32
  rl.setName("twitter");
45
33
  rl.setVersion("0.1.0");
34
+ rl.setCredential(twitterCredential);
46
35
  rl.setConnectionSchema({
47
36
  bearerToken: {
48
37
  type: "string",
@@ -51,7 +40,6 @@ export default function twitter(rl) {
51
40
  env: "TWITTER_BEARER_TOKEN",
52
41
  },
53
42
  });
54
- const t = (ctx) => ctx.connection.config.bearerToken;
55
43
  // ── Tweet ───────────────────────────────────────────
56
44
  rl.registerAction("tweet.create", {
57
45
  access: "write",
@@ -82,7 +70,7 @@ export default function twitter(rl) {
82
70
  body.media = { media_ids: [p.mediaId] };
83
71
  if (p.placeId)
84
72
  body.geo = { place_id: p.placeId };
85
- return api(t(ctx), "POST", "/tweets", body);
73
+ return api(ctx, "POST", "tweets", body);
86
74
  },
87
75
  });
88
76
  rl.registerAction("tweet.delete", {
@@ -90,7 +78,7 @@ export default function twitter(rl) {
90
78
  description: "Delete a tweet",
91
79
  inputSchema: { id: { type: "string", required: true } },
92
80
  async execute(input, ctx) {
93
- return api(t(ctx), "DELETE", `/tweets/${input.id}`);
81
+ return api(ctx, "DELETE", `tweets/${pathSegment(input.id)}`);
94
82
  },
95
83
  });
96
84
  rl.registerAction("tweet.like", {
@@ -98,8 +86,8 @@ export default function twitter(rl) {
98
86
  description: "Like a tweet (requires user context)",
99
87
  inputSchema: { tweetId: { type: "string", required: true } },
100
88
  async execute(input, ctx) {
101
- const user = (await api(t(ctx), "GET", "/users/me"));
102
- return api(t(ctx), "POST", `/users/${user.id}/likes`, {
89
+ const user = (await api(ctx, "GET", "users/me"));
90
+ return api(ctx, "POST", `users/${pathSegment(user.id)}/likes`, {
103
91
  tweet_id: input.tweetId,
104
92
  });
105
93
  },
@@ -109,8 +97,8 @@ export default function twitter(rl) {
109
97
  description: "Retweet a tweet (requires user context)",
110
98
  inputSchema: { tweetId: { type: "string", required: true } },
111
99
  async execute(input, ctx) {
112
- const user = (await api(t(ctx), "GET", "/users/me"));
113
- return api(t(ctx), "POST", `/users/${user.id}/retweets`, {
100
+ const user = (await api(ctx, "GET", "users/me"));
101
+ return api(ctx, "POST", `users/${pathSegment(user.id)}/retweets`, {
114
102
  tweet_id: input.tweetId,
115
103
  });
116
104
  },
@@ -155,9 +143,9 @@ export default function twitter(rl) {
155
143
  qs["tweet.fields"] = p.tweetFields;
156
144
  const limit = p.limit;
157
145
  if (limit) {
158
- return paginate(t(ctx), "/tweets/search/recent", qs, limit);
146
+ return paginate(ctx, "tweets/search/recent", qs, limit);
159
147
  }
160
- return paginate(t(ctx), "/tweets/search/recent", qs);
148
+ return paginate(ctx, "tweets/search/recent", qs);
161
149
  },
162
150
  });
163
151
  // ── User ────────────────────────────────────────────
@@ -180,13 +168,13 @@ export default function twitter(rl) {
180
168
  async execute(input, ctx) {
181
169
  const p = input;
182
170
  if (p.me)
183
- return api(t(ctx), "GET", "/users/me");
171
+ return api(ctx, "GET", "users/me");
184
172
  if (p.username) {
185
173
  const name = p.username.replace(/^@/, "");
186
- return api(t(ctx), "GET", `/users/by/username/${name}`);
174
+ return api(ctx, "GET", `users/by/username/${pathSegment(name)}`);
187
175
  }
188
176
  if (p.id)
189
- return api(t(ctx), "GET", `/users/${p.id}`);
177
+ return api(ctx, "GET", `users/${pathSegment(p.id)}`);
190
178
  throw new Error("Provide username, id, or set me=true");
191
179
  },
192
180
  });
@@ -200,7 +188,7 @@ export default function twitter(rl) {
200
188
  },
201
189
  async execute(input, ctx) {
202
190
  const p = input;
203
- return api(t(ctx), "POST", `/lists/${p.listId}/members`, {
191
+ return api(ctx, "POST", `lists/${pathSegment(p.listId)}/members`, {
204
192
  user_id: p.userId,
205
193
  });
206
194
  },
@@ -223,7 +211,7 @@ export default function twitter(rl) {
223
211
  const body = { text: p.text };
224
212
  if (p.mediaId)
225
213
  body.attachments = [{ media_id: p.mediaId }];
226
- return api(t(ctx), "POST", `/dm_conversations/with/${p.userId}/messages`, body);
214
+ return api(ctx, "POST", `dm_conversations/with/${pathSegment(p.userId)}/messages`, body);
227
215
  },
228
216
  });
229
217
  }
@@ -0,0 +1,28 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ const DEFAULT_BASE = "https://api.typesafe.ai";
3
+ /**
4
+ * A TypeSafe API key, sent as a bearer to the configured base's /v1/
5
+ * endpoints. The base URL is public config, defaults to the hosted API,
6
+ * and must be HTTPS.
7
+ */
8
+ export const typesafeCredential = staticCredential({
9
+ id: "typesafe",
10
+ auth: { kind: "bearer" },
11
+ local: { secret: "apiKey" },
12
+ targets: (config) => {
13
+ const raw = config.baseUrl;
14
+ const base = typeof raw === "string" && raw.trim() ? raw.trim() : DEFAULT_BASE;
15
+ return {
16
+ api: {
17
+ baseUrl: httpsBase(base, "v1/"),
18
+ methods: ["GET", "POST"],
19
+ },
20
+ };
21
+ },
22
+ probe: {
23
+ target: "api",
24
+ path: "models",
25
+ method: "GET",
26
+ acceptedStatuses: [200],
27
+ },
28
+ });
@@ -1,4 +1,5 @@
1
1
  import * as t from "typebox";
2
+ import { typesafeCredential } from "./credentials.js";
2
3
  import { GUIDE, GUIDE_TOPICS } from "./guide.js";
3
4
  import { choiceRubric, noulRubric, questionsSchema, scoreRubric, toWireQuestion, toWireQuestions, } from "./questions.js";
4
5
  import { DEFAULT_BASE, DEFAULT_MODEL, evaluate, modelSchema, request, resolveModel, STRICT, stateSchema, } from "./shared.js";
@@ -25,6 +26,7 @@ const USE_WHEN = "Reach for it whenever a bounded decision is currently costing
25
26
  export default function typesafe(rl) {
26
27
  rl.setName("typesafe");
27
28
  rl.setVersion("0.1.0");
29
+ rl.setCredential(typesafeCredential);
28
30
  rl.setConnectionSchema(t.Object({
29
31
  apiKey: t.String({
30
32
  env: "TYPESAFE_API_KEY",
@@ -137,7 +139,7 @@ export default function typesafe(rl) {
137
139
  "Versioned ids such as 'jev-1.13.0' are accepted whether or not they appear here.",
138
140
  inputSchema: t.Object({}, STRICT),
139
141
  async execute(_input, ctx) {
140
- const body = await request(ctx, "/v1/models");
142
+ const body = await request(ctx, "models");
141
143
  if (!Array.isArray(body.models)) {
142
144
  throw new Error("TypeSafe returned a response with no models list.");
143
145
  }
@@ -1,4 +1,6 @@
1
1
  import * as t from "typebox";
2
+ import { credentialRequest } from "../../_shared/credentials.js";
3
+ import { typesafeCredential } from "./credentials.js";
2
4
  export const STRICT = { additionalProperties: false };
3
5
  export const DEFAULT_BASE = "https://api.typesafe.ai";
4
6
  export const DEFAULT_MODEL = "jev-latest";
@@ -19,18 +21,6 @@ const CHARS_PER_TOKEN = 4;
19
21
  function config(ctx) {
20
22
  return ctx.connection?.config ?? {};
21
23
  }
22
- function apiKey(ctx) {
23
- const key = config(ctx).apiKey;
24
- if (typeof key !== "string" || !key.trim()) {
25
- throw new Error("Missing TYPESAFE_API_KEY. Create a key at https://console.typesafe.ai/settings/keys and store it as a secret.");
26
- }
27
- return key.trim();
28
- }
29
- function baseUrl(ctx) {
30
- const raw = config(ctx).baseUrl;
31
- const base = typeof raw === "string" && raw.trim() ? raw.trim() : DEFAULT_BASE;
32
- return base.replace(/\/+$/, "");
33
- }
34
24
  export function resolveModel(ctx, override) {
35
25
  if (typeof override === "string" && override.trim())
36
26
  return override.trim();
@@ -63,39 +53,36 @@ function retryDelayMs(response, attempt) {
63
53
  }
64
54
  return Math.min(250 * 2 ** attempt, 8_000);
65
55
  }
66
- function explain(status, body) {
67
- const detail = body.slice(0, 500);
56
+ /** By status alone: provider error text can echo request data and is dropped. */
57
+ function explain(status) {
68
58
  switch (status) {
69
59
  case 401:
70
- return `TypeSafe 401: the API key was rejected. ${detail}`;
60
+ return "TypeSafe 401: the API key was rejected.";
71
61
  case 422:
72
- return `TypeSafe 422: the request body failed validation — a missing field or a malformed question. ${detail}`;
62
+ return "TypeSafe 422: the request body failed validation — a missing field or a malformed question.";
73
63
  case 429:
74
- return `TypeSafe 429: rate limit exceeded (250k tokens/sec, 1,200 req/min). Raise the connection's maxRetries or slow the caller. ${detail}`;
64
+ return "TypeSafe 429: rate limit exceeded (250k tokens/sec, 1,200 req/min). Raise the connection's maxRetries or slow the caller.";
75
65
  case 503:
76
- return `TypeSafe 503: the model is unavailable. Transient — retry, and contact TypeSafe if it persists. ${detail}`;
66
+ return "TypeSafe 503: the model is unavailable. Transient — retry, and contact TypeSafe if it persists.";
77
67
  case 529:
78
- return `TypeSafe 529: the service is overloaded. Retry after a short delay. ${detail}`;
68
+ return "TypeSafe 529: the service is overloaded. Retry after a short delay.";
79
69
  default:
80
70
  return status >= 500
81
- ? `TypeSafe ${status}: the service failed this request. Transient — retry after a short delay. ${detail}`
82
- : `TypeSafe ${status}: ${detail}`;
71
+ ? `TypeSafe ${status}: the service failed this request. Transient — retry after a short delay.`
72
+ : `TypeSafe ${status}: request failed.`;
83
73
  }
84
74
  }
85
75
  async function sleep(ms) {
86
76
  await new Promise((resolve) => setTimeout(resolve, ms));
87
77
  }
88
- export async function request(ctx, path, init = {}) {
89
- const url = `${baseUrl(ctx)}${path}`;
90
- const headers = new Headers(init.headers);
91
- headers.set("authorization", `Bearer ${apiKey(ctx)}`);
92
- headers.set("accept", "application/json");
93
- if (init.body && !headers.has("content-type")) {
94
- headers.set("content-type", "application/json");
95
- }
78
+ export async function request(ctx, path, json) {
96
79
  const attempts = maxRetries(ctx);
97
80
  for (let attempt = 0;; attempt++) {
98
- const response = await fetch(url, { ...init, headers });
81
+ const response = await credentialRequest(ctx, typesafeCredential, {
82
+ target: "api",
83
+ path,
84
+ ...(json !== undefined ? { method: "POST", json } : {}),
85
+ });
99
86
  if (response.ok) {
100
87
  const text = await response.text();
101
88
  if (!text)
@@ -104,14 +91,14 @@ export async function request(ctx, path, init = {}) {
104
91
  return JSON.parse(text);
105
92
  }
106
93
  catch {
107
- throw new Error(`TypeSafe returned a non-JSON body: ${text.slice(0, 200)}`);
94
+ throw new Error("TypeSafe returned a non-JSON body.");
108
95
  }
109
96
  }
110
97
  if (retryable(response.status) && attempt < attempts) {
111
98
  await sleep(retryDelayMs(response, attempt));
112
99
  continue;
113
100
  }
114
- throw new Error(explain(response.status, await response.text()));
101
+ throw new Error(explain(response.status));
115
102
  }
116
103
  }
117
104
  /** Serialized length, measuring exactly what the request body will carry. */
@@ -142,9 +129,10 @@ export async function evaluate(ctx, state, questions, model) {
142
129
  throw new Error("At least one question is required.");
143
130
  }
144
131
  assertWithinContext(state, questions);
145
- const body = await request(ctx, "/v1/systemone", {
146
- method: "POST",
147
- body: JSON.stringify({ state, model, questions }),
132
+ const body = await request(ctx, "systemone", {
133
+ state,
134
+ model,
135
+ questions,
148
136
  });
149
137
  if (!body || typeof body.answers !== "object" || body.answers === null) {
150
138
  throw new Error("TypeSafe returned a response with no answers map.");
@@ -0,0 +1,21 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API ID, sent as the api-auth-id header, and an API key that signs
4
+ * the query of every request: the transport sends its HMAC-SHA256 as
5
+ * api-auth-signature and never the key itself.
6
+ */
7
+ export const unleashedSoftwareCredential = staticCredential({
8
+ id: "unleashedSoftware",
9
+ auth: {
10
+ kind: "static",
11
+ parts: ["apiId", "apiKey"],
12
+ placements: [
13
+ { in: "header", part: "apiId", name: "api-auth-id" },
14
+ { in: "querySignature", part: "apiKey", name: "api-auth-signature" },
15
+ ],
16
+ },
17
+ local: { apiId: "apiId", apiKey: "apiKey" },
18
+ targets: {
19
+ api: { baseUrl: "https://api.unleashedsoftware.com/", methods: ["GET"] },
20
+ },
21
+ });