runline 0.32.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 +22 -34
- package/dist/plugins/_shared/shiftCredentials.js +83 -0
- package/dist/plugins/_shared/shiftUpload.js +1 -1
- 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/collections.js +201 -0
- package/dist/plugins/shiftBwm/src/index.js +35 -0
- package/dist/plugins/shiftBwm/src/records.js +180 -0
- package/dist/plugins/shiftBwm/src/shared.js +168 -0
- package/dist/plugins/shiftBwm/src/vendor/client.js +227 -0
- package/dist/plugins/shiftBwm/src/vendor/contracts.js +59 -0
- package/dist/plugins/shiftBwm/src/vendor/models.js +525 -0
- 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 -3
- package/dist/plugins/shiftOcr/src/credentials.js +8 -0
- package/dist/plugins/shiftOcr/src/index.js +5 -2
- 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 +3 -2
- 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 +3 -2
- package/dist/plugins/_shared/authedFetch.js +0 -33
- package/dist/plugins/_shared/tokenRefresh.js +0 -41
|
@@ -1,40 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
const opts = {
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { freshserviceCredential } from "./credentials.js";
|
|
3
|
+
function req(ctx, method, path, body, qs) {
|
|
4
|
+
return credentialJson(ctx, freshserviceCredential, "freshservice", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path,
|
|
10
7
|
method,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
method !== "DELETE") {
|
|
20
|
-
opts.body = JSON.stringify(body);
|
|
21
|
-
}
|
|
22
|
-
const res = await fetch(url.toString(), opts);
|
|
23
|
-
if (!res.ok)
|
|
24
|
-
throw new Error(`Freshservice API error ${res.status}: ${await res.text()}`);
|
|
25
|
-
if (res.status === 204)
|
|
26
|
-
return { success: true };
|
|
27
|
-
return res.json();
|
|
28
|
-
}
|
|
29
|
-
function getConn(ctx) {
|
|
30
|
-
return {
|
|
31
|
-
domain: ctx.connection.config.domain,
|
|
32
|
-
apiKey: ctx.connection.config.apiKey,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function req(ctx, method, endpoint, body, qs) {
|
|
36
|
-
const { domain, apiKey } = getConn(ctx);
|
|
37
|
-
return apiRequest(domain, apiKey, method, endpoint, body, qs);
|
|
8
|
+
query: qs,
|
|
9
|
+
...(body &&
|
|
10
|
+
Object.keys(body).length > 0 &&
|
|
11
|
+
method !== "GET" &&
|
|
12
|
+
method !== "DELETE"
|
|
13
|
+
? { json: body }
|
|
14
|
+
: {}),
|
|
15
|
+
});
|
|
38
16
|
}
|
|
39
17
|
function unwrap(data) {
|
|
40
18
|
if (data && typeof data === "object" && !Array.isArray(data)) {
|
|
@@ -44,7 +22,7 @@ function unwrap(data) {
|
|
|
44
22
|
}
|
|
45
23
|
return data;
|
|
46
24
|
}
|
|
47
|
-
function registerCrud(rl, resource, apiPath,
|
|
25
|
+
function registerCrud(rl, resource, apiPath, opts) {
|
|
48
26
|
rl.registerAction(`${resource}.create`, {
|
|
49
27
|
access: "write",
|
|
50
28
|
description: `Create a ${resource}`,
|
|
@@ -69,7 +47,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
|
|
|
69
47
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
70
48
|
},
|
|
71
49
|
async execute(input, ctx) {
|
|
72
|
-
return unwrap(await req(ctx, "GET", `${apiPath}/${input.id}`));
|
|
50
|
+
return unwrap(await req(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`));
|
|
73
51
|
},
|
|
74
52
|
});
|
|
75
53
|
rl.registerAction(`${resource}.list`, {
|
|
@@ -102,7 +80,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
|
|
|
102
80
|
},
|
|
103
81
|
async execute(input, ctx) {
|
|
104
82
|
const { id, properties } = input;
|
|
105
|
-
return unwrap(await req(ctx, "PUT", `${apiPath}/${id}`, properties));
|
|
83
|
+
return unwrap(await req(ctx, "PUT", `${apiPath}/${pathSegment(id)}`, properties));
|
|
106
84
|
},
|
|
107
85
|
});
|
|
108
86
|
if (!opts?.noDelete) {
|
|
@@ -113,7 +91,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
|
|
|
113
91
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
114
92
|
},
|
|
115
93
|
async execute(input, ctx) {
|
|
116
|
-
await req(ctx, "DELETE", `${apiPath}/${input.id}`);
|
|
94
|
+
await req(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
|
|
117
95
|
return { success: true };
|
|
118
96
|
},
|
|
119
97
|
});
|
|
@@ -122,6 +100,7 @@ function registerCrud(rl, resource, apiPath, singularKey, opts) {
|
|
|
122
100
|
export default function freshservice(rl) {
|
|
123
101
|
rl.setName("freshservice");
|
|
124
102
|
rl.setVersion("0.1.0");
|
|
103
|
+
rl.setCredential(freshserviceCredential);
|
|
125
104
|
rl.setConnectionSchema({
|
|
126
105
|
domain: {
|
|
127
106
|
type: "string",
|
|
@@ -136,22 +115,22 @@ export default function freshservice(rl) {
|
|
|
136
115
|
env: "FRESHSERVICE_API_KEY",
|
|
137
116
|
},
|
|
138
117
|
});
|
|
139
|
-
//
|
|
140
|
-
registerCrud(rl, "agent", "
|
|
141
|
-
registerCrud(rl, "agentGroup", "
|
|
142
|
-
registerCrud(rl, "announcement", "
|
|
143
|
-
registerCrud(rl, "asset", "
|
|
144
|
-
registerCrud(rl, "assetType", "
|
|
145
|
-
registerCrud(rl, "change", "
|
|
146
|
-
registerCrud(rl, "department", "
|
|
147
|
-
registerCrud(rl, "location", "
|
|
148
|
-
registerCrud(rl, "problem", "
|
|
149
|
-
registerCrud(rl, "product", "
|
|
150
|
-
registerCrud(rl, "release", "
|
|
151
|
-
registerCrud(rl, "requester", "
|
|
152
|
-
registerCrud(rl, "requesterGroup", "
|
|
153
|
-
registerCrud(rl, "software", "
|
|
154
|
-
registerCrud(rl, "ticket", "
|
|
118
|
+
// 15 resources, all CRUD
|
|
119
|
+
registerCrud(rl, "agent", "agents");
|
|
120
|
+
registerCrud(rl, "agentGroup", "groups");
|
|
121
|
+
registerCrud(rl, "announcement", "announcements");
|
|
122
|
+
registerCrud(rl, "asset", "assets");
|
|
123
|
+
registerCrud(rl, "assetType", "asset_types");
|
|
124
|
+
registerCrud(rl, "change", "changes");
|
|
125
|
+
registerCrud(rl, "department", "departments");
|
|
126
|
+
registerCrud(rl, "location", "locations");
|
|
127
|
+
registerCrud(rl, "problem", "problems");
|
|
128
|
+
registerCrud(rl, "product", "products");
|
|
129
|
+
registerCrud(rl, "release", "releases");
|
|
130
|
+
registerCrud(rl, "requester", "requesters");
|
|
131
|
+
registerCrud(rl, "requesterGroup", "requester_groups");
|
|
132
|
+
registerCrud(rl, "software", "applications");
|
|
133
|
+
registerCrud(rl, "ticket", "tickets");
|
|
155
134
|
// agentRole is read-only (get + list only)
|
|
156
135
|
rl.registerAction("agentRole.get", {
|
|
157
136
|
access: "read",
|
|
@@ -160,7 +139,7 @@ export default function freshservice(rl) {
|
|
|
160
139
|
id: { type: "number", required: true, description: "Role ID" },
|
|
161
140
|
},
|
|
162
141
|
async execute(input, ctx) {
|
|
163
|
-
return unwrap(await req(ctx, "GET",
|
|
142
|
+
return unwrap(await req(ctx, "GET", `roles/${pathSegment(input.id)}`));
|
|
164
143
|
},
|
|
165
144
|
});
|
|
166
145
|
rl.registerAction("agentRole.list", {
|
|
@@ -177,7 +156,7 @@ export default function freshservice(rl) {
|
|
|
177
156
|
qs.per_page = limit;
|
|
178
157
|
if (page)
|
|
179
158
|
qs.page = page;
|
|
180
|
-
return unwrap(await req(ctx, "GET", "
|
|
159
|
+
return unwrap(await req(ctx, "GET", "roles", undefined, qs));
|
|
181
160
|
},
|
|
182
161
|
});
|
|
183
162
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { hostLabel, staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* The API key in Freshworks' `Token token=` Authorization scheme, sent to
|
|
4
|
+
* the connection's own bundle domain.
|
|
5
|
+
*/
|
|
6
|
+
export const freshworksCrmCredential = staticCredential({
|
|
7
|
+
id: "freshworksCrm",
|
|
8
|
+
auth: { kind: "apiKey", header: "Authorization", prefix: "Token token=" },
|
|
9
|
+
local: { secret: "apiKey" },
|
|
10
|
+
targets: (config) => ({
|
|
11
|
+
api: {
|
|
12
|
+
baseUrl: `https://${hostLabel(config.domain)}.myfreshworks.com/crm/sales/api/`,
|
|
13
|
+
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
@@ -1,40 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (qs) {
|
|
4
|
-
for (const [k, v] of Object.entries(qs)) {
|
|
5
|
-
if (v !== undefined && v !== null)
|
|
6
|
-
url.searchParams.set(k, String(v));
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
const opts = {
|
|
10
|
-
method,
|
|
11
|
-
headers: {
|
|
12
|
-
Authorization: `Token token=${apiKey}`,
|
|
13
|
-
"Content-Type": "application/json",
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
if (body &&
|
|
17
|
-
Object.keys(body).length > 0 &&
|
|
18
|
-
method !== "GET" &&
|
|
19
|
-
method !== "DELETE") {
|
|
20
|
-
opts.body = JSON.stringify(body);
|
|
21
|
-
}
|
|
22
|
-
const res = await fetch(url.toString(), opts);
|
|
23
|
-
if (!res.ok)
|
|
24
|
-
throw new Error(`Freshworks CRM API error ${res.status}: ${await res.text()}`);
|
|
25
|
-
if (res.status === 204)
|
|
26
|
-
return { success: true };
|
|
27
|
-
return res.json();
|
|
28
|
-
}
|
|
29
|
-
function getConn(ctx) {
|
|
30
|
-
return {
|
|
31
|
-
domain: ctx.connection.config.domain,
|
|
32
|
-
apiKey: ctx.connection.config.apiKey,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { freshworksCrmCredential } from "./credentials.js";
|
|
35
3
|
function req(ctx, method, endpoint, body, qs) {
|
|
36
|
-
|
|
37
|
-
|
|
4
|
+
return credentialJson(ctx, freshworksCrmCredential, "freshworksCrm", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path: endpoint.replace(/^\//, ""),
|
|
7
|
+
method,
|
|
8
|
+
query: qs,
|
|
9
|
+
...(body &&
|
|
10
|
+
Object.keys(body).length > 0 &&
|
|
11
|
+
method !== "GET" &&
|
|
12
|
+
method !== "DELETE"
|
|
13
|
+
? { json: body }
|
|
14
|
+
: {}),
|
|
15
|
+
});
|
|
38
16
|
}
|
|
39
17
|
function unwrap(data) {
|
|
40
18
|
if (data && typeof data === "object" && !Array.isArray(data)) {
|
|
@@ -68,7 +46,7 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
|
|
|
68
46
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
69
47
|
},
|
|
70
48
|
async execute(input, ctx) {
|
|
71
|
-
return unwrap(await req(ctx, "GET", `${apiPath}/${input.id}`));
|
|
49
|
+
return unwrap(await req(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`));
|
|
72
50
|
},
|
|
73
51
|
});
|
|
74
52
|
}
|
|
@@ -104,7 +82,9 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
|
|
|
104
82
|
},
|
|
105
83
|
async execute(input, ctx) {
|
|
106
84
|
const { id, properties } = input;
|
|
107
|
-
return unwrap(await req(ctx, "PUT", `${apiPath}/${id}`, {
|
|
85
|
+
return unwrap(await req(ctx, "PUT", `${apiPath}/${pathSegment(id)}`, {
|
|
86
|
+
[wrapKey]: properties,
|
|
87
|
+
}));
|
|
108
88
|
},
|
|
109
89
|
});
|
|
110
90
|
if (!opts?.noDelete) {
|
|
@@ -115,7 +95,7 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
|
|
|
115
95
|
id: { type: "number", required: true, description: `${resource} ID` },
|
|
116
96
|
},
|
|
117
97
|
async execute(input, ctx) {
|
|
118
|
-
await req(ctx, "DELETE", `${apiPath}/${input.id}`);
|
|
98
|
+
await req(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
|
|
119
99
|
return { success: true };
|
|
120
100
|
},
|
|
121
101
|
});
|
|
@@ -124,6 +104,7 @@ function registerCrud(rl, resource, apiPath, wrapKey, opts) {
|
|
|
124
104
|
export default function freshworksCrm(rl) {
|
|
125
105
|
rl.setName("freshworksCrm");
|
|
126
106
|
rl.setVersion("0.1.0");
|
|
107
|
+
rl.setCredential(freshworksCrmCredential);
|
|
127
108
|
rl.setConnectionSchema({
|
|
128
109
|
domain: {
|
|
129
110
|
type: "string",
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* An API key, sent as `X-Auth-Token: api-key {key}` to GetResponse's v3
|
|
4
|
+
* API base.
|
|
5
|
+
*/
|
|
6
|
+
export const getresponseCredential = staticCredential({
|
|
7
|
+
id: "getresponse",
|
|
8
|
+
auth: { kind: "apiKey", header: "X-Auth-Token", prefix: "api-key " },
|
|
9
|
+
local: { secret: "apiKey" },
|
|
10
|
+
targets: {
|
|
11
|
+
api: {
|
|
12
|
+
baseUrl: "https://api.getresponse.com/v3/",
|
|
13
|
+
methods: ["GET", "POST", "DELETE"],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
probe: {
|
|
17
|
+
target: "api",
|
|
18
|
+
path: "accounts",
|
|
19
|
+
method: "GET",
|
|
20
|
+
acceptedStatuses: [200],
|
|
21
|
+
},
|
|
22
|
+
});
|
|
@@ -1,35 +1,24 @@
|
|
|
1
|
-
|
|
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
|
-
"X-Auth-Token": `api-key ${apiKey}`,
|
|
14
|
-
"Content-Type": "application/json",
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
if (body &&
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { getresponseCredential } from "./credentials.js";
|
|
3
|
+
function apiRequest(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
|
-
|
|
7
|
+
method !== "DELETE"
|
|
8
|
+
? body
|
|
9
|
+
: undefined;
|
|
10
|
+
return credentialJson(ctx, getresponseCredential, "getresponse", {
|
|
11
|
+
target: "api",
|
|
12
|
+
path,
|
|
13
|
+
method,
|
|
14
|
+
query: qs,
|
|
15
|
+
...(json !== undefined ? { json } : {}),
|
|
16
|
+
});
|
|
29
17
|
}
|
|
30
18
|
export default function getresponse(rl) {
|
|
31
19
|
rl.setName("getresponse");
|
|
32
20
|
rl.setVersion("0.1.0");
|
|
21
|
+
rl.setCredential(getresponseCredential);
|
|
33
22
|
rl.setConnectionSchema({
|
|
34
23
|
apiKey: {
|
|
35
24
|
type: "string",
|
|
@@ -38,7 +27,6 @@ export default function getresponse(rl) {
|
|
|
38
27
|
env: "GETRESPONSE_API_KEY",
|
|
39
28
|
},
|
|
40
29
|
});
|
|
41
|
-
const key = (ctx) => ctx.connection.config.apiKey;
|
|
42
30
|
rl.registerAction("contact.create", {
|
|
43
31
|
access: "write",
|
|
44
32
|
description: "Create a contact",
|
|
@@ -77,7 +65,7 @@ export default function getresponse(rl) {
|
|
|
77
65
|
body.tags = tags;
|
|
78
66
|
if (customFieldValues)
|
|
79
67
|
body.customFieldValues = customFieldValues;
|
|
80
|
-
await apiRequest(
|
|
68
|
+
await apiRequest(ctx, "POST", "contacts", body);
|
|
81
69
|
return { success: true };
|
|
82
70
|
},
|
|
83
71
|
});
|
|
@@ -97,7 +85,7 @@ export default function getresponse(rl) {
|
|
|
97
85
|
const qs = {};
|
|
98
86
|
if (fields)
|
|
99
87
|
qs.fields = fields;
|
|
100
|
-
return apiRequest(
|
|
88
|
+
return apiRequest(ctx, "GET", `contacts/${pathSegment(contactId)}`, undefined, qs);
|
|
101
89
|
},
|
|
102
90
|
});
|
|
103
91
|
rl.registerAction("contact.list", {
|
|
@@ -145,7 +133,7 @@ export default function getresponse(rl) {
|
|
|
145
133
|
qs["query[campaignId]"] = campaignId;
|
|
146
134
|
if (sortBy)
|
|
147
135
|
qs[`sort[${sortBy}]`] = sortOrder ?? "ASC";
|
|
148
|
-
return apiRequest(
|
|
136
|
+
return apiRequest(ctx, "GET", "contacts", undefined, qs);
|
|
149
137
|
},
|
|
150
138
|
});
|
|
151
139
|
rl.registerAction("contact.update", {
|
|
@@ -181,7 +169,7 @@ export default function getresponse(rl) {
|
|
|
181
169
|
body.tags = tags;
|
|
182
170
|
if (customFieldValues)
|
|
183
171
|
body.customFieldValues = customFieldValues;
|
|
184
|
-
return apiRequest(
|
|
172
|
+
return apiRequest(ctx, "POST", `contacts/${pathSegment(contactId)}`, body);
|
|
185
173
|
},
|
|
186
174
|
});
|
|
187
175
|
rl.registerAction("contact.delete", {
|
|
@@ -207,7 +195,7 @@ export default function getresponse(rl) {
|
|
|
207
195
|
qs.messageId = messageId;
|
|
208
196
|
if (ipAddress)
|
|
209
197
|
qs.ipAddress = ipAddress;
|
|
210
|
-
await apiRequest(
|
|
198
|
+
await apiRequest(ctx, "DELETE", `contacts/${pathSegment(contactId)}`, undefined, qs);
|
|
211
199
|
return { success: true };
|
|
212
200
|
},
|
|
213
201
|
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { AuthError } from "runline";
|
|
2
|
+
import { grantSchema, pathSegment } from "../../_shared/credentials.js";
|
|
3
|
+
export const HOST = "b2cgateway.gett.com";
|
|
4
|
+
export const APP_VERSION = "10.48.187";
|
|
5
|
+
/** What the Android app sends on every call: its own identity, and the device's. */
|
|
6
|
+
export function appHeaders(config) {
|
|
7
|
+
return {
|
|
8
|
+
"user-agent": `Gett/android/${APP_VERSION}`,
|
|
9
|
+
"app-platform": "android",
|
|
10
|
+
"app-version": APP_VERSION,
|
|
11
|
+
"x-device-id": String(config.deviceId ?? ""),
|
|
12
|
+
"x-client-device-unique-id": String(config.clientDeviceUniqueId ?? ""),
|
|
13
|
+
"x-country-code": "IL",
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The owner's Gett session: a long-lived refresh token, renewed at the
|
|
18
|
+
* account's GL token endpoint — as the app does it, with the app's headers
|
|
19
|
+
* and the refresh token as bearer — into access tokens that sign every call
|
|
20
|
+
* to the gateway. The phone and device IDs are public config; the owner
|
|
21
|
+
* login seeds the grant.
|
|
22
|
+
*/
|
|
23
|
+
export const gettCredential = (config) => {
|
|
24
|
+
if (typeof config.phone !== "string" || !config.phone.trim())
|
|
25
|
+
throw new AuthError("invalid_credentials");
|
|
26
|
+
const phone = pathSegment(config.phone.trim());
|
|
27
|
+
const headers = appHeaders(config);
|
|
28
|
+
return {
|
|
29
|
+
type: {
|
|
30
|
+
id: "gett",
|
|
31
|
+
methods: {
|
|
32
|
+
oauth2: {
|
|
33
|
+
schema: grantSchema,
|
|
34
|
+
authentication: {
|
|
35
|
+
kind: "oauth2",
|
|
36
|
+
field: "grant",
|
|
37
|
+
renewal: "refresh",
|
|
38
|
+
definition: {
|
|
39
|
+
id: "gett.oauth2",
|
|
40
|
+
provider: "gett",
|
|
41
|
+
// `?lc=en` is required: without it the grant 400s with an empty body.
|
|
42
|
+
refresh: {
|
|
43
|
+
url: `https://${HOST}/gl/api/v2/phone/${phone}/auth/token?lc=en`,
|
|
44
|
+
clientAuthentication: "none",
|
|
45
|
+
encoding: "json",
|
|
46
|
+
headers,
|
|
47
|
+
refreshTokenBearer: true,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
targets: {
|
|
52
|
+
api: {
|
|
53
|
+
baseUrl: `https://${HOST}/`,
|
|
54
|
+
methods: ["GET", "POST"],
|
|
55
|
+
allowedHeaders: Object.keys(headers),
|
|
56
|
+
maxResponseBytes: 4 * 1024 * 1024,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
method: "oauth2",
|
|
63
|
+
};
|
|
64
|
+
};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { refuseUnderHost } from "../../_shared/credentials.js";
|
|
3
|
+
import { gettCredential } from "./credentials.js";
|
|
2
4
|
import { search } from "./places.js";
|
|
3
5
|
import { book, optionsOf, plan, previewOf, quoteFor } from "./rides.js";
|
|
4
6
|
import { createSession, identityOf, requestCode, status, verifyCard, verifyCode, } from "./session.js";
|
|
5
|
-
import { accepted,
|
|
7
|
+
import { accepted, arr, authed, cfgOf, DEF_LAT, DEF_LON, num, numOrNull, obj, pick, seg, } from "./shared.js";
|
|
6
8
|
/**
|
|
7
9
|
* gett — Gett (taxi, Israel) consumer connector.
|
|
8
10
|
*
|
|
@@ -51,6 +53,7 @@ function bias(input, ctx) {
|
|
|
51
53
|
export default function gett(rl) {
|
|
52
54
|
rl.setName("gett");
|
|
53
55
|
rl.setVersion("0.1.0");
|
|
56
|
+
rl.setCredential(gettCredential);
|
|
54
57
|
rl.setConnectionSchema(t.Object({
|
|
55
58
|
phone: t.Optional(t.String({
|
|
56
59
|
env: "GETT_PHONE",
|
|
@@ -143,10 +146,12 @@ export default function gett(rl) {
|
|
|
143
146
|
});
|
|
144
147
|
rl.registerAction("account.refresh", {
|
|
145
148
|
access: "write",
|
|
146
|
-
description: "Force a fresh access token from the stored refresh token. Rarely needed: every action renews on demand, and the refresh token is long-lived (~90 days), so no keepalive schedule is required.
|
|
149
|
+
description: "Force a fresh access token from the stored refresh token and prove it on a live call. Rarely needed: every action renews on demand, and the refresh token is long-lived (~90 days), so no keepalive schedule is required. Runs where the grant lives: locally, not under a host that keeps it.",
|
|
147
150
|
inputSchema: t.Object({}, STRICT),
|
|
148
151
|
async execute(_input, ctx) {
|
|
149
|
-
|
|
152
|
+
refuseUnderHost(ctx);
|
|
153
|
+
await ctx.updateConnection({ accessTokenExpiresAt: 1 });
|
|
154
|
+
await createSession(ctx, DEF_LAT, DEF_LON);
|
|
150
155
|
const cfg = cfgOf(ctx);
|
|
151
156
|
return {
|
|
152
157
|
refreshed: true,
|
|
@@ -309,7 +314,7 @@ export default function gett(rl) {
|
|
|
309
314
|
async execute(input, ctx) {
|
|
310
315
|
const { order_id } = input;
|
|
311
316
|
const cfg = cfgOf(ctx);
|
|
312
|
-
const r = await authed(ctx, `/gl/server/3_3/phone/${seg(cfg.phone
|
|
317
|
+
const r = await authed(ctx, `/gl/server/3_3/phone/${seg(cfg.phone)}/orders/${seg(order_id)}`);
|
|
313
318
|
return {
|
|
314
319
|
order_id: pick(r.id) ?? order_id,
|
|
315
320
|
status: pick(r.status),
|
|
@@ -339,8 +344,8 @@ export default function gett(rl) {
|
|
|
339
344
|
const cfg = cfgOf(ctx);
|
|
340
345
|
if (!cfg.allowOrdering)
|
|
341
346
|
throw new Error("gett ride.cancel: ordering is disabled for this connection (set allowOrdering:true).");
|
|
342
|
-
const phone = seg(cfg.phone
|
|
343
|
-
const order = seg(order_id
|
|
347
|
+
const phone = seg(cfg.phone);
|
|
348
|
+
const order = seg(order_id);
|
|
344
349
|
// The reason is optional metadata; a rejection there must not block the
|
|
345
350
|
// cancel, but the caller is told whether it landed rather than left to guess.
|
|
346
351
|
let reasonRecorded = null;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { refuseUnderHost } from "../../_shared/credentials.js";
|
|
2
|
+
import { readBounded } from "../../_shared/provider.js";
|
|
3
|
+
import { appHeaders, HOST } from "./credentials.js";
|
|
4
|
+
import { bodyOf, endpointOf } from "./shared.js";
|
|
5
|
+
/**
|
|
6
|
+
* One unsigned login call. It carries no stored credential — the phone, the
|
|
7
|
+
* texted code and the card digits come from the person logging in — and its
|
|
8
|
+
* answer may carry the tokens the login then stores.
|
|
9
|
+
*/
|
|
10
|
+
export async function loginRequest(ctx, path, body) {
|
|
11
|
+
refuseUnderHost(ctx);
|
|
12
|
+
const res = await fetch(`https://${HOST}${path}`, {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: {
|
|
15
|
+
...appHeaders(ctx.connection.config),
|
|
16
|
+
accept: "application/json",
|
|
17
|
+
"content-type": "application/json; charset=UTF-8",
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify(body),
|
|
20
|
+
redirect: "error",
|
|
21
|
+
});
|
|
22
|
+
const text = await readBounded(res, 4 * 1024 * 1024, `gett: response exceeded the size limit on ${endpointOf(path)}`);
|
|
23
|
+
return bodyOf(new Response(text, { status: res.status }), path);
|
|
24
|
+
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { refuseUnderHost } from "../../_shared/credentials.js";
|
|
2
|
+
import { loginRequest } from "./login.js";
|
|
3
|
+
import { APP_VERSION, accepted, arr, authed, cfgOf, DEF_LAT, DEF_LON, ensureDevice, expiresAt, normPhone, num, numOrNull, obj, pick, seg, } from "./shared.js";
|
|
2
4
|
export async function requestCode(ctx, phone) {
|
|
5
|
+
refuseUnderHost(ctx);
|
|
3
6
|
await ensureDevice(ctx);
|
|
4
7
|
let cfg = cfgOf(ctx);
|
|
5
8
|
if (phone) {
|
|
@@ -18,7 +21,7 @@ export async function requestCode(ctx, phone) {
|
|
|
18
21
|
appsflyer_uid: `${Date.now()}-${Math.floor(Math.random() * 1e18)}`,
|
|
19
22
|
gaid: "",
|
|
20
23
|
};
|
|
21
|
-
const r = await
|
|
24
|
+
const r = await loginRequest(ctx, `/gl/api/v2/phone/${seg(cfg.phone)}/auth/otp/challenge`, body);
|
|
22
25
|
// Gett answers 200 even when it refuses to send, so a refusal is reported
|
|
23
26
|
// rather than an SMS claimed that will never arrive.
|
|
24
27
|
const status = pick(r.status);
|
|
@@ -52,10 +55,11 @@ function tokensIn(r) {
|
|
|
52
55
|
return null;
|
|
53
56
|
}
|
|
54
57
|
export async function verifyCode(ctx, code) {
|
|
58
|
+
refuseUnderHost(ctx);
|
|
55
59
|
const cfg = cfgOf(ctx);
|
|
56
60
|
if (!cfg.phone)
|
|
57
61
|
throw new Error("gett: no phone — call account.requestCode first");
|
|
58
|
-
const r = await
|
|
62
|
+
const r = await loginRequest(ctx, `/gl/api/v2/phone/${seg(cfg.phone)}/auth/otp/verify`, { code });
|
|
59
63
|
const toks = tokensIn(r);
|
|
60
64
|
if (toks) {
|
|
61
65
|
const warnings = await finishTokens(ctx, toks);
|
|
@@ -79,13 +83,11 @@ export async function verifyCode(ctx, code) {
|
|
|
79
83
|
};
|
|
80
84
|
}
|
|
81
85
|
export async function verifyCard(ctx, digits) {
|
|
86
|
+
refuseUnderHost(ctx);
|
|
82
87
|
const cfg = cfgOf(ctx);
|
|
83
88
|
if (!cfg.pendingTempCode)
|
|
84
89
|
throw new Error("gett: no pending MFA — call account.verifyCode first");
|
|
85
|
-
const r = await
|
|
86
|
-
method: "POST",
|
|
87
|
-
body: { temp_code: cfg.pendingTempCode, card_digits: digits },
|
|
88
|
-
});
|
|
90
|
+
const r = await loginRequest(ctx, `/gl/api/v2/phone/${seg(cfg.phone)}/auth/mfa/verify`, { temp_code: cfg.pendingTempCode, card_digits: digits });
|
|
89
91
|
const toks = tokensIn(r);
|
|
90
92
|
if (!toks) {
|
|
91
93
|
const reported = pick(r.status);
|
|
@@ -96,13 +98,12 @@ export async function verifyCard(ctx, digits) {
|
|
|
96
98
|
return { warnings, ...(await status(ctx)) };
|
|
97
99
|
}
|
|
98
100
|
/**
|
|
99
|
-
* Store the
|
|
100
|
-
* refresh, then learn identity and the saved card.
|
|
101
|
+
* Store the login's tokens, then learn identity and the saved card.
|
|
101
102
|
*
|
|
102
|
-
* The
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* than
|
|
103
|
+
* The tokens are IL-scoped; the first renewal, at the GL token endpoint the
|
|
104
|
+
* credential declares, is what converts them to the GL family the app keeps
|
|
105
|
+
* refreshing. The discovery is optional: a missing card only blocks booking,
|
|
106
|
+
* so its failure is reported as a warning rather than losing the login.
|
|
106
107
|
*/
|
|
107
108
|
async function finishTokens(ctx, toks) {
|
|
108
109
|
const warnings = [];
|
|
@@ -111,30 +112,6 @@ async function finishTokens(ctx, toks) {
|
|
|
111
112
|
accessToken: pick(toks.access_token),
|
|
112
113
|
accessTokenExpiresAt: expiresAt(toks.expires_in),
|
|
113
114
|
});
|
|
114
|
-
const cfg = cfgOf(ctx);
|
|
115
|
-
try {
|
|
116
|
-
// `?lc=en` is required here too: the conversion 400s without it even with a
|
|
117
|
-
// valid IL bearer.
|
|
118
|
-
const gl = await http(ctx, `/gl/api/v2/phone/${seg(cfg.phone, "phone")}/auth/token?lc=en`, {
|
|
119
|
-
method: "POST",
|
|
120
|
-
token: cfg.accessToken,
|
|
121
|
-
body: { grant_type: "refresh_token", refresh_token: cfg.refreshToken },
|
|
122
|
-
});
|
|
123
|
-
const patch = {};
|
|
124
|
-
const rotated = pick(gl.refresh_token);
|
|
125
|
-
const issued = pick(gl.access_token);
|
|
126
|
-
if (rotated)
|
|
127
|
-
patch.refreshToken = rotated;
|
|
128
|
-
if (issued) {
|
|
129
|
-
patch.accessToken = issued;
|
|
130
|
-
patch.accessTokenExpiresAt = expiresAt(gl.expires_in);
|
|
131
|
-
}
|
|
132
|
-
if (Object.keys(patch).length)
|
|
133
|
-
await ctx.updateConnection(patch);
|
|
134
|
-
}
|
|
135
|
-
catch (e) {
|
|
136
|
-
warnings.push(`IL->GL token conversion failed (${e.message}); reads work, but the session may need an earlier re-login.`);
|
|
137
|
-
}
|
|
138
115
|
try {
|
|
139
116
|
await createSession(ctx, DEF_LAT, DEF_LON);
|
|
140
117
|
}
|
|
@@ -203,7 +180,7 @@ export async function createSession(ctx, lat, lon) {
|
|
|
203
180
|
platform: "android",
|
|
204
181
|
gaid: cfg.gaid,
|
|
205
182
|
};
|
|
206
|
-
const r = await authed(ctx, `/gl/rider-facade/phone/${seg(cfg.phone
|
|
183
|
+
const r = await authed(ctx, `/gl/rider-facade/phone/${seg(cfg.phone)}/create_session`, { method: "POST", body });
|
|
207
184
|
const profile = obj(r.user_profile);
|
|
208
185
|
const patch = {};
|
|
209
186
|
const globalUserId = pick(profile.global_user_id);
|