runline 0.33.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/oauth2.d.ts +7 -1
- package/dist/auth/oauth2.js +10 -0
- package/dist/auth/token.d.ts +1 -0
- package/dist/auth/token.js +19 -1
- package/dist/auth/types.d.ts +22 -1
- package/dist/core/engine.d.ts +7 -0
- package/dist/core/engine.js +9 -0
- package/dist/credentials/policy.d.ts +53 -1
- package/dist/credentials/policy.js +146 -6
- package/dist/credentials/registry.d.ts +9 -0
- package/dist/credentials/registry.js +179 -22
- package/dist/credentials/transport.d.ts +48 -2
- package/dist/credentials/transport.js +248 -70
- package/dist/credentials/types.d.ts +167 -10
- package/dist/index.d.ts +5 -5
- package/dist/index.js +2 -2
- package/dist/plugin/api.d.ts +7 -0
- package/dist/plugin/api.js +7 -0
- package/dist/plugin/types.d.ts +12 -0
- package/dist/plugins/_shared/credentialAdapter.js +79 -15
- package/dist/plugins/_shared/credentials.js +389 -0
- package/dist/plugins/_shared/googleAuth.js +9 -40
- package/dist/plugins/_shared/googleCredentials.js +28 -7
- package/dist/plugins/_shared/microsoftAuth.js +13 -44
- package/dist/plugins/_shared/microsoftCredentials.js +30 -8
- package/dist/plugins/_shared/provider.js +2 -14
- package/dist/plugins/_shared/shiftCloud.js +19 -55
- package/dist/plugins/_shared/shiftCredentials.js +83 -0
- package/dist/plugins/actionNetwork/src/credentials.js +14 -0
- package/dist/plugins/actionNetwork/src/index.js +39 -50
- package/dist/plugins/activeCampaign/src/credentials.js +22 -0
- package/dist/plugins/activeCampaign/src/index.js +61 -132
- package/dist/plugins/adalo/src/credentials.js +16 -0
- package/dist/plugins/adalo/src/index.js +19 -43
- package/dist/plugins/affinity/src/credentials.js +19 -0
- package/dist/plugins/affinity/src/index.js +29 -54
- package/dist/plugins/agileCrm/src/credentials.js +16 -0
- package/dist/plugins/agileCrm/src/index.js +46 -112
- package/dist/plugins/airtable/src/credentials.js +19 -0
- package/dist/plugins/airtable/src/index.js +37 -50
- package/dist/plugins/airtop/src/credentials.js +20 -0
- package/dist/plugins/airtop/src/index.js +51 -75
- package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
- package/dist/plugins/apiTemplateIo/src/index.js +14 -31
- package/dist/plugins/asana/src/credentials.js +19 -0
- package/dist/plugins/asana/src/index.js +51 -72
- package/dist/plugins/autopilot/src/credentials.js +19 -0
- package/dist/plugins/autopilot/src/index.js +38 -45
- package/dist/plugins/bambooHr/src/credentials.js +16 -0
- package/dist/plugins/bambooHr/src/index.js +41 -67
- package/dist/plugins/bannerbear/src/credentials.js +19 -0
- package/dist/plugins/bannerbear/src/index.js +15 -27
- package/dist/plugins/baserow/src/credentials.js +17 -0
- package/dist/plugins/baserow/src/index.js +23 -49
- package/dist/plugins/beeminder/src/credentials.js +19 -0
- package/dist/plugins/beeminder/src/index.js +32 -54
- package/dist/plugins/bitly/src/credentials.js +19 -0
- package/dist/plugins/bitly/src/index.js +12 -26
- package/dist/plugins/bitwarden/src/credentials.js +62 -0
- package/dist/plugins/bitwarden/src/index.js +34 -80
- package/dist/plugins/box/src/credentials.js +19 -0
- package/dist/plugins/box/src/index.js +24 -49
- package/dist/plugins/brandfetch/src/credentials.js +13 -0
- package/dist/plugins/brandfetch/src/index.js +12 -17
- package/dist/plugins/brevo/src/credentials.js +19 -0
- package/dist/plugins/brevo/src/index.js +30 -51
- package/dist/plugins/bubble/src/credentials.js +28 -0
- package/dist/plugins/bubble/src/index.js +29 -65
- package/dist/plugins/chargebee/src/credentials.js +16 -0
- package/dist/plugins/chargebee/src/index.js +15 -45
- package/dist/plugins/circleci/src/credentials.js +19 -0
- package/dist/plugins/circleci/src/index.js +19 -39
- package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
- package/dist/plugins/ciscoWebex/src/index.js +43 -61
- package/dist/plugins/clearbit/src/credentials.js +22 -0
- package/dist/plugins/clearbit/src/index.js +11 -21
- package/dist/plugins/clickup/src/credentials.js +19 -0
- package/dist/plugins/clickup/src/index.js +85 -117
- package/dist/plugins/clockify/src/credentials.js +19 -0
- package/dist/plugins/clockify/src/index.js +46 -61
- package/dist/plugins/cloudflare/src/credentials.js +19 -0
- package/dist/plugins/cloudflare/src/index.js +19 -34
- package/dist/plugins/cockpit/src/credentials.js +17 -0
- package/dist/plugins/cockpit/src/index.js +18 -31
- package/dist/plugins/coda/src/credentials.js +19 -0
- package/dist/plugins/coda/src/index.js +33 -50
- package/dist/plugins/coingecko/src/credentials.js +20 -0
- package/dist/plugins/coingecko/src/index.js +24 -34
- package/dist/plugins/contentful/src/credentials.js +26 -0
- package/dist/plugins/contentful/src/index.js +19 -40
- package/dist/plugins/convertkit/src/credentials.js +26 -0
- package/dist/plugins/convertkit/src/index.js +27 -45
- package/dist/plugins/copper/src/credentials.js +17 -0
- package/dist/plugins/copper/src/index.js +25 -47
- package/dist/plugins/cortex/src/credentials.js +28 -0
- package/dist/plugins/cortex/src/index.js +26 -49
- package/dist/plugins/currents/src/credentials.js +19 -0
- package/dist/plugins/currents/src/index.js +46 -59
- package/dist/plugins/customerIo/src/credentials.js +52 -0
- package/dist/plugins/customerIo/src/index.js +30 -58
- package/dist/plugins/databricks/src/credentials.js +13 -0
- package/dist/plugins/databricks/src/index.js +51 -103
- package/dist/plugins/deepl/src/credentials.js +19 -0
- package/dist/plugins/deepl/src/index.js +13 -39
- package/dist/plugins/demio/src/credentials.js +26 -0
- package/dist/plugins/demio/src/index.js +17 -41
- package/dist/plugins/dhl/src/credentials.js +13 -0
- package/dist/plugins/dhl/src/index.js +8 -19
- package/dist/plugins/discord/src/credentials.js +19 -0
- package/dist/plugins/discord/src/index.js +30 -58
- package/dist/plugins/discourse/src/credentials.js +18 -0
- package/dist/plugins/discourse/src/index.js +36 -53
- package/dist/plugins/disqus/src/credentials.js +13 -0
- package/dist/plugins/disqus/src/index.js +14 -32
- package/dist/plugins/drift/src/credentials.js +13 -0
- package/dist/plugins/drift/src/index.js +16 -26
- package/dist/plugins/dropbox/src/credentials.js +13 -0
- package/dist/plugins/dropbox/src/index.js +23 -30
- package/dist/plugins/dropcontact/src/credentials.js +13 -0
- package/dist/plugins/dropcontact/src/index.js +13 -18
- package/dist/plugins/egoi/src/credentials.js +19 -0
- package/dist/plugins/egoi/src/index.js +23 -38
- package/dist/plugins/elasticsearch/src/credentials.js +18 -0
- package/dist/plugins/elasticsearch/src/index.js +27 -48
- package/dist/plugins/elevenlabs/src/credentials.js +30 -0
- package/dist/plugins/elevenlabs/src/index.js +4 -1
- package/dist/plugins/elevenlabs/src/schemas.js +2 -1
- package/dist/plugins/elevenlabs/src/shared.js +74 -35
- package/dist/plugins/elevenlabs/src/workflows.js +2 -2
- package/dist/plugins/emelia/src/credentials.js +14 -0
- package/dist/plugins/emelia/src/index.js +19 -23
- package/dist/plugins/erpnext/src/credentials.js +27 -0
- package/dist/plugins/erpnext/src/index.js +21 -42
- package/dist/plugins/facebookGraph/src/credentials.js +20 -0
- package/dist/plugins/facebookGraph/src/index.js +39 -37
- package/dist/plugins/fal/src/credentials.js +14 -0
- package/dist/plugins/fal/src/index.js +4 -2
- package/dist/plugins/fal/src/shared.js +58 -63
- package/dist/plugins/freshdesk/src/credentials.js +20 -0
- package/dist/plugins/freshdesk/src/index.js +25 -46
- package/dist/plugins/freshservice/src/credentials.js +16 -0
- package/dist/plugins/freshservice/src/index.js +37 -58
- package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
- package/dist/plugins/freshworksCrm/src/index.js +20 -39
- package/dist/plugins/getresponse/src/credentials.js +22 -0
- package/dist/plugins/getresponse/src/index.js +20 -32
- package/dist/plugins/gett/src/credentials.js +64 -0
- package/dist/plugins/gett/src/index.js +11 -6
- package/dist/plugins/gett/src/login.js +24 -0
- package/dist/plugins/gett/src/session.js +15 -38
- package/dist/plugins/gett/src/shared.js +41 -84
- package/dist/plugins/ghost/src/credentials.js +36 -0
- package/dist/plugins/ghost/src/index.js +18 -59
- package/dist/plugins/github/src/credentials.js +18 -0
- package/dist/plugins/github/src/index.js +55 -78
- package/dist/plugins/gitlab/src/credentials.js +24 -0
- package/dist/plugins/gitlab/src/index.js +29 -48
- package/dist/plugins/gmail/src/index.js +26 -24
- package/dist/plugins/gong/src/credentials.js +16 -0
- package/dist/plugins/gong/src/index.js +16 -32
- package/dist/plugins/googleAppsScript/src/index.js +108 -42
- package/dist/plugins/googleCalendar/src/index.js +15 -13
- package/dist/plugins/googleContacts/src/index.js +12 -9
- package/dist/plugins/googleDocs/src/index.js +2 -0
- package/dist/plugins/googleDocs/src/shared.js +2 -1
- package/dist/plugins/googleDrive/src/index.js +50 -53
- package/dist/plugins/googleImage/src/credentials.js +14 -0
- package/dist/plugins/googleImage/src/index.js +14 -25
- package/dist/plugins/googleSheets/src/index.js +26 -27
- package/dist/plugins/googleSlides/src/index.js +6 -4
- package/dist/plugins/googleTasks/src/index.js +13 -11
- package/dist/plugins/gotify/src/credentials.js +32 -0
- package/dist/plugins/gotify/src/index.js +14 -36
- package/dist/plugins/gotowebinar/src/credentials.js +13 -0
- package/dist/plugins/gotowebinar/src/index.js +52 -69
- package/dist/plugins/grafana/src/credentials.js +16 -0
- package/dist/plugins/grafana/src/index.js +34 -53
- package/dist/plugins/graphql/src/credentials.js +42 -0
- package/dist/plugins/graphql/src/index.js +21 -46
- package/dist/plugins/grist/src/credentials.js +30 -0
- package/dist/plugins/grist/src/index.js +14 -43
- package/dist/plugins/halopsa/src/credentials.js +56 -0
- package/dist/plugins/halopsa/src/index.js +20 -47
- package/dist/plugins/harvest/src/credentials.js +20 -0
- package/dist/plugins/harvest/src/index.js +24 -43
- package/dist/plugins/helpscout/src/credentials.js +13 -0
- package/dist/plugins/helpscout/src/index.js +26 -38
- package/dist/plugins/highlevel/src/credentials.js +19 -0
- package/dist/plugins/highlevel/src/index.js +34 -63
- package/dist/plugins/homeAssistant/src/credentials.js +27 -0
- package/dist/plugins/homeAssistant/src/index.js +34 -52
- package/dist/plugins/hubspot/src/credentials.js +16 -0
- package/dist/plugins/hubspot/src/index.js +29 -41
- package/dist/plugins/humanticAi/src/credentials.js +13 -0
- package/dist/plugins/humanticAi/src/index.js +15 -22
- package/dist/plugins/hunter/src/credentials.js +13 -0
- package/dist/plugins/hunter/src/index.js +18 -17
- package/dist/plugins/intercom/src/credentials.js +19 -0
- package/dist/plugins/intercom/src/index.js +25 -38
- package/dist/plugins/iterable/src/credentials.js +17 -0
- package/dist/plugins/iterable/src/index.js +26 -40
- package/dist/plugins/jenkins/src/credentials.js +16 -0
- package/dist/plugins/jenkins/src/index.js +22 -36
- package/dist/plugins/jira/src/credentials.js +16 -0
- package/dist/plugins/jira/src/index.js +35 -61
- package/dist/plugins/keap/src/credentials.js +19 -0
- package/dist/plugins/keap/src/index.js +43 -71
- package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
- package/dist/plugins/kobotoolbox/src/index.js +46 -84
- package/dist/plugins/lemlist/src/credentials.js +19 -0
- package/dist/plugins/lemlist/src/index.js +35 -47
- package/dist/plugins/linear/src/attachments.js +7 -7
- package/dist/plugins/linear/src/comments.js +7 -7
- package/dist/plugins/linear/src/credentials.js +17 -0
- package/dist/plugins/linear/src/cycles.js +5 -5
- package/dist/plugins/linear/src/index.js +2 -0
- package/dist/plugins/linear/src/initiatives.js +6 -6
- package/dist/plugins/linear/src/issues.js +14 -14
- package/dist/plugins/linear/src/labels.js +6 -6
- package/dist/plugins/linear/src/organization.js +2 -2
- package/dist/plugins/linear/src/projects.js +12 -12
- package/dist/plugins/linear/src/shared.js +34 -32
- package/dist/plugins/linear/src/states.js +3 -3
- package/dist/plugins/linear/src/teams.js +4 -4
- package/dist/plugins/linear/src/users.js +3 -3
- package/dist/plugins/linear/src/views.js +5 -5
- package/dist/plugins/linear/src/webhooks.js +5 -5
- package/dist/plugins/lingvanex/src/credentials.js +13 -0
- package/dist/plugins/lingvanex/src/index.js +7 -9
- package/dist/plugins/linkedin/src/credentials.js +17 -0
- package/dist/plugins/linkedin/src/index.js +13 -17
- package/dist/plugins/lonescale/src/credentials.js +13 -0
- package/dist/plugins/lonescale/src/index.js +16 -26
- package/dist/plugins/magento/src/credentials.js +16 -0
- package/dist/plugins/magento/src/index.js +67 -84
- package/dist/plugins/mailcheck/src/credentials.js +17 -0
- package/dist/plugins/mailcheck/src/index.js +7 -9
- package/dist/plugins/mailchimp/src/credentials.js +32 -0
- package/dist/plugins/mailchimp/src/index.js +36 -44
- package/dist/plugins/mailerlite/src/credentials.js +13 -0
- package/dist/plugins/mailerlite/src/index.js +19 -32
- package/dist/plugins/mailgun/src/credentials.js +21 -0
- package/dist/plugins/mailgun/src/index.js +15 -21
- package/dist/plugins/mailjet/src/credentials.js +38 -0
- package/dist/plugins/mailjet/src/index.js +60 -115
- package/dist/plugins/mandrill/src/credentials.js +17 -0
- package/dist/plugins/mandrill/src/index.js +11 -12
- package/dist/plugins/marketstack/src/credentials.js +16 -0
- package/dist/plugins/marketstack/src/index.js +18 -28
- package/dist/plugins/matrix/src/credentials.js +19 -0
- package/dist/plugins/matrix/src/index.js +23 -52
- package/dist/plugins/mattermost/src/credentials.js +19 -0
- package/dist/plugins/mattermost/src/index.js +41 -73
- package/dist/plugins/mautic/src/credentials.js +16 -0
- package/dist/plugins/mautic/src/index.js +46 -62
- package/dist/plugins/medium/src/credentials.js +20 -0
- package/dist/plugins/medium/src/index.js +18 -23
- package/dist/plugins/messagebird/src/credentials.js +22 -0
- package/dist/plugins/messagebird/src/index.js +13 -18
- package/dist/plugins/metabase/src/credentials.js +19 -0
- package/dist/plugins/metabase/src/index.js +24 -40
- package/dist/plugins/microsoftCalendar/src/index.js +48 -12
- package/dist/plugins/microsoftFiles/src/index.js +90 -25
- package/dist/plugins/microsoftMail/src/index.js +62 -15
- package/dist/plugins/misp/src/credentials.js +16 -0
- package/dist/plugins/misp/src/index.js +60 -71
- package/dist/plugins/mocean/src/credentials.js +17 -0
- package/dist/plugins/mocean/src/index.js +11 -23
- package/dist/plugins/monday/src/credentials.js +14 -0
- package/dist/plugins/monday/src/index.js +31 -44
- package/dist/plugins/monicaCrm/src/credentials.js +19 -0
- package/dist/plugins/monicaCrm/src/index.js +25 -42
- package/dist/plugins/msg91/src/credentials.js +10 -0
- package/dist/plugins/msg91/src/index.js +15 -11
- package/dist/plugins/nasa/src/credentials.js +22 -0
- package/dist/plugins/nasa/src/index.js +24 -28
- package/dist/plugins/netlify/src/credentials.js +19 -0
- package/dist/plugins/netlify/src/index.js +27 -51
- package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
- package/dist/plugins/netscalerAdc/src/index.js +16 -31
- package/dist/plugins/nextcloud/src/credentials.js +27 -0
- package/dist/plugins/nextcloud/src/index.js +55 -109
- package/dist/plugins/nocodb/src/credentials.js +16 -0
- package/dist/plugins/nocodb/src/index.js +19 -37
- package/dist/plugins/notion/src/credentials.js +21 -0
- package/dist/plugins/notion/src/index.js +25 -38
- package/dist/plugins/npm/src/credentials.js +19 -0
- package/dist/plugins/npm/src/index.js +22 -32
- package/dist/plugins/odoo/src/credentials.js +21 -0
- package/dist/plugins/odoo/src/index.js +53 -69
- package/dist/plugins/okta/src/credentials.js +23 -0
- package/dist/plugins/okta/src/index.js +30 -35
- package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
- package/dist/plugins/oneSimpleApi/src/index.js +19 -24
- package/dist/plugins/onfleet/src/credentials.js +23 -0
- package/dist/plugins/onfleet/src/index.js +42 -53
- package/dist/plugins/openai/src/credentials.js +13 -0
- package/dist/plugins/openai/src/index.js +15 -23
- package/dist/plugins/openweathermap/src/credentials.js +16 -0
- package/dist/plugins/openweathermap/src/index.js +22 -22
- package/dist/plugins/oura/src/credentials.js +19 -0
- package/dist/plugins/oura/src/index.js +13 -18
- package/dist/plugins/paddle/src/credentials.js +27 -0
- package/dist/plugins/paddle/src/index.js +20 -36
- package/dist/plugins/pagerduty/src/credentials.js +24 -0
- package/dist/plugins/pagerduty/src/index.js +30 -39
- package/dist/plugins/parallel/src/credentials.js +18 -0
- package/dist/plugins/parallel/src/index.js +16 -22
- package/dist/plugins/paypal/src/credentials.js +44 -0
- package/dist/plugins/paypal/src/index.js +14 -40
- package/dist/plugins/peekalink/src/credentials.js +16 -0
- package/dist/plugins/peekalink/src/index.js +10 -11
- package/dist/plugins/phantombuster/src/credentials.js +19 -0
- package/dist/plugins/phantombuster/src/index.js +19 -32
- package/dist/plugins/philipsHue/src/credentials.js +17 -0
- package/dist/plugins/philipsHue/src/index.js +15 -27
- package/dist/plugins/pipedrive/src/credentials.js +26 -0
- package/dist/plugins/pipedrive/src/index.js +43 -73
- package/dist/plugins/plaud/src/index.js +2 -1
- package/dist/plugins/plaud/src/shared.js +23 -19
- package/dist/plugins/plivo/src/credentials.js +20 -0
- package/dist/plugins/plivo/src/index.js +13 -19
- package/dist/plugins/posthog/src/credentials.js +18 -0
- package/dist/plugins/posthog/src/index.js +14 -20
- package/dist/plugins/profitwell/src/credentials.js +22 -0
- package/dist/plugins/profitwell/src/index.js +10 -17
- package/dist/plugins/pushbullet/src/credentials.js +19 -0
- package/dist/plugins/pushbullet/src/index.js +19 -27
- package/dist/plugins/pushcut/src/credentials.js +19 -0
- package/dist/plugins/pushcut/src/index.js +7 -8
- package/dist/plugins/pushover/src/credentials.js +14 -0
- package/dist/plugins/pushover/src/index.js +7 -12
- package/dist/plugins/quickbase/src/credentials.js +15 -0
- package/dist/plugins/quickbase/src/index.js +24 -34
- package/dist/plugins/quickbooks/src/credentials.js +22 -0
- package/dist/plugins/quickbooks/src/index.js +17 -46
- package/dist/plugins/raindrop/src/credentials.js +19 -0
- package/dist/plugins/raindrop/src/index.js +30 -32
- package/dist/plugins/recraft/src/credentials.js +13 -0
- package/dist/plugins/recraft/src/index.js +38 -27
- package/dist/plugins/reddit/src/credentials.js +26 -0
- package/dist/plugins/reddit/src/index.js +30 -34
- package/dist/plugins/replicate/src/credentials.js +23 -0
- package/dist/plugins/replicate/src/index.js +17 -27
- package/dist/plugins/rocketchat/src/credentials.js +17 -0
- package/dist/plugins/rocketchat/src/index.js +8 -19
- package/dist/plugins/rundeck/src/credentials.js +16 -0
- package/dist/plugins/rundeck/src/index.js +12 -28
- package/dist/plugins/salesforce/src/credentials.js +73 -0
- package/dist/plugins/salesforce/src/index.js +6 -0
- package/dist/plugins/salesforce/src/metadata.js +3 -16
- package/dist/plugins/salesforce/src/shared.js +25 -100
- package/dist/plugins/salesforce/src/sobjects.js +10 -9
- package/dist/plugins/salesmate/src/credentials.js +17 -0
- package/dist/plugins/salesmate/src/index.js +20 -37
- package/dist/plugins/securityScorecard/src/credentials.js +22 -0
- package/dist/plugins/securityScorecard/src/index.js +24 -37
- package/dist/plugins/segment/src/credentials.js +16 -0
- package/dist/plugins/segment/src/index.js +12 -16
- package/dist/plugins/sendgrid/src/credentials.js +13 -0
- package/dist/plugins/sendgrid/src/index.js +31 -35
- package/dist/plugins/sendy/src/credentials.js +18 -0
- package/dist/plugins/sendy/src/index.js +18 -24
- package/dist/plugins/sentry/src/credentials.js +16 -0
- package/dist/plugins/sentry/src/index.js +30 -98
- package/dist/plugins/servicenow/src/credentials.js +13 -0
- package/dist/plugins/servicenow/src/index.js +22 -41
- package/dist/plugins/shiftAtlas/src/graph.js +2 -2
- package/dist/plugins/shiftAtlas/src/index.js +2 -0
- package/dist/plugins/shiftAtlas/src/shared.js +3 -1
- package/dist/plugins/shiftBwm/src/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 +3 -2
- package/dist/plugins/shiftOcr/src/credentials.js +8 -0
- package/dist/plugins/shiftOcr/src/index.js +6 -5
- 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 +4 -4
- package/dist/plugins/shiftWork/src/index.js +2 -0
- package/dist/plugins/shiftWork/src/issue-views.js +5 -5
- package/dist/plugins/shiftWork/src/issues.js +11 -7
- package/dist/plugins/shiftWork/src/projects.js +3 -3
- package/dist/plugins/shiftWork/src/shared.js +3 -1
- package/dist/plugins/shopify/src/credentials.js +16 -0
- package/dist/plugins/shopify/src/index.js +32 -59
- package/dist/plugins/signl4/src/credentials.js +17 -0
- package/dist/plugins/signl4/src/index.js +28 -29
- package/dist/plugins/slack/src/credentials.js +19 -0
- package/dist/plugins/slack/src/index.js +51 -60
- package/dist/plugins/sms77/src/credentials.js +17 -0
- package/dist/plugins/sms77/src/index.js +11 -16
- package/dist/plugins/splunk/src/credentials.js +19 -0
- package/dist/plugins/splunk/src/index.js +32 -74
- package/dist/plugins/spotify/src/credentials.js +19 -0
- package/dist/plugins/spotify/src/index.js +40 -55
- package/dist/plugins/stackby/src/credentials.js +13 -0
- package/dist/plugins/stackby/src/index.js +14 -23
- package/dist/plugins/steel/src/auth.js +27 -0
- package/dist/plugins/steel/src/browser.js +4 -3
- package/dist/plugins/steel/src/captchas.js +4 -3
- package/dist/plugins/steel/src/extensions.js +3 -2
- package/dist/plugins/steel/src/files.js +9 -10
- package/dist/plugins/steel/src/index.js +2 -0
- package/dist/plugins/steel/src/page/tools.js +3 -3
- package/dist/plugins/steel/src/profiles.js +4 -3
- package/dist/plugins/steel/src/sessions.js +13 -13
- package/dist/plugins/steel/src/shared.js +21 -51
- package/dist/plugins/storyblok/src/credentials.js +37 -0
- package/dist/plugins/storyblok/src/index.js +22 -66
- package/dist/plugins/strapi/src/credentials.js +71 -0
- package/dist/plugins/strapi/src/index.js +36 -70
- package/dist/plugins/strava/src/credentials.js +19 -0
- package/dist/plugins/strava/src/index.js +16 -33
- package/dist/plugins/stripe/src/credentials.js +19 -0
- package/dist/plugins/stripe/src/index.js +44 -58
- package/dist/plugins/supabase/src/credentials.js +30 -0
- package/dist/plugins/supabase/src/index.js +18 -40
- package/dist/plugins/syncromsp/src/credentials.js +16 -0
- package/dist/plugins/syncromsp/src/index.js +37 -70
- package/dist/plugins/tapfiliate/src/credentials.js +13 -0
- package/dist/plugins/tapfiliate/src/index.js +21 -31
- package/dist/plugins/telegram/src/credentials.js +20 -0
- package/dist/plugins/telegram/src/index.js +31 -39
- package/dist/plugins/thehive/src/credentials.js +14 -0
- package/dist/plugins/thehive/src/index.js +33 -50
- package/dist/plugins/thehiveProject/src/credentials.js +16 -0
- package/dist/plugins/thehiveProject/src/index.js +53 -122
- package/dist/plugins/todoist/src/credentials.js +26 -0
- package/dist/plugins/todoist/src/index.js +49 -79
- package/dist/plugins/together/src/credentials.js +16 -0
- package/dist/plugins/together/src/index.js +30 -32
- package/dist/plugins/travisci/src/credentials.js +24 -0
- package/dist/plugins/travisci/src/index.js +16 -30
- package/dist/plugins/trello/src/credentials.js +29 -0
- package/dist/plugins/trello/src/index.js +49 -64
- package/dist/plugins/twake/src/credentials.js +16 -0
- package/dist/plugins/twake/src/index.js +8 -10
- package/dist/plugins/twilio/src/credentials.js +23 -0
- package/dist/plugins/twilio/src/index.js +12 -26
- package/dist/plugins/twist/src/credentials.js +13 -0
- package/dist/plugins/twist/src/index.js +32 -44
- package/dist/plugins/twitter/src/credentials.js +16 -0
- package/dist/plugins/twitter/src/index.js +25 -37
- package/dist/plugins/typesafe/src/credentials.js +28 -0
- package/dist/plugins/typesafe/src/index.js +3 -1
- package/dist/plugins/typesafe/src/shared.js +23 -35
- package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
- package/dist/plugins/unleashedSoftware/src/index.js +13 -37
- package/dist/plugins/uplead/src/credentials.js +16 -0
- package/dist/plugins/uplead/src/index.js +11 -16
- package/dist/plugins/uproc/src/credentials.js +14 -0
- package/dist/plugins/uproc/src/index.js +7 -10
- package/dist/plugins/uptimerobot/src/credentials.js +14 -0
- package/dist/plugins/uptimerobot/src/index.js +28 -39
- package/dist/plugins/urlscanio/src/credentials.js +13 -0
- package/dist/plugins/urlscanio/src/index.js +13 -22
- package/dist/plugins/vercel/src/credentials.js +19 -0
- package/dist/plugins/vercel/src/deployments.js +27 -11
- package/dist/plugins/vercel/src/env.js +31 -12
- package/dist/plugins/vercel/src/index.js +2 -0
- package/dist/plugins/vercel/src/projects.js +6 -3
- package/dist/plugins/vercel/src/shared.js +32 -37
- package/dist/plugins/vero/src/credentials.js +17 -0
- package/dist/plugins/vero/src/index.js +18 -21
- package/dist/plugins/vonage/src/credentials.js +17 -0
- package/dist/plugins/vonage/src/index.js +14 -18
- package/dist/plugins/wekan/src/credentials.js +16 -0
- package/dist/plugins/wekan/src/index.js +33 -46
- package/dist/plugins/wolt/src/account.js +6 -0
- package/dist/plugins/wolt/src/catalog.js +2 -2
- package/dist/plugins/wolt/src/credentials.js +64 -0
- package/dist/plugins/wolt/src/index.js +8 -3
- package/dist/plugins/wolt/src/orders.js +2 -2
- package/dist/plugins/wolt/src/public.js +91 -0
- package/dist/plugins/wolt/src/shared.js +49 -158
- package/dist/plugins/woocommerce/src/credentials.js +16 -0
- package/dist/plugins/woocommerce/src/index.js +19 -37
- package/dist/plugins/wordpress/src/credentials.js +16 -0
- package/dist/plugins/wordpress/src/index.js +23 -42
- package/dist/plugins/xai/src/credentials.js +13 -0
- package/dist/plugins/xai/src/index.js +31 -30
- package/dist/plugins/xero/src/credentials.js +17 -0
- package/dist/plugins/xero/src/index.js +19 -36
- package/dist/plugins/yourls/src/credentials.js +17 -0
- package/dist/plugins/yourls/src/index.js +13 -23
- package/dist/plugins/zammad/src/credentials.js +15 -0
- package/dist/plugins/zammad/src/index.js +27 -47
- package/dist/plugins/zendesk/src/credentials.js +26 -0
- package/dist/plugins/zendesk/src/index.js +29 -48
- package/dist/plugins/zoho/src/credentials.js +17 -0
- package/dist/plugins/zoho/src/index.js +18 -38
- package/dist/plugins/zoom/src/credentials.js +19 -0
- package/dist/plugins/zoom/src/index.js +15 -30
- package/dist/plugins/zulip/src/credentials.js +16 -0
- package/dist/plugins/zulip/src/index.js +36 -42
- package/dist/sdk.d.ts +8 -0
- package/dist/sdk.js +3 -0
- package/package.json +1 -1
- package/dist/plugins/_shared/authedFetch.js +0 -33
- package/dist/plugins/_shared/tokenRefresh.js +0 -41
|
@@ -1,11 +1,28 @@
|
|
|
1
|
+
import { credentialJson, graphqlFailed } from "../../_shared/credentials.js";
|
|
2
|
+
import { endpoint, graphqlCredential, publicHeaders } from "./credentials.js";
|
|
3
|
+
/** One GraphQL request to the configured endpoint; `errors` in the answer is a failure. */
|
|
4
|
+
async function gql(ctx, body) {
|
|
5
|
+
const config = ctx.connection.config;
|
|
6
|
+
const answer = await credentialJson(ctx, graphqlCredential, "graphql", {
|
|
7
|
+
target: "api",
|
|
8
|
+
path: endpoint(config).path,
|
|
9
|
+
method: "POST",
|
|
10
|
+
json: body,
|
|
11
|
+
headers: publicHeaders(config),
|
|
12
|
+
});
|
|
13
|
+
if (answer.errors)
|
|
14
|
+
throw graphqlFailed("graphql", answer.errors);
|
|
15
|
+
return answer.data;
|
|
16
|
+
}
|
|
1
17
|
export default function graphql(rl) {
|
|
2
18
|
rl.setName("graphql");
|
|
3
19
|
rl.setVersion("0.1.0");
|
|
20
|
+
rl.setCredential(graphqlCredential);
|
|
4
21
|
rl.setConnectionSchema({
|
|
5
22
|
endpoint: {
|
|
6
23
|
type: "string",
|
|
7
24
|
required: true,
|
|
8
|
-
description: "GraphQL endpoint URL",
|
|
25
|
+
description: "GraphQL endpoint URL (HTTPS)",
|
|
9
26
|
env: "GRAPHQL_ENDPOINT",
|
|
10
27
|
},
|
|
11
28
|
headerAuth: {
|
|
@@ -17,7 +34,7 @@ export default function graphql(rl) {
|
|
|
17
34
|
headers: {
|
|
18
35
|
type: "object",
|
|
19
36
|
required: false,
|
|
20
|
-
description: "Additional headers as key-value pairs",
|
|
37
|
+
description: "Additional public headers as key-value pairs; a secret belongs in headerAuth",
|
|
21
38
|
},
|
|
22
39
|
});
|
|
23
40
|
rl.registerAction("query", {
|
|
@@ -42,52 +59,18 @@ export default function graphql(rl) {
|
|
|
42
59
|
},
|
|
43
60
|
async execute(input, ctx) {
|
|
44
61
|
const { query, variables, operationName } = input;
|
|
45
|
-
const cfg = ctx.connection.config;
|
|
46
|
-
const endpoint = cfg.endpoint;
|
|
47
|
-
const hdrs = {
|
|
48
|
-
"Content-Type": "application/json",
|
|
49
|
-
};
|
|
50
|
-
if (cfg.headerAuth)
|
|
51
|
-
hdrs.Authorization = cfg.headerAuth;
|
|
52
|
-
if (cfg.headers) {
|
|
53
|
-
for (const [k, v] of Object.entries(cfg.headers)) {
|
|
54
|
-
hdrs[k] = v;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
62
|
const body = { query };
|
|
58
63
|
if (variables)
|
|
59
64
|
body.variables = variables;
|
|
60
65
|
if (operationName)
|
|
61
66
|
body.operationName = operationName;
|
|
62
|
-
|
|
63
|
-
method: "POST",
|
|
64
|
-
headers: hdrs,
|
|
65
|
-
body: JSON.stringify(body),
|
|
66
|
-
});
|
|
67
|
-
if (!res.ok)
|
|
68
|
-
throw new Error(`GraphQL error ${res.status}: ${await res.text()}`);
|
|
69
|
-
const data = (await res.json());
|
|
70
|
-
if (data.errors)
|
|
71
|
-
throw new Error(`GraphQL errors: ${JSON.stringify(data.errors)}`);
|
|
72
|
-
return data.data;
|
|
67
|
+
return gql(ctx, body);
|
|
73
68
|
},
|
|
74
69
|
});
|
|
75
70
|
rl.registerAction("introspect", {
|
|
76
71
|
access: "read",
|
|
77
72
|
description: "Run an introspection query to get the schema",
|
|
78
73
|
async execute(_input, ctx) {
|
|
79
|
-
const cfg = ctx.connection.config;
|
|
80
|
-
const endpoint = cfg.endpoint;
|
|
81
|
-
const hdrs = {
|
|
82
|
-
"Content-Type": "application/json",
|
|
83
|
-
};
|
|
84
|
-
if (cfg.headerAuth)
|
|
85
|
-
hdrs.Authorization = cfg.headerAuth;
|
|
86
|
-
if (cfg.headers) {
|
|
87
|
-
for (const [k, v] of Object.entries(cfg.headers)) {
|
|
88
|
-
hdrs[k] = v;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
74
|
const introspectionQuery = `{
|
|
92
75
|
__schema {
|
|
93
76
|
types { name kind description fields { name type { name kind ofType { name kind } } } }
|
|
@@ -96,15 +79,7 @@ export default function graphql(rl) {
|
|
|
96
79
|
subscriptionType { name }
|
|
97
80
|
}
|
|
98
81
|
}`;
|
|
99
|
-
|
|
100
|
-
method: "POST",
|
|
101
|
-
headers: hdrs,
|
|
102
|
-
body: JSON.stringify({ query: introspectionQuery }),
|
|
103
|
-
});
|
|
104
|
-
if (!res.ok)
|
|
105
|
-
throw new Error(`GraphQL error ${res.status}: ${await res.text()}`);
|
|
106
|
-
const data = (await res.json());
|
|
107
|
-
return data.data;
|
|
82
|
+
return gql(ctx, { query: introspectionQuery });
|
|
108
83
|
},
|
|
109
84
|
});
|
|
110
85
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { configChoice, hostLabel, httpsBase, staticCredential, } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* An API key, sent as a bearer to the plan's one API origin: docs.getgrist.com
|
|
4
|
+
* (free), the team subdomain (paid), or the self-hosted instance.
|
|
5
|
+
*/
|
|
6
|
+
export const gristCredential = staticCredential({
|
|
7
|
+
id: "grist",
|
|
8
|
+
auth: { kind: "bearer" },
|
|
9
|
+
local: { secret: "apiKey" },
|
|
10
|
+
targets: (config) => {
|
|
11
|
+
const planType = configChoice(config.planType, ["free", "paid", "selfHosted"], "free");
|
|
12
|
+
const baseUrl = planType === "selfHosted"
|
|
13
|
+
? httpsBase(config.selfHostedUrl, "api/")
|
|
14
|
+
: planType === "paid"
|
|
15
|
+
? `https://${hostLabel(config.subdomain)}.getgrist.com/api/`
|
|
16
|
+
: "https://docs.getgrist.com/api/";
|
|
17
|
+
return {
|
|
18
|
+
api: {
|
|
19
|
+
baseUrl,
|
|
20
|
+
methods: ["GET", "POST", "PATCH"],
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
probe: {
|
|
25
|
+
target: "api",
|
|
26
|
+
path: "orgs",
|
|
27
|
+
method: "GET",
|
|
28
|
+
acceptedStatuses: [200],
|
|
29
|
+
},
|
|
30
|
+
});
|
|
@@ -1,43 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
const opts = {
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { gristCredential } from "./credentials.js";
|
|
3
|
+
function apiRequest(ctx, method, path, body, query) {
|
|
4
|
+
return credentialJson(ctx, gristCredential, "grist", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path,
|
|
10
7
|
method,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
if (body !== undefined && method !== "GET" && method !== "DELETE") {
|
|
17
|
-
opts.body = JSON.stringify(body);
|
|
18
|
-
}
|
|
19
|
-
const res = await fetch(url.toString(), opts);
|
|
20
|
-
if (!res.ok)
|
|
21
|
-
throw new Error(`Grist API error ${res.status}: ${await res.text()}`);
|
|
22
|
-
if (res.status === 204)
|
|
23
|
-
return { success: true };
|
|
24
|
-
return res.json();
|
|
25
|
-
}
|
|
26
|
-
function getConn(ctx) {
|
|
27
|
-
const cfg = ctx.connection.config;
|
|
28
|
-
const planType = cfg.planType ?? "free";
|
|
29
|
-
let baseUrl;
|
|
30
|
-
if (planType === "selfHosted")
|
|
31
|
-
baseUrl = cfg.selfHostedUrl.replace(/\/$/, "");
|
|
32
|
-
else if (planType === "paid")
|
|
33
|
-
baseUrl = `https://${cfg.subdomain}.getgrist.com`;
|
|
34
|
-
else
|
|
35
|
-
baseUrl = "https://docs.getgrist.com";
|
|
36
|
-
return { baseUrl, apiKey: cfg.apiKey };
|
|
8
|
+
query,
|
|
9
|
+
...(body !== undefined ? { json: body } : {}),
|
|
10
|
+
});
|
|
37
11
|
}
|
|
38
12
|
export default function grist(rl) {
|
|
39
13
|
rl.setName("grist");
|
|
40
14
|
rl.setVersion("0.1.0");
|
|
15
|
+
rl.setCredential(gristCredential);
|
|
41
16
|
rl.setConnectionSchema({
|
|
42
17
|
apiKey: {
|
|
43
18
|
type: "string",
|
|
@@ -77,8 +52,7 @@ export default function grist(rl) {
|
|
|
77
52
|
},
|
|
78
53
|
async execute(input, ctx) {
|
|
79
54
|
const { docId, tableId, records } = input;
|
|
80
|
-
|
|
81
|
-
return apiRequest(baseUrl, apiKey, "POST", `/docs/${docId}/tables/${tableId}/records`, { records });
|
|
55
|
+
return apiRequest(ctx, "POST", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/records`, { records });
|
|
82
56
|
},
|
|
83
57
|
});
|
|
84
58
|
rl.registerAction("record.list", {
|
|
@@ -101,7 +75,6 @@ export default function grist(rl) {
|
|
|
101
75
|
},
|
|
102
76
|
async execute(input, ctx) {
|
|
103
77
|
const { docId, tableId, limit, sort, filter } = (input ?? {});
|
|
104
|
-
const { baseUrl, apiKey } = getConn(ctx);
|
|
105
78
|
const qs = {};
|
|
106
79
|
if (limit)
|
|
107
80
|
qs.limit = limit;
|
|
@@ -109,7 +82,7 @@ export default function grist(rl) {
|
|
|
109
82
|
qs.sort = sort;
|
|
110
83
|
if (filter)
|
|
111
84
|
qs.filter = JSON.stringify(filter);
|
|
112
|
-
const data = (await apiRequest(
|
|
85
|
+
const data = (await apiRequest(ctx, "GET", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/records`, undefined, qs));
|
|
113
86
|
return data.records;
|
|
114
87
|
},
|
|
115
88
|
});
|
|
@@ -127,8 +100,7 @@ export default function grist(rl) {
|
|
|
127
100
|
},
|
|
128
101
|
async execute(input, ctx) {
|
|
129
102
|
const { docId, tableId, records } = input;
|
|
130
|
-
|
|
131
|
-
return apiRequest(baseUrl, apiKey, "PATCH", `/docs/${docId}/tables/${tableId}/records`, { records });
|
|
103
|
+
return apiRequest(ctx, "PATCH", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/records`, { records });
|
|
132
104
|
},
|
|
133
105
|
});
|
|
134
106
|
rl.registerAction("record.delete", {
|
|
@@ -145,8 +117,7 @@ export default function grist(rl) {
|
|
|
145
117
|
},
|
|
146
118
|
async execute(input, ctx) {
|
|
147
119
|
const { docId, tableId, rowIds } = input;
|
|
148
|
-
|
|
149
|
-
return apiRequest(baseUrl, apiKey, "POST", `/docs/${docId}/tables/${tableId}/data/delete`, rowIds);
|
|
120
|
+
return apiRequest(ctx, "POST", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/data/delete`, rowIds);
|
|
150
121
|
},
|
|
151
122
|
});
|
|
152
123
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AuthError, } from "runline";
|
|
2
|
+
import { configChoice, grantSchema, httpsBase, } from "../../_shared/credentials.js";
|
|
3
|
+
/**
|
|
4
|
+
* A client-credentials OAuth grant: the token comes from the configured
|
|
5
|
+
* auth server (cloud, optionally tenant-qualified) or the on-premise app's
|
|
6
|
+
* /auth/token, and signs as a bearer against the configured resource API
|
|
7
|
+
* base. Every URL is public config and must be HTTPS.
|
|
8
|
+
*/
|
|
9
|
+
export const halopsaCredential = (config) => {
|
|
10
|
+
let tokenUrl = configChoice(config.hostingType, ["cloud", "on-premise"], "cloud") ===
|
|
11
|
+
"on-premise"
|
|
12
|
+
? httpsBase(config.appUrl, "auth/token")
|
|
13
|
+
: httpsBase(config.authUrl, "token");
|
|
14
|
+
if (config.tenant !== undefined) {
|
|
15
|
+
if (typeof config.tenant !== "string" || !config.tenant)
|
|
16
|
+
throw new AuthError("invalid_credentials");
|
|
17
|
+
tokenUrl += `?tenant=${encodeURIComponent(config.tenant)}`;
|
|
18
|
+
}
|
|
19
|
+
const scope = typeof config.scope === "string" && config.scope ? config.scope : "all";
|
|
20
|
+
const type = {
|
|
21
|
+
id: "halopsa",
|
|
22
|
+
methods: {
|
|
23
|
+
oauth2: {
|
|
24
|
+
schema: grantSchema,
|
|
25
|
+
authentication: {
|
|
26
|
+
kind: "oauth2",
|
|
27
|
+
field: "grant",
|
|
28
|
+
renewal: "clientCredentials",
|
|
29
|
+
definition: {
|
|
30
|
+
id: "halopsa.oauth2",
|
|
31
|
+
provider: "halopsa",
|
|
32
|
+
clientCredentials: {
|
|
33
|
+
url: tokenUrl,
|
|
34
|
+
clientAuthentication: "client_secret_post",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
scopes: [scope],
|
|
38
|
+
},
|
|
39
|
+
targets: {
|
|
40
|
+
api: {
|
|
41
|
+
baseUrl: httpsBase(config.resourceApiUrl, ""),
|
|
42
|
+
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
type,
|
|
50
|
+
method: "oauth2",
|
|
51
|
+
application: {
|
|
52
|
+
clientId: config.clientId,
|
|
53
|
+
clientSecret: config.clientSecret,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
};
|
|
@@ -1,47 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
for (const [k, v] of Object.entries(qs)) {
|
|
6
|
-
if (v !== undefined && v !== null)
|
|
7
|
-
url.searchParams.set(k, String(v));
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
const opts = {
|
|
11
|
-
method,
|
|
12
|
-
headers: {
|
|
13
|
-
Authorization: `Bearer ${token}`,
|
|
14
|
-
"Content-Type": "application/json",
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
if (body &&
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { halopsaCredential } from "./credentials.js";
|
|
3
|
+
function req(ctx, method, path, body, qs) {
|
|
4
|
+
const json = body &&
|
|
18
5
|
Object.keys(body).length > 0 &&
|
|
19
6
|
method !== "GET" &&
|
|
20
|
-
method !== "DELETE"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
async function req(ctx, method, endpoint, body, qs) {
|
|
30
|
-
const token = await coordinatedAccessToken(ctx, (cfg) => {
|
|
31
|
-
const url = new URL(cfg.hostingType === "on-premise"
|
|
32
|
-
? `${cfg.appUrl}/auth/token`
|
|
33
|
-
: `${cfg.authUrl}/token`);
|
|
34
|
-
if (cfg.tenant)
|
|
35
|
-
url.searchParams.set("tenant", cfg.tenant);
|
|
36
|
-
return requestToken({ url: url.toString(), clientAuthentication: "client_secret_post" }, {
|
|
37
|
-
grant_type: "client_credentials",
|
|
38
|
-
scope: cfg.scope ?? "all",
|
|
39
|
-
}, {
|
|
40
|
-
clientId: cfg.clientId,
|
|
41
|
-
clientSecret: cfg.clientSecret,
|
|
42
|
-
});
|
|
7
|
+
method !== "DELETE"
|
|
8
|
+
? body
|
|
9
|
+
: undefined;
|
|
10
|
+
return credentialJson(ctx, halopsaCredential, "halopsa", {
|
|
11
|
+
target: "api",
|
|
12
|
+
path,
|
|
13
|
+
method,
|
|
14
|
+
query: qs,
|
|
15
|
+
...(json !== undefined ? { json } : {}),
|
|
43
16
|
});
|
|
44
|
-
return apiRequest(ctx.connection.config.resourceApiUrl.replace(/\/$/, ""), token, method, endpoint, body, qs);
|
|
45
17
|
}
|
|
46
18
|
function registerCrud(rl, resource, apiPath) {
|
|
47
19
|
rl.registerAction(`${resource}.create`, {
|
|
@@ -67,7 +39,7 @@ function registerCrud(rl, resource, apiPath) {
|
|
|
67
39
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
68
40
|
},
|
|
69
41
|
async execute(input, ctx) {
|
|
70
|
-
return req(ctx, "GET", `${apiPath}/${input.id}`);
|
|
42
|
+
return req(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`);
|
|
71
43
|
},
|
|
72
44
|
});
|
|
73
45
|
rl.registerAction(`${resource}.list`, {
|
|
@@ -110,7 +82,7 @@ function registerCrud(rl, resource, apiPath) {
|
|
|
110
82
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
111
83
|
},
|
|
112
84
|
async execute(input, ctx) {
|
|
113
|
-
await req(ctx, "DELETE", `${apiPath}/${input.id}`);
|
|
85
|
+
await req(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
|
|
114
86
|
return { success: true };
|
|
115
87
|
},
|
|
116
88
|
});
|
|
@@ -118,6 +90,7 @@ function registerCrud(rl, resource, apiPath) {
|
|
|
118
90
|
export default function halopsa(rl) {
|
|
119
91
|
rl.setName("halopsa");
|
|
120
92
|
rl.setVersion("0.1.0");
|
|
93
|
+
rl.setCredential(halopsaCredential);
|
|
121
94
|
rl.setConnectionSchema({
|
|
122
95
|
hostingType: {
|
|
123
96
|
type: "string",
|
|
@@ -167,8 +140,8 @@ export default function halopsa(rl) {
|
|
|
167
140
|
description: "Tenant (cloud only)",
|
|
168
141
|
},
|
|
169
142
|
});
|
|
170
|
-
registerCrud(rl, "client", "
|
|
171
|
-
registerCrud(rl, "site", "
|
|
172
|
-
registerCrud(rl, "ticket", "
|
|
173
|
-
registerCrud(rl, "user", "
|
|
143
|
+
registerCrud(rl, "client", "client");
|
|
144
|
+
registerCrud(rl, "site", "site");
|
|
145
|
+
registerCrud(rl, "ticket", "tickets");
|
|
146
|
+
registerCrud(rl, "user", "users");
|
|
174
147
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* A personal access token, sent as a bearer to Harvest's one API origin.
|
|
4
|
+
* Every request also carries the public Harvest-Account-Id companion
|
|
5
|
+
* header and Harvest's required User-Agent.
|
|
6
|
+
*/
|
|
7
|
+
export const harvestCredential = staticCredential({
|
|
8
|
+
id: "harvest",
|
|
9
|
+
auth: { kind: "bearer" },
|
|
10
|
+
local: { secret: "token" },
|
|
11
|
+
targets: {
|
|
12
|
+
api: {
|
|
13
|
+
baseUrl: "https://api.harvestapp.com/v2/",
|
|
14
|
+
methods: ["GET", "POST", "PATCH", "DELETE"],
|
|
15
|
+
allowedHeaders: ["Harvest-Account-Id", "User-Agent"],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
// No probe: every accepted request needs the Harvest-Account-Id header,
|
|
19
|
+
// which a fixed probe cannot carry.
|
|
20
|
+
});
|
|
@@ -1,42 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
url.searchParams.set(k, String(v));
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
const opts = {
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { harvestCredential } from "./credentials.js";
|
|
3
|
+
function hv(ctx, method, path, body, qs) {
|
|
4
|
+
return credentialJson(ctx, harvestCredential, "harvest", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path,
|
|
11
7
|
method,
|
|
8
|
+
query: qs,
|
|
12
9
|
headers: {
|
|
13
|
-
|
|
14
|
-
"Harvest-Account-Id": accountId,
|
|
15
|
-
"Content-Type": "application/json",
|
|
10
|
+
"Harvest-Account-Id": String(ctx.connection.config.accountId),
|
|
16
11
|
"User-Agent": "Runline",
|
|
17
12
|
},
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (!res.ok)
|
|
26
|
-
throw new Error(`Harvest API error ${res.status}: ${await res.text()}`);
|
|
27
|
-
if (res.status === 204)
|
|
28
|
-
return { success: true };
|
|
29
|
-
return res.json();
|
|
30
|
-
}
|
|
31
|
-
function getConn(ctx) {
|
|
32
|
-
return {
|
|
33
|
-
token: ctx.connection.config.token,
|
|
34
|
-
accountId: ctx.connection.config.accountId,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function hv(ctx, method, endpoint, body, qs) {
|
|
38
|
-
const { token, accountId } = getConn(ctx);
|
|
39
|
-
return apiRequest(token, accountId, method, endpoint, body, qs);
|
|
13
|
+
...(body &&
|
|
14
|
+
Object.keys(body).length > 0 &&
|
|
15
|
+
method !== "GET" &&
|
|
16
|
+
method !== "DELETE"
|
|
17
|
+
? { json: body }
|
|
18
|
+
: {}),
|
|
19
|
+
});
|
|
40
20
|
}
|
|
41
21
|
function unwrapList(data, key) {
|
|
42
22
|
if (data &&
|
|
@@ -67,7 +47,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
|
|
|
67
47
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
68
48
|
},
|
|
69
49
|
async execute(input, ctx) {
|
|
70
|
-
return hv(ctx, "GET", `${apiPath}/${input.id}`);
|
|
50
|
+
return hv(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`);
|
|
71
51
|
},
|
|
72
52
|
});
|
|
73
53
|
rl.registerAction(`${resource}.list`, {
|
|
@@ -100,7 +80,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
|
|
|
100
80
|
},
|
|
101
81
|
async execute(input, ctx) {
|
|
102
82
|
const { id, properties } = input;
|
|
103
|
-
return hv(ctx, "PATCH", `${apiPath}/${id}`, properties);
|
|
83
|
+
return hv(ctx, "PATCH", `${apiPath}/${pathSegment(id)}`, properties);
|
|
104
84
|
},
|
|
105
85
|
});
|
|
106
86
|
rl.registerAction(`${resource}.delete`, {
|
|
@@ -110,7 +90,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
|
|
|
110
90
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
111
91
|
},
|
|
112
92
|
async execute(input, ctx) {
|
|
113
|
-
await hv(ctx, "DELETE", `${apiPath}/${input.id}`);
|
|
93
|
+
await hv(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
|
|
114
94
|
return { success: true };
|
|
115
95
|
},
|
|
116
96
|
});
|
|
@@ -118,6 +98,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
|
|
|
118
98
|
export default function harvest(rl) {
|
|
119
99
|
rl.setName("harvest");
|
|
120
100
|
rl.setVersion("0.1.0");
|
|
101
|
+
rl.setCredential(harvestCredential);
|
|
121
102
|
rl.setConnectionSchema({
|
|
122
103
|
token: {
|
|
123
104
|
type: "string",
|
|
@@ -210,7 +191,7 @@ export default function harvest(rl) {
|
|
|
210
191
|
id: { type: "number", required: true, description: "Time entry ID" },
|
|
211
192
|
},
|
|
212
193
|
async execute(input, ctx) {
|
|
213
|
-
return hv(ctx, "GET", `time_entries/${input.id}`);
|
|
194
|
+
return hv(ctx, "GET", `time_entries/${pathSegment(input.id)}`);
|
|
214
195
|
},
|
|
215
196
|
});
|
|
216
197
|
rl.registerAction("timeEntry.list", {
|
|
@@ -272,7 +253,7 @@ export default function harvest(rl) {
|
|
|
272
253
|
},
|
|
273
254
|
async execute(input, ctx) {
|
|
274
255
|
const { id, properties } = input;
|
|
275
|
-
return hv(ctx, "PATCH", `time_entries/${id}`, properties);
|
|
256
|
+
return hv(ctx, "PATCH", `time_entries/${pathSegment(id)}`, properties);
|
|
276
257
|
},
|
|
277
258
|
});
|
|
278
259
|
rl.registerAction("timeEntry.delete", {
|
|
@@ -282,7 +263,7 @@ export default function harvest(rl) {
|
|
|
282
263
|
id: { type: "number", required: true, description: "Time entry ID" },
|
|
283
264
|
},
|
|
284
265
|
async execute(input, ctx) {
|
|
285
|
-
await hv(ctx, "DELETE", `time_entries/${input.id}`);
|
|
266
|
+
await hv(ctx, "DELETE", `time_entries/${pathSegment(input.id)}`);
|
|
286
267
|
return { success: true };
|
|
287
268
|
},
|
|
288
269
|
});
|
|
@@ -293,7 +274,7 @@ export default function harvest(rl) {
|
|
|
293
274
|
id: { type: "number", required: true, description: "Time entry ID" },
|
|
294
275
|
},
|
|
295
276
|
async execute(input, ctx) {
|
|
296
|
-
return hv(ctx, "PATCH", `time_entries/${input.id}/restart`);
|
|
277
|
+
return hv(ctx, "PATCH", `time_entries/${pathSegment(input.id)}/restart`);
|
|
297
278
|
},
|
|
298
279
|
});
|
|
299
280
|
rl.registerAction("timeEntry.stop", {
|
|
@@ -303,7 +284,7 @@ export default function harvest(rl) {
|
|
|
303
284
|
id: { type: "number", required: true, description: "Time entry ID" },
|
|
304
285
|
},
|
|
305
286
|
async execute(input, ctx) {
|
|
306
|
-
return hv(ctx, "PATCH", `time_entries/${input.id}/stop`);
|
|
287
|
+
return hv(ctx, "PATCH", `time_entries/${pathSegment(input.id)}/stop`);
|
|
307
288
|
},
|
|
308
289
|
});
|
|
309
290
|
// Company (read-only)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/** An OAuth2 app access token, sent as a bearer to Help Scout's v2 API. */
|
|
3
|
+
export const helpscoutCredential = staticCredential({
|
|
4
|
+
id: "helpscout",
|
|
5
|
+
auth: { kind: "bearer" },
|
|
6
|
+
local: { secret: "accessToken" },
|
|
7
|
+
targets: {
|
|
8
|
+
api: {
|
|
9
|
+
baseUrl: "https://api.helpscout.net/v2/",
|
|
10
|
+
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
});
|