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,5 +1,6 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
3
|
+
import { googleCredential, googleJsonRequest, googleOAuth, } from "../../_shared/googleAuth.js";
|
|
3
4
|
import { Id, NonEmptyString, PositiveInteger, stringEnum, } from "../../_shared/googleSchemas.js";
|
|
4
5
|
const SCRIPT_API = "https://script.googleapis.com/v1";
|
|
5
6
|
const DRIVE_API = "https://www.googleapis.com/drive/v3";
|
|
@@ -33,21 +34,63 @@ const scriptFileSchema = t.Object({
|
|
|
33
34
|
type: scriptFileTypeSchema,
|
|
34
35
|
source: t.String(),
|
|
35
36
|
}, { additionalProperties: false });
|
|
37
|
+
/** `T` is the caller's statement of the answer's shape, unchecked, as for any parsed JSON. */
|
|
36
38
|
async function call(ctx, method, url, payload) {
|
|
37
39
|
return googleJsonRequest(ctx, "googleAppsScript", SCOPES, method, url, payload);
|
|
38
40
|
}
|
|
39
41
|
export default function googleAppsScript(rl) {
|
|
40
42
|
rl.setName("googleAppsScript");
|
|
41
43
|
rl.setVersion("1.0.0");
|
|
44
|
+
rl.setCredential(googleCredential("googleAppsScript", SCOPES));
|
|
45
|
+
rl.setOAuth(googleOAuth("googleAppsScript", SCOPES, "GOOGLE_APPS_SCRIPT"));
|
|
42
46
|
rl.setConnectionSchema({
|
|
43
|
-
authMethod: {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
authMethod: {
|
|
48
|
+
type: "string",
|
|
49
|
+
required: false,
|
|
50
|
+
description: "delegated or serviceAccount (legacy configs infer the method)",
|
|
51
|
+
},
|
|
52
|
+
clientId: {
|
|
53
|
+
type: "string",
|
|
54
|
+
required: false,
|
|
55
|
+
description: "OAuth client ID",
|
|
56
|
+
env: "GOOGLE_APPS_SCRIPT_CLIENT_ID",
|
|
57
|
+
},
|
|
58
|
+
clientSecret: {
|
|
59
|
+
type: "string",
|
|
60
|
+
required: false,
|
|
61
|
+
description: "OAuth client secret",
|
|
62
|
+
env: "GOOGLE_APPS_SCRIPT_CLIENT_SECRET",
|
|
63
|
+
},
|
|
64
|
+
refreshToken: {
|
|
65
|
+
type: "string",
|
|
66
|
+
required: false,
|
|
67
|
+
description: "OAuth refresh token",
|
|
68
|
+
env: "GOOGLE_APPS_SCRIPT_REFRESH_TOKEN",
|
|
69
|
+
},
|
|
70
|
+
serviceAccountJson: {
|
|
71
|
+
type: "string",
|
|
72
|
+
required: false,
|
|
73
|
+
description: "Service-account key JSON",
|
|
74
|
+
env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_JSON",
|
|
75
|
+
},
|
|
76
|
+
serviceAccountEmail: {
|
|
77
|
+
type: "string",
|
|
78
|
+
required: false,
|
|
79
|
+
description: "Service-account email",
|
|
80
|
+
env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_EMAIL",
|
|
81
|
+
},
|
|
82
|
+
serviceAccountPrivateKey: {
|
|
83
|
+
type: "string",
|
|
84
|
+
required: false,
|
|
85
|
+
description: "Service-account private key",
|
|
86
|
+
env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_PRIVATE_KEY",
|
|
87
|
+
},
|
|
88
|
+
serviceAccountSubject: {
|
|
89
|
+
type: "string",
|
|
90
|
+
required: false,
|
|
91
|
+
description: "User to impersonate (domain-wide delegation)",
|
|
92
|
+
env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_SUBJECT",
|
|
93
|
+
},
|
|
51
94
|
});
|
|
52
95
|
rl.registerAction("script.list", {
|
|
53
96
|
access: "read",
|
|
@@ -61,16 +104,17 @@ export default function googleAppsScript(rl) {
|
|
|
61
104
|
})),
|
|
62
105
|
}, { additionalProperties: false }),
|
|
63
106
|
async execute(input, ctx) {
|
|
107
|
+
const p = input;
|
|
64
108
|
const params = new URLSearchParams({
|
|
65
109
|
q: "mimeType='application/vnd.google-apps.script' and trashed=false",
|
|
66
110
|
fields: "files(id,name,modifiedTime)",
|
|
67
|
-
pageSize: String(
|
|
111
|
+
pageSize: String(p.pageSize ?? 50),
|
|
68
112
|
orderBy: "modifiedTime desc",
|
|
69
113
|
});
|
|
70
114
|
const res = await call(ctx, "GET", `${DRIVE_API}/files?${params}`);
|
|
71
115
|
let files = res.files ?? [];
|
|
72
|
-
if (
|
|
73
|
-
const q = String(
|
|
116
|
+
if (p.query) {
|
|
117
|
+
const q = String(p.query).toLowerCase();
|
|
74
118
|
files = files.filter((f) => (f.name || "").toLowerCase().includes(q));
|
|
75
119
|
}
|
|
76
120
|
return { count: files.length, scripts: files };
|
|
@@ -81,8 +125,9 @@ export default function googleAppsScript(rl) {
|
|
|
81
125
|
description: "Get all files of an Apps Script project (name, type, source).",
|
|
82
126
|
inputSchema: t.Object({ scriptId: Id }, { additionalProperties: false }),
|
|
83
127
|
async execute(input, ctx) {
|
|
84
|
-
const
|
|
85
|
-
|
|
128
|
+
const p = input;
|
|
129
|
+
const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`);
|
|
130
|
+
return { scriptId: p.scriptId, files: res.files ?? [] };
|
|
86
131
|
},
|
|
87
132
|
});
|
|
88
133
|
rl.registerAction("project.readFile", {
|
|
@@ -96,10 +141,11 @@ export default function googleAppsScript(rl) {
|
|
|
96
141
|
}),
|
|
97
142
|
}, { additionalProperties: false }),
|
|
98
143
|
async execute(input, ctx) {
|
|
99
|
-
const
|
|
100
|
-
const
|
|
144
|
+
const p = input;
|
|
145
|
+
const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`);
|
|
146
|
+
const file = (res.files ?? []).find((f) => f.name === p.name);
|
|
101
147
|
if (!file)
|
|
102
|
-
throw new Error(`No file "${
|
|
148
|
+
throw new Error(`No file "${p.name}". Available: ${(res.files ?? []).map((f) => f.name).join(", ")}`);
|
|
103
149
|
return { name: file.name, type: file.type, source: file.source };
|
|
104
150
|
},
|
|
105
151
|
});
|
|
@@ -113,17 +159,21 @@ export default function googleAppsScript(rl) {
|
|
|
113
159
|
type: t.Optional(stringEnum(["SERVER_JS", "HTML", "JSON"])),
|
|
114
160
|
}, { additionalProperties: false }),
|
|
115
161
|
async execute(input, ctx) {
|
|
116
|
-
const
|
|
162
|
+
const p = input;
|
|
163
|
+
const cur = await call(ctx, "GET", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`);
|
|
117
164
|
const files = cur.files ?? [];
|
|
118
|
-
const idx = files.findIndex((f) => f.name ===
|
|
119
|
-
const type =
|
|
120
|
-
|
|
165
|
+
const idx = files.findIndex((f) => f.name === p.name);
|
|
166
|
+
const type = p.type ||
|
|
167
|
+
(p.name === "appsscript" ? "JSON" : files[idx]?.type || "SERVER_JS");
|
|
168
|
+
const entry = { name: p.name, type, source: p.source };
|
|
121
169
|
if (idx >= 0)
|
|
122
170
|
files[idx] = entry;
|
|
123
171
|
else
|
|
124
172
|
files.push(entry);
|
|
125
|
-
await call(ctx, "PUT", `${SCRIPT_API}/projects/${
|
|
126
|
-
|
|
173
|
+
await call(ctx, "PUT", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`, {
|
|
174
|
+
files,
|
|
175
|
+
});
|
|
176
|
+
return { scriptId: p.scriptId, updated: p.name, fileCount: files.length };
|
|
127
177
|
},
|
|
128
178
|
});
|
|
129
179
|
rl.registerAction("project.updateContent", {
|
|
@@ -141,8 +191,9 @@ export default function googleAppsScript(rl) {
|
|
|
141
191
|
}),
|
|
142
192
|
}, { additionalProperties: false }),
|
|
143
193
|
async execute(input, ctx) {
|
|
144
|
-
const
|
|
145
|
-
|
|
194
|
+
const p = input;
|
|
195
|
+
const res = await call(ctx, "PUT", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`, { files: p.files });
|
|
196
|
+
return { scriptId: p.scriptId, fileCount: (res.files ?? []).length };
|
|
146
197
|
},
|
|
147
198
|
});
|
|
148
199
|
rl.registerAction("project.create", {
|
|
@@ -156,11 +207,16 @@ export default function googleAppsScript(rl) {
|
|
|
156
207
|
})),
|
|
157
208
|
}, { additionalProperties: false }),
|
|
158
209
|
async execute(input, ctx) {
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
210
|
+
const p = input;
|
|
211
|
+
const payload = { title: p.title };
|
|
212
|
+
if (p.parentId)
|
|
213
|
+
payload.parentId = p.parentId;
|
|
162
214
|
const res = await call(ctx, "POST", `${SCRIPT_API}/projects`, payload);
|
|
163
|
-
return {
|
|
215
|
+
return {
|
|
216
|
+
scriptId: res.scriptId,
|
|
217
|
+
title: res.title,
|
|
218
|
+
parentId: res.parentId,
|
|
219
|
+
};
|
|
164
220
|
},
|
|
165
221
|
});
|
|
166
222
|
rl.registerAction("version.create", {
|
|
@@ -171,8 +227,13 @@ export default function googleAppsScript(rl) {
|
|
|
171
227
|
description: t.Optional(t.String()),
|
|
172
228
|
}, { additionalProperties: false }),
|
|
173
229
|
async execute(input, ctx) {
|
|
174
|
-
const
|
|
175
|
-
|
|
230
|
+
const p = input;
|
|
231
|
+
const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/versions`, { description: p.description || "" });
|
|
232
|
+
return {
|
|
233
|
+
scriptId: p.scriptId,
|
|
234
|
+
versionNumber: res.versionNumber,
|
|
235
|
+
description: res.description,
|
|
236
|
+
};
|
|
176
237
|
},
|
|
177
238
|
});
|
|
178
239
|
rl.registerAction("deployment.create", {
|
|
@@ -185,10 +246,11 @@ export default function googleAppsScript(rl) {
|
|
|
185
246
|
manifestFileName: t.Optional(t.String({ minLength: 1, description: "Defaults to 'appsscript'." })),
|
|
186
247
|
}, { additionalProperties: false }),
|
|
187
248
|
async execute(input, ctx) {
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
249
|
+
const p = input;
|
|
250
|
+
const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/deployments`, {
|
|
251
|
+
versionNumber: p.versionNumber,
|
|
252
|
+
manifestFileName: p.manifestFileName || "appsscript",
|
|
253
|
+
description: p.description || "",
|
|
192
254
|
});
|
|
193
255
|
return { deploymentId: res.deploymentId, entryPoints: res.entryPoints };
|
|
194
256
|
},
|
|
@@ -205,10 +267,11 @@ export default function googleAppsScript(rl) {
|
|
|
205
267
|
})),
|
|
206
268
|
}, { additionalProperties: false }),
|
|
207
269
|
async execute(input, ctx) {
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
270
|
+
const p = input;
|
|
271
|
+
const res = await call(ctx, "POST", `${SCRIPT_API}/scripts/${pathSegment(p.scriptId)}:run`, {
|
|
272
|
+
function: p.functionName,
|
|
273
|
+
parameters: p.parameters ?? [],
|
|
274
|
+
devMode: p.devMode === undefined ? true : p.devMode,
|
|
212
275
|
});
|
|
213
276
|
if (res.error) {
|
|
214
277
|
const d = res.error.details?.[0];
|
|
@@ -225,12 +288,16 @@ export default function googleAppsScript(rl) {
|
|
|
225
288
|
pageSize: t.Optional(t.Integer({ minimum: 1, maximum: 50, description: "Default 20." })),
|
|
226
289
|
}, { additionalProperties: false }),
|
|
227
290
|
async execute(input, ctx) {
|
|
291
|
+
const p = input;
|
|
228
292
|
const params = new URLSearchParams({
|
|
229
|
-
"userProcessFilter.scriptId":
|
|
230
|
-
pageSize: String(
|
|
293
|
+
"userProcessFilter.scriptId": p.scriptId,
|
|
294
|
+
pageSize: String(p.pageSize ?? 20),
|
|
231
295
|
});
|
|
232
296
|
const res = await call(ctx, "GET", `${SCRIPT_API}/processes?${params}`);
|
|
233
|
-
return {
|
|
297
|
+
return {
|
|
298
|
+
count: (res.processes ?? []).length,
|
|
299
|
+
processes: res.processes ?? [],
|
|
300
|
+
};
|
|
234
301
|
},
|
|
235
302
|
});
|
|
236
303
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Google Calendar plugin for runline.
|
|
3
3
|
*
|
|
4
|
-
* Authentication mirrors the gmail plugin:
|
|
5
|
-
* once via `runline auth googleCalendar
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* when the cached token is missing or within 60 s of expiry the
|
|
9
|
-
* plugin hits `https://oauth2.googleapis.com/token` and persists
|
|
10
|
-
* the new token via `ctx.updateConnection`.
|
|
4
|
+
* Authentication mirrors the gmail plugin: the Google grant's OAuth2
|
|
5
|
+
* user flow, seeded once via `runline auth googleCalendar`, with the
|
|
6
|
+
* access token refreshed lazily (60 s skew) and cached on the
|
|
7
|
+
* connection as the grant's.
|
|
11
8
|
*
|
|
12
9
|
* Surface area:
|
|
13
10
|
*
|
|
@@ -29,7 +26,8 @@
|
|
|
29
26
|
*/
|
|
30
27
|
import rrulePkg from "rrule";
|
|
31
28
|
import * as t from "typebox";
|
|
32
|
-
import {
|
|
29
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
30
|
+
import { googleCredential, googleJsonRequest, googleOAuth, } from "../../_shared/googleAuth.js";
|
|
33
31
|
import { Id, NonEmptyString, NonEmptyStringArray, PositiveInteger, StringOrStringArray, stringEnum, } from "../../_shared/googleSchemas.js";
|
|
34
32
|
// `rrule` ships as CJS; named imports fail under Node ESM.
|
|
35
33
|
const { RRule } = rrulePkg;
|
|
@@ -51,9 +49,9 @@ async function paginateAll(ctx, path, key, qs) {
|
|
|
51
49
|
}
|
|
52
50
|
// ─── Helpers ─────────────────────────────────────────────────────
|
|
53
51
|
function encodeCalendarId(id) {
|
|
54
|
-
// Calendar IDs are email-shaped.
|
|
55
|
-
//
|
|
56
|
-
return
|
|
52
|
+
// Calendar IDs are email-shaped. Decoding first tolerates
|
|
53
|
+
// already-encoded input from upstream callers.
|
|
54
|
+
return pathSegment(decodeURIComponent(id));
|
|
57
55
|
}
|
|
58
56
|
function splitAttendees(input) {
|
|
59
57
|
if (input === undefined || input === null)
|
|
@@ -501,37 +499,8 @@ const settingsSchemas = {
|
|
|
501
499
|
export default function googleCalendar(rl) {
|
|
502
500
|
rl.setName("googleCalendar");
|
|
503
501
|
rl.setVersion("0.1.0");
|
|
504
|
-
rl.
|
|
505
|
-
|
|
506
|
-
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
507
|
-
scopes: SCOPES,
|
|
508
|
-
authParams: { access_type: "offline", prompt: "consent" },
|
|
509
|
-
setupHelp: [
|
|
510
|
-
"You need a Google Cloud OAuth client. Takes ~5 minutes, one time.",
|
|
511
|
-
"",
|
|
512
|
-
"1. Create or pick a Google Cloud project:",
|
|
513
|
-
" https://console.cloud.google.com/projectcreate",
|
|
514
|
-
"",
|
|
515
|
-
"2. Enable the Google Calendar API:",
|
|
516
|
-
" https://console.cloud.google.com/apis/library/calendar-json.googleapis.com",
|
|
517
|
-
"",
|
|
518
|
-
"3. Configure the OAuth consent screen (first time only):",
|
|
519
|
-
" https://console.cloud.google.com/apis/credentials/consent",
|
|
520
|
-
" • Audience: External",
|
|
521
|
-
"",
|
|
522
|
-
"4. Add yourself as a test user:",
|
|
523
|
-
" https://console.cloud.google.com/auth/audience",
|
|
524
|
-
"",
|
|
525
|
-
"5. Create the OAuth client:",
|
|
526
|
-
" https://console.cloud.google.com/apis/credentials",
|
|
527
|
-
" • + Create credentials → OAuth client ID",
|
|
528
|
-
" • Application type: Web application",
|
|
529
|
-
" • Authorized redirect URIs → + Add URI: {{redirectUri}}",
|
|
530
|
-
"",
|
|
531
|
-
"6. Paste the Client ID and Client Secret below, or export",
|
|
532
|
-
" GOOGLE_CALENDAR_CLIENT_ID and GOOGLE_CALENDAR_CLIENT_SECRET.",
|
|
533
|
-
],
|
|
534
|
-
});
|
|
502
|
+
rl.setCredential(googleCredential("googleCalendar", SCOPES));
|
|
503
|
+
rl.setOAuth(googleOAuth("googleCalendar", SCOPES, "GOOGLE_CALENDAR"));
|
|
535
504
|
rl.setConnectionSchema({
|
|
536
505
|
authMethod: { type: "string", required: false, description: "delegated or serviceAccount (legacy configs infer the method)" },
|
|
537
506
|
clientId: {
|
|
@@ -712,7 +681,7 @@ export default function googleCalendar(rl) {
|
|
|
712
681
|
qs.timeZone = p.timeZone;
|
|
713
682
|
if (p.maxAttendees)
|
|
714
683
|
qs.maxAttendees = p.maxAttendees;
|
|
715
|
-
const res = (await calRequest(ctx, "GET", `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}`, undefined, qs));
|
|
684
|
+
const res = (await calRequest(ctx, "GET", `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}`, undefined, qs));
|
|
716
685
|
if (p.nextOccurrence !== false)
|
|
717
686
|
addNextOccurrence([res]);
|
|
718
687
|
return res;
|
|
@@ -779,7 +748,7 @@ export default function googleCalendar(rl) {
|
|
|
779
748
|
qs.showDeleted = p.showDeleted;
|
|
780
749
|
if (p.pageToken)
|
|
781
750
|
qs.pageToken = p.pageToken;
|
|
782
|
-
const path = `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}/instances`;
|
|
751
|
+
const path = `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}/instances`;
|
|
783
752
|
if (p.returnAll)
|
|
784
753
|
return paginateAll(ctx, path, "items", qs);
|
|
785
754
|
if (p.maxResults)
|
|
@@ -797,7 +766,7 @@ export default function googleCalendar(rl) {
|
|
|
797
766
|
const calendarId = encodeCalendarId(p.calendarId);
|
|
798
767
|
// Series edit: resolve the instance's recurringEventId and patch that instead.
|
|
799
768
|
if (p.modifyTarget === "series") {
|
|
800
|
-
const instance = (await calRequest(ctx, "GET", `/calendars/${calendarId}/events/${eventId}`));
|
|
769
|
+
const instance = (await calRequest(ctx, "GET", `/calendars/${calendarId}/events/${pathSegment(eventId)}`));
|
|
801
770
|
if (!instance.recurringEventId) {
|
|
802
771
|
throw new Error(`googleCalendar: event ${eventId} is not part of a recurrence series`);
|
|
803
772
|
}
|
|
@@ -823,7 +792,7 @@ export default function googleCalendar(rl) {
|
|
|
823
792
|
qs.sendNotifications = p.sendNotifications;
|
|
824
793
|
if (p.maxAttendees)
|
|
825
794
|
qs.maxAttendees = p.maxAttendees;
|
|
826
|
-
return calRequest(ctx, "PATCH", `/calendars/${calendarId}/events/${eventId}`, body, qs);
|
|
795
|
+
return calRequest(ctx, "PATCH", `/calendars/${calendarId}/events/${pathSegment(eventId)}`, body, qs);
|
|
827
796
|
},
|
|
828
797
|
});
|
|
829
798
|
rl.registerAction("event.delete", {
|
|
@@ -835,7 +804,7 @@ export default function googleCalendar(rl) {
|
|
|
835
804
|
const qs = {};
|
|
836
805
|
if (p.sendUpdates)
|
|
837
806
|
qs.sendUpdates = p.sendUpdates;
|
|
838
|
-
return calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}`, undefined, qs);
|
|
807
|
+
return calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}`, undefined, qs);
|
|
839
808
|
},
|
|
840
809
|
});
|
|
841
810
|
rl.registerAction("event.move", {
|
|
@@ -849,7 +818,7 @@ export default function googleCalendar(rl) {
|
|
|
849
818
|
};
|
|
850
819
|
if (p.sendUpdates)
|
|
851
820
|
qs.sendUpdates = p.sendUpdates;
|
|
852
|
-
return calRequest(ctx, "POST", `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}/move`, undefined, qs);
|
|
821
|
+
return calRequest(ctx, "POST", `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}/move`, undefined, qs);
|
|
853
822
|
},
|
|
854
823
|
});
|
|
855
824
|
// ─── FreeBusy ────────────────────────────────────────────────────
|
|
@@ -957,7 +926,7 @@ export default function googleCalendar(rl) {
|
|
|
957
926
|
inputSchema: aclSchemas.update,
|
|
958
927
|
async execute(input, ctx) {
|
|
959
928
|
const p = (input ?? {});
|
|
960
|
-
return calRequest(ctx, "PATCH", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${
|
|
929
|
+
return calRequest(ctx, "PATCH", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${pathSegment(p.ruleId)}`, { role: p.role });
|
|
961
930
|
},
|
|
962
931
|
});
|
|
963
932
|
rl.registerAction("acl.delete", {
|
|
@@ -966,7 +935,7 @@ export default function googleCalendar(rl) {
|
|
|
966
935
|
inputSchema: aclSchemas.delete,
|
|
967
936
|
async execute(input, ctx) {
|
|
968
937
|
const p = (input ?? {});
|
|
969
|
-
await calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${
|
|
938
|
+
await calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${pathSegment(p.ruleId)}`);
|
|
970
939
|
return { success: true };
|
|
971
940
|
},
|
|
972
941
|
});
|
|
@@ -985,7 +954,7 @@ export default function googleCalendar(rl) {
|
|
|
985
954
|
inputSchema: settingsSchemas.get,
|
|
986
955
|
async execute(input, ctx) {
|
|
987
956
|
const p = (input ?? {});
|
|
988
|
-
return calRequest(ctx, "GET", `/users/me/settings/${
|
|
957
|
+
return calRequest(ctx, "GET", `/users/me/settings/${pathSegment(p.setting)}`);
|
|
989
958
|
},
|
|
990
959
|
});
|
|
991
960
|
}
|
|
@@ -19,11 +19,13 @@
|
|
|
19
19
|
*
|
|
20
20
|
* The People API uses `resourceName` ("people/c1234…") as the
|
|
21
21
|
* canonical identifier; we accept either the full `resourceName` or
|
|
22
|
-
* the bare ID and normalize
|
|
23
|
-
*
|
|
22
|
+
* the bare ID and normalize, and either way the ID is one path
|
|
23
|
+
* segment. The response always includes a convenience `contactId`
|
|
24
|
+
* field stripped from `resourceName`.
|
|
24
25
|
*/
|
|
25
26
|
import * as t from "typebox";
|
|
26
|
-
import {
|
|
27
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
28
|
+
import { googleCredential, googleJsonRequest, googleOAuth, } from "../../_shared/googleAuth.js";
|
|
27
29
|
import { Id, NonEmptyString, PositiveInteger, stringEnum, } from "../../_shared/googleSchemas.js";
|
|
28
30
|
// ─── Fields ─────────────────────────────────────────────────────
|
|
29
31
|
/**
|
|
@@ -103,14 +105,14 @@ async function paginateAll(ctx, path, key, qs) {
|
|
|
103
105
|
* Accepts either the raw ID (`c1234…`) or the full prefixed form.
|
|
104
106
|
*/
|
|
105
107
|
function normalizeContactResource(input) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return input.startsWith("people/") ? input : `people/${input}`;
|
|
108
|
+
const id = input.startsWith("people/") ? input.slice("people/".length) : input;
|
|
109
|
+
return `people/${pathSegment(id)}`;
|
|
109
110
|
}
|
|
110
111
|
function normalizeGroupResource(input) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
const id = input.startsWith("contactGroups/")
|
|
113
|
+
? input.slice("contactGroups/".length)
|
|
114
|
+
: input;
|
|
115
|
+
return `contactGroups/${pathSegment(id)}`;
|
|
114
116
|
}
|
|
115
117
|
function contactIdFromResource(resourceName) {
|
|
116
118
|
if (!resourceName)
|
|
@@ -372,37 +374,8 @@ const groupSchemas = {
|
|
|
372
374
|
export default function googleContacts(rl) {
|
|
373
375
|
rl.setName("googleContacts");
|
|
374
376
|
rl.setVersion("0.1.0");
|
|
375
|
-
rl.
|
|
376
|
-
|
|
377
|
-
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
378
|
-
scopes: SCOPES,
|
|
379
|
-
authParams: { access_type: "offline", prompt: "consent" },
|
|
380
|
-
setupHelp: [
|
|
381
|
-
"You need a Google Cloud OAuth client. Takes ~5 minutes, one time.",
|
|
382
|
-
"",
|
|
383
|
-
"1. Create or pick a Google Cloud project:",
|
|
384
|
-
" https://console.cloud.google.com/projectcreate",
|
|
385
|
-
"",
|
|
386
|
-
"2. Enable the People API:",
|
|
387
|
-
" https://console.cloud.google.com/apis/library/people.googleapis.com",
|
|
388
|
-
"",
|
|
389
|
-
"3. Configure the OAuth consent screen:",
|
|
390
|
-
" https://console.cloud.google.com/apis/credentials/consent",
|
|
391
|
-
" • Audience: External",
|
|
392
|
-
"",
|
|
393
|
-
"4. Add yourself as a test user:",
|
|
394
|
-
" https://console.cloud.google.com/auth/audience",
|
|
395
|
-
"",
|
|
396
|
-
"5. Create the OAuth client:",
|
|
397
|
-
" https://console.cloud.google.com/apis/credentials",
|
|
398
|
-
" • + Create credentials → OAuth client ID",
|
|
399
|
-
" • Application type: Web application",
|
|
400
|
-
" • Authorized redirect URIs → + Add URI: {{redirectUri}}",
|
|
401
|
-
"",
|
|
402
|
-
"6. Paste the Client ID and Client Secret below, or export",
|
|
403
|
-
" GOOGLE_CONTACTS_CLIENT_ID and GOOGLE_CONTACTS_CLIENT_SECRET.",
|
|
404
|
-
],
|
|
405
|
-
});
|
|
377
|
+
rl.setCredential(googleCredential("googleContacts", SCOPES));
|
|
378
|
+
rl.setOAuth(googleOAuth("googleContacts", SCOPES, "GOOGLE_CONTACTS"));
|
|
406
379
|
rl.setConnectionSchema({
|
|
407
380
|
authMethod: { type: "string", required: false, description: "delegated or serviceAccount (legacy configs infer the method)" },
|
|
408
381
|
clientId: { type: "string", required: false, env: "GOOGLE_CONTACTS_CLIENT_ID" },
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* — the Docs API itself only creates blank documents without a
|
|
8
8
|
* target folder.
|
|
9
9
|
*/
|
|
10
|
+
import { googleCredential, googleOAuth } from "../../_shared/googleAuth.js";
|
|
10
11
|
import { registerDocumentsActions } from "./documents.js";
|
|
11
12
|
import { registerFormattingActions } from "./formatting.js";
|
|
12
13
|
import { registerImagesActions } from "./images.js";
|
|
@@ -18,38 +19,8 @@ import { registerTextActions } from "./text.js";
|
|
|
18
19
|
export default function googleDocs(rl) {
|
|
19
20
|
rl.setName("googleDocs");
|
|
20
21
|
rl.setVersion("0.1.0");
|
|
21
|
-
rl.
|
|
22
|
-
|
|
23
|
-
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
24
|
-
scopes: SCOPES,
|
|
25
|
-
authParams: { access_type: "offline", prompt: "consent" },
|
|
26
|
-
setupHelp: [
|
|
27
|
-
"You need a Google Cloud OAuth client. Takes ~5 minutes, one time.",
|
|
28
|
-
"",
|
|
29
|
-
"1. Create or pick a Google Cloud project:",
|
|
30
|
-
" https://console.cloud.google.com/projectcreate",
|
|
31
|
-
"",
|
|
32
|
-
"2. Enable the Google Docs API (and Drive API for document.create):",
|
|
33
|
-
" https://console.cloud.google.com/apis/library/docs.googleapis.com",
|
|
34
|
-
" https://console.cloud.google.com/apis/library/drive.googleapis.com",
|
|
35
|
-
"",
|
|
36
|
-
"3. Configure the OAuth consent screen:",
|
|
37
|
-
" https://console.cloud.google.com/apis/credentials/consent",
|
|
38
|
-
" • Audience: External",
|
|
39
|
-
"",
|
|
40
|
-
"4. Add yourself as a test user:",
|
|
41
|
-
" https://console.cloud.google.com/auth/audience",
|
|
42
|
-
"",
|
|
43
|
-
"5. Create the OAuth client:",
|
|
44
|
-
" https://console.cloud.google.com/apis/credentials",
|
|
45
|
-
" • + Create credentials → OAuth client ID",
|
|
46
|
-
" • Application type: Web application",
|
|
47
|
-
" • Authorized redirect URIs → + Add URI: {{redirectUri}}",
|
|
48
|
-
"",
|
|
49
|
-
"6. Paste the Client ID and Client Secret below, or export",
|
|
50
|
-
" GOOGLE_DOCS_CLIENT_ID and GOOGLE_DOCS_CLIENT_SECRET.",
|
|
51
|
-
],
|
|
52
|
-
});
|
|
22
|
+
rl.setCredential(googleCredential("googleDocs", SCOPES));
|
|
23
|
+
rl.setOAuth(googleOAuth("googleDocs", SCOPES, "GOOGLE_DOCS"));
|
|
53
24
|
rl.setConnectionSchema({
|
|
54
25
|
authMethod: {
|
|
55
26
|
type: "string",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
2
3
|
import { googleJsonRequest } from "../../_shared/googleAuth.js";
|
|
3
4
|
import { RawGoogleObject } from "../../_shared/googleSchemas.js";
|
|
4
5
|
export const SCOPES = [
|
|
@@ -68,7 +69,7 @@ export function extractDocumentId(input) {
|
|
|
68
69
|
if (!input)
|
|
69
70
|
throw new Error("googleDocs: documentId or URL is required");
|
|
70
71
|
const m = input.match(DOC_URL_REGEX);
|
|
71
|
-
return m ? m[1] : input;
|
|
72
|
+
return pathSegment(m ? m[1] : input);
|
|
72
73
|
}
|
|
73
74
|
export function buildLocation(kind, segmentId, index, tabId) {
|
|
74
75
|
const seg = segmentId && segmentId !== "body" ? segmentId : "";
|