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,26 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
url.searchParams.set(k, String(v));
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
const init = {
|
|
1
|
+
import { credentialJson, pathSegment } from "../../_shared/credentials.js";
|
|
2
|
+
import { stackbyCredential } from "./credentials.js";
|
|
3
|
+
function apiRequest(ctx, method, endpoint, body, qs) {
|
|
4
|
+
return credentialJson(ctx, stackbyCredential, "stackby", {
|
|
5
|
+
target: "api",
|
|
6
|
+
path: endpoint,
|
|
11
7
|
method,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
init.body = JSON.stringify(body);
|
|
16
|
-
const res = await fetch(url.toString(), init);
|
|
17
|
-
if (!res.ok)
|
|
18
|
-
throw new Error(`Stackby error ${res.status}: ${await res.text()}`);
|
|
19
|
-
return res.json();
|
|
8
|
+
query: qs,
|
|
9
|
+
...(body !== undefined ? { json: body } : {}),
|
|
10
|
+
});
|
|
20
11
|
}
|
|
21
12
|
export default function stackby(rl) {
|
|
22
13
|
rl.setName("stackby");
|
|
23
14
|
rl.setVersion("0.1.0");
|
|
15
|
+
rl.setCredential(stackbyCredential);
|
|
24
16
|
rl.setConnectionSchema({
|
|
25
17
|
apiKey: {
|
|
26
18
|
type: "string",
|
|
@@ -29,7 +21,6 @@ export default function stackby(rl) {
|
|
|
29
21
|
env: "STACKBY_API_KEY",
|
|
30
22
|
},
|
|
31
23
|
});
|
|
32
|
-
const key = (ctx) => ctx.connection.config.apiKey;
|
|
33
24
|
rl.registerAction("row.read", {
|
|
34
25
|
access: "read",
|
|
35
26
|
description: "Read a row by ID",
|
|
@@ -40,7 +31,7 @@ export default function stackby(rl) {
|
|
|
40
31
|
},
|
|
41
32
|
async execute(input, ctx) {
|
|
42
33
|
const p = input;
|
|
43
|
-
const data = (await apiRequest(
|
|
34
|
+
const data = (await apiRequest(ctx, "GET", `rowlist/${pathSegment(p.stackId)}/${pathSegment(p.table)}`, undefined, { rowIds: p.rowId }));
|
|
44
35
|
return data.map((d) => d.field);
|
|
45
36
|
},
|
|
46
37
|
});
|
|
@@ -60,7 +51,7 @@ export default function stackby(rl) {
|
|
|
60
51
|
qs.view = p.view;
|
|
61
52
|
if (p.limit)
|
|
62
53
|
qs.maxrecord = p.limit;
|
|
63
|
-
const data = (await apiRequest(
|
|
54
|
+
const data = (await apiRequest(ctx, "GET", `rowlist/${pathSegment(p.stackId)}/${pathSegment(p.table)}`, undefined, qs));
|
|
64
55
|
return data.map((d) => d.field);
|
|
65
56
|
},
|
|
66
57
|
});
|
|
@@ -78,7 +69,7 @@ export default function stackby(rl) {
|
|
|
78
69
|
},
|
|
79
70
|
async execute(input, ctx) {
|
|
80
71
|
const p = input;
|
|
81
|
-
const data = (await apiRequest(
|
|
72
|
+
const data = (await apiRequest(ctx, "POST", `rowcreate/${pathSegment(p.stackId)}/${pathSegment(p.table)}`, { records: p.records }));
|
|
82
73
|
return data.map((d) => d.field);
|
|
83
74
|
},
|
|
84
75
|
});
|
|
@@ -92,7 +83,7 @@ export default function stackby(rl) {
|
|
|
92
83
|
},
|
|
93
84
|
async execute(input, ctx) {
|
|
94
85
|
const p = input;
|
|
95
|
-
return apiRequest(
|
|
86
|
+
return apiRequest(ctx, "DELETE", `rowdelete/${pathSegment(p.stackId)}/${pathSegment(p.table)}`, undefined, { rowIds: p.rowId });
|
|
96
87
|
},
|
|
97
88
|
});
|
|
98
89
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* A Steel API key: the steel-api-key header on the REST API, and the
|
|
4
|
+
* apiKey query parameter of a session's CDP socket, which the broker
|
|
5
|
+
* signs — or relays, under a host that keeps the key.
|
|
6
|
+
*/
|
|
7
|
+
export const steelCredential = staticCredential({
|
|
8
|
+
id: "steel",
|
|
9
|
+
auth: {
|
|
10
|
+
kind: "static",
|
|
11
|
+
parts: ["apiKey"],
|
|
12
|
+
placements: [
|
|
13
|
+
{ in: "header", part: "apiKey", name: "steel-api-key", targets: ["api"] },
|
|
14
|
+
{ in: "query", part: "apiKey", name: "apiKey", targets: ["cdp"] },
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
local: { apiKey: "apiKey" },
|
|
18
|
+
targets: {
|
|
19
|
+
// Scrapes, screenshots and PDFs answer once the page has rendered.
|
|
20
|
+
api: {
|
|
21
|
+
baseUrl: "https://api.steel.dev/",
|
|
22
|
+
methods: ["GET", "POST", "PUT", "PATCH", "DELETE"],
|
|
23
|
+
timeoutMs: 120_000,
|
|
24
|
+
},
|
|
25
|
+
cdp: { baseUrl: "wss://connect.steel.dev/", methods: ["GET"], socket: true },
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
3
|
+
import { SESSION_OPTIONS_SCHEMA, api, compactRecord, socketUrl } from "./shared.js";
|
|
3
4
|
const SCRAPE_SCHEMA = {
|
|
4
5
|
url: t.String({ description: "URL to scrape" }),
|
|
5
6
|
format: t.Optional(t.Array(t.String(), { description: "Formats: html, cleaned_html, markdown, readability" })),
|
|
@@ -90,9 +91,9 @@ export function registerBrowserActions(rl) {
|
|
|
90
91
|
"Install it, or use the steel.page.* actions, which need nothing installed.");
|
|
91
92
|
}
|
|
92
93
|
const session = await api(ctx, "/v1/sessions", { method: "POST", body: compactRecord(sessionOptions) });
|
|
93
|
-
const endpoint = cdpUrl(ctx, String(session.id));
|
|
94
94
|
let browser;
|
|
95
95
|
try {
|
|
96
|
+
const endpoint = await socketUrl(ctx, String(session.id));
|
|
96
97
|
// No fallback shim on purpose. A hand-rolled lookalike that
|
|
97
98
|
// answers to the same names but implements a fraction of the API
|
|
98
99
|
// does not fail — it returns wrong results, which is worse.
|
|
@@ -106,7 +107,7 @@ export function registerBrowserActions(rl) {
|
|
|
106
107
|
finally {
|
|
107
108
|
await browser?.close()?.catch?.(() => { });
|
|
108
109
|
if (release !== false && session.id) {
|
|
109
|
-
await api(ctx, `/v1/sessions/${
|
|
110
|
+
await api(ctx, `/v1/sessions/${pathSegment(session.id)}/release`, { method: "POST" }).catch(() => { });
|
|
110
111
|
}
|
|
111
112
|
}
|
|
112
113
|
},
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
2
3
|
import { api, compactRecord } from "./shared.js";
|
|
3
4
|
export function registerCaptchaActions(rl) {
|
|
4
5
|
rl.registerAction("captcha.status", {
|
|
5
6
|
access: "read",
|
|
6
7
|
description: "Get CAPTCHA detection/solving status for a Steel session.",
|
|
7
8
|
inputSchema: t.Object({ sessionId: t.String() }),
|
|
8
|
-
async execute(input, ctx) { return api(ctx, `/v1/sessions/${
|
|
9
|
+
async execute(input, ctx) { return api(ctx, `/v1/sessions/${pathSegment(input.sessionId)}/captchas/status`); },
|
|
9
10
|
});
|
|
10
11
|
rl.registerAction("captcha.solve", {
|
|
11
12
|
access: "write",
|
|
12
13
|
description: "Trigger CAPTCHA solving for all detected CAPTCHAs or a specific task/url/page.",
|
|
13
14
|
inputSchema: t.Object({ sessionId: t.String(), taskId: t.Optional(t.String()), url: t.Optional(t.String()), pageId: t.Optional(t.String()) }),
|
|
14
|
-
async execute(input, ctx) { const { sessionId, ...body } = input; return api(ctx, `/v1/sessions/${
|
|
15
|
+
async execute(input, ctx) { const { sessionId, ...body } = input; return api(ctx, `/v1/sessions/${pathSegment(sessionId)}/captchas/solve`, { method: "POST", body: compactRecord(body) }); },
|
|
15
16
|
});
|
|
16
17
|
rl.registerAction("captcha.solveImage", {
|
|
17
18
|
access: "write",
|
|
18
19
|
description: "Solve an image CAPTCHA by XPath selectors.",
|
|
19
20
|
inputSchema: t.Object({ sessionId: t.String(), imageXPath: t.String(), inputXPath: t.String(), url: t.Optional(t.String()) }),
|
|
20
|
-
async execute(input, ctx) { const { sessionId, ...body } = input; return api(ctx, `/v1/sessions/${
|
|
21
|
+
async execute(input, ctx) { const { sessionId, ...body } = input; return api(ctx, `/v1/sessions/${pathSegment(sessionId)}/captchas/solve-image`, { method: "POST", body: compactRecord(body) }); },
|
|
21
22
|
});
|
|
22
23
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
2
3
|
import { api } from "./shared.js";
|
|
3
4
|
function extensionForm(input) {
|
|
4
5
|
const form = new FormData();
|
|
@@ -29,7 +30,7 @@ export function registerExtensionActions(rl) {
|
|
|
29
30
|
inputSchema: t.Object({ id: t.String(), url: t.String() }),
|
|
30
31
|
async execute(input, ctx) {
|
|
31
32
|
const { id, ...body } = input;
|
|
32
|
-
return api(ctx, `/v1/extensions/${
|
|
33
|
+
return api(ctx, `/v1/extensions/${pathSegment(id)}`, { method: "PUT", body: extensionForm(body) });
|
|
33
34
|
},
|
|
34
35
|
});
|
|
35
36
|
rl.registerAction("extension.delete", {
|
|
@@ -37,7 +38,7 @@ export function registerExtensionActions(rl) {
|
|
|
37
38
|
description: "Delete an extension by ID.",
|
|
38
39
|
inputSchema: t.Object({ id: t.String() }),
|
|
39
40
|
async execute(input, ctx) {
|
|
40
|
-
return api(ctx, `/v1/extensions/${
|
|
41
|
+
return api(ctx, `/v1/extensions/${pathSegment(input.id)}`, { method: "DELETE" });
|
|
41
42
|
},
|
|
42
43
|
});
|
|
43
44
|
rl.registerAction("extension.deleteAll", {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { pathSegment, pathSegments } from "../../_shared/credentials.js";
|
|
2
3
|
import { api } from "./shared.js";
|
|
3
4
|
function fileSchema() {
|
|
4
5
|
return {
|
|
@@ -13,11 +14,9 @@ function fileForm(input) {
|
|
|
13
14
|
form.set("path", String(input.path));
|
|
14
15
|
return form;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
return String(path).replace(/^\/files\/+/, "").replace(/^\/+/, "");
|
|
18
|
-
}
|
|
17
|
+
/** A file path beneath `files/`, each segment encoded; a leading `/files/` or `/` is dropped. */
|
|
19
18
|
function encodeFilePath(path) {
|
|
20
|
-
return
|
|
19
|
+
return pathSegments(String(path).replace(/^\/files\/+/, "").replace(/^\/+/, ""));
|
|
21
20
|
}
|
|
22
21
|
export function registerFileActions(rl) {
|
|
23
22
|
rl.registerAction("file.list", {
|
|
@@ -57,7 +56,7 @@ export function registerFileActions(rl) {
|
|
|
57
56
|
description: "List files in a Steel session filesystem.",
|
|
58
57
|
inputSchema: t.Object({ sessionId: t.String() }),
|
|
59
58
|
async execute(input, ctx) {
|
|
60
|
-
return api(ctx, `/v1/sessions/${
|
|
59
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.sessionId)}/files`);
|
|
61
60
|
},
|
|
62
61
|
});
|
|
63
62
|
rl.registerAction("sessionFile.upload", {
|
|
@@ -66,7 +65,7 @@ export function registerFileActions(rl) {
|
|
|
66
65
|
inputSchema: t.Object({ sessionId: t.String(), ...fileSchema() }),
|
|
67
66
|
async execute(input, ctx) {
|
|
68
67
|
const { sessionId, ...body } = input;
|
|
69
|
-
return api(ctx, `/v1/sessions/${
|
|
68
|
+
return api(ctx, `/v1/sessions/${pathSegment(sessionId)}/files`, { method: "POST", body: fileForm(body) });
|
|
70
69
|
},
|
|
71
70
|
});
|
|
72
71
|
rl.registerAction("sessionFile.download", {
|
|
@@ -75,7 +74,7 @@ export function registerFileActions(rl) {
|
|
|
75
74
|
inputSchema: t.Object({ sessionId: t.String(), path: t.String() }),
|
|
76
75
|
async execute(input, ctx) {
|
|
77
76
|
const { sessionId, path } = input;
|
|
78
|
-
return api(ctx, `/v1/sessions/${
|
|
77
|
+
return api(ctx, `/v1/sessions/${pathSegment(sessionId)}/files/${encodeFilePath(path)}`);
|
|
79
78
|
},
|
|
80
79
|
});
|
|
81
80
|
rl.registerAction("sessionFile.downloadArchive", {
|
|
@@ -83,7 +82,7 @@ export function registerFileActions(rl) {
|
|
|
83
82
|
description: "Download/read the zip archive of all files in a session.",
|
|
84
83
|
inputSchema: t.Object({ sessionId: t.String() }),
|
|
85
84
|
async execute(input, ctx) {
|
|
86
|
-
return api(ctx, `/v1/sessions/${
|
|
85
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.sessionId)}/files.zip`);
|
|
87
86
|
},
|
|
88
87
|
});
|
|
89
88
|
rl.registerAction("sessionFile.delete", {
|
|
@@ -92,7 +91,7 @@ export function registerFileActions(rl) {
|
|
|
92
91
|
inputSchema: t.Object({ sessionId: t.String(), path: t.String() }),
|
|
93
92
|
async execute(input, ctx) {
|
|
94
93
|
const { sessionId, path } = input;
|
|
95
|
-
return api(ctx, `/v1/sessions/${
|
|
94
|
+
return api(ctx, `/v1/sessions/${pathSegment(sessionId)}/files/${encodeFilePath(path)}`, { method: "DELETE" });
|
|
96
95
|
},
|
|
97
96
|
});
|
|
98
97
|
rl.registerAction("sessionFile.deleteAll", {
|
|
@@ -100,7 +99,7 @@ export function registerFileActions(rl) {
|
|
|
100
99
|
description: "Delete all files in a session filesystem.",
|
|
101
100
|
inputSchema: t.Object({ sessionId: t.String() }),
|
|
102
101
|
async execute(input, ctx) {
|
|
103
|
-
return api(ctx, `/v1/sessions/${
|
|
102
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.sessionId)}/files`, { method: "DELETE" });
|
|
104
103
|
},
|
|
105
104
|
});
|
|
106
105
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { steelCredential } from "./auth.js";
|
|
2
3
|
import { registerBrowserActions } from "./browser.js";
|
|
3
4
|
import { registerCaptchaActions } from "./captchas.js";
|
|
4
5
|
import { registerCredentialActions } from "./credentials.js";
|
|
@@ -10,6 +11,7 @@ import { registerSessionActions } from "./sessions.js";
|
|
|
10
11
|
export default function steel(rl) {
|
|
11
12
|
rl.setName("steel");
|
|
12
13
|
rl.setVersion("0.1.0");
|
|
14
|
+
rl.setCredential(steelCredential);
|
|
13
15
|
rl.setConnectionSchema(t.Object({
|
|
14
16
|
apiKey: t.String({
|
|
15
17
|
description: "Steel API key (https://app.steel.dev/settings/api-keys)",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* freely: losing one costs latency, never correctness.
|
|
23
23
|
*/
|
|
24
24
|
import * as t from "typebox";
|
|
25
|
-
import {
|
|
25
|
+
import { compactRecord, socketUrl } from "../shared.js";
|
|
26
26
|
import { attachToPage, attachToTarget, CdpError, connectCdp, } from "./cdp.js";
|
|
27
27
|
import { CdpDriver } from "./driver.js";
|
|
28
28
|
import { SENSITIVE_VALUE_MARKER } from "./page-snapshot.js";
|
|
@@ -40,7 +40,7 @@ const targetId = t.Optional(t.String({
|
|
|
40
40
|
description: "Page target id from page.targets; defaults to the session's first page.",
|
|
41
41
|
}));
|
|
42
42
|
async function open(ctx, id, target) {
|
|
43
|
-
const cdp = await connectCdp(
|
|
43
|
+
const cdp = await connectCdp(await socketUrl(ctx, id));
|
|
44
44
|
try {
|
|
45
45
|
const page = target
|
|
46
46
|
? await attachToTarget(cdp, target)
|
|
@@ -486,7 +486,7 @@ export function registerPageActions(rl) {
|
|
|
486
486
|
const args = input;
|
|
487
487
|
// Browser-level, not page-level: this is the one action that is not
|
|
488
488
|
// scoped to a single target, so it uses its own short-lived socket.
|
|
489
|
-
const cdp = await connectCdp(
|
|
489
|
+
const cdp = await connectCdp(await socketUrl(ctx, String(args.sessionId)));
|
|
490
490
|
try {
|
|
491
491
|
if (args.action === "new") {
|
|
492
492
|
const created = (await cdp.send("Target.createTarget", {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
2
3
|
import { api } from "./shared.js";
|
|
3
4
|
function profileForm(input) {
|
|
4
5
|
const form = new FormData();
|
|
@@ -23,7 +24,7 @@ export function registerProfileActions(rl) {
|
|
|
23
24
|
description: "Get a Steel profile by ID.",
|
|
24
25
|
inputSchema: t.Object({ id: t.String() }),
|
|
25
26
|
async execute(input, ctx) {
|
|
26
|
-
return api(ctx, `/v1/profiles/${
|
|
27
|
+
return api(ctx, `/v1/profiles/${pathSegment(input.id)}`);
|
|
27
28
|
},
|
|
28
29
|
});
|
|
29
30
|
rl.registerAction("profile.create", {
|
|
@@ -39,7 +40,7 @@ export function registerProfileActions(rl) {
|
|
|
39
40
|
body: { timeout: 60000, inactivityTimeout: 30000, ...input, persistProfile: true },
|
|
40
41
|
});
|
|
41
42
|
try {
|
|
42
|
-
await api(ctx, `/v1/sessions/${
|
|
43
|
+
await api(ctx, `/v1/sessions/${pathSegment(session.id)}/release`, { method: "POST" });
|
|
43
44
|
}
|
|
44
45
|
catch {
|
|
45
46
|
// Profile creation is tied to session release. Return the session metadata even if release cleanup fails.
|
|
@@ -53,7 +54,7 @@ export function registerProfileActions(rl) {
|
|
|
53
54
|
inputSchema: t.Object({ id: t.String(), userAgent: t.Optional(t.String()), proxy: t.Optional(t.Any()), metadata: t.Optional(t.Any()) }),
|
|
54
55
|
async execute(input, ctx) {
|
|
55
56
|
const { id, ...body } = input;
|
|
56
|
-
return api(ctx, `/v1/profiles/${
|
|
57
|
+
return api(ctx, `/v1/profiles/${pathSegment(id)}`, { method: "PATCH", body: profileForm(body) });
|
|
57
58
|
},
|
|
58
59
|
});
|
|
59
60
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { pathSegment } from "../../_shared/credentials.js";
|
|
3
|
+
import { LIST_INPUT_SCHEMA, SESSION_OPTIONS_SCHEMA, api, compactRecord, socketUrl } from "./shared.js";
|
|
3
4
|
export function registerSessionActions(rl) {
|
|
4
5
|
rl.registerAction("session.create", {
|
|
5
6
|
access: "write",
|
|
@@ -22,7 +23,7 @@ export function registerSessionActions(rl) {
|
|
|
22
23
|
description: "Get a Steel session by ID.",
|
|
23
24
|
inputSchema: t.Object({ id: t.String({ description: "Session ID" }) }),
|
|
24
25
|
async execute(input, ctx) {
|
|
25
|
-
return api(ctx, `/v1/sessions/${
|
|
26
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.id)}`);
|
|
26
27
|
},
|
|
27
28
|
});
|
|
28
29
|
rl.registerAction("session.release", {
|
|
@@ -30,7 +31,7 @@ export function registerSessionActions(rl) {
|
|
|
30
31
|
description: "Release a Steel session when work is done.",
|
|
31
32
|
inputSchema: t.Object({ id: t.String({ description: "Session ID" }) }),
|
|
32
33
|
async execute(input, ctx) {
|
|
33
|
-
return api(ctx, `/v1/sessions/${
|
|
34
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.id)}/release`, { method: "POST" });
|
|
34
35
|
},
|
|
35
36
|
});
|
|
36
37
|
rl.registerAction("session.releaseAll", {
|
|
@@ -46,7 +47,7 @@ export function registerSessionActions(rl) {
|
|
|
46
47
|
for (const session of live) {
|
|
47
48
|
const id = String(session.id);
|
|
48
49
|
try {
|
|
49
|
-
released.push({ id, result: await api(ctx, `/v1/sessions/${
|
|
50
|
+
released.push({ id, result: await api(ctx, `/v1/sessions/${pathSegment(id)}/release`, { method: "POST" }) });
|
|
50
51
|
}
|
|
51
52
|
catch (error) {
|
|
52
53
|
failed.push({ id, error: String(error.message ?? error) });
|
|
@@ -60,7 +61,7 @@ export function registerSessionActions(rl) {
|
|
|
60
61
|
description: "Capture cookies/localStorage context from a live session. Treat output as sensitive auth material.",
|
|
61
62
|
inputSchema: t.Object({ id: t.String({ description: "Session ID" }) }),
|
|
62
63
|
async execute(input, ctx) {
|
|
63
|
-
return api(ctx, `/v1/sessions/${
|
|
64
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.id)}/context`);
|
|
64
65
|
},
|
|
65
66
|
});
|
|
66
67
|
rl.registerAction("session.traces", {
|
|
@@ -73,7 +74,7 @@ export function registerSessionActions(rl) {
|
|
|
73
74
|
}),
|
|
74
75
|
async execute(input, ctx) {
|
|
75
76
|
const { id, ...query } = input;
|
|
76
|
-
return api(ctx, `/v1/sessions/${
|
|
77
|
+
return api(ctx, `/v1/sessions/${pathSegment(id)}/agent-traces`, { query });
|
|
77
78
|
},
|
|
78
79
|
});
|
|
79
80
|
rl.registerAction("session.computer", {
|
|
@@ -94,7 +95,7 @@ export function registerSessionActions(rl) {
|
|
|
94
95
|
async execute(input, ctx) {
|
|
95
96
|
const { id, deltaX, deltaY, ...body } = input;
|
|
96
97
|
const payload = compactRecord({ ...body, delta_x: deltaX, delta_y: deltaY });
|
|
97
|
-
return api(ctx, `/v1/sessions/${
|
|
98
|
+
return api(ctx, `/v1/sessions/${pathSegment(id)}/computer`, { method: "POST", body: payload });
|
|
98
99
|
},
|
|
99
100
|
});
|
|
100
101
|
rl.registerAction("session.events", {
|
|
@@ -102,7 +103,7 @@ export function registerSessionActions(rl) {
|
|
|
102
103
|
description: "Fetch legacy recorded session events for replay tooling.",
|
|
103
104
|
inputSchema: t.Object({ id: t.String({ description: "Session ID" }) }),
|
|
104
105
|
async execute(input, ctx) {
|
|
105
|
-
return api(ctx, `/v1/sessions/${
|
|
106
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.id)}/events`);
|
|
106
107
|
},
|
|
107
108
|
});
|
|
108
109
|
rl.registerAction("session.hls", {
|
|
@@ -110,16 +111,15 @@ export function registerSessionActions(rl) {
|
|
|
110
111
|
description: "Fetch the HLS playlist for a recorded headful Steel session.",
|
|
111
112
|
inputSchema: t.Object({ id: t.String({ description: "Session ID" }) }),
|
|
112
113
|
async execute(input, ctx) {
|
|
113
|
-
return api(ctx, `/v1/sessions/${
|
|
114
|
+
return api(ctx, `/v1/sessions/${pathSegment(input.id)}/hls`);
|
|
114
115
|
},
|
|
115
116
|
});
|
|
116
117
|
rl.registerAction("session.cdpUrl", {
|
|
117
118
|
access: "read",
|
|
118
|
-
description: "
|
|
119
|
-
inputSchema: t.Object({ id: t.String({ description: "Session ID" })
|
|
119
|
+
description: "A Playwright/Puppeteer CDP URL for a Steel session. Locally it carries the connection's API key, so treat it as secret; under a host that keeps the key it is the host's relay.",
|
|
120
|
+
inputSchema: t.Object({ id: t.String({ description: "Session ID" }) }),
|
|
120
121
|
async execute(input, ctx) {
|
|
121
|
-
|
|
122
|
-
return { cdpUrl: cdpUrl(ctx, id, websocketUrl) };
|
|
122
|
+
return { cdpUrl: await socketUrl(ctx, input.id) };
|
|
123
123
|
},
|
|
124
124
|
});
|
|
125
125
|
}
|
|
@@ -1,61 +1,31 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
2
|
+
import { credentialOk, credentialSocketUrl, jsonAnswer, multipartBody } from "../../_shared/credentials.js";
|
|
3
|
+
import { steelCredential } from "./auth.js";
|
|
4
|
+
/** A REST call: a JSON answer parsed, any other answer (a file) as text. */
|
|
6
5
|
export async function api(ctx, path, options = {}) {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
for (const item of value)
|
|
13
|
-
url.searchParams.append(key, String(item));
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
url.searchParams.set(key, String(value));
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
const headers = {
|
|
20
|
-
"steel-api-key": apiKey(ctx),
|
|
21
|
-
...(options.headers ?? {}),
|
|
22
|
-
};
|
|
23
|
-
let body;
|
|
24
|
-
if (options.body !== undefined) {
|
|
25
|
-
if (options.body instanceof FormData) {
|
|
26
|
-
body = options.body;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
headers["Content-Type"] = "application/json";
|
|
30
|
-
body = JSON.stringify(options.body);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const res = await fetch(url.toString(), {
|
|
6
|
+
const query = Object.fromEntries(Object.entries(options.query ?? {}).filter(([, value]) => value !== ""));
|
|
7
|
+
const upload = options.body instanceof FormData ? await multipartBody(options.body) : undefined;
|
|
8
|
+
const res = await credentialOk(ctx, steelCredential, "steel", {
|
|
9
|
+
target: "api",
|
|
10
|
+
path: path.replace(/^\//, ""),
|
|
34
11
|
method: options.method ?? "GET",
|
|
35
|
-
|
|
36
|
-
|
|
12
|
+
query,
|
|
13
|
+
...(upload
|
|
14
|
+
? { body: upload.body, headers: { "Content-Type": upload.contentType } }
|
|
15
|
+
: options.body !== undefined
|
|
16
|
+
? { json: options.body }
|
|
17
|
+
: {}),
|
|
37
18
|
});
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
throw new Error(`Steel API error ${res.status}: ${text || res.statusText}`);
|
|
41
|
-
if (!text)
|
|
42
|
-
return {};
|
|
43
|
-
const contentType = res.headers.get("content-type") ?? "";
|
|
44
|
-
if (contentType.includes("application/json") || text.startsWith("{") || text.startsWith("["))
|
|
45
|
-
return JSON.parse(text);
|
|
46
|
-
return text;
|
|
19
|
+
const type = res.headers.get("content-type") ?? "";
|
|
20
|
+
return res.status === 204 || type.includes("application/json") ? jsonAnswer(res) : res.text();
|
|
47
21
|
}
|
|
48
22
|
/**
|
|
49
|
-
* The CDP
|
|
50
|
-
*
|
|
51
|
-
*
|
|
23
|
+
* The CDP socket URL for a session, from the broker: signed with the key
|
|
24
|
+
* by the local signer, or a relay the host controls. One definition, so
|
|
25
|
+
* no copy builds a key-bearing URL by hand.
|
|
52
26
|
*/
|
|
53
|
-
export function
|
|
54
|
-
|
|
55
|
-
if (websocketUrl) {
|
|
56
|
-
return `${websocketUrl}${websocketUrl.includes("?") ? "&" : "?"}apiKey=${key}`;
|
|
57
|
-
}
|
|
58
|
-
return `wss://connect.steel.dev?apiKey=${key}&sessionId=${encodeURIComponent(sessionId)}`;
|
|
27
|
+
export function socketUrl(ctx, sessionId) {
|
|
28
|
+
return credentialSocketUrl(ctx, steelCredential, { target: "cdp", path: "", query: { sessionId } });
|
|
59
29
|
}
|
|
60
30
|
export function compactRecord(input) {
|
|
61
31
|
return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined && value !== null));
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { staticCredential } from "../../_shared/credentials.js";
|
|
2
|
+
/**
|
|
3
|
+
* A Content Delivery token, appended as the token query parameter on the
|
|
4
|
+
* content API, and a Management API token, sent in Authorization on the
|
|
5
|
+
* management API. A connection may hold either or both; a call to an API
|
|
6
|
+
* whose token it lacks is refused.
|
|
7
|
+
*/
|
|
8
|
+
export const storyblokCredential = staticCredential({
|
|
9
|
+
id: "storyblok",
|
|
10
|
+
auth: {
|
|
11
|
+
kind: "static",
|
|
12
|
+
parts: ["contentToken", "managementToken"],
|
|
13
|
+
optionalParts: ["contentToken", "managementToken"],
|
|
14
|
+
placements: [
|
|
15
|
+
{
|
|
16
|
+
in: "query",
|
|
17
|
+
part: "contentToken",
|
|
18
|
+
name: "token",
|
|
19
|
+
targets: ["content"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
in: "header",
|
|
23
|
+
part: "managementToken",
|
|
24
|
+
name: "Authorization",
|
|
25
|
+
targets: ["management"],
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
local: { contentToken: "contentToken", managementToken: "managementToken" },
|
|
30
|
+
targets: {
|
|
31
|
+
content: { baseUrl: "https://api.storyblok.com/v1/cdn/", methods: ["GET"] },
|
|
32
|
+
management: {
|
|
33
|
+
baseUrl: "https://mapi.storyblok.com/v1/spaces/",
|
|
34
|
+
methods: ["GET", "DELETE"],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
});
|