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
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
1
|
+
import { createHmac, randomUUID } from "node:crypto";
|
|
2
2
|
import { Check } from "typebox/value";
|
|
3
3
|
import { AuthError } from "../auth/errors.js";
|
|
4
|
-
import { acquireOAuth2ClientToken, acquireOAuth2JwtToken, refreshOAuth2Token, } from "../auth/oauth2.js";
|
|
4
|
+
import { acquireOAuth2ClientToken, acquireOAuth2JwtToken, acquireOAuth2PasswordToken, refreshOAuth2Token, } from "../auth/oauth2.js";
|
|
5
5
|
import { sendResource } from "./http.js";
|
|
6
|
-
import { headerName, resourceUrl } from "./policy.js";
|
|
6
|
+
import { bodyFields, bodyFormat, bounded, headerName, injectedFields, injectedHeaders, injectedParams, injectedPointers, placementsFor, pointerSlot, refuseCredentialParams, resourceUrl, TARGET_RESPONSE_LIMIT_BYTES, TARGET_TIMEOUT_LIMIT_MS, TRANSPORT_HEADERS, targetBase, targetOf, } from "./policy.js";
|
|
7
7
|
import { OAuthGrantSchema, validateCredential, } from "./registry.js";
|
|
8
8
|
function boundSnapshot(binding, method, snapshot) {
|
|
9
9
|
if (snapshot.name !== binding.identity.name ||
|
|
@@ -16,7 +16,7 @@ function grantFrom(method, config) {
|
|
|
16
16
|
const auth = method.authentication;
|
|
17
17
|
if (auth.kind !== "oauth2")
|
|
18
18
|
throw new AuthError("invalid_definition");
|
|
19
|
-
const grant = config[auth.
|
|
19
|
+
const grant = config[auth.field];
|
|
20
20
|
if (grant === undefined)
|
|
21
21
|
return undefined;
|
|
22
22
|
if (!Check(OAuthGrantSchema, grant))
|
|
@@ -33,6 +33,7 @@ function pinBinding(selection) {
|
|
|
33
33
|
identity: { ...selection.identity },
|
|
34
34
|
application: structuredClone(selection.application),
|
|
35
35
|
jwtIdentity: structuredClone(selection.jwtIdentity),
|
|
36
|
+
resourceOwner: structuredClone(selection.resourceOwner),
|
|
36
37
|
connection: {
|
|
37
38
|
read: selection.connection.read.bind(selection.connection),
|
|
38
39
|
update: selection.connection.update.bind(selection.connection),
|
|
@@ -51,6 +52,142 @@ function secret(value) {
|
|
|
51
52
|
throw new AuthError("invalid_credentials");
|
|
52
53
|
return value;
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* A part sent whole as a header value, such as `Bearer <token>`: printable
|
|
57
|
+
* ASCII whose interior spaces are part of the value, with no control
|
|
58
|
+
* character and no space at either end.
|
|
59
|
+
*/
|
|
60
|
+
function headerValue(value) {
|
|
61
|
+
if (typeof value !== "string" ||
|
|
62
|
+
!value ||
|
|
63
|
+
value !== value.trim() ||
|
|
64
|
+
[...value].some((char) => char.charCodeAt(0) < 32 || char.charCodeAt(0) > 126))
|
|
65
|
+
throw new AuthError("invalid_credentials");
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* RFC 7617 user-pass. A colon in the username, or any byte outside printable
|
|
70
|
+
* ASCII, would make the header ambiguous or encoding-dependent.
|
|
71
|
+
*/
|
|
72
|
+
function basicCredentials(username, password) {
|
|
73
|
+
if ((!username && !password) ||
|
|
74
|
+
username.includes(":") ||
|
|
75
|
+
[...username, ...password].some((char) => char.charCodeAt(0) < 32 || char.charCodeAt(0) > 126))
|
|
76
|
+
throw new AuthError("invalid_credentials");
|
|
77
|
+
return Buffer.from(`${username}:${password}`).toString("base64");
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A secret as one path segment: `/`, `\`, `?`, `#` and dot segments are
|
|
81
|
+
* refused rather than encoded; `:` and `@`, which RFC 3986 allows in a
|
|
82
|
+
* segment, stay literal (Telegram's `bot<id>:<token>`).
|
|
83
|
+
*/
|
|
84
|
+
function pathPart(value) {
|
|
85
|
+
if (value === "." || value === ".." || /[/\\?#]/.test(value))
|
|
86
|
+
throw new AuthError("invalid_credentials");
|
|
87
|
+
return encodeURIComponent(value).replace(/%3A/gi, ":").replace(/%40/gi, "@");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Mints HS256 JWTs from a `<key id>:<hex secret>` key for `audience`,
|
|
91
|
+
* each issued when minted and valid five minutes. Any other key shape is
|
|
92
|
+
* refused here, before any IO.
|
|
93
|
+
*/
|
|
94
|
+
function hs256Jwt(key, audience) {
|
|
95
|
+
const match = /^([A-Za-z0-9]+):((?:[0-9a-f]{2})+)$/i.exec(key);
|
|
96
|
+
if (!match)
|
|
97
|
+
throw new AuthError("invalid_credentials");
|
|
98
|
+
const secret = Buffer.from(match[2], "hex");
|
|
99
|
+
const encode = (value) => Buffer.from(JSON.stringify(value)).toString("base64url");
|
|
100
|
+
const header = encode({ alg: "HS256", typ: "JWT", kid: match[1] });
|
|
101
|
+
return () => {
|
|
102
|
+
const iat = Math.floor(Date.now() / 1000);
|
|
103
|
+
const unsigned = `${header}.${encode({ iat, exp: iat + 300, aud: audience })}`;
|
|
104
|
+
const signature = createHmac("sha256", secret)
|
|
105
|
+
.update(unsigned)
|
|
106
|
+
.digest("base64url");
|
|
107
|
+
return `${unsigned}.${signature}`;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function bearer(token) {
|
|
111
|
+
return ({ headers }) => headers.set("authorization", `Bearer ${token}`);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Adds a field to a JSON-object or form body, whose shape was checked
|
|
115
|
+
* before any IO; with no body, to the query.
|
|
116
|
+
*/
|
|
117
|
+
function addField(request, name, value) {
|
|
118
|
+
if (!request.body) {
|
|
119
|
+
request.url.searchParams.append(name, value);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const text = request.body.toString();
|
|
123
|
+
if (bodyFormat(request.headers) === "form") {
|
|
124
|
+
const form = new URLSearchParams(text);
|
|
125
|
+
form.append(name, value);
|
|
126
|
+
request.body = Buffer.from(form.toString());
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
request.body = Buffer.from(JSON.stringify({ ...JSON.parse(text), [name]: value }));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* A static secret's signer for one target, every part it places checked
|
|
134
|
+
* before any IO. `parts` has passed the method's schema, which the
|
|
135
|
+
* registry pins to exactly the declared parts, each a string; an optional
|
|
136
|
+
* part the connection lacks refuses the targets that place it. A query
|
|
137
|
+
* signature runs last, over the query every other placement has written.
|
|
138
|
+
*/
|
|
139
|
+
function placeStatic(auth, parts, target) {
|
|
140
|
+
const part = (name) => {
|
|
141
|
+
const value = parts[name];
|
|
142
|
+
if (value === undefined)
|
|
143
|
+
throw new AuthError("invalid_credentials");
|
|
144
|
+
return value;
|
|
145
|
+
};
|
|
146
|
+
const ordered = placementsFor(auth, target).sort((a, b) => Number(a.in === "querySignature") - Number(b.in === "querySignature"));
|
|
147
|
+
const steps = ordered.map((placement) => {
|
|
148
|
+
if (placement.in === "basic") {
|
|
149
|
+
const value = basicCredentials(part(placement.username), part(placement.password));
|
|
150
|
+
return ({ headers }) => headers.set("authorization", `Basic ${value}`);
|
|
151
|
+
}
|
|
152
|
+
const value = placement.in === "header"
|
|
153
|
+
? headerValue(part(placement.part))
|
|
154
|
+
: secret(part(placement.part));
|
|
155
|
+
if (placement.in === "query")
|
|
156
|
+
return ({ url }) => url.searchParams.append(placement.name, value);
|
|
157
|
+
if (placement.in === "body")
|
|
158
|
+
return (request) => addField(request, placement.name, value);
|
|
159
|
+
if (placement.in === "jsonPointer")
|
|
160
|
+
return (request) => {
|
|
161
|
+
const json = JSON.parse(String(request.body));
|
|
162
|
+
const slot = pointerSlot(json, placement.pointer);
|
|
163
|
+
if (!slot)
|
|
164
|
+
throw new AuthError("request_not_allowed");
|
|
165
|
+
slot.holder[slot.key] = value;
|
|
166
|
+
request.body = Buffer.from(JSON.stringify(json));
|
|
167
|
+
};
|
|
168
|
+
if (placement.in === "path") {
|
|
169
|
+
const segment = `${placement.prefix ?? ""}${pathPart(value)}`;
|
|
170
|
+
return ({ url, base }) => {
|
|
171
|
+
const rest = url.pathname.slice(base.length);
|
|
172
|
+
url.pathname = `${base}${segment}${rest ? `/${rest}` : ""}`;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const name = headerName(placement.name);
|
|
176
|
+
if (placement.in === "jwt") {
|
|
177
|
+
const mint = hs256Jwt(value, placement.audience);
|
|
178
|
+
return ({ headers }) => headers.set(name, `${placement.prefix ?? ""}${mint()}`);
|
|
179
|
+
}
|
|
180
|
+
if (placement.in === "querySignature")
|
|
181
|
+
return ({ url, headers }) => headers.set(name, createHmac("sha256", value)
|
|
182
|
+
.update(url.search.slice(1))
|
|
183
|
+
.digest("base64"));
|
|
184
|
+
return ({ headers }) => headers.set(name, `${placement.prefix ?? ""}${value}`);
|
|
185
|
+
});
|
|
186
|
+
return (request) => {
|
|
187
|
+
for (const step of steps)
|
|
188
|
+
step(request);
|
|
189
|
+
};
|
|
190
|
+
}
|
|
54
191
|
/**
|
|
55
192
|
* Trusted-host primitive, not a workspace sandbox. Callers authorize a binding on
|
|
56
193
|
* every invocation. Handles own lifecycle fencing; no second lock or token cache.
|
|
@@ -65,17 +202,15 @@ export class CredentialTransport {
|
|
|
65
202
|
timeoutMs: options.timeoutMs ?? 20_000,
|
|
66
203
|
maxResponseBytes: options.maxResponseBytes ?? 8 * 1024 * 1024,
|
|
67
204
|
maxRequestBytes: options.maxRequestBytes ?? 1024 * 1024,
|
|
205
|
+
maxTargetTimeoutMs: options.maxTargetTimeoutMs ?? 10 * 60_000,
|
|
206
|
+
maxTargetResponseBytes: options.maxTargetResponseBytes ?? 256 * 1024 * 1024,
|
|
68
207
|
};
|
|
69
208
|
if (typeof this.options.fetch !== "function" ||
|
|
70
|
-
!
|
|
71
|
-
this.options.
|
|
72
|
-
this.options.
|
|
73
|
-
!
|
|
74
|
-
this.options.
|
|
75
|
-
this.options.maxResponseBytes > 64 * 1024 * 1024 ||
|
|
76
|
-
!Number.isSafeInteger(this.options.maxRequestBytes) ||
|
|
77
|
-
this.options.maxRequestBytes <= 0 ||
|
|
78
|
-
this.options.maxRequestBytes > 64 * 1024 * 1024)
|
|
209
|
+
!bounded(this.options.timeoutMs, 120_000) ||
|
|
210
|
+
!bounded(this.options.maxResponseBytes, 64 * 1024 * 1024) ||
|
|
211
|
+
!bounded(this.options.maxRequestBytes, 64 * 1024 * 1024) ||
|
|
212
|
+
!bounded(this.options.maxTargetTimeoutMs, TARGET_TIMEOUT_LIMIT_MS) ||
|
|
213
|
+
!bounded(this.options.maxTargetResponseBytes, TARGET_RESPONSE_LIMIT_BYTES))
|
|
79
214
|
throw new AuthError("invalid_definition");
|
|
80
215
|
}
|
|
81
216
|
async read(binding, method) {
|
|
@@ -106,30 +241,9 @@ export class CredentialTransport {
|
|
|
106
241
|
(previous.tokens.expiresAt === undefined ||
|
|
107
242
|
previous.tokens.expiresAt > Date.now())))
|
|
108
243
|
return;
|
|
109
|
-
const
|
|
110
|
-
fetch: this.options.fetch,
|
|
111
|
-
timeoutMs: this.options.timeoutMs,
|
|
112
|
-
};
|
|
113
|
-
const jwtIdentity = binding.jwtIdentity;
|
|
114
|
-
if (auth.renewal === "jwtBearer" && !jwtIdentity)
|
|
115
|
-
throw new AuthError("invalid_credentials");
|
|
116
|
-
const tokens = auth.renewal === "refresh"
|
|
117
|
-
? await refreshOAuth2Token(auth.definition, {
|
|
118
|
-
application: binding.application,
|
|
119
|
-
tokens: previous?.tokens ?? {},
|
|
120
|
-
scopes: auth.scopes,
|
|
121
|
-
}, options)
|
|
122
|
-
: auth.renewal === "jwtBearer" && jwtIdentity
|
|
123
|
-
? await acquireOAuth2JwtToken(auth.definition, {
|
|
124
|
-
identity: jwtIdentity,
|
|
125
|
-
scopes: auth.scopes ?? [],
|
|
126
|
-
}, options)
|
|
127
|
-
: await acquireOAuth2ClientToken(auth.definition, {
|
|
128
|
-
application: binding.application ?? { clientId: "" },
|
|
129
|
-
scopes: auth.scopes,
|
|
130
|
-
}, options);
|
|
244
|
+
const tokens = await this.issue(auth, binding, previous);
|
|
131
245
|
const patch = {
|
|
132
|
-
[auth.
|
|
246
|
+
[auth.field]: { tokens, revision: randomUUID() },
|
|
133
247
|
};
|
|
134
248
|
const next = { ...current, ...patch };
|
|
135
249
|
validateCredential(method, next);
|
|
@@ -153,32 +267,43 @@ export class CredentialTransport {
|
|
|
153
267
|
throw new AuthError("invalid_credentials");
|
|
154
268
|
return grant;
|
|
155
269
|
}
|
|
270
|
+
/** New tokens by the method's declared renewal, from what the binding supplies. */
|
|
271
|
+
issue(auth, binding, previous) {
|
|
272
|
+
const options = {
|
|
273
|
+
fetch: this.options.fetch,
|
|
274
|
+
timeoutMs: this.options.timeoutMs,
|
|
275
|
+
};
|
|
276
|
+
const { definition, scopes } = auth;
|
|
277
|
+
const { application, jwtIdentity, resourceOwner } = binding;
|
|
278
|
+
if (auth.renewal === "refresh")
|
|
279
|
+
return refreshOAuth2Token(definition, { application, tokens: previous?.tokens ?? {}, scopes }, options);
|
|
280
|
+
if (auth.renewal === "jwtBearer") {
|
|
281
|
+
if (!jwtIdentity)
|
|
282
|
+
throw new AuthError("invalid_credentials");
|
|
283
|
+
return acquireOAuth2JwtToken(definition, { identity: jwtIdentity, scopes: scopes ?? [] }, options);
|
|
284
|
+
}
|
|
285
|
+
if (auth.renewal === "password") {
|
|
286
|
+
if (!resourceOwner)
|
|
287
|
+
throw new AuthError("invalid_credentials");
|
|
288
|
+
return acquireOAuth2PasswordToken(definition, { owner: resourceOwner, application, scopes }, options);
|
|
289
|
+
}
|
|
290
|
+
return acquireOAuth2ClientToken(definition, { application: application ?? { clientId: "" }, scopes }, options);
|
|
291
|
+
}
|
|
156
292
|
async request(selection, input) {
|
|
157
293
|
// Pin authority, routing, headers, registration, and replayable bytes before IO.
|
|
158
294
|
const binding = pinBinding(selection);
|
|
159
295
|
const method = this.registry.select(binding.type, binding.method);
|
|
160
|
-
const target =
|
|
161
|
-
|
|
162
|
-
: undefined;
|
|
163
|
-
if (!target)
|
|
296
|
+
const target = targetOf(method, input.target);
|
|
297
|
+
if (!target || target.socket)
|
|
164
298
|
throw new AuthError("request_not_allowed");
|
|
165
299
|
const url = resourceUrl(target, input.path);
|
|
166
300
|
const verb = input.method ?? "GET";
|
|
167
301
|
if (!target.methods.includes(verb) ||
|
|
168
302
|
(input.retry !== undefined && input.retry !== "never"))
|
|
169
303
|
throw new AuthError("request_not_allowed");
|
|
170
|
-
for (const name of url.searchParams.keys()) {
|
|
171
|
-
if ([
|
|
172
|
-
"access_token",
|
|
173
|
-
"refresh_token",
|
|
174
|
-
"client_secret",
|
|
175
|
-
"api_key",
|
|
176
|
-
"authorization",
|
|
177
|
-
].includes(name.toLowerCase()))
|
|
178
|
-
throw new AuthError("request_not_allowed");
|
|
179
|
-
}
|
|
180
304
|
const auth = method.authentication;
|
|
181
|
-
|
|
305
|
+
refuseCredentialParams(url, injectedParams(auth, input.target));
|
|
306
|
+
const reserved = injectedHeaders(auth, input.target);
|
|
182
307
|
let headers;
|
|
183
308
|
let body;
|
|
184
309
|
try {
|
|
@@ -191,13 +316,23 @@ export class CredentialTransport {
|
|
|
191
316
|
for (const [name, value] of Object.entries(input.headers ?? {})) {
|
|
192
317
|
const normalized = headerName(name);
|
|
193
318
|
if (!allowed.has(normalized) ||
|
|
194
|
-
normalized
|
|
195
|
-
normalized
|
|
319
|
+
reserved.includes(normalized) ||
|
|
320
|
+
TRANSPORT_HEADERS.includes(normalized) ||
|
|
196
321
|
normalized === target.idempotency?.header.toLowerCase() ||
|
|
197
322
|
typeof value !== "string")
|
|
198
323
|
throw new Error();
|
|
199
324
|
headers.set(normalized, value);
|
|
200
325
|
}
|
|
326
|
+
const copies = verb === "COPY" || verb === "MOVE";
|
|
327
|
+
if (copies !== (input.destination !== undefined))
|
|
328
|
+
throw new Error();
|
|
329
|
+
if (input.destination !== undefined) {
|
|
330
|
+
if (typeof input.destination !== "string" ||
|
|
331
|
+
!input.destination ||
|
|
332
|
+
input.destination.includes("?"))
|
|
333
|
+
throw new Error();
|
|
334
|
+
headers.set("destination", resourceUrl(target, input.destination).toString());
|
|
335
|
+
}
|
|
201
336
|
if (input.body !== undefined) {
|
|
202
337
|
if (verb === "GET" ||
|
|
203
338
|
verb === "HEAD" ||
|
|
@@ -210,6 +345,21 @@ export class CredentialTransport {
|
|
|
210
345
|
if (size > this.options.maxRequestBytes)
|
|
211
346
|
throw new Error();
|
|
212
347
|
body = Buffer.from(input.body);
|
|
348
|
+
const fields = injectedFields(auth, input.target).map((name) => name.toLowerCase());
|
|
349
|
+
if (fields.length &&
|
|
350
|
+
bodyFields(headers, body).some((name) => fields.includes(name.toLowerCase())))
|
|
351
|
+
throw new Error();
|
|
352
|
+
}
|
|
353
|
+
const pointers = injectedPointers(auth, input.target);
|
|
354
|
+
if (pointers.length) {
|
|
355
|
+
if (!body || bodyFormat(headers) !== "json")
|
|
356
|
+
throw new Error();
|
|
357
|
+
const json = JSON.parse(body.toString());
|
|
358
|
+
for (const pointer of pointers) {
|
|
359
|
+
const slot = pointerSlot(json, pointer);
|
|
360
|
+
if (!slot || slot.holder[slot.key] !== null)
|
|
361
|
+
throw new Error();
|
|
362
|
+
}
|
|
213
363
|
}
|
|
214
364
|
if (input.idempotencyKey !== undefined) {
|
|
215
365
|
if (!target.idempotency?.methods.includes(verb))
|
|
@@ -222,16 +372,24 @@ export class CredentialTransport {
|
|
|
222
372
|
}
|
|
223
373
|
const replay = input.retry !== "never" &&
|
|
224
374
|
(verb === "GET" || verb === "HEAD" || input.idempotencyKey !== undefined);
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
375
|
+
const base = targetBase(target).pathname;
|
|
376
|
+
let { sign, grant } = await this.authorize(binding, method, input.target);
|
|
377
|
+
const send = async (signer) => {
|
|
378
|
+
const outgoing = {
|
|
379
|
+
headers: new Headers(headers),
|
|
380
|
+
url: new URL(url),
|
|
381
|
+
body,
|
|
382
|
+
base,
|
|
383
|
+
};
|
|
384
|
+
signer(outgoing);
|
|
385
|
+
return sendResource(outgoing.url.toString(), verb, outgoing.headers, outgoing.body, {
|
|
386
|
+
fetch: this.options.fetch,
|
|
387
|
+
timeoutMs: Math.min(target.timeoutMs ?? this.options.timeoutMs, this.options.maxTargetTimeoutMs),
|
|
388
|
+
maxResponseBytes: Math.min(target.maxResponseBytes ?? this.options.maxResponseBytes, this.options.maxTargetResponseBytes),
|
|
231
389
|
resumableUpload: target.resumableUpload,
|
|
232
390
|
});
|
|
233
391
|
};
|
|
234
|
-
const first = await send(
|
|
392
|
+
const first = await send(sign);
|
|
235
393
|
if (auth.kind !== "oauth2" ||
|
|
236
394
|
!grant ||
|
|
237
395
|
!replay ||
|
|
@@ -239,7 +397,28 @@ export class CredentialTransport {
|
|
|
239
397
|
return first;
|
|
240
398
|
// Exactly one replay, only after durable renewal (or a newer committed revision).
|
|
241
399
|
grant = await this.renew(binding, method, grant.revision, true);
|
|
242
|
-
return send(secret(grant.tokens.accessToken));
|
|
400
|
+
return send(bearer(secret(grant.tokens.accessToken)));
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* A socket target's URL, signed by its query placements, for a host's
|
|
404
|
+
* relay or the local signer to open. Nothing is sent.
|
|
405
|
+
*/
|
|
406
|
+
async socketUrl(selection, input) {
|
|
407
|
+
const binding = pinBinding(selection);
|
|
408
|
+
const method = this.registry.select(binding.type, binding.method);
|
|
409
|
+
const target = targetOf(method, input.target);
|
|
410
|
+
if (!target?.socket)
|
|
411
|
+
throw new AuthError("request_not_allowed");
|
|
412
|
+
const url = resourceUrl(target, input.path);
|
|
413
|
+
refuseCredentialParams(url, injectedParams(method.authentication, input.target));
|
|
414
|
+
const { sign } = await this.authorize(binding, method, input.target);
|
|
415
|
+
const outgoing = {
|
|
416
|
+
headers: new Headers(),
|
|
417
|
+
url,
|
|
418
|
+
base: targetBase(target).pathname,
|
|
419
|
+
};
|
|
420
|
+
sign(outgoing);
|
|
421
|
+
return outgoing.url.toString();
|
|
243
422
|
}
|
|
244
423
|
/** Only a declared read-only probe runs. Results never contain provider text or secrets. */
|
|
245
424
|
async probe(binding) {
|
|
@@ -265,19 +444,18 @@ export class CredentialTransport {
|
|
|
265
444
|
};
|
|
266
445
|
}
|
|
267
446
|
}
|
|
268
|
-
|
|
269
|
-
async accessToken(selection) {
|
|
270
|
-
const binding = pinBinding(selection);
|
|
271
|
-
return (await this.authorize(binding, this.registry.select(binding.type, binding.method))).token;
|
|
272
|
-
}
|
|
273
|
-
async authorize(binding, method) {
|
|
447
|
+
async authorize(binding, method, target) {
|
|
274
448
|
const config = await this.read(binding, method);
|
|
275
449
|
const auth = method.authentication;
|
|
276
|
-
if (auth.kind
|
|
277
|
-
return {
|
|
450
|
+
if (auth.kind === "none")
|
|
451
|
+
return { sign: () => { } };
|
|
452
|
+
if (auth.kind === "static")
|
|
453
|
+
return {
|
|
454
|
+
sign: placeStatic(auth, config[auth.field], target),
|
|
455
|
+
};
|
|
278
456
|
let grant = grantFrom(method, config);
|
|
279
457
|
if (!fresh(grant))
|
|
280
458
|
grant = await this.renew(binding, method, grant?.revision);
|
|
281
|
-
return {
|
|
459
|
+
return { sign: bearer(secret(grant?.tokens.accessToken)), grant };
|
|
282
460
|
}
|
|
283
461
|
}
|
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
import type { TSchema } from "typebox";
|
|
2
|
-
import type { OAuth2Definition, OAuthApplication, OAuthJwtIdentity, OAuthTokens } from "../auth/types.js";
|
|
2
|
+
import type { OAuth2Definition, OAuthApplication, OAuthJwtIdentity, OAuthResourceOwner, OAuthTokens } from "../auth/types.js";
|
|
3
3
|
import type { ConnectionHandle } from "../connections/types.js";
|
|
4
|
-
|
|
4
|
+
/** HTTP methods, and the WebDAV methods a file API needs (RFC 4918). */
|
|
5
|
+
export type HttpMethod = "GET" | "HEAD" | "POST" | "PUT" | "PATCH" | "DELETE" | "MKCOL" | "COPY" | "MOVE";
|
|
5
6
|
/** Host-approved resource boundary. No wildcards, templates, or agent-selected origins. */
|
|
6
7
|
export interface CredentialTarget {
|
|
7
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* HTTPS URL ending in /, or wss:// for a socket target. Requests stay
|
|
10
|
+
* beneath this exact origin and path.
|
|
11
|
+
*/
|
|
8
12
|
baseUrl: string;
|
|
13
|
+
/**
|
|
14
|
+
* A WebSocket endpoint (a browser's CDP socket): the transport signs its
|
|
15
|
+
* URL with the method's query placements for the plugin to open, and
|
|
16
|
+
* sends no request to it.
|
|
17
|
+
*/
|
|
18
|
+
socket?: boolean;
|
|
9
19
|
methods: HttpMethod[];
|
|
10
20
|
/** Additional caller-set headers beyond Accept and Content-Type. Auth is reserved. */
|
|
11
21
|
allowedHeaders?: string[];
|
|
22
|
+
/**
|
|
23
|
+
* The provider addresses one resource by a slashed name inside one
|
|
24
|
+
* segment, encoded (`group%2Fproject`, `@scope%2Fpkg`). Each piece
|
|
25
|
+
* between the decoded slashes must still be non-empty and not a dot
|
|
26
|
+
* segment.
|
|
27
|
+
*/
|
|
28
|
+
encodedSlashes?: boolean;
|
|
12
29
|
/** Google-style PUT upload acknowledgements: allow 308 only without Location. */
|
|
13
30
|
resumableUpload?: boolean;
|
|
14
31
|
/** Declare only when the provider guarantees deduplication for these methods. */
|
|
@@ -16,21 +33,124 @@ export interface CredentialTarget {
|
|
|
16
33
|
header: string;
|
|
17
34
|
methods: HttpMethod[];
|
|
18
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* Deadline for requests to this target when the provider holds them open
|
|
38
|
+
* longer than the transport default (synchronous extraction, long polls).
|
|
39
|
+
* Capped by the host's `maxTargetTimeoutMs`.
|
|
40
|
+
*/
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Response ceiling for this target when its answers are larger than the
|
|
44
|
+
* transport default (audio, documents). Capped by the host's
|
|
45
|
+
* `maxTargetResponseBytes`.
|
|
46
|
+
*/
|
|
47
|
+
maxResponseBytes?: number;
|
|
19
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Where the transport puts a static secret's parts. Every name it sets is
|
|
51
|
+
* reserved: a caller may never supply that header, query parameter or
|
|
52
|
+
* body field.
|
|
53
|
+
*/
|
|
54
|
+
export type SecretPlacement = ({
|
|
55
|
+
in: "header";
|
|
56
|
+
part: string;
|
|
57
|
+
name: string;
|
|
58
|
+
/** Fixed scheme before the secret, e.g. "Bearer ", "SSWS " or "Bot ". */
|
|
59
|
+
prefix?: string;
|
|
60
|
+
} | {
|
|
61
|
+
in: "query";
|
|
62
|
+
part: string;
|
|
63
|
+
name: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A top-level field of a JSON-object or form body; in the query when
|
|
67
|
+
* the request carries no body.
|
|
68
|
+
*/
|
|
69
|
+
| {
|
|
70
|
+
in: "body";
|
|
71
|
+
part: string;
|
|
72
|
+
name: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A position deeper in a JSON body, by RFC 6901 pointer (Odoo's
|
|
76
|
+
* `/params/args/2`); the request carries null there for the transport
|
|
77
|
+
* to fill.
|
|
78
|
+
*/
|
|
79
|
+
| {
|
|
80
|
+
in: "jsonPointer";
|
|
81
|
+
part: string;
|
|
82
|
+
pointer: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The first path segment beneath the target's base, as `<prefix><part>`:
|
|
86
|
+
* Telegram's `bot<token>`, an account ID before its resources.
|
|
87
|
+
*/
|
|
88
|
+
| {
|
|
89
|
+
in: "path";
|
|
90
|
+
part: string;
|
|
91
|
+
prefix?: string;
|
|
92
|
+
}
|
|
93
|
+
/** HTTP Basic in Authorization, from two parts; either may be empty. */
|
|
94
|
+
| {
|
|
95
|
+
in: "basic";
|
|
96
|
+
username: string;
|
|
97
|
+
password: string;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* An HS256 JWT signed per request from a `<key id>:<hex secret>` part
|
|
101
|
+
* (Ghost's Admin API key) for `audience`, valid five minutes, sent as
|
|
102
|
+
* `<name>: <prefix><token>`.
|
|
103
|
+
*/
|
|
104
|
+
| {
|
|
105
|
+
in: "jwt";
|
|
106
|
+
part: string;
|
|
107
|
+
name: string;
|
|
108
|
+
prefix?: string;
|
|
109
|
+
audience: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* An HMAC-SHA256 of the request's query string as sent, keyed by the
|
|
113
|
+
* part, base64 in header `name` (Unleashed); computed after every other
|
|
114
|
+
* placement, so it signs what goes out.
|
|
115
|
+
*/
|
|
116
|
+
| {
|
|
117
|
+
in: "querySignature";
|
|
118
|
+
part: string;
|
|
119
|
+
name: string;
|
|
120
|
+
}) & {
|
|
121
|
+
/**
|
|
122
|
+
* The targets this placement signs; every target when absent. Two
|
|
123
|
+
* credentials in one connection, each for its own API, are two parts
|
|
124
|
+
* scoped to their own targets.
|
|
125
|
+
*/
|
|
126
|
+
targets?: string[];
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* How a request is signed. `field` names the one top-level config field
|
|
130
|
+
* holding the secret: for `static`, a record of the named `parts`
|
|
131
|
+
* (`staticSecretSchema(parts)`), each sent through its placements; for
|
|
132
|
+
* `oauth2`, a revisioned OAuthGrant. `none` signs nothing: the method of a
|
|
133
|
+
* connection that holds no optional credential, still pinned to its
|
|
134
|
+
* targets.
|
|
135
|
+
*/
|
|
20
136
|
export type CredentialAuthentication = {
|
|
21
|
-
kind: "
|
|
22
|
-
field: string;
|
|
23
|
-
header: string;
|
|
137
|
+
kind: "none";
|
|
24
138
|
} | {
|
|
25
|
-
kind: "
|
|
139
|
+
kind: "static";
|
|
26
140
|
field: string;
|
|
141
|
+
parts: string[];
|
|
142
|
+
/**
|
|
143
|
+
* Parts a connection may lack; a request to a target that places a
|
|
144
|
+
* missing part is refused as invalid_credentials.
|
|
145
|
+
*/
|
|
146
|
+
optionalParts?: string[];
|
|
147
|
+
placements: SecretPlacement[];
|
|
27
148
|
} | {
|
|
28
149
|
kind: "oauth2";
|
|
29
|
-
|
|
30
|
-
grantField: string;
|
|
150
|
+
field: string;
|
|
31
151
|
definition: OAuth2Definition;
|
|
32
152
|
/** Explicit renewal strategy, never inferred from available secrets. */
|
|
33
|
-
renewal: "refresh" | "clientCredentials" | "jwtBearer";
|
|
153
|
+
renewal: "refresh" | "clientCredentials" | "jwtBearer" | "password";
|
|
34
154
|
scopes?: string[];
|
|
35
155
|
/** Defaults to 401. A 403 must be explicitly documented by the provider. */
|
|
36
156
|
rejectionStatus?: 401 | 403;
|
|
@@ -55,6 +175,42 @@ export interface CredentialType {
|
|
|
55
175
|
id: string;
|
|
56
176
|
methods: Record<string, CredentialMethod>;
|
|
57
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* What a connection signs with: the credential type and method, and the
|
|
180
|
+
* OAuth application, JWT identity and resource owner its config supplies.
|
|
181
|
+
* Derived from the connection's config alone — never from action input.
|
|
182
|
+
*/
|
|
183
|
+
export interface CredentialSelection {
|
|
184
|
+
type: CredentialType;
|
|
185
|
+
method: string;
|
|
186
|
+
application?: OAuthApplication;
|
|
187
|
+
jwtIdentity?: OAuthJwtIdentity;
|
|
188
|
+
resourceOwner?: OAuthResourceOwner;
|
|
189
|
+
/**
|
|
190
|
+
* How a process signing with its own flat connection config (the CLI)
|
|
191
|
+
* assembles a static secret: each of its parts, from a named config
|
|
192
|
+
* field, a fixed value, or the two joined in order
|
|
193
|
+
* (`{email}/token`). Names and fixed values only, never a secret. Hosts
|
|
194
|
+
* that store the structured field ignore it.
|
|
195
|
+
*/
|
|
196
|
+
localSecret?: Record<string, LocalSecretSource>;
|
|
197
|
+
}
|
|
198
|
+
export type LocalSecretPart = {
|
|
199
|
+
field: string;
|
|
200
|
+
} | {
|
|
201
|
+
value: string;
|
|
202
|
+
};
|
|
203
|
+
export type LocalSecretSource = LocalSecretPart | {
|
|
204
|
+
concat: LocalSecretPart[];
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* A plugin's statement of how a connection's config becomes its
|
|
208
|
+
* selection. Pure: no IO, no action input. Whoever holds the config signs
|
|
209
|
+
* from it — the plugin's own process, or a host brokering for it, which
|
|
210
|
+
* reads the declaration from the plugin it loaded itself. Throws
|
|
211
|
+
* `invalid_credentials` for a config it cannot sign with.
|
|
212
|
+
*/
|
|
213
|
+
export type CredentialDeclaration = (config: Readonly<Record<string, unknown>>) => CredentialSelection;
|
|
58
214
|
/** Host-authorized selection. Never derive this binding from action input. */
|
|
59
215
|
export interface CredentialBinding {
|
|
60
216
|
type: string;
|
|
@@ -67,6 +223,7 @@ export interface CredentialBinding {
|
|
|
67
223
|
};
|
|
68
224
|
application?: OAuthApplication;
|
|
69
225
|
jwtIdentity?: OAuthJwtIdentity;
|
|
226
|
+
resourceOwner?: OAuthResourceOwner;
|
|
70
227
|
}
|
|
71
228
|
/** Revision changes on every issuance, even when the provider repeats the token value. */
|
|
72
229
|
export interface OAuthGrant {
|
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,10 +13,10 @@ 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";
|