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
|
@@ -1,47 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
const opts = {
|
|
1
|
+
import { credentialOk, jsonOrAcknowledged, pathSegment, } from "../../_shared/credentials.js";
|
|
2
|
+
import { elasticsearchCredential } from "./credentials.js";
|
|
3
|
+
async function req(ctx, method, path, body, query) {
|
|
4
|
+
const res = await credentialOk(ctx, elasticsearchCredential, "elasticsearch", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path,
|
|
10
7
|
method,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
opts.body = JSON.stringify(body);
|
|
21
|
-
}
|
|
22
|
-
const res = await fetch(url.toString(), opts);
|
|
23
|
-
if (!res.ok)
|
|
24
|
-
throw new Error(`Elasticsearch error ${res.status}: ${await res.text()}`);
|
|
25
|
-
const ct = res.headers.get("content-type") ?? "";
|
|
26
|
-
if (ct.includes("application/json"))
|
|
27
|
-
return res.json();
|
|
28
|
-
return { success: true };
|
|
29
|
-
}
|
|
30
|
-
function getConn(ctx) {
|
|
31
|
-
const cfg = ctx.connection.config;
|
|
32
|
-
return {
|
|
33
|
-
baseUrl: cfg.baseUrl.replace(/\/$/, ""),
|
|
34
|
-
username: cfg.username ?? "",
|
|
35
|
-
password: cfg.password ?? "",
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
function req(ctx, method, endpoint, body, qs) {
|
|
39
|
-
const { baseUrl, username, password } = getConn(ctx);
|
|
40
|
-
return apiRequest(baseUrl, username, password, method, endpoint, body, qs);
|
|
8
|
+
query,
|
|
9
|
+
...(body &&
|
|
10
|
+
Object.keys(body).length > 0 &&
|
|
11
|
+
method !== "GET" &&
|
|
12
|
+
method !== "DELETE"
|
|
13
|
+
? { json: body }
|
|
14
|
+
: {}),
|
|
15
|
+
});
|
|
16
|
+
return jsonOrAcknowledged(res);
|
|
41
17
|
}
|
|
42
18
|
export default function elasticsearch(rl) {
|
|
43
19
|
rl.setName("elasticsearch");
|
|
44
20
|
rl.setVersion("0.1.0");
|
|
21
|
+
rl.setCredential(elasticsearchCredential);
|
|
45
22
|
rl.setConnectionSchema({
|
|
46
23
|
baseUrl: {
|
|
47
24
|
type: "string",
|
|
@@ -77,7 +54,9 @@ export default function elasticsearch(rl) {
|
|
|
77
54
|
},
|
|
78
55
|
async execute(input, ctx) {
|
|
79
56
|
const { index, id, body } = input;
|
|
80
|
-
const endpoint = id
|
|
57
|
+
const endpoint = id
|
|
58
|
+
? `${pathSegment(index)}/_doc/${pathSegment(id)}`
|
|
59
|
+
: `${pathSegment(index)}/_doc`;
|
|
81
60
|
return req(ctx, id ? "PUT" : "POST", endpoint, body);
|
|
82
61
|
},
|
|
83
62
|
});
|
|
@@ -90,7 +69,7 @@ export default function elasticsearch(rl) {
|
|
|
90
69
|
},
|
|
91
70
|
async execute(input, ctx) {
|
|
92
71
|
const { index, id } = input;
|
|
93
|
-
return req(ctx, "GET",
|
|
72
|
+
return req(ctx, "GET", `${pathSegment(index)}/_doc/${pathSegment(id)}`);
|
|
94
73
|
},
|
|
95
74
|
});
|
|
96
75
|
rl.registerAction("document.update", {
|
|
@@ -107,7 +86,7 @@ export default function elasticsearch(rl) {
|
|
|
107
86
|
},
|
|
108
87
|
async execute(input, ctx) {
|
|
109
88
|
const { index, id, body } = input;
|
|
110
|
-
return req(ctx, "POST",
|
|
89
|
+
return req(ctx, "POST", `${pathSegment(index)}/_update/${pathSegment(id)}`, { doc: body });
|
|
111
90
|
},
|
|
112
91
|
});
|
|
113
92
|
rl.registerAction("document.delete", {
|
|
@@ -119,7 +98,7 @@ export default function elasticsearch(rl) {
|
|
|
119
98
|
},
|
|
120
99
|
async execute(input, ctx) {
|
|
121
100
|
const { index, id } = input;
|
|
122
|
-
return req(ctx, "DELETE",
|
|
101
|
+
return req(ctx, "DELETE", `${pathSegment(index)}/_doc/${pathSegment(id)}`);
|
|
123
102
|
},
|
|
124
103
|
});
|
|
125
104
|
rl.registerAction("document.search", {
|
|
@@ -151,7 +130,7 @@ export default function elasticsearch(rl) {
|
|
|
151
130
|
body.from = offset;
|
|
152
131
|
if (sort)
|
|
153
132
|
body.sort = sort;
|
|
154
|
-
const data = (await req(ctx, "POST",
|
|
133
|
+
const data = (await req(ctx, "POST", `${pathSegment(index)}/_search`, body));
|
|
155
134
|
return data.hits?.hits;
|
|
156
135
|
},
|
|
157
136
|
});
|
|
@@ -179,7 +158,7 @@ export default function elasticsearch(rl) {
|
|
|
179
158
|
body.settings = settings;
|
|
180
159
|
if (mappings)
|
|
181
160
|
body.mappings = mappings;
|
|
182
|
-
return req(ctx, "PUT",
|
|
161
|
+
return req(ctx, "PUT", pathSegment(index), body);
|
|
183
162
|
},
|
|
184
163
|
});
|
|
185
164
|
rl.registerAction("index.get", {
|
|
@@ -189,14 +168,14 @@ export default function elasticsearch(rl) {
|
|
|
189
168
|
index: { type: "string", required: true, description: "Index name" },
|
|
190
169
|
},
|
|
191
170
|
async execute(input, ctx) {
|
|
192
|
-
return req(ctx, "GET",
|
|
171
|
+
return req(ctx, "GET", pathSegment(input.index));
|
|
193
172
|
},
|
|
194
173
|
});
|
|
195
174
|
rl.registerAction("index.list", {
|
|
196
175
|
access: "read",
|
|
197
176
|
description: "List all indices",
|
|
198
177
|
async execute(_input, ctx) {
|
|
199
|
-
return req(ctx, "GET", "
|
|
178
|
+
return req(ctx, "GET", "_cat/indices", undefined, { format: "json" });
|
|
200
179
|
},
|
|
201
180
|
});
|
|
202
181
|
rl.registerAction("index.delete", {
|
|
@@ -206,7 +185,7 @@ export default function elasticsearch(rl) {
|
|
|
206
185
|
index: { type: "string", required: true, description: "Index name" },
|
|
207
186
|
},
|
|
208
187
|
async execute(input, ctx) {
|
|
209
|
-
return req(ctx, "DELETE",
|
|
188
|
+
return req(ctx, "DELETE", pathSegment(input.index));
|
|
210
189
|
},
|
|
211
190
|
});
|
|
212
191
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* The longest request deadline: the input schemas' `timeout` maximum and the
|
|
4
|
+
* `audio` target's deadline, at the transport's default host ceiling.
|
|
5
|
+
*/
|
|
6
|
+
export const MAX_TIMEOUT_MS = 10 * 60_000;
|
|
7
|
+
/**
|
|
8
|
+
* An ElevenLabs API key, sent as `xi-api-key` to the one API origin. The
|
|
9
|
+
* `audio` target carries generation, transcription, and downloads: it
|
|
10
|
+
* declares `MAX_TIMEOUT_MS` and the 100 MiB audio ceiling, both capped by
|
|
11
|
+
* the host. The `api` target is the catalog
|
|
12
|
+
* and management surface on the transport defaults.
|
|
13
|
+
*/
|
|
14
|
+
export const elevenlabsCredential = staticCredential({
|
|
15
|
+
id: "elevenlabs",
|
|
16
|
+
auth: { kind: "apiKey", header: "xi-api-key" },
|
|
17
|
+
local: { secret: "apiKey" },
|
|
18
|
+
targets: {
|
|
19
|
+
api: {
|
|
20
|
+
baseUrl: "https://api.elevenlabs.io/",
|
|
21
|
+
methods: ["GET", "POST", "DELETE"],
|
|
22
|
+
},
|
|
23
|
+
audio: {
|
|
24
|
+
baseUrl: "https://api.elevenlabs.io/",
|
|
25
|
+
methods: ["GET", "POST"],
|
|
26
|
+
timeoutMs: MAX_TIMEOUT_MS,
|
|
27
|
+
maxResponseBytes: 100 * 1024 * 1024,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { elevenlabsCredential } from "./credentials.js";
|
|
2
3
|
import { audioOptions, formatSchema, musicSchema as music, STRICT, seed, speechControls, text, timeout, voiceSettings, } from "./schemas.js";
|
|
3
4
|
import { appendFile, audioRequest, jsonRequest, voiceForm, voicePath, } from "./shared.js";
|
|
4
5
|
import { registerWorkflows } from "./workflows.js";
|
|
@@ -89,6 +90,7 @@ const sound = t.Object({
|
|
|
89
90
|
export default function elevenlabs(rl) {
|
|
90
91
|
rl.setName("elevenlabs");
|
|
91
92
|
rl.setVersion("0.1.0");
|
|
93
|
+
rl.setCredential(elevenlabsCredential);
|
|
92
94
|
registerWorkflows(rl);
|
|
93
95
|
rl.setConnectionSchema(t.Object({
|
|
94
96
|
apiKey: t.String({
|
|
@@ -226,7 +228,8 @@ export default function elevenlabs(rl) {
|
|
|
226
228
|
if (value !== undefined)
|
|
227
229
|
form.append(key, String(value));
|
|
228
230
|
}
|
|
229
|
-
|
|
231
|
+
// The audio target carries the long transcription deadline.
|
|
232
|
+
return jsonRequest(ctx, "/v1/speech-to-text", "transcription", { method: "POST", body: form }, p.timeoutMs ?? 300_000, "audio");
|
|
230
233
|
},
|
|
231
234
|
});
|
|
232
235
|
rl.registerAction("music.create", {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { MAX_TIMEOUT_MS } from "./credentials.js";
|
|
2
3
|
export const STRICT = { additionalProperties: false };
|
|
3
4
|
export const text = t.String({ minLength: 1, pattern: "\\S" });
|
|
4
5
|
export const timeout = t.Integer({
|
|
5
6
|
minimum: 1000,
|
|
6
|
-
maximum:
|
|
7
|
+
maximum: MAX_TIMEOUT_MS,
|
|
7
8
|
default: 300_000,
|
|
8
9
|
description: "Request deadline including the response body; does not cancel provider work.",
|
|
9
10
|
});
|
|
@@ -1,42 +1,93 @@
|
|
|
1
|
-
import { constants } from "node:fs";
|
|
2
|
-
import { open } from "node:fs/promises";
|
|
3
1
|
import { basename } from "node:path";
|
|
2
|
+
import { AuthError } from "runline";
|
|
4
3
|
import * as t from "typebox";
|
|
5
4
|
import { Check } from "typebox/value";
|
|
6
|
-
import {
|
|
5
|
+
import { credentialBroker } from "../../_shared/credentialAdapter.js";
|
|
6
|
+
import { multipartBody, pathSegment, responseFailed, } from "../../_shared/credentials.js";
|
|
7
|
+
import { readLocalFile } from "../../_shared/localFile.js";
|
|
7
8
|
import { SEND_FILE_NOTE, writeMediaFile } from "../../_shared/mediaFile.js";
|
|
8
|
-
import { obj, readBounded, readBoundedBytes
|
|
9
|
-
|
|
9
|
+
import { obj, readBounded, readBoundedBytes } from "../../_shared/provider.js";
|
|
10
|
+
import { elevenlabsCredential } from "./credentials.js";
|
|
11
|
+
export const voicePath = (id) => pathSegment(id);
|
|
10
12
|
const JSON_LIMIT = 8 * 1024 * 1024;
|
|
11
13
|
const AUDIO_LIMIT = 100 * 1024 * 1024;
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
/**
|
|
15
|
+
* The caller-tunable deadline over a brokered exchange. The transport
|
|
16
|
+
* buffers the body, so the race bounds the whole exchange; on timeout the
|
|
17
|
+
* brokered call runs on to the target's own deadline, and its late outcome
|
|
18
|
+
* is observed so it cannot become an unhandled rejection.
|
|
19
|
+
*/
|
|
20
|
+
async function withDeadline(work, timeoutMs) {
|
|
21
|
+
let timer;
|
|
22
|
+
try {
|
|
23
|
+
return await Promise.race([
|
|
24
|
+
work,
|
|
25
|
+
new Promise((_, reject) => {
|
|
26
|
+
timer = setTimeout(() => {
|
|
27
|
+
work.catch(() => { });
|
|
28
|
+
reject(new Error("elevenlabs: request timed out"));
|
|
29
|
+
}, timeoutMs);
|
|
30
|
+
}),
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
clearTimeout(timer);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Every credential-bearing request signs through the declared credential. */
|
|
38
|
+
async function request(ctx, target, path, init, timeoutMs, consume) {
|
|
17
39
|
let requestId = null;
|
|
18
40
|
try {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
const headers = {};
|
|
42
|
+
let body;
|
|
43
|
+
if (typeof init.body === "string") {
|
|
44
|
+
body = init.body;
|
|
45
|
+
headers["content-type"] = "application/json";
|
|
46
|
+
}
|
|
47
|
+
else if (init.body !== undefined) {
|
|
48
|
+
const multipart = await multipartBody(init.body);
|
|
49
|
+
body = multipart.body;
|
|
50
|
+
headers["content-type"] = multipart.contentType;
|
|
51
|
+
}
|
|
52
|
+
const response = await withDeadline(credentialBroker(ctx, elevenlabsCredential).request({
|
|
53
|
+
target,
|
|
54
|
+
path: path.replace(/^\//, ""),
|
|
55
|
+
method: init.method ?? "GET",
|
|
56
|
+
headers,
|
|
57
|
+
...(body !== undefined ? { body } : {}),
|
|
58
|
+
}), timeoutMs);
|
|
29
59
|
requestId = response.headers.get("request-id");
|
|
30
60
|
// Both JSON and audio errors use the provider's JSON error envelope.
|
|
31
61
|
if (!response.ok)
|
|
32
|
-
await
|
|
62
|
+
throw await responseFailed("elevenlabs", response, errorEnvelope);
|
|
33
63
|
return await consume(response);
|
|
34
64
|
}
|
|
35
65
|
catch (error) {
|
|
66
|
+
// The request id and retry guidance join the message; a transport
|
|
67
|
+
// failure keeps its code, so callers can still tell why it failed.
|
|
36
68
|
const mutation = init.method && init.method !== "GET";
|
|
37
|
-
|
|
69
|
+
const wrapped = new Error(`${error instanceof Error ? error.message : String(error)}${requestId ? ` (requestId ${requestId})` : ""}${mutation ? ". Request may have been applied or billed; do not retry automatically." : ""}`, { cause: error });
|
|
70
|
+
if (error instanceof AuthError)
|
|
71
|
+
wrapped.code = error.code;
|
|
72
|
+
throw wrapped;
|
|
38
73
|
}
|
|
39
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* The error envelope's `detail`: a status code (or a bare code string), or
|
|
77
|
+
* the validation entries whose `loc` paths name the offending fields.
|
|
78
|
+
*/
|
|
79
|
+
function errorEnvelope(body) {
|
|
80
|
+
const detail = obj(body).detail;
|
|
81
|
+
return {
|
|
82
|
+
code: typeof detail === "string" ? detail : obj(detail).status,
|
|
83
|
+
param: Array.isArray(detail)
|
|
84
|
+
? detail.map((entry) => {
|
|
85
|
+
const loc = obj(entry).loc;
|
|
86
|
+
return Array.isArray(loc) ? loc.join(".") : loc;
|
|
87
|
+
})
|
|
88
|
+
: undefined,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
40
91
|
async function json(response, limit = JSON_LIMIT) {
|
|
41
92
|
const text = await readBounded(response, limit, `elevenlabs: JSON exceeds ${limit / (1024 * 1024)} MiB`);
|
|
42
93
|
let body;
|
|
@@ -44,23 +95,7 @@ async function json(response, limit = JSON_LIMIT) {
|
|
|
44
95
|
body = text ? JSON.parse(text) : null;
|
|
45
96
|
}
|
|
46
97
|
catch {
|
|
47
|
-
throw new Error(
|
|
48
|
-
}
|
|
49
|
-
if (!response.ok) {
|
|
50
|
-
const detail = obj(body).detail;
|
|
51
|
-
const error = obj(detail);
|
|
52
|
-
// Include provider error messages and locations, not validation input payloads.
|
|
53
|
-
const message = typeof detail === "string"
|
|
54
|
-
? detail
|
|
55
|
-
: Array.isArray(detail)
|
|
56
|
-
? detail
|
|
57
|
-
.map((v) => {
|
|
58
|
-
const e = obj(v);
|
|
59
|
-
return `${Array.isArray(e.loc) ? e.loc.join(".") : "body"}: ${e.msg ?? "invalid"}`;
|
|
60
|
-
})
|
|
61
|
-
.join("; ")
|
|
62
|
-
: `${error.status ?? "request failed"}: ${error.message ?? ""}`;
|
|
63
|
-
throw new Error(`elevenlabs HTTP ${response.status}: ${message.slice(0, 1000)}`);
|
|
98
|
+
throw new Error("elevenlabs: non-JSON response");
|
|
64
99
|
}
|
|
65
100
|
if (body === null || typeof body !== "object")
|
|
66
101
|
throw new Error("elevenlabs: expected a JSON object or array");
|
|
@@ -105,8 +140,8 @@ const responses = {
|
|
|
105
140
|
}),
|
|
106
141
|
dictionary: t.Object({ id, version_id: id }),
|
|
107
142
|
};
|
|
108
|
-
export async function jsonRequest(ctx, path, expected, init = {}, timeoutMs = 60_000) {
|
|
109
|
-
return request(ctx, path, init, timeoutMs, async (response) => {
|
|
143
|
+
export async function jsonRequest(ctx, path, expected, init = {}, timeoutMs = 60_000, target = "api") {
|
|
144
|
+
return request(ctx, target, path, init, timeoutMs, async (response) => {
|
|
110
145
|
const body = await json(response);
|
|
111
146
|
if (!Check(responses[expected], body))
|
|
112
147
|
throw new Error(`elevenlabs: invalid ${expected} response`);
|
|
@@ -182,7 +217,7 @@ export async function audioRequest(ctx, path, body, options) {
|
|
|
182
217
|
}
|
|
183
218
|
/** All generated, aligned, isolated, and recovered audio uses the same file writer. */
|
|
184
219
|
export async function binaryRequest(ctx, path, init, options) {
|
|
185
|
-
return request(ctx, path, init, options.timeoutMs ?? 300_000, async (response) => {
|
|
220
|
+
return request(ctx, "audio", path, init, options.timeoutMs ?? 300_000, async (response) => {
|
|
186
221
|
let bytes;
|
|
187
222
|
let timestamps = {};
|
|
188
223
|
let mime;
|
|
@@ -248,25 +283,15 @@ export async function voiceForm(input) {
|
|
|
248
283
|
form.append("remove_background_noise", String(input.removeBackgroundNoise));
|
|
249
284
|
return form;
|
|
250
285
|
}
|
|
251
|
-
|
|
286
|
+
const UPLOAD_RULE = "elevenlabs: each input must be a nonempty regular file of at most 25 MiB";
|
|
287
|
+
/** A local upload as one form part, bounded and read by the shared reader. */
|
|
252
288
|
export async function appendFile(form, field, path) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
while (offset < bytes.length) {
|
|
262
|
-
const { bytesRead } = await file.read(bytes, offset, bytes.length - offset, offset);
|
|
263
|
-
if (!bytesRead)
|
|
264
|
-
throw new Error("elevenlabs: input file changed while reading");
|
|
265
|
-
offset += bytesRead;
|
|
266
|
-
}
|
|
267
|
-
form.append(field, new Blob([bytes]), basename(path));
|
|
268
|
-
}
|
|
269
|
-
finally {
|
|
270
|
-
await file.close();
|
|
271
|
-
}
|
|
289
|
+
const bytes = await readLocalFile(path, {
|
|
290
|
+
subject: `elevenlabs: ${field}`,
|
|
291
|
+
maxBytes: 25 * 1024 * 1024,
|
|
292
|
+
oversize: UPLOAD_RULE,
|
|
293
|
+
});
|
|
294
|
+
if (!bytes.length)
|
|
295
|
+
throw new Error(UPLOAD_RULE);
|
|
296
|
+
form.append(field, new Blob([bytes]), basename(path));
|
|
272
297
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
3
3
|
import { audioOptions, dictionaries, fileOptions, normalization, STRICT, seed, text, voiceSettings, } from "./schemas.js";
|
|
4
4
|
import { appendFile, audioRequest, binaryRequest, jsonRequest, voiceForm, voicePath, } from "./shared.js";
|
|
5
5
|
const dialogue = t.Object({
|
|
@@ -65,7 +65,7 @@ const dictionaryCreate = t.Object({
|
|
|
65
65
|
}, STRICT),
|
|
66
66
|
]), { minItems: 1 }),
|
|
67
67
|
}, STRICT);
|
|
68
|
-
const historyPath = (id) => `/v1/history/${
|
|
68
|
+
const historyPath = (id) => `/v1/history/${pathSegment(id)}`;
|
|
69
69
|
export function registerWorkflows(rl) {
|
|
70
70
|
rl.registerAction("dialogue.create", {
|
|
71
71
|
access: "write",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/** An API key, sent raw (no scheme) on the Authorization header to Emelia's
|
|
3
|
+
* one GraphQL endpoint. */
|
|
4
|
+
export const emeliaCredential = staticCredential({
|
|
5
|
+
id: "emelia",
|
|
6
|
+
auth: { kind: "apiKey", header: "Authorization" },
|
|
7
|
+
local: { secret: "apiKey" },
|
|
8
|
+
targets: {
|
|
9
|
+
gql: {
|
|
10
|
+
baseUrl: "https://graphql.emelia.io/",
|
|
11
|
+
methods: ["POST"],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { credentialJson, graphqlFailed } from "../../_shared/credentials.js";
|
|
2
|
+
import { emeliaCredential } from "./credentials.js";
|
|
3
|
+
async function gql(ctx, query, variables) {
|
|
3
4
|
const body = { query };
|
|
4
5
|
if (variables)
|
|
5
6
|
body.variables = variables;
|
|
6
|
-
const
|
|
7
|
+
const data = (await credentialJson(ctx, emeliaCredential, "emelia", {
|
|
8
|
+
target: "gql",
|
|
9
|
+
path: "graphql",
|
|
7
10
|
method: "POST",
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"Content-Type": "application/json",
|
|
11
|
-
},
|
|
12
|
-
body: JSON.stringify(body),
|
|
13
|
-
});
|
|
14
|
-
if (!res.ok)
|
|
15
|
-
throw new Error(`Emelia API error ${res.status}: ${await res.text()}`);
|
|
16
|
-
const data = (await res.json());
|
|
11
|
+
json: body,
|
|
12
|
+
}));
|
|
17
13
|
if (data.errors)
|
|
18
|
-
throw
|
|
14
|
+
throw graphqlFailed("emelia", data.errors);
|
|
19
15
|
return data.data;
|
|
20
16
|
}
|
|
21
17
|
export default function emelia(rl) {
|
|
22
18
|
rl.setName("emelia");
|
|
23
19
|
rl.setVersion("0.1.0");
|
|
20
|
+
rl.setCredential(emeliaCredential);
|
|
24
21
|
rl.setConnectionSchema({
|
|
25
22
|
apiKey: {
|
|
26
23
|
type: "string",
|
|
@@ -29,7 +26,6 @@ export default function emelia(rl) {
|
|
|
29
26
|
env: "EMELIA_API_KEY",
|
|
30
27
|
},
|
|
31
28
|
});
|
|
32
|
-
const key = (ctx) => ctx.connection.config.apiKey;
|
|
33
29
|
// ── Campaign ────────────────────────────────────────
|
|
34
30
|
rl.registerAction("campaign.create", {
|
|
35
31
|
access: "write",
|
|
@@ -38,7 +34,7 @@ export default function emelia(rl) {
|
|
|
38
34
|
name: { type: "string", required: true, description: "Campaign name" },
|
|
39
35
|
},
|
|
40
36
|
async execute(input, ctx) {
|
|
41
|
-
const data = await gql(
|
|
37
|
+
const data = await gql(ctx, `
|
|
42
38
|
mutation createCampaign($name: String!) {
|
|
43
39
|
createCampaign(name: $name) { _id name status createdAt provider startAt estimatedEnd }
|
|
44
40
|
}`, { name: input.name });
|
|
@@ -56,7 +52,7 @@ export default function emelia(rl) {
|
|
|
56
52
|
},
|
|
57
53
|
},
|
|
58
54
|
async execute(input, ctx) {
|
|
59
|
-
const data = await gql(
|
|
55
|
+
const data = await gql(ctx, `
|
|
60
56
|
query campaign($id: ID!) {
|
|
61
57
|
campaign(id: $id) {
|
|
62
58
|
_id name status createdAt provider startAt estimatedEnd
|
|
@@ -75,7 +71,7 @@ export default function emelia(rl) {
|
|
|
75
71
|
},
|
|
76
72
|
async execute(input, ctx) {
|
|
77
73
|
const { limit } = (input ?? {});
|
|
78
|
-
const data = await gql(
|
|
74
|
+
const data = await gql(ctx, `
|
|
79
75
|
query all_campaigns {
|
|
80
76
|
all_campaigns {
|
|
81
77
|
_id name status createdAt
|
|
@@ -115,7 +111,7 @@ export default function emelia(rl) {
|
|
|
115
111
|
contact.lastName = lastName;
|
|
116
112
|
if (customFields)
|
|
117
113
|
Object.assign(contact, customFields);
|
|
118
|
-
const data = await gql(
|
|
114
|
+
const data = await gql(ctx, `
|
|
119
115
|
mutation AddContactToCampaignHook($id: ID!, $contact: JSON!) {
|
|
120
116
|
addContactToCampaignHook(id: $id, contact: $contact)
|
|
121
117
|
}`, { id: campaignId, contact });
|
|
@@ -133,7 +129,7 @@ export default function emelia(rl) {
|
|
|
133
129
|
},
|
|
134
130
|
},
|
|
135
131
|
async execute(input, ctx) {
|
|
136
|
-
await gql(
|
|
132
|
+
await gql(ctx, `mutation startCampaign($id: ID!) { startCampaign(id: $id) }`, { id: input.campaignId });
|
|
137
133
|
return { success: true };
|
|
138
134
|
},
|
|
139
135
|
});
|
|
@@ -148,7 +144,7 @@ export default function emelia(rl) {
|
|
|
148
144
|
},
|
|
149
145
|
},
|
|
150
146
|
async execute(input, ctx) {
|
|
151
|
-
await gql(
|
|
147
|
+
await gql(ctx, `mutation pauseCampaign($id: ID!) { pauseCampaign(id: $id) }`, { id: input.campaignId });
|
|
152
148
|
return { success: true };
|
|
153
149
|
},
|
|
154
150
|
});
|
|
@@ -189,7 +185,7 @@ export default function emelia(rl) {
|
|
|
189
185
|
},
|
|
190
186
|
async execute(input, ctx) {
|
|
191
187
|
const { campaignId, name, copySettings = true, copyMails = true, copyContacts = false, copyProvider = true, } = input;
|
|
192
|
-
const data = await gql(
|
|
188
|
+
const data = await gql(ctx, `
|
|
193
189
|
mutation duplicateCampaign($fromId: ID!, $name: String!, $copySettings: Boolean!, $copyMails: Boolean!, $copyContacts: Boolean!, $copyProvider: Boolean!) {
|
|
194
190
|
duplicateCampaign(fromId: $fromId, name: $name, copySettings: $copySettings, copyMails: $copyMails, copyContacts: $copyContacts, copyProvider: $copyProvider)
|
|
195
191
|
}`, {
|
|
@@ -212,7 +208,7 @@ export default function emelia(rl) {
|
|
|
212
208
|
},
|
|
213
209
|
async execute(input, ctx) {
|
|
214
210
|
const { limit } = (input ?? {});
|
|
215
|
-
const data = await gql(
|
|
211
|
+
const data = await gql(ctx, `
|
|
216
212
|
query contact_lists {
|
|
217
213
|
contact_lists { _id name contactCount fields usedInCampaign }
|
|
218
214
|
}`);
|
|
@@ -249,7 +245,7 @@ export default function emelia(rl) {
|
|
|
249
245
|
contact.lastName = lastName;
|
|
250
246
|
if (customFields)
|
|
251
247
|
Object.assign(contact, customFields);
|
|
252
|
-
const data = await gql(
|
|
248
|
+
const data = await gql(ctx, `
|
|
253
249
|
mutation AddContactsToListHook($id: ID!, $contact: JSON!) {
|
|
254
250
|
addContactsToListHook(id: $id, contact: $contact)
|
|
255
251
|
}`, { id: contactListId, contact });
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { httpsBase, staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* The API key and secret joined as `token {apiKey}:{apiSecret}` in the
|
|
4
|
+
* Authorization header, on the configured instance's own /api/ base. The
|
|
5
|
+
* host is public config and must be HTTPS.
|
|
6
|
+
*/
|
|
7
|
+
export const erpnextCredential = staticCredential({
|
|
8
|
+
id: "erpnext",
|
|
9
|
+
auth: { kind: "apiKey", header: "Authorization", prefix: "token " },
|
|
10
|
+
local: {
|
|
11
|
+
secret: {
|
|
12
|
+
concat: [{ field: "apiKey" }, { value: ":" }, { field: "apiSecret" }],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
targets: (config) => ({
|
|
16
|
+
api: {
|
|
17
|
+
baseUrl: httpsBase(config.host, "api/"),
|
|
18
|
+
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
19
|
+
},
|
|
20
|
+
}),
|
|
21
|
+
probe: {
|
|
22
|
+
target: "api",
|
|
23
|
+
path: "method/frappe.auth.get_logged_user",
|
|
24
|
+
method: "GET",
|
|
25
|
+
acceptedStatuses: [200],
|
|
26
|
+
},
|
|
27
|
+
});
|