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,14 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Gmail plugin for runline.
|
|
3
3
|
*
|
|
4
|
-
* Authentication: OAuth2 user flow, seeded once
|
|
5
|
-
* `runline auth gmail
|
|
6
|
-
* `
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `https://oauth2.googleapis.com/token` and persists the new
|
|
10
|
-
* token via `ctx.updateConnection`. File-level locking inside
|
|
11
|
-
* runline core keeps concurrent refreshes safe.
|
|
4
|
+
* Authentication: the Google grant's OAuth2 user flow, seeded once
|
|
5
|
+
* via `runline auth gmail`, or a service account. The connection
|
|
6
|
+
* stores `clientId`, `clientSecret` and `refreshToken`; the access
|
|
7
|
+
* token is refreshed lazily (60 s skew) and cached on the connection
|
|
8
|
+
* as the grant's, so every Google plugin sharing it signs with it.
|
|
12
9
|
*
|
|
13
10
|
* This plugin deliberately doesn't depend on nodemailer or
|
|
14
11
|
* mailparser. MIME building is a minimal hand-rolled encoder
|
|
@@ -21,8 +18,10 @@
|
|
|
21
18
|
* or parsed `payload` tree for format=full).
|
|
22
19
|
*/
|
|
23
20
|
import * as t from "typebox";
|
|
21
|
+
import { DownloadedFile, standardBase64 } from "../../_shared/base64.js";
|
|
24
22
|
import { renderEmailJsx } from "../../_shared/emailJsx.js";
|
|
25
|
-
import {
|
|
23
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
24
|
+
import { googleCredential, googleJsonRequest, googleOAuth, } from "../../_shared/googleAuth.js";
|
|
26
25
|
import { GoogleTimestamp, Id, NonEmptyString, stringEnum, } from "../../_shared/googleSchemas.js";
|
|
27
26
|
// ─── Request ─────────────────────────────────────────────────────
|
|
28
27
|
const API_BASE = "https://gmail.googleapis.com/gmail/v1/users/me";
|
|
@@ -86,18 +85,6 @@ function header(name, value) {
|
|
|
86
85
|
function foldedBase64ByteLength(length) {
|
|
87
86
|
return length === 0 ? 0 : length + Math.floor((length - 1) / 76) * CRLF.length;
|
|
88
87
|
}
|
|
89
|
-
function normalizeMimeBase64(value, index) {
|
|
90
|
-
const compact = value.replace(/\s+/g, "");
|
|
91
|
-
if (!/^[A-Za-z0-9+/=_-]*$/.test(compact)) {
|
|
92
|
-
throw new Error(`gmail: attachment ${index} contentBase64 contains invalid base64 characters`);
|
|
93
|
-
}
|
|
94
|
-
const standard = compact.replace(/-/g, "+").replace(/_/g, "/");
|
|
95
|
-
const remainder = standard.length % 4;
|
|
96
|
-
if (remainder === 1) {
|
|
97
|
-
throw new Error(`gmail: attachment ${index} contentBase64 has invalid base64 length`);
|
|
98
|
-
}
|
|
99
|
-
return remainder === 0 ? standard : `${standard}${"=".repeat(4 - remainder)}`;
|
|
100
|
-
}
|
|
101
88
|
function foldBase64(encoded) {
|
|
102
89
|
let folded = "";
|
|
103
90
|
for (let i = 0; i < encoded.length; i += 76) {
|
|
@@ -134,10 +121,20 @@ function normalizeAttachment(input, index) {
|
|
|
134
121
|
if (typeof contentBase64 !== "string") {
|
|
135
122
|
throw new Error(`gmail: attachment ${index} contentBase64 must be a base64 string`);
|
|
136
123
|
}
|
|
124
|
+
const normalized = standardBase64(contentBase64);
|
|
125
|
+
if (normalized === undefined) {
|
|
126
|
+
throw new Error(`gmail: attachment ${index} contentBase64 is not valid base64`);
|
|
127
|
+
}
|
|
128
|
+
// A download result passed as contentBase64 names its own file and type.
|
|
129
|
+
const result = typeof content === "object" && content ? content : {};
|
|
130
|
+
const named = (value) => typeof value === "string" && value ? value : undefined;
|
|
137
131
|
return {
|
|
138
|
-
name: input.name ??
|
|
139
|
-
|
|
140
|
-
|
|
132
|
+
name: input.name ??
|
|
133
|
+
input.filename ??
|
|
134
|
+
named(result.name) ??
|
|
135
|
+
`attachment-${index + 1}`,
|
|
136
|
+
mimeType: input.mimeType ?? named(result.mimeType) ?? "application/octet-stream",
|
|
137
|
+
contentBase64: normalized,
|
|
141
138
|
};
|
|
142
139
|
}
|
|
143
140
|
function attachmentPart(att) {
|
|
@@ -431,13 +428,10 @@ function simplifyMessage(raw, labels) {
|
|
|
431
428
|
* `References` headers plus the original `threadId`.
|
|
432
429
|
*/
|
|
433
430
|
async function replyToMessage(ctx, messageId, p) {
|
|
434
|
-
if (p.replyToSenderOnly && p.replyToRecipientsOnly) {
|
|
435
|
-
throw new Error("gmail: replyToSenderOnly and replyToRecipientsOnly are mutually exclusive");
|
|
436
|
-
}
|
|
437
431
|
// Render before any network round-trip so malformed jsx fails
|
|
438
432
|
// without spending Gmail API calls.
|
|
439
433
|
const { text, html } = await resolveBody(p);
|
|
440
|
-
const original = (await gmailRequest(ctx, "GET", `/messages/${messageId}`, undefined, { format: "metadata", metadataHeaders: REPLY_METADATA_HEADERS }));
|
|
434
|
+
const original = (await gmailRequest(ctx, "GET", `/messages/${pathSegment(messageId)}`, undefined, { format: "metadata", metadataHeaders: REPLY_METADATA_HEADERS }));
|
|
441
435
|
const subject = findHeader(original.payload, "Subject") ?? "";
|
|
442
436
|
const messageIdHeader = findHeader(original.payload, "Message-ID") ?? "";
|
|
443
437
|
const threadId = original.threadId;
|
|
@@ -514,10 +508,7 @@ const MessageListVisibility = stringEnum(["show", "hide"]);
|
|
|
514
508
|
const MetadataHeaders = t.Array(t.String());
|
|
515
509
|
const LabelIds = t.Array(NonEmptyString, { minItems: 1 });
|
|
516
510
|
const MaxResults = t.Integer({ minimum: 1, maximum: 500 });
|
|
517
|
-
const AttachmentContent = t.Union([
|
|
518
|
-
t.String(),
|
|
519
|
-
t.Object({ contentBase64: t.String() }, strict),
|
|
520
|
-
]);
|
|
511
|
+
const AttachmentContent = t.Union([t.String(), DownloadedFile]);
|
|
521
512
|
const Attachment = t.Object({
|
|
522
513
|
name: t.Optional(t.String()),
|
|
523
514
|
filename: t.Optional(t.String()),
|
|
@@ -580,60 +571,8 @@ const ListInput = t.Object(ListFields, strict);
|
|
|
580
571
|
export default function gmail(rl) {
|
|
581
572
|
rl.setName("gmail");
|
|
582
573
|
rl.setVersion("0.1.0");
|
|
583
|
-
rl.
|
|
584
|
-
|
|
585
|
-
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
586
|
-
scopes: SCOPES,
|
|
587
|
-
// access_type=offline + prompt=consent are both required to
|
|
588
|
-
// make Google return a refresh token. Without them, repeat
|
|
589
|
-
// logins skip the refresh_token field in the response.
|
|
590
|
-
authParams: { access_type: "offline", prompt: "consent" },
|
|
591
|
-
setupHelp: [
|
|
592
|
-
"You need a Google Cloud OAuth client. Takes ~5 minutes, one time.",
|
|
593
|
-
"Do the steps in order — skipping step 4 causes a 403 when you log in.",
|
|
594
|
-
"",
|
|
595
|
-
"1. Create a Google Cloud project (or pick an existing one):",
|
|
596
|
-
" https://console.cloud.google.com/projectcreate",
|
|
597
|
-
" Make sure the new project is selected in the top navigation dropdown.",
|
|
598
|
-
"",
|
|
599
|
-
"2. Enable the Gmail API for that project:",
|
|
600
|
-
" https://console.cloud.google.com/apis/library/gmail.googleapis.com",
|
|
601
|
-
" Click 'Enable'.",
|
|
602
|
-
"",
|
|
603
|
-
"3. Configure the OAuth consent screen (first time only):",
|
|
604
|
-
" https://console.cloud.google.com/apis/credentials/consent",
|
|
605
|
-
" Click 'Get started' and fill in:",
|
|
606
|
-
" • App name: runline (or whatever)",
|
|
607
|
-
" • User support email: your email",
|
|
608
|
-
" • Audience: External",
|
|
609
|
-
" • Developer contact: your email",
|
|
610
|
-
" You can skip the Scopes screen — runline declares scopes at auth time.",
|
|
611
|
-
"",
|
|
612
|
-
"4. Add yourself as a test user (required — External apps in Testing mode",
|
|
613
|
-
" only allow authentication from addresses on this list):",
|
|
614
|
-
" https://console.cloud.google.com/auth/audience",
|
|
615
|
-
" Under 'Test users', click '+ Add users' and enter the Gmail address",
|
|
616
|
-
" you'll use to log in. Consent and refresh tokens expire every 7 days",
|
|
617
|
-
" while the app is in Testing mode.",
|
|
618
|
-
"",
|
|
619
|
-
"5. Create the OAuth client:",
|
|
620
|
-
" https://console.cloud.google.com/apis/credentials",
|
|
621
|
-
" • + Create credentials → OAuth client ID",
|
|
622
|
-
" • Application type: Web application",
|
|
623
|
-
" • Name: runline (or whatever)",
|
|
624
|
-
" • Authorized redirect URIs → + Add URI:",
|
|
625
|
-
" {{redirectUri}}",
|
|
626
|
-
" • Click Create, then copy the Client ID and Client Secret from the",
|
|
627
|
-
" dialog — the secret is only shown once.",
|
|
628
|
-
"",
|
|
629
|
-
"6. Paste them below (or re-run with --client-id / --client-secret,",
|
|
630
|
-
" or export GMAIL_CLIENT_ID and GMAIL_CLIENT_SECRET).",
|
|
631
|
-
"",
|
|
632
|
-
"During login you'll see a 'Google hasn't verified this app' warning.",
|
|
633
|
-
"Click 'Advanced → Go to runline (unsafe)' to continue — this is",
|
|
634
|
-
"expected for apps in Testing mode.",
|
|
635
|
-
],
|
|
636
|
-
});
|
|
574
|
+
rl.setCredential(googleCredential("gmail", SCOPES));
|
|
575
|
+
rl.setOAuth(googleOAuth("gmail", SCOPES, "GMAIL"));
|
|
637
576
|
rl.setConnectionSchema({
|
|
638
577
|
authMethod: { type: "string", required: false, description: "delegated or serviceAccount (legacy configs infer the method)" },
|
|
639
578
|
clientId: {
|
|
@@ -750,7 +689,7 @@ export default function gmail(rl) {
|
|
|
750
689
|
const qs = { format: p.format ?? "full" };
|
|
751
690
|
if (p.metadataHeaders)
|
|
752
691
|
qs.metadataHeaders = p.metadataHeaders;
|
|
753
|
-
const raw = (await gmailRequest(ctx, "GET", `/messages/${p.id}`, undefined, qs));
|
|
692
|
+
const raw = (await gmailRequest(ctx, "GET", `/messages/${pathSegment(p.id)}`, undefined, qs));
|
|
754
693
|
if (!p.simple)
|
|
755
694
|
return raw;
|
|
756
695
|
const labels = await loadLabelMap(ctx);
|
|
@@ -778,7 +717,7 @@ export default function gmail(rl) {
|
|
|
778
717
|
inputSchema: IdInput,
|
|
779
718
|
async execute(input, ctx) {
|
|
780
719
|
const { id } = input;
|
|
781
|
-
return gmailRequest(ctx, "DELETE", `/messages/${id}`);
|
|
720
|
+
return gmailRequest(ctx, "DELETE", `/messages/${pathSegment(id)}`);
|
|
782
721
|
},
|
|
783
722
|
});
|
|
784
723
|
rl.registerAction("message.trash", {
|
|
@@ -787,7 +726,7 @@ export default function gmail(rl) {
|
|
|
787
726
|
inputSchema: IdInput,
|
|
788
727
|
async execute(input, ctx) {
|
|
789
728
|
const { id } = input;
|
|
790
|
-
return gmailRequest(ctx, "POST", `/messages/${id}/trash`);
|
|
729
|
+
return gmailRequest(ctx, "POST", `/messages/${pathSegment(id)}/trash`);
|
|
791
730
|
},
|
|
792
731
|
});
|
|
793
732
|
rl.registerAction("message.untrash", {
|
|
@@ -796,7 +735,7 @@ export default function gmail(rl) {
|
|
|
796
735
|
inputSchema: IdInput,
|
|
797
736
|
async execute(input, ctx) {
|
|
798
737
|
const { id } = input;
|
|
799
|
-
return gmailRequest(ctx, "POST", `/messages/${id}/untrash`);
|
|
738
|
+
return gmailRequest(ctx, "POST", `/messages/${pathSegment(id)}/untrash`);
|
|
800
739
|
},
|
|
801
740
|
});
|
|
802
741
|
rl.registerAction("message.markAsRead", {
|
|
@@ -805,7 +744,7 @@ export default function gmail(rl) {
|
|
|
805
744
|
inputSchema: IdInput,
|
|
806
745
|
async execute(input, ctx) {
|
|
807
746
|
const { id } = input;
|
|
808
|
-
return gmailRequest(ctx, "POST", `/messages/${id}/modify`, {
|
|
747
|
+
return gmailRequest(ctx, "POST", `/messages/${pathSegment(id)}/modify`, {
|
|
809
748
|
removeLabelIds: ["UNREAD"],
|
|
810
749
|
});
|
|
811
750
|
},
|
|
@@ -816,7 +755,7 @@ export default function gmail(rl) {
|
|
|
816
755
|
inputSchema: IdInput,
|
|
817
756
|
async execute(input, ctx) {
|
|
818
757
|
const { id } = input;
|
|
819
|
-
return gmailRequest(ctx, "POST", `/messages/${id}/modify`, {
|
|
758
|
+
return gmailRequest(ctx, "POST", `/messages/${pathSegment(id)}/modify`, {
|
|
820
759
|
addLabelIds: ["UNREAD"],
|
|
821
760
|
});
|
|
822
761
|
},
|
|
@@ -827,7 +766,7 @@ export default function gmail(rl) {
|
|
|
827
766
|
inputSchema: t.Object({ id: Id, labelIds: LabelIds }, strict),
|
|
828
767
|
async execute(input, ctx) {
|
|
829
768
|
const { id, labelIds } = input;
|
|
830
|
-
return gmailRequest(ctx, "POST", `/messages/${id}/modify`, {
|
|
769
|
+
return gmailRequest(ctx, "POST", `/messages/${pathSegment(id)}/modify`, {
|
|
831
770
|
addLabelIds: labelIds,
|
|
832
771
|
});
|
|
833
772
|
},
|
|
@@ -838,7 +777,7 @@ export default function gmail(rl) {
|
|
|
838
777
|
inputSchema: t.Object({ id: Id, labelIds: LabelIds }, strict),
|
|
839
778
|
async execute(input, ctx) {
|
|
840
779
|
const { id, labelIds } = input;
|
|
841
|
-
return gmailRequest(ctx, "POST", `/messages/${id}/modify`, {
|
|
780
|
+
return gmailRequest(ctx, "POST", `/messages/${pathSegment(id)}/modify`, {
|
|
842
781
|
removeLabelIds: labelIds,
|
|
843
782
|
});
|
|
844
783
|
},
|
|
@@ -849,7 +788,7 @@ export default function gmail(rl) {
|
|
|
849
788
|
inputSchema: t.Object({ messageId: Id, attachmentId: Id }, strict),
|
|
850
789
|
async execute(input, ctx) {
|
|
851
790
|
const { messageId, attachmentId } = input;
|
|
852
|
-
return gmailRequest(ctx, "GET", `/messages/${messageId}/attachments/${attachmentId}`);
|
|
791
|
+
return gmailRequest(ctx, "GET", `/messages/${pathSegment(messageId)}/attachments/${pathSegment(attachmentId)}`);
|
|
853
792
|
},
|
|
854
793
|
});
|
|
855
794
|
// ── Thread ────────────────────────────────────────────
|
|
@@ -869,7 +808,7 @@ export default function gmail(rl) {
|
|
|
869
808
|
const qs = { format: p.format ?? "full" };
|
|
870
809
|
if (p.metadataHeaders)
|
|
871
810
|
qs.metadataHeaders = p.metadataHeaders;
|
|
872
|
-
const raw = (await gmailRequest(ctx, "GET", `/threads/${p.id}`, undefined, qs));
|
|
811
|
+
const raw = (await gmailRequest(ctx, "GET", `/threads/${pathSegment(p.id)}`, undefined, qs));
|
|
873
812
|
if (!p.simple)
|
|
874
813
|
return raw;
|
|
875
814
|
const labels = await loadLabelMap(ctx);
|
|
@@ -896,7 +835,7 @@ export default function gmail(rl) {
|
|
|
896
835
|
inputSchema: IdInput,
|
|
897
836
|
async execute(input, ctx) {
|
|
898
837
|
const { id } = input;
|
|
899
|
-
return gmailRequest(ctx, "DELETE", `/threads/${id}`);
|
|
838
|
+
return gmailRequest(ctx, "DELETE", `/threads/${pathSegment(id)}`);
|
|
900
839
|
},
|
|
901
840
|
});
|
|
902
841
|
rl.registerAction("thread.trash", {
|
|
@@ -905,7 +844,7 @@ export default function gmail(rl) {
|
|
|
905
844
|
inputSchema: IdInput,
|
|
906
845
|
async execute(input, ctx) {
|
|
907
846
|
const { id } = input;
|
|
908
|
-
return gmailRequest(ctx, "POST", `/threads/${id}/trash`);
|
|
847
|
+
return gmailRequest(ctx, "POST", `/threads/${pathSegment(id)}/trash`);
|
|
909
848
|
},
|
|
910
849
|
});
|
|
911
850
|
rl.registerAction("thread.untrash", {
|
|
@@ -914,7 +853,7 @@ export default function gmail(rl) {
|
|
|
914
853
|
inputSchema: IdInput,
|
|
915
854
|
async execute(input, ctx) {
|
|
916
855
|
const { id } = input;
|
|
917
|
-
return gmailRequest(ctx, "POST", `/threads/${id}/untrash`);
|
|
856
|
+
return gmailRequest(ctx, "POST", `/threads/${pathSegment(id)}/untrash`);
|
|
918
857
|
},
|
|
919
858
|
});
|
|
920
859
|
rl.registerAction("thread.addLabels", {
|
|
@@ -923,7 +862,7 @@ export default function gmail(rl) {
|
|
|
923
862
|
inputSchema: t.Object({ id: Id, labelIds: LabelIds }, strict),
|
|
924
863
|
async execute(input, ctx) {
|
|
925
864
|
const { id, labelIds } = input;
|
|
926
|
-
return gmailRequest(ctx, "POST", `/threads/${id}/modify`, {
|
|
865
|
+
return gmailRequest(ctx, "POST", `/threads/${pathSegment(id)}/modify`, {
|
|
927
866
|
addLabelIds: labelIds,
|
|
928
867
|
});
|
|
929
868
|
},
|
|
@@ -934,7 +873,7 @@ export default function gmail(rl) {
|
|
|
934
873
|
inputSchema: t.Object({ id: Id, labelIds: LabelIds }, strict),
|
|
935
874
|
async execute(input, ctx) {
|
|
936
875
|
const { id, labelIds } = input;
|
|
937
|
-
return gmailRequest(ctx, "POST", `/threads/${id}/modify`, {
|
|
876
|
+
return gmailRequest(ctx, "POST", `/threads/${pathSegment(id)}/modify`, {
|
|
938
877
|
removeLabelIds: labelIds,
|
|
939
878
|
});
|
|
940
879
|
},
|
|
@@ -945,7 +884,7 @@ export default function gmail(rl) {
|
|
|
945
884
|
inputSchema: t.Object({ id: Id, ...ReplyFields }, ReplyOptions),
|
|
946
885
|
async execute(input, ctx) {
|
|
947
886
|
const p = (input ?? {});
|
|
948
|
-
const thread = (await gmailRequest(ctx, "GET", `/threads/${p.id}`, undefined, { format: "minimal" }));
|
|
887
|
+
const thread = (await gmailRequest(ctx, "GET", `/threads/${pathSegment(p.id)}`, undefined, { format: "minimal" }));
|
|
949
888
|
const last = thread.messages?.[thread.messages.length - 1];
|
|
950
889
|
if (!last?.id) {
|
|
951
890
|
throw new Error(`gmail: thread ${p.id} has no messages to reply to`);
|
|
@@ -991,7 +930,7 @@ export default function gmail(rl) {
|
|
|
991
930
|
// thread and set In-Reply-To/References so Gmail places the
|
|
992
931
|
// draft into the conversation correctly.
|
|
993
932
|
if (p.threadId) {
|
|
994
|
-
const thread = (await gmailRequest(ctx, "GET", `/threads/${p.threadId}`, undefined, { format: "metadata", metadataHeaders: ["Message-ID"] }));
|
|
933
|
+
const thread = (await gmailRequest(ctx, "GET", `/threads/${pathSegment(p.threadId)}`, undefined, { format: "metadata", metadataHeaders: ["Message-ID"] }));
|
|
995
934
|
const last = thread.messages?.[thread.messages.length - 1];
|
|
996
935
|
const mid = findHeader(last?.payload, "Message-ID");
|
|
997
936
|
if (mid) {
|
|
@@ -1012,7 +951,7 @@ export default function gmail(rl) {
|
|
|
1012
951
|
async execute(input, ctx) {
|
|
1013
952
|
const p = (input ?? {});
|
|
1014
953
|
const qs = { format: p.format ?? "full" };
|
|
1015
|
-
return gmailRequest(ctx, "GET", `/drafts/${p.id}`, undefined, qs);
|
|
954
|
+
return gmailRequest(ctx, "GET", `/drafts/${pathSegment(p.id)}`, undefined, qs);
|
|
1016
955
|
},
|
|
1017
956
|
});
|
|
1018
957
|
rl.registerAction("draft.list", {
|
|
@@ -1047,7 +986,7 @@ export default function gmail(rl) {
|
|
|
1047
986
|
inputSchema: IdInput,
|
|
1048
987
|
async execute(input, ctx) {
|
|
1049
988
|
const { id } = input;
|
|
1050
|
-
return gmailRequest(ctx, "DELETE", `/drafts/${id}`);
|
|
989
|
+
return gmailRequest(ctx, "DELETE", `/drafts/${pathSegment(id)}`);
|
|
1051
990
|
},
|
|
1052
991
|
});
|
|
1053
992
|
rl.registerAction("draft.send", {
|
|
@@ -1086,7 +1025,7 @@ export default function gmail(rl) {
|
|
|
1086
1025
|
inputSchema: IdInput,
|
|
1087
1026
|
async execute(input, ctx) {
|
|
1088
1027
|
const { id } = input;
|
|
1089
|
-
return gmailRequest(ctx, "GET", `/labels/${id}`);
|
|
1028
|
+
return gmailRequest(ctx, "GET", `/labels/${pathSegment(id)}`);
|
|
1090
1029
|
},
|
|
1091
1030
|
});
|
|
1092
1031
|
rl.registerAction("label.list", {
|
|
@@ -1104,7 +1043,7 @@ export default function gmail(rl) {
|
|
|
1104
1043
|
inputSchema: IdInput,
|
|
1105
1044
|
async execute(input, ctx) {
|
|
1106
1045
|
const { id } = input;
|
|
1107
|
-
return gmailRequest(ctx, "DELETE", `/labels/${id}`);
|
|
1046
|
+
return gmailRequest(ctx, "DELETE", `/labels/${pathSegment(id)}`);
|
|
1108
1047
|
},
|
|
1109
1048
|
});
|
|
1110
1049
|
rl.registerAction("label.update", {
|
|
@@ -1134,7 +1073,7 @@ export default function gmail(rl) {
|
|
|
1134
1073
|
if (p.messageListVisibility) {
|
|
1135
1074
|
body.messageListVisibility = p.messageListVisibility;
|
|
1136
1075
|
}
|
|
1137
|
-
return gmailRequest(ctx, "PATCH", `/labels/${p.id}`, body);
|
|
1076
|
+
return gmailRequest(ctx, "PATCH", `/labels/${pathSegment(p.id)}`, body);
|
|
1138
1077
|
},
|
|
1139
1078
|
});
|
|
1140
1079
|
// ── Profile / aliases ─────────────────────────────────
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { httpsBase, staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* An access key and secret as the Basic pair, on the connection's Gong
|
|
4
|
+
* API base (api.gong.io, or the account's regional base) beneath /v2/.
|
|
5
|
+
*/
|
|
6
|
+
export const gongCredential = staticCredential({
|
|
7
|
+
id: "gong",
|
|
8
|
+
auth: { kind: "basic" },
|
|
9
|
+
local: { username: "accessKey", password: "accessKeySecret" },
|
|
10
|
+
targets: (config) => ({
|
|
11
|
+
api: {
|
|
12
|
+
baseUrl: httpsBase(config.baseUrl ?? "https://api.gong.io", "v2/"),
|
|
13
|
+
methods: ["POST"],
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
@@ -1,27 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
opts.body = JSON.stringify(body);
|
|
11
|
-
}
|
|
12
|
-
const res = await fetch(`${baseUrl}${endpoint}`, opts);
|
|
13
|
-
if (!res.ok)
|
|
14
|
-
throw new Error(`Gong API error ${res.status}: ${await res.text()}`);
|
|
15
|
-
return res.json();
|
|
1
|
+
import { credentialJson } from "../../_shared/credentials.js";
|
|
2
|
+
import { gongCredential } from "./credentials.js";
|
|
3
|
+
function api(ctx, path, body) {
|
|
4
|
+
return credentialJson(ctx, gongCredential, "gong", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path,
|
|
7
|
+
method: "POST",
|
|
8
|
+
json: body,
|
|
9
|
+
});
|
|
16
10
|
}
|
|
17
|
-
async function paginate(
|
|
11
|
+
async function paginate(ctx, path, body, resultKey, limit) {
|
|
18
12
|
const results = [];
|
|
19
13
|
let cursor;
|
|
20
14
|
do {
|
|
21
15
|
const reqBody = { ...body };
|
|
22
16
|
if (cursor)
|
|
23
17
|
reqBody.cursor = cursor;
|
|
24
|
-
const data = (await
|
|
18
|
+
const data = (await api(ctx, path, reqBody));
|
|
25
19
|
const items = data[resultKey] ?? [];
|
|
26
20
|
results.push(...items);
|
|
27
21
|
cursor = data.records?.cursor;
|
|
@@ -30,16 +24,10 @@ async function paginate(baseUrl, accessKey, accessKeySecret, endpoint, body, res
|
|
|
30
24
|
} while (cursor);
|
|
31
25
|
return limit ? results.slice(0, limit) : results;
|
|
32
26
|
}
|
|
33
|
-
function getConn(ctx) {
|
|
34
|
-
return {
|
|
35
|
-
baseUrl: (ctx.connection.config.baseUrl ?? "https://api.gong.io").replace(/\/$/, ""),
|
|
36
|
-
accessKey: ctx.connection.config.accessKey,
|
|
37
|
-
accessKeySecret: ctx.connection.config.accessKeySecret,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
27
|
export default function gong(rl) {
|
|
41
28
|
rl.setName("gong");
|
|
42
29
|
rl.setVersion("0.1.0");
|
|
30
|
+
rl.setCredential(gongCredential);
|
|
43
31
|
rl.setConnectionSchema({
|
|
44
32
|
baseUrl: {
|
|
45
33
|
type: "string",
|
|
@@ -74,11 +62,10 @@ export default function gong(rl) {
|
|
|
74
62
|
},
|
|
75
63
|
async execute(input, ctx) {
|
|
76
64
|
const { callId, contentSelector } = input;
|
|
77
|
-
const { baseUrl, accessKey, accessKeySecret } = getConn(ctx);
|
|
78
65
|
const body = { filter: { callIds: [callId] } };
|
|
79
66
|
if (contentSelector)
|
|
80
67
|
body.contentSelector = contentSelector;
|
|
81
|
-
const data = (await
|
|
68
|
+
const data = (await api(ctx, "calls/extensive", body));
|
|
82
69
|
const calls = data.calls;
|
|
83
70
|
return calls?.[0];
|
|
84
71
|
},
|
|
@@ -116,7 +103,6 @@ export default function gong(rl) {
|
|
|
116
103
|
},
|
|
117
104
|
async execute(input, ctx) {
|
|
118
105
|
const { limit, fromDateTime, toDateTime, workspaceId, callIds, primaryUserIds, } = (input ?? {});
|
|
119
|
-
const { baseUrl, accessKey, accessKeySecret } = getConn(ctx);
|
|
120
106
|
const filter = {};
|
|
121
107
|
if (fromDateTime)
|
|
122
108
|
filter.fromDateTime = fromDateTime;
|
|
@@ -128,7 +114,7 @@ export default function gong(rl) {
|
|
|
128
114
|
filter.callIds = callIds;
|
|
129
115
|
if (primaryUserIds)
|
|
130
116
|
filter.primaryUserIds = primaryUserIds;
|
|
131
|
-
return paginate(
|
|
117
|
+
return paginate(ctx, "calls/extensive", { filter }, "calls", limit);
|
|
132
118
|
},
|
|
133
119
|
});
|
|
134
120
|
rl.registerAction("user.get", {
|
|
@@ -139,8 +125,7 @@ export default function gong(rl) {
|
|
|
139
125
|
},
|
|
140
126
|
async execute(input, ctx) {
|
|
141
127
|
const { userId } = input;
|
|
142
|
-
const
|
|
143
|
-
const data = (await apiRequest(baseUrl, accessKey, accessKeySecret, "POST", "/v2/users/extensive", {
|
|
128
|
+
const data = (await api(ctx, "users/extensive", {
|
|
144
129
|
filter: { userIds: [userId] },
|
|
145
130
|
}));
|
|
146
131
|
const users = data.users;
|
|
@@ -170,7 +155,6 @@ export default function gong(rl) {
|
|
|
170
155
|
},
|
|
171
156
|
async execute(input, ctx) {
|
|
172
157
|
const { limit, createdFromDateTime, createdToDateTime, userIds } = (input ?? {});
|
|
173
|
-
const { baseUrl, accessKey, accessKeySecret } = getConn(ctx);
|
|
174
158
|
const filter = {};
|
|
175
159
|
if (createdFromDateTime)
|
|
176
160
|
filter.createdFromDateTime = createdFromDateTime;
|
|
@@ -178,7 +162,7 @@ export default function gong(rl) {
|
|
|
178
162
|
filter.createdToDateTime = createdToDateTime;
|
|
179
163
|
if (userIds)
|
|
180
164
|
filter.userIds = userIds;
|
|
181
|
-
return paginate(
|
|
165
|
+
return paginate(ctx, "users/extensive", { filter }, "users", limit);
|
|
182
166
|
},
|
|
183
167
|
});
|
|
184
168
|
}
|