runline 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +21 -8
- 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 +184 -22
- package/dist/credentials/transport.d.ts +48 -2
- package/dist/credentials/transport.js +248 -70
- package/dist/credentials/types.d.ts +177 -10
- package/dist/index.d.ts +6 -5
- package/dist/index.js +3 -2
- package/dist/plugin/api.d.ts +7 -0
- package/dist/plugin/api.js +7 -0
- package/dist/plugin/schema.d.ts +16 -4
- package/dist/plugin/schema.js +28 -5
- package/dist/plugin/types.d.ts +20 -0
- package/dist/plugins/_shared/base64.js +30 -0
- package/dist/plugins/_shared/credentialAdapter.js +99 -15
- package/dist/plugins/_shared/credentials.js +416 -0
- package/dist/plugins/_shared/googleAuth.js +69 -39
- package/dist/plugins/_shared/googleCredentials.js +68 -14
- package/dist/plugins/_shared/localFile.js +40 -0
- package/dist/plugins/_shared/mediaFile.js +12 -12
- package/dist/plugins/_shared/microsoftAuth.js +31 -47
- package/dist/plugins/_shared/microsoftCredentials.js +42 -15
- package/dist/plugins/_shared/provider.js +2 -14
- package/dist/plugins/_shared/shiftCloud.js +16 -56
- package/dist/plugins/_shared/shiftCredentials.js +83 -0
- package/dist/plugins/_shared/shiftUpload.js +14 -10
- 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/agentMail/src/credentials.js +35 -0
- package/dist/plugins/agentMail/src/drafts.js +137 -0
- package/dist/plugins/agentMail/src/inboxes.js +95 -0
- package/dist/plugins/agentMail/src/index.js +35 -0
- package/dist/plugins/agentMail/src/messages.js +154 -0
- package/dist/plugins/agentMail/src/schemas.js +156 -0
- package/dist/plugins/agentMail/src/shared.js +203 -0
- package/dist/plugins/agentMail/src/threads.js +75 -0
- 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 +87 -62
- 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 +5 -3
- 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 +47 -108
- 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 +109 -42
- package/dist/plugins/googleCalendar/src/index.js +20 -51
- package/dist/plugins/googleContacts/src/index.js +13 -40
- package/dist/plugins/googleDocs/src/index.js +3 -32
- package/dist/plugins/googleDocs/src/shared.js +2 -1
- package/dist/plugins/googleDrive/src/index.js +68 -97
- package/dist/plugins/googleImage/src/credentials.js +14 -0
- package/dist/plugins/googleImage/src/index.js +15 -26
- package/dist/plugins/googleSheets/src/index.js +27 -60
- package/dist/plugins/googleSlides/src/index.js +7 -35
- package/dist/plugins/googleTasks/src/index.js +14 -42
- 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 +42 -65
- 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 +49 -18
- package/dist/plugins/microsoftFiles/src/index.js +95 -31
- package/dist/plugins/microsoftMail/src/index.js +63 -21
- 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 +16 -24
- 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 +39 -28
- 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 +18 -28
- 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/index.js +4 -2
- package/dist/plugins/shiftBwm/src/shared.js +41 -16
- 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 +4 -3
- package/dist/plugins/shiftOcr/src/credentials.js +8 -0
- package/dist/plugins/shiftOcr/src/index.js +14 -8
- 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 +5 -5
- 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 +31 -33
- 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 +32 -31
- 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 +2 -1
- package/dist/plugins/_shared/authedFetch.js +0 -33
- package/dist/plugins/_shared/tokenRefresh.js +0 -41
- package/dist/tests/helpers/engine-harness.d.ts +0 -1
- package/dist/tests/helpers/engine-harness.js +0 -236
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { AuthError, type AuthErrorCode } from "./auth/errors.js";
|
|
2
|
-
export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
|
|
2
|
+
export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, acquireOAuth2PasswordToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
|
|
3
3
|
export { decodeOAuthTokens, requestOAuth2Token } from "./auth/token.js";
|
|
4
|
-
export type { OAuth2Definition, OAuth2TokenEndpoint, OAuthApplication, OAuthAuthorizationOptions, OAuthCodeOptions, OAuthEvent, OAuthJwtIdentity, OAuthOperation, OAuthRuntimeOptions, } from "./auth/types.js";
|
|
4
|
+
export type { OAuth2Definition, OAuth2TokenEndpoint, OAuthApplication, OAuthAuthorizationOptions, OAuthCodeOptions, OAuthEvent, OAuthJwtIdentity, OAuthOperation, OAuthResourceOwner, OAuthRuntimeOptions, } from "./auth/types.js";
|
|
5
5
|
export { addConnection, findConfigDir, getConnection, loadConfig, removeConnection, saveConfig, updateConnectionConfig, } from "./config/loader.js";
|
|
6
6
|
export type { RunlineConfig } from "./config/types.js";
|
|
7
7
|
export { DEFAULT_CONFIG } from "./config/types.js";
|
|
@@ -13,16 +13,17 @@ export { ExecutionEngine } from "./core/engine.js";
|
|
|
13
13
|
export type { BuildAuthUrlOptions, ExchangeCodeOptions, OAuthTokens, PKCEPair, RunOAuthOptions, } from "./core/oauth.js";
|
|
14
14
|
export { buildAuthUrl, exchangeAuthCode, generatePKCE, OAUTH_CALLBACK_PORT, OAUTH_CALLBACK_URI, oauthCallback, runOAuth, } from "./core/oauth.js";
|
|
15
15
|
export { downloadResource } from "./credentials/http.js";
|
|
16
|
-
export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, validateCredential, } from "./credentials/registry.js";
|
|
17
|
-
export type { AuthenticatedRequest, CredentialTransportOptions, } from "./credentials/transport.js";
|
|
16
|
+
export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, staticSecretSchema, validateCredential, } from "./credentials/registry.js";
|
|
17
|
+
export type { AuthenticatedRequest, CredentialBroker, CredentialBrokerCall, CredentialTransportOptions, SocketRequest, } from "./credentials/transport.js";
|
|
18
18
|
export { CredentialTransport } from "./credentials/transport.js";
|
|
19
|
-
export type { CredentialAuthentication, CredentialBinding, CredentialMethod, CredentialProbe, CredentialProbeResult, CredentialTarget, CredentialType, HttpMethod, OAuthGrant, } from "./credentials/types.js";
|
|
19
|
+
export type { CredentialAuthentication, CredentialBinding, CredentialDeclaration, CredentialMethod, CredentialProbe, CredentialProbeResult, CredentialSelection, CredentialTarget, CredentialType, HttpMethod, LocalSecretPart, LocalSecretSource, OAuthGrant, SecretPlacement, } from "./credentials/types.js";
|
|
20
20
|
export type { ActionDefinition, PluginFunction, RunlinePluginAPI, } from "./plugin/api.js";
|
|
21
21
|
export { createPluginAPI, isPluginFunction, resolvePluginExport, } from "./plugin/api.js";
|
|
22
22
|
export type { InstalledPlugin, PluginSource } from "./plugin/installer.js";
|
|
23
23
|
export { installPlugin, listInstalled, parsePluginSource, removePlugin, } from "./plugin/installer.js";
|
|
24
24
|
export { discoverPlugins, loadAllPlugins, loadPluginFromPath, loadPluginsFromConfig, } from "./plugin/loader.js";
|
|
25
25
|
export { PluginRegistry, registry } from "./plugin/registry.js";
|
|
26
|
+
export { connectionFields } from "./plugin/schema.js";
|
|
26
27
|
export type { ActionAccess, ActionContext, ActionDef, ConnectionConfig, ConnectionSchema, ConnectionSchemaField, InputField, InputSchema, LegacyConnectionSchema, OAuthConfig, PluginDef, } from "./plugin/types.js";
|
|
27
28
|
export type { RunlineExecuteOptions, RunlineOptions } from "./sdk.js";
|
|
28
29
|
export { Runline } from "./sdk.js";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { AuthError } from "./auth/errors.js";
|
|
2
|
-
export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
|
|
2
|
+
export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, acquireOAuth2PasswordToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
|
|
3
3
|
export { decodeOAuthTokens, requestOAuth2Token } from "./auth/token.js";
|
|
4
4
|
export { addConnection, findConfigDir, getConnection, loadConfig, removeConnection, saveConfig, updateConnectionConfig, } from "./config/loader.js";
|
|
5
5
|
export { DEFAULT_CONFIG } from "./config/types.js";
|
|
@@ -8,11 +8,12 @@ export { MemoryConnectionProvider } from "./connections/memory.js";
|
|
|
8
8
|
export { ExecutionEngine } from "./core/engine.js";
|
|
9
9
|
export { buildAuthUrl, exchangeAuthCode, generatePKCE, OAUTH_CALLBACK_PORT, OAUTH_CALLBACK_URI, oauthCallback, runOAuth, } from "./core/oauth.js";
|
|
10
10
|
export { downloadResource } from "./credentials/http.js";
|
|
11
|
-
export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, validateCredential, } from "./credentials/registry.js";
|
|
11
|
+
export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, staticSecretSchema, validateCredential, } from "./credentials/registry.js";
|
|
12
12
|
export { CredentialTransport } from "./credentials/transport.js";
|
|
13
13
|
export { createPluginAPI, isPluginFunction, resolvePluginExport, } from "./plugin/api.js";
|
|
14
14
|
export { installPlugin, listInstalled, parsePluginSource, removePlugin, } from "./plugin/installer.js";
|
|
15
15
|
export { discoverPlugins, loadAllPlugins, loadPluginFromPath, loadPluginsFromConfig, } from "./plugin/loader.js";
|
|
16
16
|
export { PluginRegistry, registry } from "./plugin/registry.js";
|
|
17
|
+
export { connectionFields } from "./plugin/schema.js";
|
|
17
18
|
export { Runline } from "./sdk.js";
|
|
18
19
|
export { commandExists, syncExec } from "./utils/cli.js";
|
package/dist/plugin/api.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CredentialDeclaration } from "../credentials/types.js";
|
|
1
2
|
import type { ActionAccess, ActionDef, ConnectionSchema, InputSchema, OAuthConfig, PluginDef } from "./types.js";
|
|
2
3
|
export interface ActionDefinition {
|
|
3
4
|
access?: ActionAccess;
|
|
@@ -16,6 +17,12 @@ export interface RunlinePluginAPI {
|
|
|
16
17
|
* with refreshable tokens.
|
|
17
18
|
*/
|
|
18
19
|
setOAuth(oauth: OAuthConfig): void;
|
|
20
|
+
/**
|
|
21
|
+
* Declare how a connection's config becomes what this plugin's requests
|
|
22
|
+
* are signed with, so a host brokering for it can sign from the plugin
|
|
23
|
+
* it loaded rather than from anything the plugin's process sends.
|
|
24
|
+
*/
|
|
25
|
+
setCredential(declaration: CredentialDeclaration): void;
|
|
19
26
|
onInit(fn: (config: Record<string, unknown>) => void): void;
|
|
20
27
|
log: {
|
|
21
28
|
info(msg: string): void;
|
package/dist/plugin/api.js
CHANGED
|
@@ -4,6 +4,7 @@ export function createPluginAPI(pluginId) {
|
|
|
4
4
|
const actions = [];
|
|
5
5
|
let connectionConfigSchema;
|
|
6
6
|
let oauth;
|
|
7
|
+
let credential;
|
|
7
8
|
const initHooks = [];
|
|
8
9
|
const api = {
|
|
9
10
|
setName(n) {
|
|
@@ -24,6 +25,9 @@ export function createPluginAPI(pluginId) {
|
|
|
24
25
|
setOAuth(cfg) {
|
|
25
26
|
oauth = { ...cfg };
|
|
26
27
|
},
|
|
28
|
+
setCredential(declaration) {
|
|
29
|
+
credential = declaration;
|
|
30
|
+
},
|
|
27
31
|
onInit(fn) {
|
|
28
32
|
initHooks.push(fn);
|
|
29
33
|
},
|
|
@@ -49,6 +53,9 @@ export function createPluginAPI(pluginId) {
|
|
|
49
53
|
if (oauth) {
|
|
50
54
|
plugin.oauth = oauth;
|
|
51
55
|
}
|
|
56
|
+
if (credential) {
|
|
57
|
+
plugin.credential = credential;
|
|
58
|
+
}
|
|
52
59
|
if (initHooks.length > 0) {
|
|
53
60
|
plugin.initHooks = initHooks;
|
|
54
61
|
}
|
package/dist/plugin/schema.d.ts
CHANGED
|
@@ -16,13 +16,25 @@ export declare function connectionFields(schema: ConnectionSchema | undefined):
|
|
|
16
16
|
export declare function helpInputs(schema: InputSchema | undefined): Record<string, HelpInput>;
|
|
17
17
|
export declare function validateLegacyInput(schema: LegacyInputSchema, input: unknown): ValidationResult;
|
|
18
18
|
/**
|
|
19
|
-
* A
|
|
19
|
+
* A value as JSON would carry it: plain-object keys whose value is
|
|
20
|
+
* `undefined` are dropped, at every depth. JSON has no `undefined`, and a
|
|
21
|
+
* schema's `required` counts a present key as given, so `{ name: undefined }`
|
|
22
|
+
* would otherwise satisfy a rule that needs a name. Arrays keep their
|
|
23
|
+
* length; other objects (a Buffer, a Date) pass through untouched.
|
|
20
24
|
*
|
|
25
|
+
* Self-contained, because the worker's `actions.check` runs this same
|
|
26
|
+
* source: preflight and execution cannot disagree about what was passed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function dropUndefined(value: unknown): unknown;
|
|
29
|
+
/**
|
|
30
|
+
* An action's arguments as validation and `execute` see them.
|
|
31
|
+
*
|
|
32
|
+
* A call written with no arguments is a call with an empty argument set:
|
|
21
33
|
* `linear.user.me()` supplies no argument, so object validation needs an
|
|
22
34
|
* empty object to accept no-input actions and name missing required fields.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
35
|
+
* An explicit `null` or `42` is an argument, and a wrong one. Keys holding
|
|
36
|
+
* `undefined` are absent, by `dropUndefined`. The worker's `actions.check`
|
|
37
|
+
* runs this source too, so it may call nothing but `dropUndefined`.
|
|
26
38
|
*/
|
|
27
39
|
export declare function normalizeActionInput(input: unknown): unknown;
|
|
28
40
|
export declare function validateTypedInput(schema: TypedInputSchema, rawInput: unknown): ValidationResult;
|
package/dist/plugin/schema.js
CHANGED
|
@@ -187,16 +187,39 @@ export function validateLegacyInput(schema, input) {
|
|
|
187
187
|
return validationResult({ missing, unknown, typeErrors });
|
|
188
188
|
}
|
|
189
189
|
/**
|
|
190
|
-
* A
|
|
190
|
+
* A value as JSON would carry it: plain-object keys whose value is
|
|
191
|
+
* `undefined` are dropped, at every depth. JSON has no `undefined`, and a
|
|
192
|
+
* schema's `required` counts a present key as given, so `{ name: undefined }`
|
|
193
|
+
* would otherwise satisfy a rule that needs a name. Arrays keep their
|
|
194
|
+
* length; other objects (a Buffer, a Date) pass through untouched.
|
|
191
195
|
*
|
|
196
|
+
* Self-contained, because the worker's `actions.check` runs this same
|
|
197
|
+
* source: preflight and execution cannot disagree about what was passed.
|
|
198
|
+
*/
|
|
199
|
+
export function dropUndefined(value) {
|
|
200
|
+
if (Array.isArray(value))
|
|
201
|
+
return value.map((entry) => dropUndefined(entry));
|
|
202
|
+
if (value === null || typeof value !== "object")
|
|
203
|
+
return value;
|
|
204
|
+
const prototype = Object.getPrototypeOf(value);
|
|
205
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
206
|
+
return value;
|
|
207
|
+
return Object.fromEntries(Object.entries(value)
|
|
208
|
+
.filter(([, entry]) => entry !== undefined)
|
|
209
|
+
.map(([key, entry]) => [key, dropUndefined(entry)]));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* An action's arguments as validation and `execute` see them.
|
|
213
|
+
*
|
|
214
|
+
* A call written with no arguments is a call with an empty argument set:
|
|
192
215
|
* `linear.user.me()` supplies no argument, so object validation needs an
|
|
193
216
|
* empty object to accept no-input actions and name missing required fields.
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
217
|
+
* An explicit `null` or `42` is an argument, and a wrong one. Keys holding
|
|
218
|
+
* `undefined` are absent, by `dropUndefined`. The worker's `actions.check`
|
|
219
|
+
* runs this source too, so it may call nothing but `dropUndefined`.
|
|
197
220
|
*/
|
|
198
221
|
export function normalizeActionInput(input) {
|
|
199
|
-
return input === undefined ? {} : input;
|
|
222
|
+
return input === undefined ? {} : dropUndefined(input);
|
|
200
223
|
}
|
|
201
224
|
export function validateTypedInput(schema, rawInput) {
|
|
202
225
|
const input = normalizeActionInput(rawInput);
|
package/dist/plugin/types.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { TSchema } from "typebox";
|
|
2
2
|
import type { OAuth2Definition } from "../auth/types.js";
|
|
3
3
|
import type { ConnectionUpdate } from "../connections/types.js";
|
|
4
|
+
import type { CredentialBroker } from "../credentials/transport.js";
|
|
5
|
+
import type { CredentialDeclaration } from "../credentials/types.js";
|
|
4
6
|
export interface InputField {
|
|
5
7
|
type: "string" | "number" | "boolean" | "object" | "array";
|
|
6
8
|
description?: string;
|
|
@@ -60,6 +62,13 @@ export interface ActionContext {
|
|
|
60
62
|
* engine). Absent when the embedder passed none.
|
|
61
63
|
*/
|
|
62
64
|
context?: unknown;
|
|
65
|
+
/**
|
|
66
|
+
* Authenticated requests signed by the host, present when the embedder
|
|
67
|
+
* holds this connection's credentials elsewhere and the plugin declares
|
|
68
|
+
* its credential. A plugin given one sends through it and signs nothing
|
|
69
|
+
* itself: its connection config then carries public settings only.
|
|
70
|
+
*/
|
|
71
|
+
credentials?: CredentialBroker;
|
|
63
72
|
log: {
|
|
64
73
|
info(msg: string): void;
|
|
65
74
|
warn(msg: string): void;
|
|
@@ -99,6 +108,14 @@ export type OAuthConfig = OAuthSetupOptions & ({
|
|
|
99
108
|
interface OAuthSetupOptions {
|
|
100
109
|
/** Scopes to request on the consent screen. */
|
|
101
110
|
scopes: string[];
|
|
111
|
+
/**
|
|
112
|
+
* The grant this plugin's consent belongs to, shared by every plugin
|
|
113
|
+
* declaring the same id (`google`, `microsoft`): one provider, one OAuth
|
|
114
|
+
* client, one person's consent. A host may hold one connection for the
|
|
115
|
+
* whole grant and ask for the union of its plugins' scopes. The plugin's
|
|
116
|
+
* credential declares the same id, so its tokens are the grant's.
|
|
117
|
+
*/
|
|
118
|
+
grant?: string;
|
|
102
119
|
/**
|
|
103
120
|
* Provider-fixed loopback callback (`http://localhost:<port>/<path>`),
|
|
104
121
|
* replacing Runline's default `http://127.0.0.1:47823/callback`. Use only
|
|
@@ -128,6 +145,9 @@ export interface PluginDef {
|
|
|
128
145
|
connectionConfigSchema?: ConnectionSchema;
|
|
129
146
|
/** OAuth2 config for `runline auth <plugin>`. */
|
|
130
147
|
oauth?: OAuthConfig;
|
|
148
|
+
/** How a connection's config becomes what its requests are signed with;
|
|
149
|
+
* present on plugins whose requests go through the credential registry. */
|
|
150
|
+
credential?: CredentialDeclaration;
|
|
131
151
|
/** @internal */
|
|
132
152
|
initHooks?: Array<(config: Record<string, unknown>) => void>;
|
|
133
153
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as t from "typebox";
|
|
2
|
+
/**
|
|
3
|
+
* Caller-supplied base64 in the standard padded alphabet: whitespace
|
|
4
|
+
* dropped, base64url's `-` and `_` mapped to `+` and `/`, padding
|
|
5
|
+
* restored. So a gmail.message.getAttachment result (base64url, unpadded)
|
|
6
|
+
* and a googleDrive download (standard) are equally accepted. Undefined
|
|
7
|
+
* when the value is not base64: a character outside both alphabets,
|
|
8
|
+
* padding anywhere but the end, or a length no encoding produces.
|
|
9
|
+
*
|
|
10
|
+
* Flat character-class patterns only: values run to many megabytes.
|
|
11
|
+
*/
|
|
12
|
+
export function standardBase64(value) {
|
|
13
|
+
const compact = value.replace(/\s+/g, "").replace(/={1,2}$/, "");
|
|
14
|
+
if (!/^[A-Za-z0-9+/_-]*$/.test(compact) || compact.length % 4 === 1)
|
|
15
|
+
return undefined;
|
|
16
|
+
const standard = compact.replace(/-/g, "+").replace(/_/g, "/");
|
|
17
|
+
return standard.padEnd(Math.ceil(standard.length / 4) * 4, "=");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A googleDrive.file.download result, accepted wherever attachment bytes
|
|
21
|
+
* are: exactly its fields, so the result passes through unedited while
|
|
22
|
+
* anything else is still refused. Its `name` and `mimeType` stand in for
|
|
23
|
+
* an attachment's own when those are left out.
|
|
24
|
+
*/
|
|
25
|
+
export const DownloadedFile = t.Object({
|
|
26
|
+
contentBase64: t.String(),
|
|
27
|
+
name: t.Optional(t.String()),
|
|
28
|
+
mimeType: t.Optional(t.String()),
|
|
29
|
+
size: t.Optional(t.Integer({ minimum: 0 })),
|
|
30
|
+
}, { additionalProperties: false });
|
|
@@ -1,15 +1,93 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { AuthError, CredentialRegistry, CredentialTransport, } from "runline";
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Where one action call's authenticated requests go: the host's broker
|
|
5
|
+
* when it supplies one — the credentials then live with the host, and no
|
|
6
|
+
* local signer is built — else this process signs with its own
|
|
7
|
+
* connection, from the plugin's declaration.
|
|
8
|
+
*/
|
|
9
|
+
export function credentialBroker(ctx, declaration) {
|
|
10
|
+
if (ctx.credentials)
|
|
11
|
+
return ctx.credentials;
|
|
12
|
+
const { binding, transport } = localSigner(ctx, declaration);
|
|
13
|
+
return {
|
|
14
|
+
request: (input) => transport.request(binding, input),
|
|
15
|
+
probe: () => transport.probe(binding),
|
|
16
|
+
socketUrl: (input) => transport.socketUrl(binding, input),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Everything a stored token was issued under. A config whose selection
|
|
21
|
+
* hashes differently can no longer use tokens issued for this one. A
|
|
22
|
+
* token of a declared grant was issued under the grant — its method,
|
|
23
|
+
* client and token endpoint (Microsoft's names the tenant) — not the
|
|
24
|
+
* plugin that asked, so every plugin of the grant hashes alike and shares
|
|
25
|
+
* it; any other token is the whole selection's, scopes and targets included.
|
|
26
|
+
*/
|
|
27
|
+
function authorityOf(selection) {
|
|
28
|
+
const { type, method, application } = selection;
|
|
29
|
+
const auth = Object.hasOwn(type.methods, method)
|
|
30
|
+
? type.methods[method].authentication
|
|
31
|
+
: undefined;
|
|
32
|
+
const issuedUnder = auth?.kind === "oauth2" && auth.grant !== undefined
|
|
33
|
+
? {
|
|
34
|
+
grant: auth.grant,
|
|
35
|
+
method,
|
|
36
|
+
application,
|
|
37
|
+
endpoint: auth.definition.refresh,
|
|
38
|
+
}
|
|
39
|
+
: selection;
|
|
40
|
+
return createHash("sha256")
|
|
41
|
+
.update(JSON.stringify(issuedUnder))
|
|
8
42
|
.digest("hex");
|
|
9
|
-
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A static secret's structured shape, from the flat fields and fixed values
|
|
46
|
+
* the declaration names, joined in order where a part concatenates them.
|
|
47
|
+
* Absent when a required part's field is missing, so the transport refuses
|
|
48
|
+
* it as invalid_credentials before any IO; a missing optional part is left
|
|
49
|
+
* out, refusing only the targets that place it.
|
|
50
|
+
*/
|
|
51
|
+
function staticSecret(current, sources, optional) {
|
|
52
|
+
if (!sources)
|
|
53
|
+
return undefined;
|
|
54
|
+
const secret = {};
|
|
55
|
+
sources: for (const [key, source] of Object.entries(sources)) {
|
|
56
|
+
let joined = "";
|
|
57
|
+
for (const part of "concat" in source ? source.concat : [source]) {
|
|
58
|
+
const value = "value" in part ? part.value : current[part.field];
|
|
59
|
+
if (typeof value !== "string") {
|
|
60
|
+
if (optional.includes(key))
|
|
61
|
+
continue sources;
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
joined += value;
|
|
65
|
+
}
|
|
66
|
+
secret[key] = joined;
|
|
67
|
+
}
|
|
68
|
+
return secret;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* This process signing with its own connection. Flat CLI/env storage is a
|
|
72
|
+
* projection, not a second token cache or refresh engine.
|
|
73
|
+
*/
|
|
74
|
+
function localSigner(ctx, declaration) {
|
|
75
|
+
const selection = declaration(ctx.connection.config);
|
|
76
|
+
const { type: definition, method } = selection;
|
|
77
|
+
if (!Object.hasOwn(definition.methods, method))
|
|
78
|
+
throw new AuthError("invalid_definition");
|
|
79
|
+
const auth = definition.methods[method].authentication;
|
|
80
|
+
const identity = { name: ctx.connection.name, plugin: ctx.connection.plugin };
|
|
81
|
+
const expected = authorityOf(selection);
|
|
10
82
|
const project = (current) => {
|
|
11
|
-
if (
|
|
83
|
+
if (authorityOf(declaration(current)) !== expected)
|
|
12
84
|
throw new AuthError("binding_changed");
|
|
85
|
+
if (auth.kind === "none")
|
|
86
|
+
return {};
|
|
87
|
+
if (auth.kind === "static") {
|
|
88
|
+
const secret = staticSecret(current, selection.localSecret, auth.optionalParts ?? []);
|
|
89
|
+
return secret ? { [auth.field]: secret } : {};
|
|
90
|
+
}
|
|
13
91
|
const compatible = current.authTokenBinding === undefined ||
|
|
14
92
|
current.authTokenBinding === expected;
|
|
15
93
|
const tokens = {
|
|
@@ -34,7 +112,7 @@ export function credentialRuntime(ctx, definition, method, authority) {
|
|
|
34
112
|
const revision = typeof current.authTokenRevision === "string" && compatible
|
|
35
113
|
? current.authTokenRevision
|
|
36
114
|
: createHash("sha256").update(JSON.stringify(tokens)).digest("hex");
|
|
37
|
-
return {
|
|
115
|
+
return { [auth.field]: { tokens, revision } };
|
|
38
116
|
};
|
|
39
117
|
const snapshot = () => ({
|
|
40
118
|
...identity,
|
|
@@ -44,21 +122,25 @@ export function credentialRuntime(ctx, definition, method, authority) {
|
|
|
44
122
|
type: definition.id,
|
|
45
123
|
method,
|
|
46
124
|
identity,
|
|
47
|
-
application:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
125
|
+
application: selection.application,
|
|
126
|
+
...(selection.jwtIdentity ? { jwtIdentity: selection.jwtIdentity } : {}),
|
|
127
|
+
...(selection.resourceOwner
|
|
128
|
+
? { resourceOwner: selection.resourceOwner }
|
|
129
|
+
: {}),
|
|
51
130
|
connection: {
|
|
52
131
|
async read() {
|
|
53
132
|
return snapshot();
|
|
54
133
|
},
|
|
55
134
|
async update(change) {
|
|
135
|
+
// Only an OAuth grant is ever renewed and written back.
|
|
136
|
+
if (auth.kind !== "oauth2")
|
|
137
|
+
throw new AuthError("invalid_definition");
|
|
56
138
|
await ctx.updateConnection(async (current) => {
|
|
57
139
|
const projected = project(current);
|
|
58
140
|
const patch = typeof change === "function" ? await change(projected) : change;
|
|
59
141
|
if (!patch)
|
|
60
142
|
return;
|
|
61
|
-
const grant = patch.
|
|
143
|
+
const grant = patch[auth.field];
|
|
62
144
|
if (!grant?.tokens.accessToken)
|
|
63
145
|
throw new AuthError("invalid_credentials");
|
|
64
146
|
return {
|
|
@@ -77,10 +159,12 @@ export function credentialRuntime(ctx, definition, method, authority) {
|
|
|
77
159
|
};
|
|
78
160
|
const registry = new CredentialRegistry();
|
|
79
161
|
registry.register(definition);
|
|
80
|
-
//
|
|
81
|
-
//
|
|
162
|
+
// The widest defaults the transport allows, so an undeclared slow call
|
|
163
|
+
// (image generation, exports) is bounded rather than cut short; targets
|
|
164
|
+
// that declare their own deadline or ceiling get it up to the host caps.
|
|
82
165
|
const transport = new CredentialTransport(registry, {
|
|
83
166
|
fetch: globalThis.fetch,
|
|
167
|
+
timeoutMs: 120_000,
|
|
84
168
|
maxRequestBytes: 64 * 1024 * 1024,
|
|
85
169
|
maxResponseBytes: 64 * 1024 * 1024,
|
|
86
170
|
});
|