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,45 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
for (const [k, v] of Object.entries(qs)) {
|
|
5
|
-
if (v !== undefined && v !== null)
|
|
6
|
-
url.searchParams.set(k, String(v));
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
const opts = {
|
|
10
|
-
method,
|
|
11
|
-
headers: {
|
|
12
|
-
Authorization: `token ${apiKey}:${apiSecret}`,
|
|
13
|
-
"Content-Type": "application/json",
|
|
14
|
-
Accept: "application/json",
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
if (body &&
|
|
18
|
-
Object.keys(body).length > 0 &&
|
|
19
|
-
method !== "GET" &&
|
|
20
|
-
method !== "DELETE") {
|
|
21
|
-
opts.body = JSON.stringify(body);
|
|
22
|
-
}
|
|
23
|
-
const res = await fetch(url.toString(), opts);
|
|
24
|
-
if (!res.ok)
|
|
25
|
-
throw new Error(`ERPNext API error ${res.status}: ${await res.text()}`);
|
|
26
|
-
return res.json();
|
|
27
|
-
}
|
|
28
|
-
function getConn(ctx) {
|
|
29
|
-
const cfg = ctx.connection.config;
|
|
30
|
-
return {
|
|
31
|
-
host: cfg.host.replace(/\/$/, ""),
|
|
32
|
-
apiKey: cfg.apiKey,
|
|
33
|
-
apiSecret: cfg.apiSecret,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { erpnextCredential } from "./credentials.js";
|
|
3
|
+
/** One ERPNext call: every endpoint is a path beneath the instance's /api/. */
|
|
36
4
|
function req(ctx, method, endpoint, body, qs) {
|
|
37
|
-
|
|
38
|
-
|
|
5
|
+
return credentialJson(ctx, erpnextCredential, "erpnext", {
|
|
6
|
+
target: "api",
|
|
7
|
+
path: endpoint,
|
|
8
|
+
method,
|
|
9
|
+
query: qs,
|
|
10
|
+
...(body &&
|
|
11
|
+
Object.keys(body).length > 0 &&
|
|
12
|
+
method !== "GET" &&
|
|
13
|
+
method !== "DELETE"
|
|
14
|
+
? { json: body }
|
|
15
|
+
: {}),
|
|
16
|
+
});
|
|
39
17
|
}
|
|
40
18
|
export default function erpnext(rl) {
|
|
41
19
|
rl.setName("erpnext");
|
|
42
20
|
rl.setVersion("0.1.0");
|
|
21
|
+
rl.setCredential(erpnextCredential);
|
|
43
22
|
rl.setConnectionSchema({
|
|
44
23
|
host: {
|
|
45
24
|
type: "string",
|
|
@@ -77,7 +56,7 @@ export default function erpnext(rl) {
|
|
|
77
56
|
},
|
|
78
57
|
async execute(input, ctx) {
|
|
79
58
|
const { docType, documentName } = input;
|
|
80
|
-
const data = (await req(ctx, "GET",
|
|
59
|
+
const data = (await req(ctx, "GET", `resource/${pathSegment(docType)}/${pathSegment(documentName)}`));
|
|
81
60
|
return data.data;
|
|
82
61
|
},
|
|
83
62
|
});
|
|
@@ -122,7 +101,7 @@ export default function erpnext(rl) {
|
|
|
122
101
|
qs.limit_start = offset;
|
|
123
102
|
if (orderBy)
|
|
124
103
|
qs.order_by = orderBy;
|
|
125
|
-
const data = (await req(ctx, "GET",
|
|
104
|
+
const data = (await req(ctx, "GET", `resource/${pathSegment(docType)}`, undefined, qs));
|
|
126
105
|
return data.data;
|
|
127
106
|
},
|
|
128
107
|
});
|
|
@@ -139,7 +118,7 @@ export default function erpnext(rl) {
|
|
|
139
118
|
},
|
|
140
119
|
async execute(input, ctx) {
|
|
141
120
|
const { docType, properties } = input;
|
|
142
|
-
const data = (await req(ctx, "POST",
|
|
121
|
+
const data = (await req(ctx, "POST", `resource/${pathSegment(docType)}`, properties));
|
|
143
122
|
return data.data;
|
|
144
123
|
},
|
|
145
124
|
});
|
|
@@ -161,7 +140,7 @@ export default function erpnext(rl) {
|
|
|
161
140
|
},
|
|
162
141
|
async execute(input, ctx) {
|
|
163
142
|
const { docType, documentName, properties } = input;
|
|
164
|
-
const data = (await req(ctx, "PUT",
|
|
143
|
+
const data = (await req(ctx, "PUT", `resource/${pathSegment(docType)}/${pathSegment(documentName)}`, properties));
|
|
165
144
|
return data.data;
|
|
166
145
|
},
|
|
167
146
|
});
|
|
@@ -178,7 +157,7 @@ export default function erpnext(rl) {
|
|
|
178
157
|
},
|
|
179
158
|
async execute(input, ctx) {
|
|
180
159
|
const { docType, documentName } = input;
|
|
181
|
-
await req(ctx, "DELETE",
|
|
160
|
+
await req(ctx, "DELETE", `resource/${pathSegment(docType)}/${pathSegment(documentName)}`);
|
|
182
161
|
return { success: true };
|
|
183
162
|
},
|
|
184
163
|
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* A Meta access token, added by the transport as the access_token query
|
|
4
|
+
* parameter on Meta's Graph API host and its video-upload host.
|
|
5
|
+
*/
|
|
6
|
+
export const facebookGraphCredential = staticCredential({
|
|
7
|
+
id: "facebookGraph",
|
|
8
|
+
auth: { kind: "queryKey", param: "access_token" },
|
|
9
|
+
local: { secret: "accessToken" },
|
|
10
|
+
targets: {
|
|
11
|
+
graph: {
|
|
12
|
+
baseUrl: "https://graph.facebook.com/",
|
|
13
|
+
methods: ["GET", "POST", "DELETE"],
|
|
14
|
+
},
|
|
15
|
+
video: {
|
|
16
|
+
baseUrl: "https://graph-video.facebook.com/",
|
|
17
|
+
methods: ["GET", "POST", "DELETE"],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
+
import { AuthError } from "runline";
|
|
2
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
3
|
+
import { facebookGraphCredential } from "./credentials.js";
|
|
4
|
+
/** Meta's hosts, by the target each is declared as. */
|
|
5
|
+
const HOSTS = {
|
|
6
|
+
"graph.facebook.com": "graph",
|
|
7
|
+
"graph-video.facebook.com": "video",
|
|
8
|
+
};
|
|
1
9
|
export default function facebookGraph(rl) {
|
|
2
10
|
rl.setName("facebookGraph");
|
|
3
11
|
rl.setVersion("0.1.0");
|
|
12
|
+
rl.setCredential(facebookGraphCredential);
|
|
4
13
|
rl.setConnectionSchema({
|
|
5
14
|
accessToken: {
|
|
6
15
|
type: "string",
|
|
@@ -56,44 +65,37 @@ export default function facebookGraph(rl) {
|
|
|
56
65
|
},
|
|
57
66
|
async execute(input, ctx) {
|
|
58
67
|
const { hostUrl = "graph.facebook.com", method = "GET", graphApiVersion = "", node, edge, fields, queryParameters, body, } = input;
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
const target = Object.hasOwn(HOSTS, String(hostUrl))
|
|
69
|
+
? HOSTS[String(hostUrl)]
|
|
70
|
+
: undefined;
|
|
71
|
+
if (!target ||
|
|
72
|
+
(graphApiVersion && !/^v\d+\.\d+$/.test(String(graphApiVersion))))
|
|
73
|
+
throw new AuthError("request_not_allowed");
|
|
74
|
+
const httpMethod = String(method).toUpperCase();
|
|
75
|
+
const path = [
|
|
76
|
+
graphApiVersion,
|
|
77
|
+
pathSegment(node),
|
|
78
|
+
edge ? pathSegment(edge) : "",
|
|
79
|
+
]
|
|
80
|
+
.filter(Boolean)
|
|
81
|
+
.join("/");
|
|
82
|
+
return credentialJson(ctx, facebookGraphCredential, "facebookGraph", {
|
|
83
|
+
target,
|
|
84
|
+
path,
|
|
76
85
|
method: httpMethod,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const text = await res.text();
|
|
91
|
-
try {
|
|
92
|
-
return JSON.parse(text);
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
return { message: text };
|
|
96
|
-
}
|
|
86
|
+
query: {
|
|
87
|
+
...queryParameters,
|
|
88
|
+
...(Array.isArray(fields) && fields.length
|
|
89
|
+
? { fields: fields.join(",") }
|
|
90
|
+
: {}),
|
|
91
|
+
},
|
|
92
|
+
...(httpMethod === "POST" &&
|
|
93
|
+
body &&
|
|
94
|
+
typeof body === "object" &&
|
|
95
|
+
Object.keys(body).length
|
|
96
|
+
? { json: body }
|
|
97
|
+
: {}),
|
|
98
|
+
});
|
|
97
99
|
},
|
|
98
100
|
});
|
|
99
101
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/** An API key, sent as `Authorization: Key {key}` to fal's queue origin.
|
|
3
|
+
* CDN media downloads are credential-free and stay outside the broker. */
|
|
4
|
+
export const falCredential = staticCredential({
|
|
5
|
+
id: "fal",
|
|
6
|
+
auth: { kind: "apiKey", header: "Authorization", prefix: "Key " },
|
|
7
|
+
local: { secret: "apiKey" },
|
|
8
|
+
targets: {
|
|
9
|
+
queue: {
|
|
10
|
+
baseUrl: "https://queue.fal.run/",
|
|
11
|
+
methods: ["GET", "POST", "PUT"],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
2
|
import { readImageInput } from "../../_shared/mediaFile.js";
|
|
3
3
|
import { parseSize } from "../../_shared/parseSize.js";
|
|
4
|
+
import { falCredential } from "./credentials.js";
|
|
4
5
|
import { assertModelId, cancel, DEFAULT_TIMEOUT_MS, extraInputSchema, result, runModel, STRICT, saveDirSchema, savedResult, status, submit, timeoutSchema, } from "./shared.js";
|
|
5
6
|
const IMAGE_MODEL = "fal-ai/flux/schnell";
|
|
6
7
|
const EDIT_MODEL = "fal-ai/flux-pro/kontext";
|
|
@@ -81,6 +82,7 @@ async function generate(ctx, p, model, input, kind) {
|
|
|
81
82
|
export default function fal(rl) {
|
|
82
83
|
rl.setName("fal");
|
|
83
84
|
rl.setVersion("0.1.0");
|
|
85
|
+
rl.setCredential(falCredential);
|
|
84
86
|
rl.setConnectionSchema(t.Object({
|
|
85
87
|
apiKey: t.String({
|
|
86
88
|
minLength: 1,
|
|
@@ -107,7 +109,7 @@ export default function fal(rl) {
|
|
|
107
109
|
inputSchema: editSchema,
|
|
108
110
|
async execute(input, ctx) {
|
|
109
111
|
const p = input;
|
|
110
|
-
const image = readImageInput(p.imagePath, "fal");
|
|
112
|
+
const image = await readImageInput(p.imagePath, "fal");
|
|
111
113
|
const key = p.imageInputKey ?? "image_url";
|
|
112
114
|
return generate(ctx, p, p.model ?? EDIT_MODEL, {
|
|
113
115
|
prompt: p.prompt,
|
|
@@ -126,7 +128,7 @@ export default function fal(rl) {
|
|
|
126
128
|
});
|
|
127
129
|
rl.registerAction("run", {
|
|
128
130
|
access: "write",
|
|
129
|
-
description: "Run a fal endpoint with its model-specific input (billed), and wait. Returns raw output plus downloaded files from common top-level image/video/audio/file fields. Automatic downloads accept HTTPS fal.media URLs or data URIs only, up to 512 MiB per file; JSON responses are limited to
|
|
131
|
+
description: "Run a fal endpoint with its model-specific input (billed), and wait. Returns raw output plus downloaded files from common top-level image/video/audio/file fields. Automatic downloads accept HTTPS fal.media URLs or data URIs only, up to 512 MiB per file; JSON responses are limited to 64 MiB.",
|
|
130
132
|
inputSchema: runSchema,
|
|
131
133
|
async execute(input, ctx) {
|
|
132
134
|
const p = input;
|
|
@@ -161,7 +163,7 @@ export default function fal(rl) {
|
|
|
161
163
|
});
|
|
162
164
|
rl.registerAction("queue.result", {
|
|
163
165
|
access: "write",
|
|
164
|
-
description: "Retrieve completed output without re-running or re-billing. Writes common image/video/audio/file outputs to disk and returns files[].path. Download limits: HTTPS fal.media URLs or data URIs, 512 MiB per file, 60 seconds per file; JSON responses up to
|
|
166
|
+
description: "Retrieve completed output without re-running or re-billing. Writes common image/video/audio/file outputs to disk and returns files[].path. Download limits: HTTPS fal.media URLs or data URIs, 512 MiB per file, 60 seconds per file; JSON responses up to 64 MiB.",
|
|
165
167
|
inputSchema: resultInput,
|
|
166
168
|
async execute(input, ctx) {
|
|
167
169
|
const p = input;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { setTimeout as sleep } from "node:timers/promises";
|
|
2
2
|
import * as t from "typebox";
|
|
3
3
|
import { Check } from "typebox/value";
|
|
4
|
-
import {
|
|
4
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
5
5
|
import { SEND_FILE_NOTE, writeMediaFile, } from "../../_shared/mediaFile.js";
|
|
6
|
-
import {
|
|
6
|
+
import { readBoundedBytes } from "../../_shared/provider.js";
|
|
7
|
+
import { falCredential } from "./credentials.js";
|
|
7
8
|
export const STRICT = { additionalProperties: false };
|
|
8
9
|
export const DEFAULT_TIMEOUT_MS = 300_000;
|
|
9
|
-
const QUEUE_BASE = "https://queue.fal.run";
|
|
10
10
|
const MAX_DOWNLOAD_BYTES = 512 * 1024 * 1024;
|
|
11
|
-
const MAX_JSON_BYTES = 32 * 1024 * 1024;
|
|
12
11
|
const receiptSchema = t.Object({
|
|
13
12
|
request_id: t.String({ minLength: 1 }),
|
|
14
13
|
status_url: t.Optional(t.String()),
|
|
@@ -40,84 +39,75 @@ export function assertModelId(model) {
|
|
|
40
39
|
return id;
|
|
41
40
|
}
|
|
42
41
|
/** Queue operations address the application, excluding its inference sub-path. */
|
|
43
|
-
function
|
|
42
|
+
function queuePath(model, suffix = "") {
|
|
44
43
|
const id = assertModelId(model);
|
|
45
44
|
const parts = id.split("/");
|
|
46
45
|
const count = parts[0] === "workflows" || parts[0] === "comfy" ? 3 : 2;
|
|
47
|
-
return `${
|
|
46
|
+
return `${suffix ? parts.slice(0, count).join("/") : id}${suffix}`;
|
|
48
47
|
}
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
.filter(object)
|
|
56
|
-
.map((entry) => {
|
|
57
|
-
const field = Array.isArray(entry.loc) ? entry.loc.join(".") : "body";
|
|
58
|
-
return `${field}: ${String(entry.msg ?? "invalid")} [${String(entry.type ?? "error")}]`;
|
|
59
|
-
})
|
|
60
|
-
.join("; ")
|
|
61
|
-
: typeof detail === "string"
|
|
62
|
-
? detail
|
|
63
|
-
: typeof data.status === "string"
|
|
64
|
-
? data.status
|
|
65
|
-
: "request failed";
|
|
66
|
-
const type = typeof data.error_type === "string" ? ` [${data.error_type}]` : "";
|
|
67
|
-
return `fal ${status}: ${message.slice(0, 1000)}${type}`;
|
|
68
|
-
}
|
|
69
|
-
/** All credential-bearing calls use a fixed origin and refuse redirects. */
|
|
70
|
-
async function request(ctx, url, init = {}) {
|
|
48
|
+
/**
|
|
49
|
+
* All credential-bearing calls go through the queue target; the transport
|
|
50
|
+
* pins the origin and refuses redirects. Failures are reported by status
|
|
51
|
+
* alone, without echoing provider text.
|
|
52
|
+
*/
|
|
53
|
+
async function request(ctx, path, init = {}) {
|
|
71
54
|
const key = ctx.connection.config.apiKey;
|
|
72
|
-
if (typeof key !== "string" || !key.trim())
|
|
55
|
+
if (!ctx.credentials && (typeof key !== "string" || !key.trim()))
|
|
73
56
|
throw new Error("Missing FAL_KEY. Create a key at https://fal.ai/dashboard/keys.");
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
},
|
|
81
|
-
|
|
57
|
+
return credentialJson(ctx, falCredential, "fal", {
|
|
58
|
+
target: "queue",
|
|
59
|
+
path,
|
|
60
|
+
method: init.method ?? "GET",
|
|
61
|
+
// Every queue call declares a JSON body type, even bodyless GETs.
|
|
62
|
+
headers: { "Content-Type": "application/json" },
|
|
63
|
+
...(init.json !== undefined ? { body: JSON.stringify(init.json) } : {}),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** The queue deadline stops the wait; the transport bounds the request itself. */
|
|
67
|
+
function raceSignal(promise, signal) {
|
|
68
|
+
// The transport settles the abandoned request on its own; its rejection is handled here.
|
|
69
|
+
promise.catch(() => { });
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
if (signal.aborted) {
|
|
72
|
+
reject(signal.reason);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const onAbort = () => reject(signal.reason);
|
|
76
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
77
|
+
promise.then((value) => {
|
|
78
|
+
signal.removeEventListener("abort", onAbort);
|
|
79
|
+
resolve(value);
|
|
80
|
+
}, (error) => {
|
|
81
|
+
signal.removeEventListener("abort", onAbort);
|
|
82
|
+
reject(error);
|
|
83
|
+
});
|
|
82
84
|
});
|
|
83
|
-
const text = await readBounded(response, MAX_JSON_BYTES, "fal: response exceeds 32 MiB");
|
|
84
|
-
let body;
|
|
85
|
-
try {
|
|
86
|
-
body = JSON.parse(text);
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
throw new Error(`fal HTTP ${response.status}: non-JSON response`);
|
|
90
|
-
}
|
|
91
|
-
if (!response.ok)
|
|
92
|
-
throw new Error(explainFalError(response.status, body));
|
|
93
|
-
return body;
|
|
94
85
|
}
|
|
95
|
-
export async function submit(ctx, model, input
|
|
86
|
+
export async function submit(ctx, model, input) {
|
|
96
87
|
// A failed POST can have been accepted, so submissions are never retried here.
|
|
97
|
-
const receipt = await request(ctx,
|
|
88
|
+
const receipt = await request(ctx, queuePath(model), {
|
|
98
89
|
method: "POST",
|
|
99
|
-
|
|
100
|
-
signal,
|
|
90
|
+
json: input,
|
|
101
91
|
});
|
|
102
92
|
if (!Check(receiptSchema, receipt))
|
|
103
93
|
throw new Error("fal: invalid submission receipt or no request id; do not resubmit automatically");
|
|
104
|
-
|
|
94
|
+
pathSegment(receipt.request_id);
|
|
105
95
|
return receipt;
|
|
106
96
|
}
|
|
107
|
-
export async function status(ctx, model, requestId, logs = false
|
|
108
|
-
const body = await request(ctx,
|
|
97
|
+
export async function status(ctx, model, requestId, logs = false) {
|
|
98
|
+
const body = await request(ctx, queuePath(model, `/requests/${pathSegment(requestId)}/status${logs ? "?logs=1" : ""}`));
|
|
109
99
|
if (!Check(statusSchema, body))
|
|
110
100
|
throw new Error("fal: invalid queue status response");
|
|
111
101
|
return body;
|
|
112
102
|
}
|
|
113
|
-
export async function result(ctx, model, requestId
|
|
114
|
-
const body = await request(ctx,
|
|
103
|
+
export async function result(ctx, model, requestId) {
|
|
104
|
+
const body = await request(ctx, queuePath(model, `/requests/${pathSegment(requestId)}`));
|
|
115
105
|
if (!object(body))
|
|
116
106
|
throw new Error("fal: expected an object result");
|
|
117
107
|
return body;
|
|
118
108
|
}
|
|
119
109
|
export async function cancel(ctx, model, requestId) {
|
|
120
|
-
const body = await request(ctx,
|
|
110
|
+
const body = await request(ctx, queuePath(model, `/requests/${pathSegment(requestId)}/cancel`), { method: "PUT" });
|
|
121
111
|
if (!object(body) || body.status !== "CANCELLATION_REQUESTED")
|
|
122
112
|
throw new Error("fal: cancellation was not confirmed");
|
|
123
113
|
return body;
|
|
@@ -127,15 +117,16 @@ export async function runModel(ctx, model, input, timeoutMs) {
|
|
|
127
117
|
const signal = AbortSignal.timeout(timeoutMs);
|
|
128
118
|
let requestId;
|
|
129
119
|
try {
|
|
130
|
-
requestId = (await submit(ctx, model, input, signal))
|
|
120
|
+
requestId = (await raceSignal(submit(ctx, model, input), signal))
|
|
121
|
+
.request_id;
|
|
131
122
|
for (;;) {
|
|
132
123
|
signal.throwIfAborted();
|
|
133
|
-
const current = await status(ctx, model, requestId, false, signal);
|
|
124
|
+
const current = await raceSignal(status(ctx, model, requestId, false), signal);
|
|
134
125
|
if (current.status === "COMPLETED") {
|
|
135
126
|
if (current.error || current.error_type)
|
|
136
127
|
throw new Error(`fal: ${current.error ?? "generation failed"}${current.error_type ? ` [${current.error_type}]` : ""}`);
|
|
137
128
|
return {
|
|
138
|
-
output: await result(ctx, model, requestId, signal),
|
|
129
|
+
output: await raceSignal(result(ctx, model, requestId), signal),
|
|
139
130
|
requestId,
|
|
140
131
|
};
|
|
141
132
|
}
|
|
@@ -190,7 +181,11 @@ export function collectMedia(output, kind) {
|
|
|
190
181
|
push(output[field]);
|
|
191
182
|
return found;
|
|
192
183
|
}
|
|
193
|
-
/**
|
|
184
|
+
/**
|
|
185
|
+
* Restrict automatic downloads to fal's CDN, including every redirect target.
|
|
186
|
+
* These reads carry no credential, so they do not use the broker:
|
|
187
|
+
* redirects are followed manually, each hop re-validated here.
|
|
188
|
+
*/
|
|
194
189
|
function mediaUrl(value) {
|
|
195
190
|
const url = new URL(value);
|
|
196
191
|
if (url.protocol !== "https:" ||
|
|
@@ -299,5 +294,5 @@ export const saveDirSchema = t.String({
|
|
|
299
294
|
description: "Existing directory for generated files; defaults to the OS temp directory.",
|
|
300
295
|
});
|
|
301
296
|
export const extraInputSchema = t.Record(t.String(), t.Unknown(), {
|
|
302
|
-
description: "Model-specific fields, overriding action defaults. See https://fal.ai/models/<model>/api. Media downloads support HTTPS fal.media URLs and data URIs, up to 512 MiB each; JSON responses are limited to
|
|
297
|
+
description: "Model-specific fields, overriding action defaults. See https://fal.ai/models/<model>/api. Media downloads support HTTPS fal.media URLs and data URIs, up to 512 MiB each; JSON responses are limited to 64 MiB.",
|
|
303
298
|
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { hostLabel, staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/** An agent API key as the Basic username, with the fixed dummy password "X",
|
|
3
|
+
* to the account's own Freshdesk subdomain. */
|
|
4
|
+
export const freshdeskCredential = staticCredential({
|
|
5
|
+
id: "freshdesk",
|
|
6
|
+
auth: { kind: "basic" },
|
|
7
|
+
local: { username: "apiKey", password: { value: "X" } },
|
|
8
|
+
targets: (config) => ({
|
|
9
|
+
api: {
|
|
10
|
+
baseUrl: `https://${hostLabel(config.domain)}.freshdesk.com/api/v2/`,
|
|
11
|
+
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
probe: {
|
|
15
|
+
target: "api",
|
|
16
|
+
path: "agents/me",
|
|
17
|
+
method: "GET",
|
|
18
|
+
acceptedStatuses: [200],
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { freshdeskCredential } from "./credentials.js";
|
|
1
3
|
const STATUS = {
|
|
2
4
|
open: 2,
|
|
3
5
|
pending: 3,
|
|
@@ -19,47 +21,24 @@ const SOURCE = {
|
|
|
19
21
|
feedbackWidget: 9,
|
|
20
22
|
outboundEmail: 10,
|
|
21
23
|
};
|
|
22
|
-
async function apiRequest(domain, apiKey, method, endpoint, body, qs) {
|
|
23
|
-
const url = new URL(`https://${domain}.freshdesk.com/api/v2${endpoint}`);
|
|
24
|
-
if (qs) {
|
|
25
|
-
for (const [k, v] of Object.entries(qs)) {
|
|
26
|
-
if (v !== undefined && v !== null)
|
|
27
|
-
url.searchParams.set(k, String(v));
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
const opts = {
|
|
31
|
-
method,
|
|
32
|
-
headers: {
|
|
33
|
-
Authorization: `Basic ${btoa(`${apiKey}:X`)}`,
|
|
34
|
-
"Content-Type": "application/json",
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
if (body &&
|
|
38
|
-
Object.keys(body).length > 0 &&
|
|
39
|
-
method !== "GET" &&
|
|
40
|
-
method !== "DELETE") {
|
|
41
|
-
opts.body = JSON.stringify(body);
|
|
42
|
-
}
|
|
43
|
-
const res = await fetch(url.toString(), opts);
|
|
44
|
-
if (!res.ok)
|
|
45
|
-
throw new Error(`Freshdesk API error ${res.status}: ${await res.text()}`);
|
|
46
|
-
if (res.status === 204)
|
|
47
|
-
return { success: true };
|
|
48
|
-
return res.json();
|
|
49
|
-
}
|
|
50
|
-
function getConn(ctx) {
|
|
51
|
-
return {
|
|
52
|
-
domain: ctx.connection.config.domain,
|
|
53
|
-
apiKey: ctx.connection.config.apiKey,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
24
|
function req(ctx, method, endpoint, body, qs) {
|
|
57
|
-
|
|
58
|
-
|
|
25
|
+
return credentialJson(ctx, freshdeskCredential, "freshdesk", {
|
|
26
|
+
target: "api",
|
|
27
|
+
path: endpoint,
|
|
28
|
+
method,
|
|
29
|
+
query: qs,
|
|
30
|
+
...(body &&
|
|
31
|
+
Object.keys(body).length > 0 &&
|
|
32
|
+
method !== "GET" &&
|
|
33
|
+
method !== "DELETE"
|
|
34
|
+
? { json: body }
|
|
35
|
+
: {}),
|
|
36
|
+
});
|
|
59
37
|
}
|
|
60
38
|
export default function freshdesk(rl) {
|
|
61
39
|
rl.setName("freshdesk");
|
|
62
40
|
rl.setVersion("0.1.0");
|
|
41
|
+
rl.setCredential(freshdeskCredential);
|
|
63
42
|
rl.setConnectionSchema({
|
|
64
43
|
domain: {
|
|
65
44
|
type: "string",
|
|
@@ -188,7 +167,7 @@ export default function freshdesk(rl) {
|
|
|
188
167
|
body.fr_due_by = i.frDueBy;
|
|
189
168
|
if (i.customFields)
|
|
190
169
|
body.custom_fields = i.customFields;
|
|
191
|
-
return req(ctx, "POST", "
|
|
170
|
+
return req(ctx, "POST", "tickets", body);
|
|
192
171
|
},
|
|
193
172
|
});
|
|
194
173
|
rl.registerAction("ticket.get", {
|
|
@@ -198,7 +177,7 @@ export default function freshdesk(rl) {
|
|
|
198
177
|
ticketId: { type: "string", required: true, description: "Ticket ID" },
|
|
199
178
|
},
|
|
200
179
|
async execute(input, ctx) {
|
|
201
|
-
return req(ctx, "GET",
|
|
180
|
+
return req(ctx, "GET", `tickets/${pathSegment(input.ticketId)}`);
|
|
202
181
|
},
|
|
203
182
|
});
|
|
204
183
|
rl.registerAction("ticket.list", {
|
|
@@ -265,7 +244,7 @@ export default function freshdesk(rl) {
|
|
|
265
244
|
qs.order_type = orderType;
|
|
266
245
|
if (include)
|
|
267
246
|
qs.include = include;
|
|
268
|
-
return req(ctx, "GET", "
|
|
247
|
+
return req(ctx, "GET", "tickets", undefined, qs);
|
|
269
248
|
},
|
|
270
249
|
});
|
|
271
250
|
rl.registerAction("ticket.update", {
|
|
@@ -329,7 +308,7 @@ export default function freshdesk(rl) {
|
|
|
329
308
|
body.fr_due_by = frDueBy;
|
|
330
309
|
if (customFields)
|
|
331
310
|
body.custom_fields = customFields;
|
|
332
|
-
return req(ctx, "PUT",
|
|
311
|
+
return req(ctx, "PUT", `tickets/${pathSegment(ticketId)}`, body);
|
|
333
312
|
},
|
|
334
313
|
});
|
|
335
314
|
rl.registerAction("ticket.delete", {
|
|
@@ -339,7 +318,7 @@ export default function freshdesk(rl) {
|
|
|
339
318
|
ticketId: { type: "string", required: true, description: "Ticket ID" },
|
|
340
319
|
},
|
|
341
320
|
async execute(input, ctx) {
|
|
342
|
-
await req(ctx, "DELETE",
|
|
321
|
+
await req(ctx, "DELETE", `tickets/${pathSegment(input.ticketId)}`);
|
|
343
322
|
return { success: true };
|
|
344
323
|
},
|
|
345
324
|
});
|
|
@@ -388,7 +367,7 @@ export default function freshdesk(rl) {
|
|
|
388
367
|
body.company_id = companyId;
|
|
389
368
|
if (customFields)
|
|
390
369
|
body.custom_fields = customFields;
|
|
391
|
-
return req(ctx, "POST", "
|
|
370
|
+
return req(ctx, "POST", "contacts", body);
|
|
392
371
|
},
|
|
393
372
|
});
|
|
394
373
|
rl.registerAction("contact.get", {
|
|
@@ -398,7 +377,7 @@ export default function freshdesk(rl) {
|
|
|
398
377
|
contactId: { type: "string", required: true, description: "Contact ID" },
|
|
399
378
|
},
|
|
400
379
|
async execute(input, ctx) {
|
|
401
|
-
return req(ctx, "GET",
|
|
380
|
+
return req(ctx, "GET", `contacts/${pathSegment(input.contactId)}`);
|
|
402
381
|
},
|
|
403
382
|
});
|
|
404
383
|
rl.registerAction("contact.list", {
|
|
@@ -445,7 +424,7 @@ export default function freshdesk(rl) {
|
|
|
445
424
|
qs.company_id = companyId;
|
|
446
425
|
if (state)
|
|
447
426
|
qs.state = state;
|
|
448
|
-
return req(ctx, "GET", "
|
|
427
|
+
return req(ctx, "GET", "contacts", undefined, qs);
|
|
449
428
|
},
|
|
450
429
|
});
|
|
451
430
|
rl.registerAction("contact.update", {
|
|
@@ -485,7 +464,7 @@ export default function freshdesk(rl) {
|
|
|
485
464
|
body.tags = tags;
|
|
486
465
|
if (customFields)
|
|
487
466
|
body.custom_fields = customFields;
|
|
488
|
-
return req(ctx, "PUT",
|
|
467
|
+
return req(ctx, "PUT", `contacts/${pathSegment(contactId)}`, body);
|
|
489
468
|
},
|
|
490
469
|
});
|
|
491
470
|
rl.registerAction("contact.delete", {
|
|
@@ -495,7 +474,7 @@ export default function freshdesk(rl) {
|
|
|
495
474
|
contactId: { type: "string", required: true, description: "Contact ID" },
|
|
496
475
|
},
|
|
497
476
|
async execute(input, ctx) {
|
|
498
|
-
await req(ctx, "DELETE",
|
|
477
|
+
await req(ctx, "DELETE", `contacts/${pathSegment(input.contactId)}`);
|
|
499
478
|
return { success: true };
|
|
500
479
|
},
|
|
501
480
|
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { hostLabel, staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* An API key as the Basic username with Freshservice's fixed "X" password,
|
|
4
|
+
* on the connection's own subdomain of freshservice.com.
|
|
5
|
+
*/
|
|
6
|
+
export const freshserviceCredential = staticCredential({
|
|
7
|
+
id: "freshservice",
|
|
8
|
+
auth: { kind: "basic" },
|
|
9
|
+
local: { username: "apiKey", password: { value: "X" } },
|
|
10
|
+
targets: (config) => ({
|
|
11
|
+
api: {
|
|
12
|
+
baseUrl: `https://${hostLabel(config.domain)}.freshservice.com/api/v2/`,
|
|
13
|
+
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
});
|