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.
- package/dist/auth/oauth2.d.ts +7 -1
- package/dist/auth/oauth2.js +10 -0
- package/dist/auth/token.d.ts +1 -0
- package/dist/auth/token.js +19 -1
- package/dist/auth/types.d.ts +22 -1
- package/dist/core/engine.d.ts +7 -0
- package/dist/core/engine.js +9 -0
- package/dist/credentials/policy.d.ts +53 -1
- package/dist/credentials/policy.js +146 -6
- package/dist/credentials/registry.d.ts +9 -0
- package/dist/credentials/registry.js +179 -22
- package/dist/credentials/transport.d.ts +48 -2
- package/dist/credentials/transport.js +248 -70
- package/dist/credentials/types.d.ts +167 -10
- package/dist/index.d.ts +5 -5
- package/dist/index.js +2 -2
- package/dist/plugin/api.d.ts +7 -0
- package/dist/plugin/api.js +7 -0
- package/dist/plugin/types.d.ts +12 -0
- package/dist/plugins/_shared/credentialAdapter.js +79 -15
- package/dist/plugins/_shared/credentials.js +389 -0
- package/dist/plugins/_shared/googleAuth.js +9 -40
- package/dist/plugins/_shared/googleCredentials.js +28 -7
- package/dist/plugins/_shared/microsoftAuth.js +13 -44
- package/dist/plugins/_shared/microsoftCredentials.js +30 -8
- package/dist/plugins/_shared/provider.js +2 -14
- package/dist/plugins/_shared/shiftCloud.js +22 -34
- package/dist/plugins/_shared/shiftCredentials.js +83 -0
- package/dist/plugins/_shared/shiftUpload.js +1 -1
- package/dist/plugins/actionNetwork/src/credentials.js +14 -0
- package/dist/plugins/actionNetwork/src/index.js +39 -50
- package/dist/plugins/activeCampaign/src/credentials.js +22 -0
- package/dist/plugins/activeCampaign/src/index.js +61 -132
- package/dist/plugins/adalo/src/credentials.js +16 -0
- package/dist/plugins/adalo/src/index.js +19 -43
- package/dist/plugins/affinity/src/credentials.js +19 -0
- package/dist/plugins/affinity/src/index.js +29 -54
- package/dist/plugins/agileCrm/src/credentials.js +16 -0
- package/dist/plugins/agileCrm/src/index.js +46 -112
- package/dist/plugins/airtable/src/credentials.js +19 -0
- package/dist/plugins/airtable/src/index.js +37 -50
- package/dist/plugins/airtop/src/credentials.js +20 -0
- package/dist/plugins/airtop/src/index.js +51 -75
- package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
- package/dist/plugins/apiTemplateIo/src/index.js +14 -31
- package/dist/plugins/asana/src/credentials.js +19 -0
- package/dist/plugins/asana/src/index.js +51 -72
- package/dist/plugins/autopilot/src/credentials.js +19 -0
- package/dist/plugins/autopilot/src/index.js +38 -45
- package/dist/plugins/bambooHr/src/credentials.js +16 -0
- package/dist/plugins/bambooHr/src/index.js +41 -67
- package/dist/plugins/bannerbear/src/credentials.js +19 -0
- package/dist/plugins/bannerbear/src/index.js +15 -27
- package/dist/plugins/baserow/src/credentials.js +17 -0
- package/dist/plugins/baserow/src/index.js +23 -49
- package/dist/plugins/beeminder/src/credentials.js +19 -0
- package/dist/plugins/beeminder/src/index.js +32 -54
- package/dist/plugins/bitly/src/credentials.js +19 -0
- package/dist/plugins/bitly/src/index.js +12 -26
- package/dist/plugins/bitwarden/src/credentials.js +62 -0
- package/dist/plugins/bitwarden/src/index.js +34 -80
- package/dist/plugins/box/src/credentials.js +19 -0
- package/dist/plugins/box/src/index.js +24 -49
- package/dist/plugins/brandfetch/src/credentials.js +13 -0
- package/dist/plugins/brandfetch/src/index.js +12 -17
- package/dist/plugins/brevo/src/credentials.js +19 -0
- package/dist/plugins/brevo/src/index.js +30 -51
- package/dist/plugins/bubble/src/credentials.js +28 -0
- package/dist/plugins/bubble/src/index.js +29 -65
- package/dist/plugins/chargebee/src/credentials.js +16 -0
- package/dist/plugins/chargebee/src/index.js +15 -45
- package/dist/plugins/circleci/src/credentials.js +19 -0
- package/dist/plugins/circleci/src/index.js +19 -39
- package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
- package/dist/plugins/ciscoWebex/src/index.js +43 -61
- package/dist/plugins/clearbit/src/credentials.js +22 -0
- package/dist/plugins/clearbit/src/index.js +11 -21
- package/dist/plugins/clickup/src/credentials.js +19 -0
- package/dist/plugins/clickup/src/index.js +85 -117
- package/dist/plugins/clockify/src/credentials.js +19 -0
- package/dist/plugins/clockify/src/index.js +46 -61
- package/dist/plugins/cloudflare/src/credentials.js +19 -0
- package/dist/plugins/cloudflare/src/index.js +19 -34
- package/dist/plugins/cockpit/src/credentials.js +17 -0
- package/dist/plugins/cockpit/src/index.js +18 -31
- package/dist/plugins/coda/src/credentials.js +19 -0
- package/dist/plugins/coda/src/index.js +33 -50
- package/dist/plugins/coingecko/src/credentials.js +20 -0
- package/dist/plugins/coingecko/src/index.js +24 -34
- package/dist/plugins/contentful/src/credentials.js +26 -0
- package/dist/plugins/contentful/src/index.js +19 -40
- package/dist/plugins/convertkit/src/credentials.js +26 -0
- package/dist/plugins/convertkit/src/index.js +27 -45
- package/dist/plugins/copper/src/credentials.js +17 -0
- package/dist/plugins/copper/src/index.js +25 -47
- package/dist/plugins/cortex/src/credentials.js +28 -0
- package/dist/plugins/cortex/src/index.js +26 -49
- package/dist/plugins/currents/src/credentials.js +19 -0
- package/dist/plugins/currents/src/index.js +46 -59
- package/dist/plugins/customerIo/src/credentials.js +52 -0
- package/dist/plugins/customerIo/src/index.js +30 -58
- package/dist/plugins/databricks/src/credentials.js +13 -0
- package/dist/plugins/databricks/src/index.js +51 -103
- package/dist/plugins/deepl/src/credentials.js +19 -0
- package/dist/plugins/deepl/src/index.js +13 -39
- package/dist/plugins/demio/src/credentials.js +26 -0
- package/dist/plugins/demio/src/index.js +17 -41
- package/dist/plugins/dhl/src/credentials.js +13 -0
- package/dist/plugins/dhl/src/index.js +8 -19
- package/dist/plugins/discord/src/credentials.js +19 -0
- package/dist/plugins/discord/src/index.js +30 -58
- package/dist/plugins/discourse/src/credentials.js +18 -0
- package/dist/plugins/discourse/src/index.js +36 -53
- package/dist/plugins/disqus/src/credentials.js +13 -0
- package/dist/plugins/disqus/src/index.js +14 -32
- package/dist/plugins/drift/src/credentials.js +13 -0
- package/dist/plugins/drift/src/index.js +16 -26
- package/dist/plugins/dropbox/src/credentials.js +13 -0
- package/dist/plugins/dropbox/src/index.js +23 -30
- package/dist/plugins/dropcontact/src/credentials.js +13 -0
- package/dist/plugins/dropcontact/src/index.js +13 -18
- package/dist/plugins/egoi/src/credentials.js +19 -0
- package/dist/plugins/egoi/src/index.js +23 -38
- package/dist/plugins/elasticsearch/src/credentials.js +18 -0
- package/dist/plugins/elasticsearch/src/index.js +27 -48
- package/dist/plugins/elevenlabs/src/credentials.js +30 -0
- package/dist/plugins/elevenlabs/src/index.js +4 -1
- package/dist/plugins/elevenlabs/src/schemas.js +2 -1
- package/dist/plugins/elevenlabs/src/shared.js +74 -35
- package/dist/plugins/elevenlabs/src/workflows.js +2 -2
- package/dist/plugins/emelia/src/credentials.js +14 -0
- package/dist/plugins/emelia/src/index.js +19 -23
- package/dist/plugins/erpnext/src/credentials.js +27 -0
- package/dist/plugins/erpnext/src/index.js +21 -42
- package/dist/plugins/facebookGraph/src/credentials.js +20 -0
- package/dist/plugins/facebookGraph/src/index.js +39 -37
- package/dist/plugins/fal/src/credentials.js +14 -0
- package/dist/plugins/fal/src/index.js +4 -2
- package/dist/plugins/fal/src/shared.js +58 -63
- package/dist/plugins/freshdesk/src/credentials.js +20 -0
- package/dist/plugins/freshdesk/src/index.js +25 -46
- package/dist/plugins/freshservice/src/credentials.js +16 -0
- package/dist/plugins/freshservice/src/index.js +37 -58
- package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
- package/dist/plugins/freshworksCrm/src/index.js +20 -39
- package/dist/plugins/getresponse/src/credentials.js +22 -0
- package/dist/plugins/getresponse/src/index.js +20 -32
- package/dist/plugins/gett/src/credentials.js +64 -0
- package/dist/plugins/gett/src/index.js +11 -6
- package/dist/plugins/gett/src/login.js +24 -0
- package/dist/plugins/gett/src/session.js +15 -38
- package/dist/plugins/gett/src/shared.js +41 -84
- package/dist/plugins/ghost/src/credentials.js +36 -0
- package/dist/plugins/ghost/src/index.js +18 -59
- package/dist/plugins/github/src/credentials.js +18 -0
- package/dist/plugins/github/src/index.js +55 -78
- package/dist/plugins/gitlab/src/credentials.js +24 -0
- package/dist/plugins/gitlab/src/index.js +29 -48
- package/dist/plugins/gmail/src/index.js +26 -24
- package/dist/plugins/gong/src/credentials.js +16 -0
- package/dist/plugins/gong/src/index.js +16 -32
- package/dist/plugins/googleAppsScript/src/index.js +108 -42
- package/dist/plugins/googleCalendar/src/index.js +15 -13
- package/dist/plugins/googleContacts/src/index.js +12 -9
- package/dist/plugins/googleDocs/src/index.js +2 -0
- package/dist/plugins/googleDocs/src/shared.js +2 -1
- package/dist/plugins/googleDrive/src/index.js +50 -53
- package/dist/plugins/googleImage/src/credentials.js +14 -0
- package/dist/plugins/googleImage/src/index.js +14 -25
- package/dist/plugins/googleSheets/src/index.js +26 -27
- package/dist/plugins/googleSlides/src/index.js +6 -4
- package/dist/plugins/googleTasks/src/index.js +13 -11
- package/dist/plugins/gotify/src/credentials.js +32 -0
- package/dist/plugins/gotify/src/index.js +14 -36
- package/dist/plugins/gotowebinar/src/credentials.js +13 -0
- package/dist/plugins/gotowebinar/src/index.js +52 -69
- package/dist/plugins/grafana/src/credentials.js +16 -0
- package/dist/plugins/grafana/src/index.js +34 -53
- package/dist/plugins/graphql/src/credentials.js +42 -0
- package/dist/plugins/graphql/src/index.js +21 -46
- package/dist/plugins/grist/src/credentials.js +30 -0
- package/dist/plugins/grist/src/index.js +14 -43
- package/dist/plugins/halopsa/src/credentials.js +56 -0
- package/dist/plugins/halopsa/src/index.js +20 -47
- package/dist/plugins/harvest/src/credentials.js +20 -0
- package/dist/plugins/harvest/src/index.js +24 -43
- package/dist/plugins/helpscout/src/credentials.js +13 -0
- package/dist/plugins/helpscout/src/index.js +26 -38
- package/dist/plugins/highlevel/src/credentials.js +19 -0
- package/dist/plugins/highlevel/src/index.js +34 -63
- package/dist/plugins/homeAssistant/src/credentials.js +27 -0
- package/dist/plugins/homeAssistant/src/index.js +34 -52
- package/dist/plugins/hubspot/src/credentials.js +16 -0
- package/dist/plugins/hubspot/src/index.js +29 -41
- package/dist/plugins/humanticAi/src/credentials.js +13 -0
- package/dist/plugins/humanticAi/src/index.js +15 -22
- package/dist/plugins/hunter/src/credentials.js +13 -0
- package/dist/plugins/hunter/src/index.js +18 -17
- package/dist/plugins/intercom/src/credentials.js +19 -0
- package/dist/plugins/intercom/src/index.js +25 -38
- package/dist/plugins/iterable/src/credentials.js +17 -0
- package/dist/plugins/iterable/src/index.js +26 -40
- package/dist/plugins/jenkins/src/credentials.js +16 -0
- package/dist/plugins/jenkins/src/index.js +22 -36
- package/dist/plugins/jira/src/credentials.js +16 -0
- package/dist/plugins/jira/src/index.js +35 -61
- package/dist/plugins/keap/src/credentials.js +19 -0
- package/dist/plugins/keap/src/index.js +43 -71
- package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
- package/dist/plugins/kobotoolbox/src/index.js +46 -84
- package/dist/plugins/lemlist/src/credentials.js +19 -0
- package/dist/plugins/lemlist/src/index.js +35 -47
- package/dist/plugins/linear/src/attachments.js +7 -7
- package/dist/plugins/linear/src/comments.js +7 -7
- package/dist/plugins/linear/src/credentials.js +17 -0
- package/dist/plugins/linear/src/cycles.js +5 -5
- package/dist/plugins/linear/src/index.js +2 -0
- package/dist/plugins/linear/src/initiatives.js +6 -6
- package/dist/plugins/linear/src/issues.js +14 -14
- package/dist/plugins/linear/src/labels.js +6 -6
- package/dist/plugins/linear/src/organization.js +2 -2
- package/dist/plugins/linear/src/projects.js +12 -12
- package/dist/plugins/linear/src/shared.js +34 -32
- package/dist/plugins/linear/src/states.js +3 -3
- package/dist/plugins/linear/src/teams.js +4 -4
- package/dist/plugins/linear/src/users.js +3 -3
- package/dist/plugins/linear/src/views.js +5 -5
- package/dist/plugins/linear/src/webhooks.js +5 -5
- package/dist/plugins/lingvanex/src/credentials.js +13 -0
- package/dist/plugins/lingvanex/src/index.js +7 -9
- package/dist/plugins/linkedin/src/credentials.js +17 -0
- package/dist/plugins/linkedin/src/index.js +13 -17
- package/dist/plugins/lonescale/src/credentials.js +13 -0
- package/dist/plugins/lonescale/src/index.js +16 -26
- package/dist/plugins/magento/src/credentials.js +16 -0
- package/dist/plugins/magento/src/index.js +67 -84
- package/dist/plugins/mailcheck/src/credentials.js +17 -0
- package/dist/plugins/mailcheck/src/index.js +7 -9
- package/dist/plugins/mailchimp/src/credentials.js +32 -0
- package/dist/plugins/mailchimp/src/index.js +36 -44
- package/dist/plugins/mailerlite/src/credentials.js +13 -0
- package/dist/plugins/mailerlite/src/index.js +19 -32
- package/dist/plugins/mailgun/src/credentials.js +21 -0
- package/dist/plugins/mailgun/src/index.js +15 -21
- package/dist/plugins/mailjet/src/credentials.js +38 -0
- package/dist/plugins/mailjet/src/index.js +60 -115
- package/dist/plugins/mandrill/src/credentials.js +17 -0
- package/dist/plugins/mandrill/src/index.js +11 -12
- package/dist/plugins/marketstack/src/credentials.js +16 -0
- package/dist/plugins/marketstack/src/index.js +18 -28
- package/dist/plugins/matrix/src/credentials.js +19 -0
- package/dist/plugins/matrix/src/index.js +23 -52
- package/dist/plugins/mattermost/src/credentials.js +19 -0
- package/dist/plugins/mattermost/src/index.js +41 -73
- package/dist/plugins/mautic/src/credentials.js +16 -0
- package/dist/plugins/mautic/src/index.js +46 -62
- package/dist/plugins/medium/src/credentials.js +20 -0
- package/dist/plugins/medium/src/index.js +18 -23
- package/dist/plugins/messagebird/src/credentials.js +22 -0
- package/dist/plugins/messagebird/src/index.js +13 -18
- package/dist/plugins/metabase/src/credentials.js +19 -0
- package/dist/plugins/metabase/src/index.js +24 -40
- package/dist/plugins/microsoftCalendar/src/index.js +48 -12
- package/dist/plugins/microsoftFiles/src/index.js +90 -25
- package/dist/plugins/microsoftMail/src/index.js +62 -15
- package/dist/plugins/misp/src/credentials.js +16 -0
- package/dist/plugins/misp/src/index.js +60 -71
- package/dist/plugins/mocean/src/credentials.js +17 -0
- package/dist/plugins/mocean/src/index.js +11 -23
- package/dist/plugins/monday/src/credentials.js +14 -0
- package/dist/plugins/monday/src/index.js +31 -44
- package/dist/plugins/monicaCrm/src/credentials.js +19 -0
- package/dist/plugins/monicaCrm/src/index.js +25 -42
- package/dist/plugins/msg91/src/credentials.js +10 -0
- package/dist/plugins/msg91/src/index.js +15 -11
- package/dist/plugins/nasa/src/credentials.js +22 -0
- package/dist/plugins/nasa/src/index.js +24 -28
- package/dist/plugins/netlify/src/credentials.js +19 -0
- package/dist/plugins/netlify/src/index.js +27 -51
- package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
- package/dist/plugins/netscalerAdc/src/index.js +16 -31
- package/dist/plugins/nextcloud/src/credentials.js +27 -0
- package/dist/plugins/nextcloud/src/index.js +55 -109
- package/dist/plugins/nocodb/src/credentials.js +16 -0
- package/dist/plugins/nocodb/src/index.js +19 -37
- package/dist/plugins/notion/src/credentials.js +21 -0
- package/dist/plugins/notion/src/index.js +25 -38
- package/dist/plugins/npm/src/credentials.js +19 -0
- package/dist/plugins/npm/src/index.js +22 -32
- package/dist/plugins/odoo/src/credentials.js +21 -0
- package/dist/plugins/odoo/src/index.js +53 -69
- package/dist/plugins/okta/src/credentials.js +23 -0
- package/dist/plugins/okta/src/index.js +30 -35
- package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
- package/dist/plugins/oneSimpleApi/src/index.js +19 -24
- package/dist/plugins/onfleet/src/credentials.js +23 -0
- package/dist/plugins/onfleet/src/index.js +42 -53
- package/dist/plugins/openai/src/credentials.js +13 -0
- package/dist/plugins/openai/src/index.js +15 -23
- package/dist/plugins/openweathermap/src/credentials.js +16 -0
- package/dist/plugins/openweathermap/src/index.js +22 -22
- package/dist/plugins/oura/src/credentials.js +19 -0
- package/dist/plugins/oura/src/index.js +13 -18
- package/dist/plugins/paddle/src/credentials.js +27 -0
- package/dist/plugins/paddle/src/index.js +20 -36
- package/dist/plugins/pagerduty/src/credentials.js +24 -0
- package/dist/plugins/pagerduty/src/index.js +30 -39
- package/dist/plugins/parallel/src/credentials.js +18 -0
- package/dist/plugins/parallel/src/index.js +16 -22
- package/dist/plugins/paypal/src/credentials.js +44 -0
- package/dist/plugins/paypal/src/index.js +14 -40
- package/dist/plugins/peekalink/src/credentials.js +16 -0
- package/dist/plugins/peekalink/src/index.js +10 -11
- package/dist/plugins/phantombuster/src/credentials.js +19 -0
- package/dist/plugins/phantombuster/src/index.js +19 -32
- package/dist/plugins/philipsHue/src/credentials.js +17 -0
- package/dist/plugins/philipsHue/src/index.js +15 -27
- package/dist/plugins/pipedrive/src/credentials.js +26 -0
- package/dist/plugins/pipedrive/src/index.js +43 -73
- package/dist/plugins/plaud/src/index.js +2 -1
- package/dist/plugins/plaud/src/shared.js +23 -19
- package/dist/plugins/plivo/src/credentials.js +20 -0
- package/dist/plugins/plivo/src/index.js +13 -19
- package/dist/plugins/posthog/src/credentials.js +18 -0
- package/dist/plugins/posthog/src/index.js +14 -20
- package/dist/plugins/profitwell/src/credentials.js +22 -0
- package/dist/plugins/profitwell/src/index.js +10 -17
- package/dist/plugins/pushbullet/src/credentials.js +19 -0
- package/dist/plugins/pushbullet/src/index.js +19 -27
- package/dist/plugins/pushcut/src/credentials.js +19 -0
- package/dist/plugins/pushcut/src/index.js +7 -8
- package/dist/plugins/pushover/src/credentials.js +14 -0
- package/dist/plugins/pushover/src/index.js +7 -12
- package/dist/plugins/quickbase/src/credentials.js +15 -0
- package/dist/plugins/quickbase/src/index.js +24 -34
- package/dist/plugins/quickbooks/src/credentials.js +22 -0
- package/dist/plugins/quickbooks/src/index.js +17 -46
- package/dist/plugins/raindrop/src/credentials.js +19 -0
- package/dist/plugins/raindrop/src/index.js +30 -32
- package/dist/plugins/recraft/src/credentials.js +13 -0
- package/dist/plugins/recraft/src/index.js +38 -27
- package/dist/plugins/reddit/src/credentials.js +26 -0
- package/dist/plugins/reddit/src/index.js +30 -34
- package/dist/plugins/replicate/src/credentials.js +23 -0
- package/dist/plugins/replicate/src/index.js +17 -27
- package/dist/plugins/rocketchat/src/credentials.js +17 -0
- package/dist/plugins/rocketchat/src/index.js +8 -19
- package/dist/plugins/rundeck/src/credentials.js +16 -0
- package/dist/plugins/rundeck/src/index.js +12 -28
- package/dist/plugins/salesforce/src/credentials.js +73 -0
- package/dist/plugins/salesforce/src/index.js +6 -0
- package/dist/plugins/salesforce/src/metadata.js +3 -16
- package/dist/plugins/salesforce/src/shared.js +25 -100
- package/dist/plugins/salesforce/src/sobjects.js +10 -9
- package/dist/plugins/salesmate/src/credentials.js +17 -0
- package/dist/plugins/salesmate/src/index.js +20 -37
- package/dist/plugins/securityScorecard/src/credentials.js +22 -0
- package/dist/plugins/securityScorecard/src/index.js +24 -37
- package/dist/plugins/segment/src/credentials.js +16 -0
- package/dist/plugins/segment/src/index.js +12 -16
- package/dist/plugins/sendgrid/src/credentials.js +13 -0
- package/dist/plugins/sendgrid/src/index.js +31 -35
- package/dist/plugins/sendy/src/credentials.js +18 -0
- package/dist/plugins/sendy/src/index.js +18 -24
- package/dist/plugins/sentry/src/credentials.js +16 -0
- package/dist/plugins/sentry/src/index.js +30 -98
- package/dist/plugins/servicenow/src/credentials.js +13 -0
- package/dist/plugins/servicenow/src/index.js +22 -41
- package/dist/plugins/shiftAtlas/src/graph.js +2 -2
- package/dist/plugins/shiftAtlas/src/index.js +2 -0
- package/dist/plugins/shiftAtlas/src/shared.js +3 -1
- package/dist/plugins/shiftBwm/src/collections.js +201 -0
- package/dist/plugins/shiftBwm/src/index.js +35 -0
- package/dist/plugins/shiftBwm/src/records.js +180 -0
- package/dist/plugins/shiftBwm/src/shared.js +168 -0
- package/dist/plugins/shiftBwm/src/vendor/client.js +227 -0
- package/dist/plugins/shiftBwm/src/vendor/contracts.js +59 -0
- package/dist/plugins/shiftBwm/src/vendor/models.js +525 -0
- package/dist/plugins/shiftCrm/src/access.js +2 -2
- package/dist/plugins/shiftCrm/src/accounts.js +3 -3
- package/dist/plugins/shiftCrm/src/activities.js +3 -3
- package/dist/plugins/shiftCrm/src/credentials.js +6 -0
- package/dist/plugins/shiftCrm/src/index.js +2 -0
- package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
- package/dist/plugins/shiftCrm/src/people.js +3 -3
- package/dist/plugins/shiftCrm/src/records.js +2 -2
- package/dist/plugins/shiftCrm/src/shared.js +2 -1
- package/dist/plugins/shiftCrm/src/tasks.js +3 -3
- package/dist/plugins/shiftObjects/src/credentials.js +2 -0
- package/dist/plugins/shiftObjects/src/index.js +2 -0
- package/dist/plugins/shiftObjects/src/objects.js +3 -3
- package/dist/plugins/shiftOcr/src/credentials.js +8 -0
- package/dist/plugins/shiftOcr/src/index.js +5 -2
- package/dist/plugins/shiftPages/src/index.js +2 -0
- package/dist/plugins/shiftPages/src/pages.js +5 -3
- package/dist/plugins/shiftPages/src/shared.js +3 -1
- package/dist/plugins/shiftTranscription/src/index.js +2 -0
- package/dist/plugins/shiftTranscription/src/shared.js +11 -1
- package/dist/plugins/shiftTranscription/src/transcription.js +3 -2
- package/dist/plugins/shiftWork/src/index.js +2 -0
- package/dist/plugins/shiftWork/src/issue-views.js +5 -5
- package/dist/plugins/shiftWork/src/issues.js +11 -7
- package/dist/plugins/shiftWork/src/projects.js +3 -3
- package/dist/plugins/shiftWork/src/shared.js +3 -1
- package/dist/plugins/shopify/src/credentials.js +16 -0
- package/dist/plugins/shopify/src/index.js +32 -59
- package/dist/plugins/signl4/src/credentials.js +17 -0
- package/dist/plugins/signl4/src/index.js +28 -29
- package/dist/plugins/slack/src/credentials.js +19 -0
- package/dist/plugins/slack/src/index.js +51 -60
- package/dist/plugins/sms77/src/credentials.js +17 -0
- package/dist/plugins/sms77/src/index.js +11 -16
- package/dist/plugins/splunk/src/credentials.js +19 -0
- package/dist/plugins/splunk/src/index.js +32 -74
- package/dist/plugins/spotify/src/credentials.js +19 -0
- package/dist/plugins/spotify/src/index.js +40 -55
- package/dist/plugins/stackby/src/credentials.js +13 -0
- package/dist/plugins/stackby/src/index.js +14 -23
- package/dist/plugins/steel/src/auth.js +27 -0
- package/dist/plugins/steel/src/browser.js +4 -3
- package/dist/plugins/steel/src/captchas.js +4 -3
- package/dist/plugins/steel/src/extensions.js +3 -2
- package/dist/plugins/steel/src/files.js +9 -10
- package/dist/plugins/steel/src/index.js +2 -0
- package/dist/plugins/steel/src/page/tools.js +3 -3
- package/dist/plugins/steel/src/profiles.js +4 -3
- package/dist/plugins/steel/src/sessions.js +13 -13
- package/dist/plugins/steel/src/shared.js +21 -51
- package/dist/plugins/storyblok/src/credentials.js +37 -0
- package/dist/plugins/storyblok/src/index.js +22 -66
- package/dist/plugins/strapi/src/credentials.js +71 -0
- package/dist/plugins/strapi/src/index.js +36 -70
- package/dist/plugins/strava/src/credentials.js +19 -0
- package/dist/plugins/strava/src/index.js +16 -33
- package/dist/plugins/stripe/src/credentials.js +19 -0
- package/dist/plugins/stripe/src/index.js +44 -58
- package/dist/plugins/supabase/src/credentials.js +30 -0
- package/dist/plugins/supabase/src/index.js +18 -40
- package/dist/plugins/syncromsp/src/credentials.js +16 -0
- package/dist/plugins/syncromsp/src/index.js +37 -70
- package/dist/plugins/tapfiliate/src/credentials.js +13 -0
- package/dist/plugins/tapfiliate/src/index.js +21 -31
- package/dist/plugins/telegram/src/credentials.js +20 -0
- package/dist/plugins/telegram/src/index.js +31 -39
- package/dist/plugins/thehive/src/credentials.js +14 -0
- package/dist/plugins/thehive/src/index.js +33 -50
- package/dist/plugins/thehiveProject/src/credentials.js +16 -0
- package/dist/plugins/thehiveProject/src/index.js +53 -122
- package/dist/plugins/todoist/src/credentials.js +26 -0
- package/dist/plugins/todoist/src/index.js +49 -79
- package/dist/plugins/together/src/credentials.js +16 -0
- package/dist/plugins/together/src/index.js +30 -32
- package/dist/plugins/travisci/src/credentials.js +24 -0
- package/dist/plugins/travisci/src/index.js +16 -30
- package/dist/plugins/trello/src/credentials.js +29 -0
- package/dist/plugins/trello/src/index.js +49 -64
- package/dist/plugins/twake/src/credentials.js +16 -0
- package/dist/plugins/twake/src/index.js +8 -10
- package/dist/plugins/twilio/src/credentials.js +23 -0
- package/dist/plugins/twilio/src/index.js +12 -26
- package/dist/plugins/twist/src/credentials.js +13 -0
- package/dist/plugins/twist/src/index.js +32 -44
- package/dist/plugins/twitter/src/credentials.js +16 -0
- package/dist/plugins/twitter/src/index.js +25 -37
- package/dist/plugins/typesafe/src/credentials.js +28 -0
- package/dist/plugins/typesafe/src/index.js +3 -1
- package/dist/plugins/typesafe/src/shared.js +23 -35
- package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
- package/dist/plugins/unleashedSoftware/src/index.js +13 -37
- package/dist/plugins/uplead/src/credentials.js +16 -0
- package/dist/plugins/uplead/src/index.js +11 -16
- package/dist/plugins/uproc/src/credentials.js +14 -0
- package/dist/plugins/uproc/src/index.js +7 -10
- package/dist/plugins/uptimerobot/src/credentials.js +14 -0
- package/dist/plugins/uptimerobot/src/index.js +28 -39
- package/dist/plugins/urlscanio/src/credentials.js +13 -0
- package/dist/plugins/urlscanio/src/index.js +13 -22
- package/dist/plugins/vercel/src/credentials.js +19 -0
- package/dist/plugins/vercel/src/deployments.js +27 -11
- package/dist/plugins/vercel/src/env.js +31 -12
- package/dist/plugins/vercel/src/index.js +2 -0
- package/dist/plugins/vercel/src/projects.js +6 -3
- package/dist/plugins/vercel/src/shared.js +32 -37
- package/dist/plugins/vero/src/credentials.js +17 -0
- package/dist/plugins/vero/src/index.js +18 -21
- package/dist/plugins/vonage/src/credentials.js +17 -0
- package/dist/plugins/vonage/src/index.js +14 -18
- package/dist/plugins/wekan/src/credentials.js +16 -0
- package/dist/plugins/wekan/src/index.js +33 -46
- package/dist/plugins/wolt/src/account.js +6 -0
- package/dist/plugins/wolt/src/catalog.js +2 -2
- package/dist/plugins/wolt/src/credentials.js +64 -0
- package/dist/plugins/wolt/src/index.js +8 -3
- package/dist/plugins/wolt/src/orders.js +2 -2
- package/dist/plugins/wolt/src/public.js +91 -0
- package/dist/plugins/wolt/src/shared.js +49 -158
- package/dist/plugins/woocommerce/src/credentials.js +16 -0
- package/dist/plugins/woocommerce/src/index.js +19 -37
- package/dist/plugins/wordpress/src/credentials.js +16 -0
- package/dist/plugins/wordpress/src/index.js +23 -42
- package/dist/plugins/xai/src/credentials.js +13 -0
- package/dist/plugins/xai/src/index.js +31 -30
- package/dist/plugins/xero/src/credentials.js +17 -0
- package/dist/plugins/xero/src/index.js +19 -36
- package/dist/plugins/yourls/src/credentials.js +17 -0
- package/dist/plugins/yourls/src/index.js +13 -23
- package/dist/plugins/zammad/src/credentials.js +15 -0
- package/dist/plugins/zammad/src/index.js +27 -47
- package/dist/plugins/zendesk/src/credentials.js +26 -0
- package/dist/plugins/zendesk/src/index.js +29 -48
- package/dist/plugins/zoho/src/credentials.js +17 -0
- package/dist/plugins/zoho/src/index.js +18 -38
- package/dist/plugins/zoom/src/credentials.js +19 -0
- package/dist/plugins/zoom/src/index.js +15 -30
- package/dist/plugins/zulip/src/credentials.js +16 -0
- package/dist/plugins/zulip/src/index.js +36 -42
- package/dist/sdk.d.ts +8 -0
- package/dist/sdk.js +3 -0
- package/package.json +3 -2
- package/dist/plugins/_shared/authedFetch.js +0 -33
- package/dist/plugins/_shared/tokenRefresh.js +0 -41
|
@@ -18,8 +18,10 @@
|
|
|
18
18
|
* downloaded to local files so callers can deliver them directly.
|
|
19
19
|
*/
|
|
20
20
|
import { Buffer } from "node:buffer";
|
|
21
|
-
import {
|
|
21
|
+
import { credentialJson, pathSegments, pathWithin, } from "../../_shared/credentials.js";
|
|
22
|
+
import { readImageInput, SEND_FILE_NOTE, writeMediaFile, } from "../../_shared/mediaFile.js";
|
|
22
23
|
import { parseSize } from "../../_shared/parseSize.js";
|
|
24
|
+
import { replicateCredential } from "./credentials.js";
|
|
23
25
|
const POLL_INTERVAL_MS = 2_000;
|
|
24
26
|
const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
|
|
25
27
|
function stringifyError(err) {
|
|
@@ -41,23 +43,15 @@ function stringifyError(err) {
|
|
|
41
43
|
* only thing that differs between them is the prediction `input`.
|
|
42
44
|
*/
|
|
43
45
|
async function runPrediction(opts) {
|
|
44
|
-
const {
|
|
46
|
+
const { ctx, model, input, timeoutMs, saveDir } = opts;
|
|
45
47
|
const deadline = Date.now() + timeoutMs;
|
|
46
|
-
|
|
48
|
+
let prediction = (await credentialJson(ctx, replicateCredential, "replicate", {
|
|
49
|
+
target: "api",
|
|
50
|
+
path: `models/${pathSegments(model)}/predictions`,
|
|
47
51
|
method: "POST",
|
|
48
|
-
headers: {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
// `Prefer: wait` lets the server hold the connection open for
|
|
52
|
-
// fast jobs so we don't have to poll at all on the happy path.
|
|
53
|
-
Prefer: "wait",
|
|
54
|
-
},
|
|
55
|
-
body: JSON.stringify({ input }),
|
|
56
|
-
});
|
|
57
|
-
if (!createRes.ok) {
|
|
58
|
-
throw new Error(`Replicate API error ${createRes.status}: ${await createRes.text()}`);
|
|
59
|
-
}
|
|
60
|
-
let prediction = (await createRes.json());
|
|
52
|
+
headers: { Prefer: "wait" },
|
|
53
|
+
json: { input },
|
|
54
|
+
}));
|
|
61
55
|
while (prediction.status !== "succeeded" &&
|
|
62
56
|
prediction.status !== "failed" &&
|
|
63
57
|
prediction.status !== "canceled") {
|
|
@@ -65,13 +59,10 @@ async function runPrediction(opts) {
|
|
|
65
59
|
throw new Error(`Replicate generation timed out after ${timeoutMs}ms (still ${prediction.status})`);
|
|
66
60
|
}
|
|
67
61
|
await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
throw new Error(`Replicate poll error ${pollRes.status}: ${await pollRes.text()}`);
|
|
73
|
-
}
|
|
74
|
-
prediction = (await pollRes.json());
|
|
62
|
+
prediction = (await credentialJson(ctx, replicateCredential, "replicate", {
|
|
63
|
+
target: "api",
|
|
64
|
+
path: pathWithin(ctx, replicateCredential, "api", prediction.urls.get),
|
|
65
|
+
}));
|
|
75
66
|
}
|
|
76
67
|
if (prediction.status !== "succeeded") {
|
|
77
68
|
throw new Error(`Replicate generation ${prediction.status}: ${stringifyError(prediction.error)}`);
|
|
@@ -124,6 +115,7 @@ async function runPrediction(opts) {
|
|
|
124
115
|
export default function replicate(rl) {
|
|
125
116
|
rl.setName("replicate");
|
|
126
117
|
rl.setVersion("0.1.0");
|
|
118
|
+
rl.setCredential(replicateCredential);
|
|
127
119
|
rl.setConnectionSchema({
|
|
128
120
|
apiToken: {
|
|
129
121
|
type: "string",
|
|
@@ -172,11 +164,10 @@ export default function replicate(rl) {
|
|
|
172
164
|
if (typeof p.prompt !== "string" || p.prompt.length === 0) {
|
|
173
165
|
throw new Error("replicate: prompt is required");
|
|
174
166
|
}
|
|
175
|
-
const apiToken = ctx.connection.config.apiToken;
|
|
176
167
|
const model = p.model ?? "black-forest-labs/flux-dev";
|
|
177
168
|
const { width, height } = parseSize(p.size, "replicate");
|
|
178
169
|
const { images, failures } = await runPrediction({
|
|
179
|
-
|
|
170
|
+
ctx,
|
|
180
171
|
model,
|
|
181
172
|
input: {
|
|
182
173
|
prompt: p.prompt,
|
|
@@ -234,11 +225,10 @@ export default function replicate(rl) {
|
|
|
234
225
|
throw new Error("replicate: prompt is required");
|
|
235
226
|
}
|
|
236
227
|
const img = readImageInput(p.imagePath, "replicate");
|
|
237
|
-
const apiToken = ctx.connection.config.apiToken;
|
|
238
228
|
const model = p.model ?? "black-forest-labs/flux-kontext-pro";
|
|
239
229
|
const imageKey = p.imageInputKey ?? "input_image";
|
|
240
230
|
const { images, failures } = await runPrediction({
|
|
241
|
-
|
|
231
|
+
ctx,
|
|
242
232
|
model,
|
|
243
233
|
input: {
|
|
244
234
|
prompt: p.prompt,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { httpsBase, staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* A personal auth token in the X-Auth-Token header. Its public companion,
|
|
4
|
+
* the X-User-Id identifier, rides as an allowed header.
|
|
5
|
+
*/
|
|
6
|
+
export const rocketchatCredential = staticCredential({
|
|
7
|
+
id: "rocketchat",
|
|
8
|
+
auth: { kind: "apiKey", header: "X-Auth-Token" },
|
|
9
|
+
local: { secret: "authToken" },
|
|
10
|
+
targets: (config) => ({
|
|
11
|
+
api: {
|
|
12
|
+
baseUrl: httpsBase(config.domain, "api/v1/"),
|
|
13
|
+
methods: ["POST"],
|
|
14
|
+
allowedHeaders: ["X-User-Id"],
|
|
15
|
+
},
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return {
|
|
4
|
-
domain: c.domain.replace(/\/$/, ""),
|
|
5
|
-
userId: c.userId,
|
|
6
|
-
authToken: c.authToken,
|
|
7
|
-
};
|
|
8
|
-
}
|
|
1
|
+
import { credentialJson } from "../../_shared/credentials.js";
|
|
2
|
+
import { rocketchatCredential } from "./credentials.js";
|
|
9
3
|
export default function rocketchat(rl) {
|
|
10
4
|
rl.setName("rocketchat");
|
|
11
5
|
rl.setVersion("0.1.0");
|
|
6
|
+
rl.setCredential(rocketchatCredential);
|
|
12
7
|
rl.setConnectionSchema({
|
|
13
8
|
domain: {
|
|
14
9
|
type: "string",
|
|
@@ -62,7 +57,6 @@ export default function rocketchat(rl) {
|
|
|
62
57
|
},
|
|
63
58
|
async execute(input, ctx) {
|
|
64
59
|
const p = input;
|
|
65
|
-
const conn = getConn(ctx);
|
|
66
60
|
const body = {
|
|
67
61
|
channel: p.channel,
|
|
68
62
|
text: p.text,
|
|
@@ -75,18 +69,13 @@ export default function rocketchat(rl) {
|
|
|
75
69
|
body.avatar = p.avatar;
|
|
76
70
|
if (p.attachments)
|
|
77
71
|
body.attachments = p.attachments;
|
|
78
|
-
|
|
72
|
+
return credentialJson(ctx, rocketchatCredential, "rocketchat", {
|
|
73
|
+
target: "api",
|
|
74
|
+
path: "chat.postMessage",
|
|
79
75
|
method: "POST",
|
|
80
|
-
headers: {
|
|
81
|
-
|
|
82
|
-
"X-Auth-Token": conn.authToken,
|
|
83
|
-
"X-User-Id": conn.userId,
|
|
84
|
-
},
|
|
85
|
-
body: JSON.stringify(body),
|
|
76
|
+
headers: { "X-User-Id": String(ctx.connection.config.userId ?? "") },
|
|
77
|
+
json: body,
|
|
86
78
|
});
|
|
87
|
-
if (!res.ok)
|
|
88
|
-
throw new Error(`Rocket.Chat error ${res.status}: ${await res.text()}`);
|
|
89
|
-
return res.json();
|
|
90
79
|
},
|
|
91
80
|
});
|
|
92
81
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { httpsBase, staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* An API token, appended by the transport as the authtoken query parameter
|
|
4
|
+
* on the connection's own Rundeck server beneath /api/.
|
|
5
|
+
*/
|
|
6
|
+
export const rundeckCredential = staticCredential({
|
|
7
|
+
id: "rundeck",
|
|
8
|
+
auth: { kind: "queryKey", param: "authtoken" },
|
|
9
|
+
local: { secret: "token" },
|
|
10
|
+
targets: (config) => ({
|
|
11
|
+
api: {
|
|
12
|
+
baseUrl: httpsBase(config.url, "api/"),
|
|
13
|
+
methods: ["GET", "POST"],
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
@@ -1,33 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
async function apiRequest(conn, method, endpoint, body, qs) {
|
|
9
|
-
const url = new URL(`${conn.url}${endpoint}`);
|
|
10
|
-
url.searchParams.set("authtoken", conn.token);
|
|
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 { rundeckCredential } from "./credentials.js";
|
|
3
|
+
function apiRequest(ctx, method, path, body, qs) {
|
|
4
|
+
return credentialJson(ctx, rundeckCredential, "rundeck", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path,
|
|
18
7
|
method,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
init.body = JSON.stringify(body);
|
|
23
|
-
const res = await fetch(url.toString(), init);
|
|
24
|
-
if (!res.ok)
|
|
25
|
-
throw new Error(`Rundeck error ${res.status}: ${await res.text()}`);
|
|
26
|
-
return res.json();
|
|
8
|
+
query: qs,
|
|
9
|
+
...(body && Object.keys(body).length > 0 ? { json: body } : {}),
|
|
10
|
+
});
|
|
27
11
|
}
|
|
28
12
|
export default function rundeck(rl) {
|
|
29
13
|
rl.setName("rundeck");
|
|
30
14
|
rl.setVersion("0.1.0");
|
|
15
|
+
rl.setCredential(rundeckCredential);
|
|
31
16
|
rl.setConnectionSchema({
|
|
32
17
|
url: {
|
|
33
18
|
type: "string",
|
|
@@ -60,7 +45,6 @@ export default function rundeck(rl) {
|
|
|
60
45
|
},
|
|
61
46
|
async execute(input, ctx) {
|
|
62
47
|
const p = input;
|
|
63
|
-
const conn = getConn(ctx);
|
|
64
48
|
let argString = "";
|
|
65
49
|
if (p.arguments) {
|
|
66
50
|
for (const arg of p.arguments) {
|
|
@@ -70,7 +54,7 @@ export default function rundeck(rl) {
|
|
|
70
54
|
const qs = {};
|
|
71
55
|
if (p.filter)
|
|
72
56
|
qs.filter = p.filter;
|
|
73
|
-
return apiRequest(
|
|
57
|
+
return apiRequest(ctx, "POST", `14/job/${pathSegment(p.jobId)}/run`, { argString: argString.trim() }, qs);
|
|
74
58
|
},
|
|
75
59
|
});
|
|
76
60
|
rl.registerAction("job.getMetadata", {
|
|
@@ -79,7 +63,7 @@ export default function rundeck(rl) {
|
|
|
79
63
|
inputSchema: { jobId: { type: "string", required: true } },
|
|
80
64
|
async execute(input, ctx) {
|
|
81
65
|
const { jobId } = input;
|
|
82
|
-
return apiRequest(
|
|
66
|
+
return apiRequest(ctx, "GET", `18/job/${pathSegment(jobId)}/info`);
|
|
83
67
|
},
|
|
84
68
|
});
|
|
85
69
|
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { AuthError, } from "runline";
|
|
2
|
+
import { configChoice, grantSchema, httpsBase, staticCredential, } from "../../_shared/credentials.js";
|
|
3
|
+
/**
|
|
4
|
+
* A path beneath the org's My Domain URL. A Lightning UI host serves no
|
|
5
|
+
* API, and is refused as invalid_credentials.
|
|
6
|
+
*/
|
|
7
|
+
function myDomain(value, path) {
|
|
8
|
+
const url = httpsBase(value, path);
|
|
9
|
+
if (/\.lightning\.force\.com$/i.test(new URL(url).hostname))
|
|
10
|
+
throw new AuthError("invalid_credentials");
|
|
11
|
+
return url;
|
|
12
|
+
}
|
|
13
|
+
/** The REST API on the org's My Domain instance. */
|
|
14
|
+
function api(config) {
|
|
15
|
+
return {
|
|
16
|
+
baseUrl: myDomain(config.instanceUrl ?? config.loginUrl, ""),
|
|
17
|
+
methods: ["GET", "POST", "PATCH", "DELETE"],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const accessToken = staticCredential({
|
|
21
|
+
id: "salesforce",
|
|
22
|
+
auth: { kind: "bearer" },
|
|
23
|
+
local: { secret: "accessToken" },
|
|
24
|
+
targets: (config) => ({ api: api(config) }),
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* A static access token as a bearer, or a Connected App's client
|
|
28
|
+
* credentials exchanged at the My Domain token endpoint; either signs the
|
|
29
|
+
* REST API on the same My Domain instance. `authMethod` picks one;
|
|
30
|
+
* without it, a connection naming a client ID uses client credentials —
|
|
31
|
+
* the token the CLI keeps from that exchange is stored as `accessToken`
|
|
32
|
+
* too, so a token alone does not decide — and any other uses its token.
|
|
33
|
+
*/
|
|
34
|
+
export const salesforceCredential = (config) => {
|
|
35
|
+
const token = accessToken(config);
|
|
36
|
+
const method = configChoice(config.authMethod ??
|
|
37
|
+
(config.clientId ? "clientCredentials" : "accessToken"), ["accessToken", "clientCredentials"], "accessToken");
|
|
38
|
+
const type = {
|
|
39
|
+
id: "salesforce",
|
|
40
|
+
methods: {
|
|
41
|
+
...token.type.methods,
|
|
42
|
+
clientCredentials: {
|
|
43
|
+
schema: grantSchema,
|
|
44
|
+
authentication: {
|
|
45
|
+
kind: "oauth2",
|
|
46
|
+
field: "grant",
|
|
47
|
+
renewal: "clientCredentials",
|
|
48
|
+
definition: {
|
|
49
|
+
id: "salesforce.oauth2",
|
|
50
|
+
provider: "salesforce",
|
|
51
|
+
clientCredentials: {
|
|
52
|
+
url: myDomain(config.loginUrl ?? config.instanceUrl, "services/oauth2/token"),
|
|
53
|
+
clientAuthentication: "client_secret_post",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
targets: { api: api(config) },
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
if (method === "accessToken")
|
|
62
|
+
return { ...token, type };
|
|
63
|
+
return {
|
|
64
|
+
type,
|
|
65
|
+
method: "clientCredentials",
|
|
66
|
+
application: {
|
|
67
|
+
clientId: config.clientId,
|
|
68
|
+
...(typeof config.clientSecret === "string"
|
|
69
|
+
? { clientSecret: config.clientSecret }
|
|
70
|
+
: {}),
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
};
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { salesforceCredential } from "./credentials.js";
|
|
2
3
|
import { registerMetadataActions } from "./metadata.js";
|
|
3
4
|
import { registerQueryActions } from "./query.js";
|
|
4
5
|
import { registerGenericSObjectActions, registerStandardSObjectActions, } from "./sobjects.js";
|
|
5
6
|
export default function salesforce(rl) {
|
|
6
7
|
rl.setName("salesforce");
|
|
7
8
|
rl.setVersion("0.2.0");
|
|
9
|
+
rl.setCredential(salesforceCredential);
|
|
8
10
|
rl.setConnectionSchema(t.Object({
|
|
9
11
|
instanceUrl: t.Optional(t.String({
|
|
10
12
|
description: "Salesforce API instance URL, e.g. https://your-domain.my.salesforce.com. Required for static accessToken auth; optional for client credentials when loginUrl is set.",
|
|
11
13
|
env: "SALESFORCE_INSTANCE_URL",
|
|
12
14
|
})),
|
|
15
|
+
authMethod: t.Optional(t.String({
|
|
16
|
+
description: "accessToken or clientCredentials (inferred from which credential the connection holds)",
|
|
17
|
+
env: "SALESFORCE_AUTH_METHOD",
|
|
18
|
+
})),
|
|
13
19
|
accessToken: t.Optional(t.String({
|
|
14
20
|
description: "Salesforce OAuth2 access token. Use for static-token auth.",
|
|
15
21
|
env: "SALESFORCE_ACCESS_TOKEN",
|
|
@@ -1,29 +1,16 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import { api,
|
|
2
|
+
import { api, identity } from "./shared.js";
|
|
3
3
|
export function registerMetadataActions(rl) {
|
|
4
4
|
rl.registerAction("connection.test", {
|
|
5
5
|
access: "read",
|
|
6
6
|
description: "Validate Salesforce auth and return safe connection metadata",
|
|
7
7
|
inputSchema: t.Object({}),
|
|
8
8
|
async execute(_input, ctx) {
|
|
9
|
-
const
|
|
10
|
-
const session = await sessionPromise;
|
|
11
|
-
let limits;
|
|
12
|
-
let limitsError;
|
|
13
|
-
try {
|
|
14
|
-
limits = (await api(ctx, "GET", "/limits", undefined, undefined, sessionPromise));
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
limitsError = error instanceof Error ? error.message : String(error);
|
|
18
|
-
}
|
|
9
|
+
const limits = (await api(ctx, "GET", "/limits"));
|
|
19
10
|
return {
|
|
20
11
|
ok: true,
|
|
21
|
-
instanceUrl:
|
|
22
|
-
tokenType: session.tokenType,
|
|
23
|
-
scope: session.scope,
|
|
24
|
-
id: session.id,
|
|
12
|
+
instanceUrl: ctx.connection.config.instanceUrl ?? ctx.connection.config.loginUrl,
|
|
25
13
|
limits,
|
|
26
|
-
limitsError,
|
|
27
14
|
};
|
|
28
15
|
},
|
|
29
16
|
});
|
|
@@ -1,107 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthError } from "runline";
|
|
2
|
+
import { credentialJson } from "../../_shared/credentials.js";
|
|
3
|
+
import { salesforceCredential } from "./credentials.js";
|
|
2
4
|
export const DEFAULT_API_VERSION = "v59.0";
|
|
3
|
-
|
|
4
|
-
return ctx.connection.config;
|
|
5
|
-
}
|
|
6
|
-
export function trimTrailingSlash(url) {
|
|
7
|
-
return url.replace(/\/+$/, "");
|
|
8
|
-
}
|
|
9
|
-
function requireString(value, name) {
|
|
10
|
-
if (typeof value !== "string" || value.trim() === "") {
|
|
11
|
-
throw new Error(`Salesforce connection is missing ${name}`);
|
|
12
|
-
}
|
|
13
|
-
return value.trim();
|
|
14
|
-
}
|
|
5
|
+
/** The connection's REST API version, as `vNN.N`; anything else is refused. */
|
|
15
6
|
export function apiVersion(ctx) {
|
|
16
|
-
const raw =
|
|
7
|
+
const raw = ctx.connection.config.apiVersion;
|
|
17
8
|
if (typeof raw !== "string" || raw.trim() === "")
|
|
18
9
|
return DEFAULT_API_VERSION;
|
|
19
|
-
const version = raw.trim()
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export async function getSession(ctx) {
|
|
30
|
-
const c = config(ctx);
|
|
31
|
-
if (c.accessToken) {
|
|
32
|
-
return {
|
|
33
|
-
instanceUrl: validateInstanceUrl(requireString(c.instanceUrl, "instanceUrl")),
|
|
34
|
-
accessToken: requireString(c.accessToken, "accessToken"),
|
|
35
|
-
tokenType: "Bearer",
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const loginUrl = validateInstanceUrl(requireString(c.loginUrl ?? c.instanceUrl, "loginUrl or instanceUrl"));
|
|
39
|
-
const clientId = requireString(c.clientId, "clientId");
|
|
40
|
-
const clientSecret = requireString(c.clientSecret, "clientSecret");
|
|
41
|
-
const tokens = await requestOAuth2Token({
|
|
42
|
-
url: `${loginUrl}/services/oauth2/token`,
|
|
43
|
-
clientAuthentication: "client_secret_post",
|
|
44
|
-
response: {
|
|
45
|
-
metadata: {
|
|
46
|
-
instanceUrl: "instance_url",
|
|
47
|
-
id: "id",
|
|
48
|
-
issuedAt: "issued_at",
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
}, { grant_type: "client_credentials" }, { clientId, clientSecret });
|
|
52
|
-
return {
|
|
53
|
-
instanceUrl: validateInstanceUrl(requireString(tokens.metadata?.instanceUrl, "token response instance_url")),
|
|
54
|
-
accessToken: tokens.accessToken,
|
|
55
|
-
tokenType: tokens.tokenType ?? "Bearer",
|
|
56
|
-
scope: tokens.scope,
|
|
57
|
-
id: tokens.metadata?.id,
|
|
58
|
-
issuedAt: tokens.metadata?.issuedAt,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
export async function api(ctx, method, endpoint, body, qs, session = getSession(ctx)) {
|
|
62
|
-
return rest(ctx, method, `/services/data/${apiVersion(ctx)}${endpoint}`, body, qs, session);
|
|
63
|
-
}
|
|
64
|
-
export async function rest(ctx, method, path, body, qs, session = getSession(ctx)) {
|
|
65
|
-
const resolvedSession = await session;
|
|
66
|
-
const url = new URL(path, resolvedSession.instanceUrl);
|
|
67
|
-
if (qs) {
|
|
68
|
-
for (const [k, v] of Object.entries(qs)) {
|
|
69
|
-
if (v !== undefined && v !== null)
|
|
70
|
-
url.searchParams.set(k, String(v));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const init = {
|
|
10
|
+
const version = raw.trim().startsWith("v") ? raw.trim() : `v${raw.trim()}`;
|
|
11
|
+
if (!/^v\d+\.\d+$/.test(version))
|
|
12
|
+
throw new AuthError("invalid_credentials");
|
|
13
|
+
return version;
|
|
14
|
+
}
|
|
15
|
+
/** A request on the org's instance, by a path from its root. */
|
|
16
|
+
export function rest(ctx, method, path, body, query) {
|
|
17
|
+
return credentialJson(ctx, salesforceCredential, "salesforce", {
|
|
18
|
+
target: "api",
|
|
19
|
+
path: path.replace(/^\//, ""),
|
|
74
20
|
method,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
Accept: "application/json",
|
|
78
|
-
"Content-Type": "application/json",
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
if (body && Object.keys(body).length > 0)
|
|
82
|
-
init.body = JSON.stringify(body);
|
|
83
|
-
const res = await fetch(url.toString(), init);
|
|
84
|
-
if (res.status === 204)
|
|
85
|
-
return { success: true };
|
|
86
|
-
const text = await res.text();
|
|
87
|
-
if (!res.ok)
|
|
88
|
-
throw new Error(`Salesforce error ${res.status}: ${text}`);
|
|
89
|
-
return text ? JSON.parse(text) : null;
|
|
90
|
-
}
|
|
91
|
-
export async function identity(ctx) {
|
|
92
|
-
const session = await getSession(ctx);
|
|
93
|
-
if (!session.id) {
|
|
94
|
-
return { instanceUrl: session.instanceUrl, tokenType: session.tokenType };
|
|
95
|
-
}
|
|
96
|
-
const res = await fetch(session.id, {
|
|
97
|
-
headers: {
|
|
98
|
-
Authorization: `Bearer ${session.accessToken}`,
|
|
99
|
-
Accept: "application/json",
|
|
100
|
-
},
|
|
21
|
+
query,
|
|
22
|
+
...(body && Object.keys(body).length > 0 ? { json: body } : {}),
|
|
101
23
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
24
|
+
}
|
|
25
|
+
/** A REST API request beneath `services/data/<version>`. */
|
|
26
|
+
export function api(ctx, method, endpoint, body, query) {
|
|
27
|
+
return rest(ctx, method, `services/data/${apiVersion(ctx)}${endpoint}`, body, query);
|
|
28
|
+
}
|
|
29
|
+
/** The signed-in user, from the instance's OpenID Connect userinfo endpoint. */
|
|
30
|
+
export function identity(ctx) {
|
|
31
|
+
return rest(ctx, "GET", "services/oauth2/userinfo");
|
|
107
32
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
2
3
|
import { records } from "./queryResult.js";
|
|
3
4
|
import { api } from "./shared.js";
|
|
4
5
|
export const SOBJECTS = [
|
|
@@ -54,7 +55,7 @@ function registerSObject(rl, sObject) {
|
|
|
54
55
|
description: `Get a ${sObject} by ID`,
|
|
55
56
|
inputSchema: t.Object({ id: t.String() }),
|
|
56
57
|
async execute(input, ctx) {
|
|
57
|
-
return api(ctx, "GET", `/sobjects/${sObject}/${input.id}`);
|
|
58
|
+
return api(ctx, "GET", `/sobjects/${sObject}/${pathSegment(input.id)}`);
|
|
58
59
|
},
|
|
59
60
|
});
|
|
60
61
|
rl.registerAction(`${lower}.update`, {
|
|
@@ -63,7 +64,7 @@ function registerSObject(rl, sObject) {
|
|
|
63
64
|
inputSchema: t.Object({ id: t.String(), data: Data }),
|
|
64
65
|
async execute(input, ctx) {
|
|
65
66
|
const p = input;
|
|
66
|
-
await api(ctx, "PATCH", `/sobjects/${sObject}/${p.id}`, p.data);
|
|
67
|
+
await api(ctx, "PATCH", `/sobjects/${sObject}/${pathSegment(p.id)}`, p.data);
|
|
67
68
|
return { success: true, id: p.id };
|
|
68
69
|
},
|
|
69
70
|
});
|
|
@@ -72,7 +73,7 @@ function registerSObject(rl, sObject) {
|
|
|
72
73
|
description: `Delete a ${sObject}`,
|
|
73
74
|
inputSchema: t.Object({ id: t.String() }),
|
|
74
75
|
async execute(input, ctx) {
|
|
75
|
-
await api(ctx, "DELETE", `/sobjects/${sObject}/${input.id}`);
|
|
76
|
+
await api(ctx, "DELETE", `/sobjects/${sObject}/${pathSegment(input.id)}`);
|
|
76
77
|
return { success: true };
|
|
77
78
|
},
|
|
78
79
|
});
|
|
@@ -106,7 +107,7 @@ function registerSObject(rl, sObject) {
|
|
|
106
107
|
}),
|
|
107
108
|
async execute(input, ctx) {
|
|
108
109
|
const p = input;
|
|
109
|
-
return api(ctx, "PATCH", `/sobjects/${sObject}/${p.externalIdField}/${p.externalIdValue}`, p.data);
|
|
110
|
+
return api(ctx, "PATCH", `/sobjects/${sObject}/${pathSegment(p.externalIdField)}/${pathSegment(p.externalIdValue)}`, p.data);
|
|
110
111
|
},
|
|
111
112
|
});
|
|
112
113
|
}
|
|
@@ -121,7 +122,7 @@ export function registerGenericSObjectActions(rl) {
|
|
|
121
122
|
inputSchema: t.Object({ sObject: t.String(), data: Data }),
|
|
122
123
|
async execute(input, ctx) {
|
|
123
124
|
const p = input;
|
|
124
|
-
return api(ctx, "POST", `/sobjects/${p.sObject}`, p.data);
|
|
125
|
+
return api(ctx, "POST", `/sobjects/${pathSegment(p.sObject)}`, p.data);
|
|
125
126
|
},
|
|
126
127
|
});
|
|
127
128
|
rl.registerAction("sobject.get", {
|
|
@@ -130,7 +131,7 @@ export function registerGenericSObjectActions(rl) {
|
|
|
130
131
|
inputSchema: t.Object({ sObject: t.String(), id: t.String() }),
|
|
131
132
|
async execute(input, ctx) {
|
|
132
133
|
const p = input;
|
|
133
|
-
return api(ctx, "GET", `/sobjects/${p.sObject}/${p.id}`);
|
|
134
|
+
return api(ctx, "GET", `/sobjects/${pathSegment(p.sObject)}/${pathSegment(p.id)}`);
|
|
134
135
|
},
|
|
135
136
|
});
|
|
136
137
|
rl.registerAction("sobject.update", {
|
|
@@ -139,7 +140,7 @@ export function registerGenericSObjectActions(rl) {
|
|
|
139
140
|
inputSchema: t.Object({ sObject: t.String(), id: t.String(), data: Data }),
|
|
140
141
|
async execute(input, ctx) {
|
|
141
142
|
const p = input;
|
|
142
|
-
await api(ctx, "PATCH", `/sobjects/${p.sObject}/${p.id}`, p.data);
|
|
143
|
+
await api(ctx, "PATCH", `/sobjects/${pathSegment(p.sObject)}/${pathSegment(p.id)}`, p.data);
|
|
143
144
|
return { success: true };
|
|
144
145
|
},
|
|
145
146
|
});
|
|
@@ -149,7 +150,7 @@ export function registerGenericSObjectActions(rl) {
|
|
|
149
150
|
inputSchema: t.Object({ sObject: t.String(), id: t.String() }),
|
|
150
151
|
async execute(input, ctx) {
|
|
151
152
|
const p = input;
|
|
152
|
-
await api(ctx, "DELETE", `/sobjects/${p.sObject}/${p.id}`);
|
|
153
|
+
await api(ctx, "DELETE", `/sobjects/${pathSegment(p.sObject)}/${pathSegment(p.id)}`);
|
|
153
154
|
return { success: true };
|
|
154
155
|
},
|
|
155
156
|
});
|
|
@@ -158,7 +159,7 @@ export function registerGenericSObjectActions(rl) {
|
|
|
158
159
|
description: "Describe an sObject's metadata/fields",
|
|
159
160
|
inputSchema: t.Object({ sObject: t.String() }),
|
|
160
161
|
async execute(input, ctx) {
|
|
161
|
-
return api(ctx, "GET", `/sobjects/${input.sObject}/describe`);
|
|
162
|
+
return api(ctx, "GET", `/sobjects/${pathSegment(input.sObject)}/describe`);
|
|
162
163
|
},
|
|
163
164
|
});
|
|
164
165
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* A session token in the sessionToken header, to Salesmate's one API
|
|
4
|
+
* origin. The public workspace linkname rides along as x-linkname.
|
|
5
|
+
*/
|
|
6
|
+
export const salesmateCredential = staticCredential({
|
|
7
|
+
id: "salesmate",
|
|
8
|
+
auth: { kind: "apiKey", header: "sessionToken" },
|
|
9
|
+
local: { secret: "sessionToken" },
|
|
10
|
+
targets: {
|
|
11
|
+
api: {
|
|
12
|
+
baseUrl: "https://apis.salesmate.io/",
|
|
13
|
+
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
14
|
+
allowedHeaders: ["x-linkname"],
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|