@jskit-ai/connectors-catalog 0.1.67 → 0.2.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/CHANGELOG.md +1722 -0
- package/README.md +11 -0
- package/locales/en.json +3139 -0
- package/package.json +7 -6
- package/src/server/ai.js +4 -4
- package/src/server/amazon-redshift.js +5 -5
- package/src/server/apify.js +1 -1
- package/src/server/apollo-io.js +1 -1
- package/src/server/asana.js +3 -3
- package/src/server/ashby.js +3 -3
- package/src/server/attention.js +2 -2
- package/src/server/aws-athena.js +3 -3
- package/src/server/aws-s3.js +1 -1
- package/src/server/awsTransport.js +9 -9
- package/src/server/brevo.js +3 -3
- package/src/server/calendly.js +2 -2
- package/src/server/chargebee.js +1 -1
- package/src/server/databricks.js +2 -2
- package/src/server/dbt-semantic-layer.js +8 -8
- package/src/server/elevenlabs.js +4 -4
- package/src/server/firebase-cloud-messaging.js +8 -8
- package/src/server/firecrawl.js +2 -2
- package/src/server/gatewayapi.js +4 -4
- package/src/server/github-api.js +3 -3
- package/src/server/gitlab-api.js +1 -1
- package/src/server/gmail.js +1 -1
- package/src/server/gong.js +4 -4
- package/src/server/google-ads-search.js +16 -16
- package/src/server/google-ads.js +7 -7
- package/src/server/google-drive.js +8 -6
- package/src/server/google-maps-platform.js +5 -5
- package/src/server/google-search-console.js +1 -1
- package/src/server/google-sheets.js +3 -2
- package/src/server/google.js +3 -2
- package/src/server/granola.js +5 -5
- package/src/server/hubspot.js +5 -3
- package/src/server/inngest.js +4 -4
- package/src/server/klipy.js +1 -1
- package/src/server/lightspeed.js +4 -4
- package/src/server/linear.js +2 -2
- package/src/server/linkedin.js +6 -6
- package/src/server/mapbox.js +1 -1
- package/src/server/mcpRegistration.js +3 -2
- package/src/server/mcpTransport.js +1 -1
- package/src/server/microsoft-fabric.js +3 -3
- package/src/server/microsoft-onedrive.js +1 -1
- package/src/server/microsoft-onenote.js +1 -1
- package/src/server/microsoft-outlook.js +1 -1
- package/src/server/microsoft.js +4 -3
- package/src/server/n8n.js +4 -4
- package/src/server/oura.js +1 -1
- package/src/server/paddle.js +1 -1
- package/src/server/pipedrive.js +4 -4
- package/src/server/posthog.js +3 -3
- package/src/server/salesforce.js +8 -8
- package/src/server/semrush.js +25 -25
- package/src/server/shopify.js +6 -6
- package/src/server/slack.js +10 -10
- package/src/server/snowflake.js +5 -5
- package/src/server/tally.js +1 -1
- package/src/server/telegram.js +1 -1
- package/src/server/tiktok.js +14 -14
- package/src/server/twilio.js +3 -3
- package/src/server/twitch.js +22 -21
- package/src/server/wave.js +34 -34
- package/src/server/wix.js +73 -73
- package/src/server/wiz.js +18 -18
- package/src/server/woocommerce.js +23 -23
- package/src/server/wordpress-com.js +3 -3
- package/src/server/wordpress-self-hosted.js +2 -2
- package/src/server/workday.js +3 -3
- package/src/server/x-twitter.js +6 -6
- package/src/server/xero.js +15 -15
- package/src/server/zoho-books.js +8 -8
- package/src/server/zoho-crm.js +5 -5
- package/src/server/zohoOAuth.js +1 -1
- package/src/shared/ai.js +24 -13
- package/src/shared/algolia.js +4 -4
- package/src/shared/amazon-redshift.js +16 -16
- package/src/shared/amplitude.js +6 -6
- package/src/shared/atlassian.js +19 -19
- package/src/shared/aws.js +18 -18
- package/src/shared/canva.js +18 -18
- package/src/shared/chargebee.js +3 -3
- package/src/shared/clickhouse.js +9 -9
- package/src/shared/confidence.js +6 -6
- package/src/shared/databricks.js +8 -8
- package/src/shared/dbt-semantic-layer.js +7 -7
- package/src/shared/english-ai.js +6 -0
- package/src/shared/english-definitions.js +34 -0
- package/src/shared/english-texts.js +7 -0
- package/src/shared/figma.js +2 -2
- package/src/shared/firebase-cloud-messaging.js +11 -11
- package/src/shared/firecrawl.js +1 -1
- package/src/shared/gemini-enterprise.js +7 -7
- package/src/shared/gong.js +5 -5
- package/src/shared/google-ads.js +5 -5
- package/src/shared/google-maps-platform.js +7 -7
- package/src/shared/google.js +40 -40
- package/src/shared/granola.js +5 -5
- package/src/shared/hex.js +7 -7
- package/src/shared/inngest.js +8 -8
- package/src/shared/lightspeed.js +52 -52
- package/src/shared/linkedin.js +6 -6
- package/src/shared/logo-dev.js +3 -3
- package/src/shared/mapbox.js +6 -6
- package/src/shared/mcp.js +9 -9
- package/src/shared/microsoft-fabric.js +9 -9
- package/src/shared/microsoft.js +52 -52
- package/src/shared/miro.js +5 -5
- package/src/shared/oura.js +5 -5
- package/src/shared/posthog.js +9 -9
- package/src/shared/prestashop.js +5 -5
- package/src/shared/resend.js +1 -1
- package/src/shared/salesforce.js +8 -8
- package/src/shared/semrush.js +6 -6
- package/src/shared/shopify.js +26 -26
- package/src/shared/slack.js +61 -61
- package/src/shared/snowflake.js +15 -15
- package/src/shared/tiktok.js +7 -7
- package/src/shared/tokens.js +126 -126
- package/src/shared/twilio.js +7 -7
- package/src/shared/twitch.js +24 -24
- package/src/shared/wave.js +33 -33
- package/src/shared/wix.js +5 -5
- package/src/shared/wiz.js +14 -14
- package/src/shared/wordpress-com.js +9 -9
- package/src/shared/wordpress.js +11 -11
- package/src/shared/workday.js +8 -8
- package/src/shared/x-twitter.js +5 -5
- package/src/shared/xero.js +25 -25
- package/src/shared/zoho-books.js +10 -10
- package/src/shared/zoho-crm.js +16 -16
- package/src/shared/zoho-regions.js +8 -8
- package/test/englishDefinitions.test.js +37 -0
- package/test/i18nCatalog.test.js +16 -0
- package/test/shopify.test.js +3 -1
package/src/shared/tokens.js
CHANGED
|
@@ -7,7 +7,7 @@ function definition(id, name, description, url, steps) {
|
|
|
7
7
|
});
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
const airtableDefinition = definition("airtable", "Airtable", "
|
|
10
|
+
const airtableDefinition = definition("airtable", "Airtable", "jskit.connectors.airtable.description",
|
|
11
11
|
"https://support.airtable.com/docs/creating-personal-access-tokens", [
|
|
12
12
|
"Open Airtable Developer hub, then Personal access tokens and Create token.",
|
|
13
13
|
"Name the token. Choose + Add a scope and add schema.bases:read for discovery, data.records:read for records, data.records:write for record changes, and schema.bases:write only for table/field changes or base creation. Record writes need Editor base access; schema writes need Creator access. Creating a base needs Workspace Creator access and a token resource grant covering that workspace. Otherwise choose + Add a base to select the bases this application needs. Your Airtable account must already have access to them.",
|
|
@@ -16,7 +16,7 @@ const airtableDefinition = definition("airtable", "Airtable", "Discover bases, r
|
|
|
16
16
|
"Verification lists accessible bases. If expected bases are missing, check the token's resources, schema.bases:read permission and your own base access. Organization API restrictions may require your Airtable administrator to allow access.",
|
|
17
17
|
"To rotate access, create a replacement PAT with the required scopes and resources, update AIRTABLE_TOKEN in Env, and choose Verify again. Revoke the old token in Airtable after checking other applications that use it. Disconnect here removes this application’s saved connection; it does not revoke the PAT or erase Env."
|
|
18
18
|
]);
|
|
19
|
-
const notionInternalDefinition = definition("notion", "Notion", "
|
|
19
|
+
const notionInternalDefinition = definition("notion", "Notion", "jskit.connectors.notionInternal.description",
|
|
20
20
|
"https://developers.notion.com/guides/get-started/internal-connections", [
|
|
21
21
|
"Application data mode reads pages/blocks, queries data sources, creates pages, updates properties and appends blocks. Retrieve the database and its data_sources IDs/schema first. LIMITATIONS: no embedded editor, schema editing, file upload or automatic coding-chat attachment. For example, append meeting notes; your app owns its rendering and write approvals.",
|
|
22
22
|
"As a Notion workspace owner, open the Developer portal at https://www.notion.so/profile/integrations. In Build → Internal connections, choose Create a new connection, name it for this application and select its workspace.",
|
|
@@ -34,11 +34,11 @@ const notionDefinition = Object.freeze({
|
|
|
34
34
|
oauthClientAuthenticationMethods: (_grant, settings) => settings?.connectionType === "mcp" ? ["client_secret_post"] : ["client_secret_basic"],
|
|
35
35
|
accountModesForSettings: (settings) => settings.connectionType === "mcp" ? ["assistant"] : ["shared", "per-user", "assistant"],
|
|
36
36
|
authenticationMethodsForSettings: (settings) => settings.connectionType === "mcp" ? ["oauth2"] : ["api-key", "oauth2"],
|
|
37
|
-
scopesForSettings: (settings) => settings.connectionType === "mcp" ? [{ value: "default", label: "
|
|
37
|
+
scopesForSettings: (settings) => settings.connectionType === "mcp" ? [{ value: "default", label: "jskit.connectors.notion.scopes.default.label", required: true }] : [],
|
|
38
38
|
settingsSchema: createSchema({ connectionType: { type: "string", enum: ["rest", "mcp"], defaultTo: "rest" } }),
|
|
39
|
-
settingsFields: [{ name: "connectionType", label: "
|
|
40
|
-
hint: "
|
|
41
|
-
items: [{ value: "rest", title: "
|
|
39
|
+
settingsFields: [{ name: "connectionType", label: "jskit.connectors.notion.fields.connectionType.label", credentialScope: (value) => value || "rest",
|
|
40
|
+
hint: "jskit.connectors.notion.fields.connectionType.hint",
|
|
41
|
+
items: [{ value: "rest", title: "jskit.connectors.notion.fields.connectionType.items.rest.title" }, { value: "mcp", title: "jskit.connectors.notion.fields.connectionType.items.mcp.title" }] }],
|
|
42
42
|
setup: { ...notionInternalDefinition.setup,
|
|
43
43
|
urlForSettings: (settings) => settings.connectionType === "mcp" ? "https://developers.notion.com/guides/mcp/build-mcp-client" : undefined,
|
|
44
44
|
urlByAuthentication: { oauth2: "https://developers.notion.com/guides/get-started/public-connections" },
|
|
@@ -61,7 +61,7 @@ const notionDefinition = Object.freeze({
|
|
|
61
61
|
"Verification searches accessible titles without writing. Missing results can mean pages were not selected or Read content is unavailable. Reconnect for new consent; Disconnect removes the local grant, and provider access must be managed in Notion separately. Your application owns token storage and refresh across hosting changes."
|
|
62
62
|
] } }
|
|
63
63
|
});
|
|
64
|
-
const brevoDefinition = definition("brevo", "Brevo", "
|
|
64
|
+
const brevoDefinition = definition("brevo", "Brevo", "jskit.connectors.brevo.description",
|
|
65
65
|
"https://help.brevo.com/hc/en-us/articles/209467485-Create-and-manage-your-API-keys", [
|
|
66
66
|
"In Brevo, open the account menu, Settings, SMTP & API, then API Keys & MCP.",
|
|
67
67
|
"Your Brevo user needs API keys permission. Choose Generate a new API key, name it for this application, select its expiration and choose Generate.",
|
|
@@ -72,7 +72,7 @@ const brevoDefinition = definition("brevo", "Brevo", "Send email and SMS, manage
|
|
|
72
72
|
"Marketing requires an appropriate recipient list and opt-out handling. Create a campaign draft and send a test before explicitly sending to its lists. A returned message ID is acceptance, not delivery; inspect delivery events for bounces or rejection. Automation events only trigger workflows configured and active in Brevo.",
|
|
73
73
|
"No OAuth registration or callback URL is needed. Verification reads contacts without sending messages. Replace an expired or lost key in Env and reconnect. Disconnect removes local state only; delete the old key in Brevo to revoke it."
|
|
74
74
|
]);
|
|
75
|
-
const elevenlabsDefinition = definition("elevenlabs", "ElevenLabs", "
|
|
75
|
+
const elevenlabsDefinition = definition("elevenlabs", "ElevenLabs", "jskit.connectors.elevenlabs.description",
|
|
76
76
|
"https://elevenlabs.io/docs/help-center/technical/how-do-i-authorize-myself-using-an-api-key", [
|
|
77
77
|
"Select the intended ElevenLabs workspace and open Developers > API Keys > Create API Key. Name it for this app and keep Restrict Key enabled.",
|
|
78
78
|
"Under Endpoints, enable User read for verification, Voices read for discovery, Models read for model selection and Text to Speech for generation. Enable Voices write only if the app will create voice clones. Set a credit limit, create the key and copy it immediately; only its last four characters are shown later.",
|
|
@@ -82,7 +82,7 @@ const elevenlabsDefinition = definition("elevenlabs", "ElevenLabs", "Generate sp
|
|
|
82
82
|
"This connector returns bounded audio files, not live streaming. Professional Voice Cloning and realtime speech use native provider tools. Your application must explicitly expose approved ElevenLabs operations to its assistant. Rotate keys in Env and verify again; Disconnect removes app state, while Developers > API Keys > key menu revokes provider access. No OAuth application or callback URL is required."
|
|
83
83
|
]);
|
|
84
84
|
const githubApiDefinition = Object.freeze({
|
|
85
|
-
...definition("github-api", "GitHub API", "
|
|
85
|
+
...definition("github-api", "GitHub API", "jskit.connectors.githubApi.description",
|
|
86
86
|
"https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app", [
|
|
87
87
|
"For OAuth, open GitHub Settings > Developer settings > OAuth Apps > New OAuth App. Enter the application name and its hosting URL. Copy Suggested callback URL here into Authorization callback URL, then register the application.",
|
|
88
88
|
"Copy Client ID here. Generate a client secret and keep it private. Save configuration, then follow the Env links to store the secret and exact callback under their referenced names. Your application backend must implement the callback.",
|
|
@@ -96,19 +96,19 @@ const githubApiDefinition = Object.freeze({
|
|
|
96
96
|
authenticationMethods: ["oauth2", "api-key"],
|
|
97
97
|
oauthClientAuthenticationMethods: ["client_secret_post"],
|
|
98
98
|
scopes: [
|
|
99
|
-
{ value: "read:user", label: "
|
|
100
|
-
{ value: "repo", label: "
|
|
101
|
-
{ value: "public_repo", label: "
|
|
102
|
-
{ value: "workflow", label: "
|
|
103
|
-
{ value: "gist", label: "
|
|
104
|
-
{ value: "notifications", label: "
|
|
105
|
-
{ value: "user:email", label: "
|
|
106
|
-
{ value: "read:org", label: "
|
|
107
|
-
{ value: "project", label: "
|
|
108
|
-
{ value: "offline_access", label: "
|
|
99
|
+
{ value: "read:user", label: "jskit.connectors.githubApi.scopes.readUser.label", recommended: true },
|
|
100
|
+
{ value: "repo", label: "jskit.connectors.githubApi.scopes.repo.label", recommended: true },
|
|
101
|
+
{ value: "public_repo", label: "jskit.connectors.githubApi.scopes.publicRepo.label" },
|
|
102
|
+
{ value: "workflow", label: "jskit.connectors.githubApi.scopes.workflow.label" },
|
|
103
|
+
{ value: "gist", label: "jskit.connectors.githubApi.scopes.gist.label" },
|
|
104
|
+
{ value: "notifications", label: "jskit.connectors.githubApi.scopes.notifications.label" },
|
|
105
|
+
{ value: "user:email", label: "jskit.connectors.githubApi.scopes.userEmail.label" },
|
|
106
|
+
{ value: "read:org", label: "jskit.connectors.githubApi.scopes.readOrg.label" },
|
|
107
|
+
{ value: "project", label: "jskit.connectors.githubApi.scopes.project.label" },
|
|
108
|
+
{ value: "offline_access", label: "jskit.connectors.githubApi.scopes.offlineAccess.label" }
|
|
109
109
|
]
|
|
110
110
|
});
|
|
111
|
-
const apifyDefinition = definition("apify", "Apify", "
|
|
111
|
+
const apifyDefinition = definition("apify", "Apify", "jskit.connectors.apify.description",
|
|
112
112
|
"https://docs.apify.com/integrations/api", [
|
|
113
113
|
"Select the intended account or organization in Apify Console.",
|
|
114
114
|
"Open Settings, API & Integrations, then create an API token for this application.",
|
|
@@ -121,7 +121,7 @@ const apifyDefinition = definition("apify", "Apify", "Run Actors with explicit l
|
|
|
121
121
|
const calendlyDefinition = Object.freeze({
|
|
122
122
|
"id": "calendly",
|
|
123
123
|
"name": "Calendly",
|
|
124
|
-
"description": "
|
|
124
|
+
"description": "jskit.connectors.calendly.description",
|
|
125
125
|
"accountModes": [
|
|
126
126
|
"shared",
|
|
127
127
|
"assistant"
|
|
@@ -136,89 +136,89 @@ const calendlyDefinition = Object.freeze({
|
|
|
136
136
|
"scopes": [
|
|
137
137
|
{
|
|
138
138
|
"value": "users:read",
|
|
139
|
-
"label": "
|
|
139
|
+
"label": "jskit.connectors.calendly.scopes.usersRead.label",
|
|
140
140
|
"recommended": true
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"value": "organizations:read",
|
|
144
|
-
"label": "
|
|
144
|
+
"label": "jskit.connectors.calendly.scopes.organizationsRead.label"
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
"value": "event_types:read",
|
|
148
|
-
"label": "
|
|
148
|
+
"label": "jskit.connectors.calendly.scopes.eventTypesRead.label",
|
|
149
149
|
"recommended": true
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
"value": "scheduled_events:read",
|
|
153
|
-
"label": "
|
|
153
|
+
"label": "jskit.connectors.calendly.scopes.scheduledEventsRead.label"
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
"value": "availability:read",
|
|
157
|
-
"label": "
|
|
157
|
+
"label": "jskit.connectors.calendly.scopes.availabilityRead.label"
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
"value": "scheduling_links:write",
|
|
161
|
-
"label": "
|
|
161
|
+
"label": "jskit.connectors.calendly.scopes.schedulingLinksWrite.label"
|
|
162
162
|
},
|
|
163
163
|
{
|
|
164
164
|
"value": "shares:write",
|
|
165
|
-
"label": "
|
|
165
|
+
"label": "jskit.connectors.calendly.scopes.sharesWrite.label"
|
|
166
166
|
},
|
|
167
167
|
{
|
|
168
168
|
"value": "scheduled_events:write",
|
|
169
|
-
"label": "
|
|
169
|
+
"label": "jskit.connectors.calendly.scopes.scheduledEventsWrite.label"
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
"value": "event_types:write",
|
|
173
|
-
"label": "
|
|
173
|
+
"label": "jskit.connectors.calendly.scopes.eventTypesWrite.label"
|
|
174
174
|
},
|
|
175
175
|
{
|
|
176
176
|
"value": "availability:write",
|
|
177
|
-
"label": "
|
|
177
|
+
"label": "jskit.connectors.calendly.scopes.availabilityWrite.label"
|
|
178
178
|
},
|
|
179
179
|
{
|
|
180
180
|
"value": "locations:read",
|
|
181
|
-
"label": "
|
|
181
|
+
"label": "jskit.connectors.calendly.scopes.locationsRead.label"
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
"value": "routing_forms:read",
|
|
185
|
-
"label": "
|
|
185
|
+
"label": "jskit.connectors.calendly.scopes.routingFormsRead.label"
|
|
186
186
|
},
|
|
187
187
|
{
|
|
188
188
|
"value": "groups:read",
|
|
189
|
-
"label": "
|
|
189
|
+
"label": "jskit.connectors.calendly.scopes.groupsRead.label"
|
|
190
190
|
},
|
|
191
191
|
{
|
|
192
192
|
"value": "organizations:write",
|
|
193
|
-
"label": "
|
|
193
|
+
"label": "jskit.connectors.calendly.scopes.organizationsWrite.label"
|
|
194
194
|
},
|
|
195
195
|
{
|
|
196
196
|
"value": "webhooks:read",
|
|
197
|
-
"label": "
|
|
197
|
+
"label": "jskit.connectors.calendly.scopes.webhooksRead.label"
|
|
198
198
|
},
|
|
199
199
|
{
|
|
200
200
|
"value": "webhooks:write",
|
|
201
|
-
"label": "
|
|
201
|
+
"label": "jskit.connectors.calendly.scopes.webhooksWrite.label"
|
|
202
202
|
},
|
|
203
203
|
{
|
|
204
204
|
"value": "activity_log:read",
|
|
205
|
-
"label": "
|
|
205
|
+
"label": "jskit.connectors.calendly.scopes.activityLogRead.label"
|
|
206
206
|
},
|
|
207
207
|
{
|
|
208
208
|
"value": "data_compliance:write",
|
|
209
|
-
"label": "
|
|
209
|
+
"label": "jskit.connectors.calendly.scopes.dataComplianceWrite.label"
|
|
210
210
|
},
|
|
211
211
|
{
|
|
212
212
|
"value": "outgoing_communications:read",
|
|
213
|
-
"label": "
|
|
213
|
+
"label": "jskit.connectors.calendly.scopes.outgoingCommunicationsRead.label"
|
|
214
214
|
},
|
|
215
215
|
{
|
|
216
216
|
"value": "contacts:read",
|
|
217
|
-
"label": "
|
|
217
|
+
"label": "jskit.connectors.calendly.scopes.contactsRead.label"
|
|
218
218
|
},
|
|
219
219
|
{
|
|
220
220
|
"value": "contacts:write",
|
|
221
|
-
"label": "
|
|
221
|
+
"label": "jskit.connectors.calendly.scopes.contactsWrite.label"
|
|
222
222
|
}
|
|
223
223
|
],
|
|
224
224
|
"setup": {
|
|
@@ -236,7 +236,7 @@ const calendlyDefinition = Object.freeze({
|
|
|
236
236
|
}
|
|
237
237
|
});
|
|
238
238
|
|
|
239
|
-
const hubspotKeyDefinition = definition("hubspot", "HubSpot", "
|
|
239
|
+
const hubspotKeyDefinition = definition("hubspot", "HubSpot", "jskit.connectors.hubspotKey.description",
|
|
240
240
|
"https://developers.hubspot.com/docs/apps/legacy-apps/private-apps/overview", [
|
|
241
241
|
"As a HubSpot super admin, select the account that owns the CRM data. Open Development > Legacy apps > Create legacy app > Private.",
|
|
242
242
|
"Name the app. In Scopes > Add new scope, select crm.objects.contacts.read for verification. Add crm.objects.contacts.write to manage contacts, crm.objects.deals.read for deals/pipeline IDs, and crm.objects.deals.write to create/update deals and link contacts. Choose Update. Create the app and confirm. In Auth, use Show token > Copy. Use an app access token, not a CLI personal access key or developer API key.",
|
|
@@ -249,11 +249,11 @@ const hubspotDefinition = Object.freeze({
|
|
|
249
249
|
accountModes: ["shared", "per-user", "assistant"],
|
|
250
250
|
authenticationMethods: ["api-key", "oauth2"],
|
|
251
251
|
oauthClientAuthenticationMethods: ["client_secret_post"],
|
|
252
|
-
scopes: [{ value: "oauth", label: "
|
|
253
|
-
{ value: "crm.objects.contacts.read", label: "
|
|
254
|
-
{ value: "crm.objects.contacts.write", label: "
|
|
255
|
-
{ value: "crm.objects.deals.read", label: "
|
|
256
|
-
{ value: "crm.objects.deals.write", label: "
|
|
252
|
+
scopes: [{ value: "oauth", label: "jskit.connectors.hubspot.scopes.oauth.label", recommended: true },
|
|
253
|
+
{ value: "crm.objects.contacts.read", label: "jskit.connectors.hubspot.scopes.crmObjectsContactsRead.label", recommended: true },
|
|
254
|
+
{ value: "crm.objects.contacts.write", label: "jskit.connectors.hubspot.scopes.crmObjectsContactsWrite.label" },
|
|
255
|
+
{ value: "crm.objects.deals.read", label: "jskit.connectors.hubspot.scopes.crmObjectsDealsRead.label" },
|
|
256
|
+
{ value: "crm.objects.deals.write", label: "jskit.connectors.hubspot.scopes.crmObjectsDealsWrite.label" }],
|
|
257
257
|
setup: {
|
|
258
258
|
...hubspotKeyDefinition.setup,
|
|
259
259
|
urlByAuthentication: { oauth2: "https://developers.hubspot.com/docs/apps/developer-platform/build-apps/create-an-app" },
|
|
@@ -267,7 +267,7 @@ const hubspotDefinition = Object.freeze({
|
|
|
267
267
|
] }
|
|
268
268
|
}
|
|
269
269
|
});
|
|
270
|
-
const linearKeyDefinition = definition("linear", "Linear", "
|
|
270
|
+
const linearKeyDefinition = definition("linear", "Linear", "jskit.connectors.linearKey.description",
|
|
271
271
|
"https://linear.app/docs/api-and-webhooks", [
|
|
272
272
|
"In the intended Linear workspace, open Settings > Account > Security & Access > Personal API keys. Create a named key, select Read and restrict it to the teams this application needs. Add the required write permissions only if your application will create or update issues/projects. Copy the key before leaving.",
|
|
273
273
|
"If key creation is unavailable, ask a workspace administrator to check Settings > Administration > API > Member API keys. Administrators can create keys even when member key creation is disabled.",
|
|
@@ -280,11 +280,11 @@ const linearDefinition = Object.freeze({
|
|
|
280
280
|
...linearKeyDefinition,
|
|
281
281
|
accountModes: ["shared", "per-user", "assistant"], authenticationMethods: ["api-key", "oauth2"],
|
|
282
282
|
scopes: [
|
|
283
|
-
{ value: "read", label: "
|
|
284
|
-
{ value: "write", label: "
|
|
285
|
-
{ value: "issues:create", label: "
|
|
286
|
-
{ value: "comments:create", label: "
|
|
287
|
-
{ value: "timeSchedule:write", label: "
|
|
283
|
+
{ value: "read", label: "jskit.connectors.linear.scopes.read.label", recommended: true },
|
|
284
|
+
{ value: "write", label: "jskit.connectors.linear.scopes.write.label" },
|
|
285
|
+
{ value: "issues:create", label: "jskit.connectors.linear.scopes.issuesCreate.label" },
|
|
286
|
+
{ value: "comments:create", label: "jskit.connectors.linear.scopes.commentsCreate.label" },
|
|
287
|
+
{ value: "timeSchedule:write", label: "jskit.connectors.linear.scopes.timeScheduleWrite.label" }
|
|
288
288
|
],
|
|
289
289
|
setup: { ...linearKeyDefinition.setup,
|
|
290
290
|
urlByAuthentication: { oauth2: "https://linear.app/developers/oauth-2-0-authentication" },
|
|
@@ -299,7 +299,7 @@ const linearDefinition = Object.freeze({
|
|
|
299
299
|
] }
|
|
300
300
|
}
|
|
301
301
|
});
|
|
302
|
-
const pipedriveTokenDefinition = definition("pipedrive", "Pipedrive", "
|
|
302
|
+
const pipedriveTokenDefinition = definition("pipedrive", "Pipedrive", "jskit.connectors.pipedriveToken.description",
|
|
303
303
|
"https://pipedrive.readme.io/docs/how-to-find-the-api-token", [
|
|
304
304
|
"The adapter lists/reads deals, people, organizations, activities, leads and pipelines, and creates/updates basic records except pipelines. The app must authorize each record and write. LIMITATIONS: no full CRM UI, pipeline administration, bulk import, custom-field editor, attachments, webhooks or automatic coding-chat attachment. For example, create a contact and follow-up deal; the app supplies its sales dashboard.",
|
|
305
305
|
"Sign into Pipedrive and switch to the company this application should access. The same user has a different API token in each company; a direct settings link may open the company you used most recently.",
|
|
@@ -316,7 +316,7 @@ const pipedriveDefinition = Object.freeze({
|
|
|
316
316
|
authenticationMethods: ["api-key", "oauth2"],
|
|
317
317
|
oauthClientAuthenticationMethods: ["client_secret_basic"],
|
|
318
318
|
settingsSchema: createSchema({ companyDomain: { type: "string", minLength: 1, maxLength: 63, pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" } }),
|
|
319
|
-
settingsFields: [{ name: "companyDomain", label: "
|
|
319
|
+
settingsFields: [{ name: "companyDomain", label: "jskit.connectors.pipedrive.fields.companyDomain.label", hint: "jskit.connectors.pipedrive.fields.companyDomain.hint" }],
|
|
320
320
|
scopes: [],
|
|
321
321
|
setup: { ...pipedriveTokenDefinition.setup,
|
|
322
322
|
urlByAuthentication: { oauth2: "https://pipedrive.readme.io/docs/marketplace-registering-a-private-app" },
|
|
@@ -332,7 +332,7 @@ const pipedriveDefinition = Object.freeze({
|
|
|
332
332
|
}
|
|
333
333
|
});
|
|
334
334
|
const gitlabApiDefinition = Object.freeze({
|
|
335
|
-
...definition("gitlab-api", "GitLab API", "
|
|
335
|
+
...definition("gitlab-api", "GitLab API", "jskit.connectors.gitlabApi.description",
|
|
336
336
|
"https://docs.gitlab.com/integration/oauth_provider/", [
|
|
337
337
|
"Select your GitLab instance URL; use https://gitlab.com for GitLab.com. For OAuth, open your instance's /user_settings/applications page, add an application and enable Confidential. Enter the exact Suggested callback URL here as its redirect URI and select read_user and read_api.",
|
|
338
338
|
"Copy Application ID into Client ID here. Save configuration and use the Env links to store the Secret and the same callback under their referenced names. Your application backend must implement the callback. Each user's connection starts in the application's account screen.",
|
|
@@ -344,9 +344,9 @@ const gitlabApiDefinition = Object.freeze({
|
|
|
344
344
|
accountModes: ["shared", "per-user", "assistant"],
|
|
345
345
|
authenticationMethods: ["api-key", "oauth2"],
|
|
346
346
|
oauthClientAuthenticationMethods: ["client_secret_post"],
|
|
347
|
-
scopes: [{ value: "read_user", label: "
|
|
348
|
-
{ value: "read_api", label: "
|
|
349
|
-
{ value: "api", label: "
|
|
347
|
+
scopes: [{ value: "read_user", label: "jskit.connectors.gitlabApi.scopes.readUser.label", recommended: true },
|
|
348
|
+
{ value: "read_api", label: "jskit.connectors.gitlabApi.scopes.readApi.label", recommended: true },
|
|
349
|
+
{ value: "api", label: "jskit.connectors.gitlabApi.scopes.api.label" }],
|
|
350
350
|
settingsSchema: createSchema({ instanceUrl: { type: "string", defaultTo: "https://gitlab.com", noTrim: true,
|
|
351
351
|
validator: (value) => {
|
|
352
352
|
try {
|
|
@@ -355,10 +355,10 @@ const gitlabApiDefinition = Object.freeze({
|
|
|
355
355
|
} catch { return "Enter the HTTPS GitLab instance URL."; }
|
|
356
356
|
}
|
|
357
357
|
} }),
|
|
358
|
-
settingsFields: [{ name: "instanceUrl", label: "
|
|
359
|
-
hint: "
|
|
358
|
+
settingsFields: [{ name: "instanceUrl", label: "jskit.connectors.gitlabApi.fields.instanceUrl.label", placeholder: "https://gitlab.com",
|
|
359
|
+
hint: "jskit.connectors.gitlabApi.fields.instanceUrl.hint" }]
|
|
360
360
|
});
|
|
361
|
-
const tallyDefinition = definition("tally", "Tally", "
|
|
361
|
+
const tallyDefinition = definition("tally", "Tally", "jskit.connectors.tally.description",
|
|
362
362
|
"https://developers.tally.so/api-reference/api-keys", [
|
|
363
363
|
"Open Tally Settings, then API keys and Create API key.",
|
|
364
364
|
"Create the key for the intended user. It inherits that user's resource access; this flow does not offer per-form scopes.",
|
|
@@ -369,7 +369,7 @@ const tallyDefinition = definition("tally", "Tally", "Create forms and retrieve
|
|
|
369
369
|
"A lost key needs a replacement. Keys stop working when their user leaves the organization; use the account intended to maintain this application's access."
|
|
370
370
|
]);
|
|
371
371
|
const contentfulDefinition = Object.freeze({
|
|
372
|
-
...definition("contentful", "Contentful", "
|
|
372
|
+
...definition("contentful", "Contentful", "jskit.connectors.contentful.description",
|
|
373
373
|
"https://www.contentful.com/developers/docs/references/authentication/", [
|
|
374
374
|
"Select the intended Contentful space. Open Settings > API keys, Content delivery / preview tokens, then Add API key. Name this application's key.",
|
|
375
375
|
"Copy its Space ID into Space ID here. Copy the Content Delivery API access token; the Preview token and Content Management token are different credentials.",
|
|
@@ -379,7 +379,7 @@ const contentfulDefinition = Object.freeze({
|
|
|
379
379
|
"To rotate access, create a replacement delivery token with the same required environment access, update Env and verify before retiring the old key. Disconnect only removes local state, not the Contentful API key. The app renders rich text and images and chooses its own cache policy.",
|
|
380
380
|
"No OAuth registration or callback URL is needed. Verification reads published entries. A 404 can mean the key lacks access to the chosen environment; check the space, region and environment as well as the token."
|
|
381
381
|
]),
|
|
382
|
-
apiKeyReferenceLabel: "
|
|
382
|
+
apiKeyReferenceLabel: "jskit.connectors.contentful.apiKeyReferenceLabel",
|
|
383
383
|
settingsSchema: createSchema({
|
|
384
384
|
spaceId: { type: "string", required: true, minLength: 1, maxLength: 64,
|
|
385
385
|
validator: (value) => /^[a-zA-Z0-9_-]+$/u.test(value) || "Enter the Space ID from Contentful API keys." },
|
|
@@ -388,14 +388,14 @@ const contentfulDefinition = Object.freeze({
|
|
|
388
388
|
region: { type: "string", enum: ["us", "eu"], defaultTo: "us" }
|
|
389
389
|
}),
|
|
390
390
|
settingsFields: [
|
|
391
|
-
{ name: "spaceId", label: "
|
|
392
|
-
{ name: "environmentId", label: "
|
|
393
|
-
{ name: "region", label: "
|
|
394
|
-
{ value: "us", title: "
|
|
391
|
+
{ name: "spaceId", label: "jskit.connectors.contentful.fields.spaceId.label", hint: "jskit.connectors.contentful.fields.spaceId.hint" },
|
|
392
|
+
{ name: "environmentId", label: "jskit.connectors.contentful.fields.environmentId.label", hint: "jskit.connectors.contentful.fields.environmentId.hint" },
|
|
393
|
+
{ name: "region", label: "jskit.connectors.contentful.fields.region.label", items: [
|
|
394
|
+
{ value: "us", title: "jskit.connectors.contentful.fields.region.items.us.title" }, { value: "eu", title: "jskit.connectors.contentful.fields.region.items.eu.title" }
|
|
395
395
|
] }
|
|
396
396
|
]
|
|
397
397
|
});
|
|
398
|
-
const asanaDefinition = definition("asana", "Asana", "
|
|
398
|
+
const asanaDefinition = definition("asana", "Asana", "jskit.connectors.asana.description",
|
|
399
399
|
"https://developers.asana.com/docs/personal-access-token", [
|
|
400
400
|
"Open the Asana developer console using My apps in the provider setup guide.",
|
|
401
401
|
"Under Personal access tokens, choose Create new token and give it a description identifying this application.",
|
|
@@ -405,7 +405,7 @@ const asanaDefinition = definition("asana", "Asana", "Discover projects and crea
|
|
|
405
405
|
]);
|
|
406
406
|
|
|
407
407
|
const stripeDefinition = Object.freeze({
|
|
408
|
-
...definition("stripe", "Stripe", "
|
|
408
|
+
...definition("stripe", "Stripe", "jskit.connectors.stripe.description",
|
|
409
409
|
"https://docs.stripe.com/keys/restricted-api-keys", [
|
|
410
410
|
"Select the intended Stripe account and sandbox or live mode, then open the API keys page.",
|
|
411
411
|
"Choose Create restricted key, start from zero permissions, name it and allow Balance read access.",
|
|
@@ -424,7 +424,7 @@ const stripeDefinition = Object.freeze({
|
|
|
424
424
|
]
|
|
425
425
|
}
|
|
426
426
|
});
|
|
427
|
-
const replicateDefinition = definition("replicate", "Replicate", "
|
|
427
|
+
const replicateDefinition = definition("replicate", "Replicate", "jskit.connectors.replicate.description",
|
|
428
428
|
"https://replicate.com/docs/topics/security/api-tokens", [
|
|
429
429
|
"Select the Replicate user or organization that owns the intended usage, then open account/api-tokens.",
|
|
430
430
|
"Create a token with a name identifying this application and copy its value.",
|
|
@@ -435,13 +435,13 @@ const replicateDefinition = definition("replicate", "Replicate", "Run asynchrono
|
|
|
435
435
|
"If the token is disabled, create a replacement on the same API tokens page, update Env and reconnect. Disabling a shared token also stops other applications using it."
|
|
436
436
|
]);
|
|
437
437
|
const sentryDefinition = Object.freeze({
|
|
438
|
-
id: "sentry", name: "Sentry", description: "
|
|
438
|
+
id: "sentry", name: "Sentry", description: "jskit.connectors.sentry.description",
|
|
439
439
|
accountModes: ["assistant"], authenticationMethods: ["oauth2"],
|
|
440
440
|
scopes: [
|
|
441
|
-
{ value: "org:read", label: "
|
|
442
|
-
{ value: "project:write", label: "
|
|
443
|
-
{ value: "team:write", label: "
|
|
444
|
-
{ value: "event:write", label: "
|
|
441
|
+
{ value: "org:read", label: "jskit.connectors.sentry.scopes.orgRead.label", recommended: true },
|
|
442
|
+
{ value: "project:write", label: "jskit.connectors.sentry.scopes.projectWrite.label" },
|
|
443
|
+
{ value: "team:write", label: "jskit.connectors.sentry.scopes.teamWrite.label" },
|
|
444
|
+
{ value: "event:write", label: "jskit.connectors.sentry.scopes.eventWrite.label" }
|
|
445
445
|
],
|
|
446
446
|
settingsSchema: createSchema({
|
|
447
447
|
organizationSlug: { type: "string", required: true, minLength: 1, maxLength: 200,
|
|
@@ -450,8 +450,8 @@ const sentryDefinition = Object.freeze({
|
|
|
450
450
|
validator: (value) => /^[a-z0-9][a-z0-9_-]*$/u.test(value) || "Enter the project slug, not its numeric ID or URL." }
|
|
451
451
|
}),
|
|
452
452
|
settingsFields: [
|
|
453
|
-
{ name: "organizationSlug", label: "
|
|
454
|
-
{ name: "projectSlug", label: "
|
|
453
|
+
{ name: "organizationSlug", label: "jskit.connectors.sentry.fields.organizationSlug.label", hint: "jskit.connectors.sentry.fields.organizationSlug.hint" },
|
|
454
|
+
{ name: "projectSlug", label: "jskit.connectors.sentry.fields.projectSlug.label", hint: "jskit.connectors.sentry.fields.projectSlug.hint" }
|
|
455
455
|
],
|
|
456
456
|
setup: { url: "https://mcp.sentry.dev/", clientRegistrationEndpoint: "https://mcp.sentry.dev/oauth/register", steps: [
|
|
457
457
|
"This is assistant context, not application login or SDK error-reporting setup. The assistant host must explicitly authorize access to errors; saving the connection alone does not grant it.",
|
|
@@ -462,7 +462,7 @@ const sentryDefinition = Object.freeze({
|
|
|
462
462
|
"Reconnect when the grant expires or Sentry access changes. Disconnect removes the application's local grant; manage provider-side permissions separately. An application's error-reporting DSN is separate from this management connection."
|
|
463
463
|
] }
|
|
464
464
|
});
|
|
465
|
-
const incidentIoDefinition = definition("incident-io", "incident.io", "
|
|
465
|
+
const incidentIoDefinition = definition("incident-io", "incident.io", "jskit.connectors.incidentIo.description",
|
|
466
466
|
"https://docs.incident.io/admin/api-keys", [
|
|
467
467
|
"In the intended incident.io organization, open Settings > API keys and choose Add API key. Name it for this application. The token is displayed once; copy it privately before leaving.",
|
|
468
468
|
"Choose View data (viewer) for incident verification. Add Create incidents / Edit incidents for writes, View on-call resources for alerts, Read schedules for schedules, and View catalog / Manage catalog for catalogue reads/writes. For follow-ups inspect the permission scopes badge for follow_ups.create and follow_ups.update; for alert resolution it must include alerts.resolve. Grant only the required actions. Restrict team-scoped access to intended teams; you cannot delegate permissions you do not hold.",
|
|
@@ -471,7 +471,7 @@ const incidentIoDefinition = definition("incident-io", "incident.io", "Manage in
|
|
|
471
471
|
"Schedule reads use pages of at most 25 so next shifts are included. This is not a rota editor or paging service. Alert sources such as Datadog can require external resolution; a 422 does not mean retry blindly. Private resources require provider permission, even when this form is valid.",
|
|
472
472
|
"This key remains valid if its creator is deactivated. Rotate or revoke it in Settings > API keys, update Env and verify again. Disconnect only removes local state; it does not revoke the key, close incidents or cancel provider workflows."
|
|
473
473
|
]);
|
|
474
|
-
const firefliesDefinition = definition("fireflies", "Fireflies", "
|
|
474
|
+
const firefliesDefinition = definition("fireflies", "Fireflies", "jskit.connectors.fireflies.description",
|
|
475
475
|
"https://docs.fireflies.ai/fundamentals/authorization", [
|
|
476
476
|
"Sign into Fireflies and open Integrations, then Fireflies API.",
|
|
477
477
|
"Copy the API key privately. It follows this user's account permissions; a team administrator key can include team data. Choose the account appropriate for the application.",
|
|
@@ -480,7 +480,7 @@ const firefliesDefinition = definition("fireflies", "Fireflies", "Read and searc
|
|
|
480
480
|
"Transcript listing defaults to meetings this account organized. The application must authorize broader team access. If verification fails, check the key and account permissions. Replace keys in Env and verify again. Disconnect removes local state; revoke the provider key separately in Fireflies. This API-key setup needs no OAuth callback or app registration."
|
|
481
481
|
]);
|
|
482
482
|
|
|
483
|
-
const heygenKeyDefinition = definition("heygen", "HeyGen", "
|
|
483
|
+
const heygenKeyDefinition = definition("heygen", "HeyGen", "jskit.connectors.heygenKey.description",
|
|
484
484
|
"https://developers.heygen.com/docs/api-key", [
|
|
485
485
|
"Sign into the intended HeyGen account. Open the API dashboard linked from Provider setup guide and choose the control to generate an API key.",
|
|
486
486
|
"For a restricted key, allow account:read for verification and voices:read for voice listing. Set those permissions in HeyGen; editing this application's configuration cannot grant them. API-key usage and subscription OAuth use different billing arrangements.",
|
|
@@ -490,12 +490,12 @@ const heygenKeyDefinition = definition("heygen", "HeyGen", "Read your API accoun
|
|
|
490
490
|
]);
|
|
491
491
|
const heygenDefinition = Object.freeze({
|
|
492
492
|
...heygenKeyDefinition,
|
|
493
|
-
description: "
|
|
493
|
+
description: "jskit.connectors.heygen.description",
|
|
494
494
|
authenticationMethods: ["api-key", "oauth2"],
|
|
495
495
|
scopes: [
|
|
496
|
-
{ value: "openid", label: "
|
|
497
|
-
{ value: "profile", label: "
|
|
498
|
-
{ value: "email", label: "
|
|
496
|
+
{ value: "openid", label: "jskit.connectors.heygen.scopes.openid.label", recommended: true, authenticationMethods: ["oauth2"] },
|
|
497
|
+
{ value: "profile", label: "jskit.connectors.heygen.scopes.profile.label", recommended: true, authenticationMethods: ["oauth2"] },
|
|
498
|
+
{ value: "email", label: "jskit.connectors.heygen.scopes.email.label", recommended: true, authenticationMethods: ["oauth2"] }
|
|
499
499
|
],
|
|
500
500
|
setup: { ...heygenKeyDefinition.setup,
|
|
501
501
|
urlByAuthentication: { oauth2: "https://developers.heygen.com/mcp/overview" },
|
|
@@ -509,7 +509,7 @@ const heygenDefinition = Object.freeze({
|
|
|
509
509
|
] }
|
|
510
510
|
}
|
|
511
511
|
});
|
|
512
|
-
const perplexityDefinition = definition("perplexity", "Perplexity", "
|
|
512
|
+
const perplexityDefinition = definition("perplexity", "Perplexity", "jskit.connectors.perplexity.description",
|
|
513
513
|
"https://docs.perplexity.ai/docs/admin/api-key-management", [
|
|
514
514
|
"Open the Perplexity API console, then Projects. Create or select the project that will own this application's API usage; a project must exist before you can create its first key.",
|
|
515
515
|
"Open API Keys and generate a named key for that project. Copy its full value immediately; it is only shown at creation.",
|
|
@@ -518,7 +518,7 @@ const perplexityDefinition = definition("perplexity", "Perplexity", "Connect you
|
|
|
518
518
|
"Use the supplied AI-connections perplexity-answer example with this exact saved slot. Your application installs its native client, authorizes the caller and resolves this Env reference before requesting a cited answer or stream. Requests go directly to Perplexity and use the application’s provider account. The app renders citations and controls spending. LIMITATIONS: no premade research/chat screen, persistent conversation or automatic coding-chat attachment; async history lists only its initial page. For example, fetch a cited answer in your backend, then display it in your app. Never send the key to the browser.",
|
|
519
519
|
"For replacement, create another key and update Env before revoking the old key. A revoked key cannot be recovered."
|
|
520
520
|
]);
|
|
521
|
-
const supabaseDefinition = definition("supabase", "Supabase", "
|
|
521
|
+
const supabaseDefinition = definition("supabase", "Supabase", "jskit.connectors.supabase.description",
|
|
522
522
|
"https://supabase.com/docs/guides/platform/personal-access-tokens", [
|
|
523
523
|
"Open Supabase account settings, Access Tokens, and generate a personal access token.",
|
|
524
524
|
"Where scoped tokens are available, select the intended resources and project read permission. Classic tokens carry your full account access.",
|
|
@@ -527,7 +527,7 @@ const supabaseDefinition = definition("supabase", "Supabase", "List projects thr
|
|
|
527
527
|
]);
|
|
528
528
|
|
|
529
529
|
const paddleDefinition = Object.freeze({
|
|
530
|
-
...definition("paddle", "Paddle", "
|
|
530
|
+
...definition("paddle", "Paddle", "jskit.connectors.paddle.description",
|
|
531
531
|
"https://developer.paddle.com/api-reference/about/authentication", [
|
|
532
532
|
"Sign into the Paddle Billing account that owns this application's catalogue. Use its sandbox account for testing and live account for production. Open Developer tools → Authentication → API keys → New API key.",
|
|
533
533
|
"Enter a name and description identifying this application. Grant product.read for connection verification and catalogue reads. Also grant product.write to create products and price.write to create prices when your application needs those operations. Editing webhook destinations also needs notification_setting.write; reading domain approval needs checkout_domain.read. Set an expiry. Enable Rotatable only if you plan to configure key rotation; that choice cannot be changed later. Click Save and copy the key immediately because it is shown only once.",
|
|
@@ -548,22 +548,22 @@ const paddleDefinition = Object.freeze({
|
|
|
548
548
|
]
|
|
549
549
|
},
|
|
550
550
|
assistantActions: [
|
|
551
|
-
{ value: "enable", label: "
|
|
552
|
-
{ value: "provider.recommend", label: "
|
|
553
|
-
{ value: "products.create", label: "
|
|
554
|
-
{ value: "products.batchCreate", label: "
|
|
555
|
-
{ value: "prices.create", label: "
|
|
556
|
-
{ value: "goLive.check", label: "
|
|
557
|
-
{ value: "api.read", label: "
|
|
558
|
-
{ value: "api.write", label: "
|
|
559
|
-
{ value: "webhooks.update", label: "
|
|
551
|
+
{ value: "enable", label: "jskit.connectors.paddle.assistantActions.enable.label" },
|
|
552
|
+
{ value: "provider.recommend", label: "jskit.connectors.paddle.assistantActions.providerRecommend.label" },
|
|
553
|
+
{ value: "products.create", label: "jskit.connectors.paddle.assistantActions.productsCreate.label" },
|
|
554
|
+
{ value: "products.batchCreate", label: "jskit.connectors.paddle.assistantActions.productsBatchCreate.label" },
|
|
555
|
+
{ value: "prices.create", label: "jskit.connectors.paddle.assistantActions.pricesCreate.label" },
|
|
556
|
+
{ value: "goLive.check", label: "jskit.connectors.paddle.assistantActions.goLiveCheck.label" },
|
|
557
|
+
{ value: "api.read", label: "jskit.connectors.paddle.assistantActions.apiRead.label" },
|
|
558
|
+
{ value: "api.write", label: "jskit.connectors.paddle.assistantActions.apiWrite.label" },
|
|
559
|
+
{ value: "webhooks.update", label: "jskit.connectors.paddle.assistantActions.webhooksUpdate.label" }
|
|
560
560
|
],
|
|
561
561
|
settingsSchema: createSchema({ environment: { type: "string", enum: ["sandbox", "live"], defaultTo: "sandbox" } }),
|
|
562
|
-
settingsFields: [{ name: "environment", label: "
|
|
563
|
-
items: [{ title: "
|
|
562
|
+
settingsFields: [{ name: "environment", label: "jskit.connectors.paddle.fields.environment.label", hint: "jskit.connectors.paddle.fields.environment.hint",
|
|
563
|
+
items: [{ title: "jskit.connectors.paddle.fields.environment.items.sandbox.title", value: "sandbox" }, { title: "jskit.connectors.paddle.fields.environment.items.live.title", value: "live" }] }]
|
|
564
564
|
});
|
|
565
565
|
const mailgunDefinition = Object.freeze({
|
|
566
|
-
...definition("mailgun", "Mailgun", "
|
|
566
|
+
...definition("mailgun", "Mailgun", "jskit.connectors.mailgun.description",
|
|
567
567
|
"https://help.mailgun.com/hc/en-us/articles/26016288026907-API-Key-Roles", [
|
|
568
568
|
"Sign into the intended Mailgun account as an administrator. In the top-right profile menu, choose API Security. Under Mailgun API Keys, choose Add new key; do not select the public verification key or webhook signing key.",
|
|
569
569
|
"Enter a description for this application and choose Developer for sending and domain management, or Analyst only for read-only access, then Create Key. Free/Basic accounts may offer only Admin. Copy the secret from the creation dialog now: it is shown only once. If lost, create a replacement key.",
|
|
@@ -576,11 +576,11 @@ const mailgunDefinition = Object.freeze({
|
|
|
576
576
|
"To change a key's role, create a new key, replace MAILGUN_API_KEY in Env and verify again; roles on existing keys cannot be edited. Disconnect removes the local connection. Delete an obsolete key in Mailgun separately to revoke its provider access."
|
|
577
577
|
]),
|
|
578
578
|
settingsSchema: createSchema({ region: { type: "string", enum: ["us", "eu"], defaultTo: "us" } }),
|
|
579
|
-
settingsFields: [{ name: "region", label: "
|
|
580
|
-
items: [{ title: "
|
|
579
|
+
settingsFields: [{ name: "region", label: "jskit.connectors.mailgun.fields.region.label", hint: "jskit.connectors.mailgun.fields.region.hint",
|
|
580
|
+
items: [{ title: "jskit.connectors.mailgun.fields.region.items.us.title", value: "us" }, { title: "jskit.connectors.mailgun.fields.region.items.eu.title", value: "eu" }] }]
|
|
581
581
|
});
|
|
582
582
|
|
|
583
|
-
const fireworksAiDefinition = definition("fireworks-ai", "Fireworks AI", "
|
|
583
|
+
const fireworksAiDefinition = definition("fireworks-ai", "Fireworks AI", "jskit.connectors.fireworksAi.description",
|
|
584
584
|
"https://docs.fireworks.ai/getting-started/quickstart", [
|
|
585
585
|
"Sign into Fireworks. Open the Provider setup guide and follow its Fireworks dashboard link to API Keys; you can also open your profile icon > User Settings > API Keys.",
|
|
586
586
|
"Choose Create API key, then copy the generated key for this application and keep it private. The Provider setup guide links to the account's API Keys page.",
|
|
@@ -589,7 +589,7 @@ const fireworksAiDefinition = definition("fireworks-ai", "Fireworks AI", "List a
|
|
|
589
589
|
"If you revoke or replace the key in Fireworks, update its Env value and check the connection again."
|
|
590
590
|
]);
|
|
591
591
|
const gatewayApiDefinition = Object.freeze({
|
|
592
|
-
...definition("gatewayapi", "GatewayAPI", "
|
|
592
|
+
...definition("gatewayapi", "GatewayAPI", "jskit.connectors.gatewayApi.description",
|
|
593
593
|
"https://gatewayapi.com/help-center/webhooks-and-api-keys/", [
|
|
594
594
|
"Sign into the intended GatewayAPI Global or EU account and open API, then API Keys in the left menu.",
|
|
595
595
|
"Choose ADD API KEY, name the credential, and copy its API token into Env.",
|
|
@@ -600,11 +600,11 @@ const gatewayApiDefinition = Object.freeze({
|
|
|
600
600
|
"If verification fails, check that the token matches the selected Global or EU account and any configured IP restrictions permit the application server. Replace a rotated token in Env and verify again before revoking the old token in API Keys. Disconnect removes local connection state only. No OAuth callback or webhook is needed for this balance check."
|
|
601
601
|
]),
|
|
602
602
|
settingsSchema: createSchema({ region: { type: "string", enum: ["global", "eu"], defaultTo: "global" } }),
|
|
603
|
-
settingsFields: [{ name: "region", label: "
|
|
604
|
-
items: [{ title: "
|
|
603
|
+
settingsFields: [{ name: "region", label: "jskit.connectors.gatewayApi.fields.region.label", hint: "jskit.connectors.gatewayApi.fields.region.hint",
|
|
604
|
+
items: [{ title: "jskit.connectors.gatewayApi.fields.region.items.global.title", value: "global" }, { title: "jskit.connectors.gatewayApi.fields.region.items.eu.title", value: "eu" }] }]
|
|
605
605
|
});
|
|
606
606
|
const polarDefinition = Object.freeze({
|
|
607
|
-
...definition("polar", "Polar", "
|
|
607
|
+
...definition("polar", "Polar", "jskit.connectors.polar.description",
|
|
608
608
|
"https://polar.sh/docs/integrate/oat", [
|
|
609
609
|
"Open Settings for the intended Polar organization, scroll to Developers and choose New Token.",
|
|
610
610
|
"Give the token a name and expiry, select products:read, and copy its value into Env.",
|
|
@@ -612,12 +612,12 @@ const polarDefinition = Object.freeze({
|
|
|
612
612
|
"Save the reference. The runtime verifies product reads; it does not create a checkout or enable merchant payments."
|
|
613
613
|
]),
|
|
614
614
|
settingsSchema: createSchema({ environment: { type: "string", enum: ["sandbox", "production"], defaultTo: "sandbox" } }),
|
|
615
|
-
settingsFields: [{ name: "environment", label: "
|
|
616
|
-
items: [{ title: "
|
|
615
|
+
settingsFields: [{ name: "environment", label: "jskit.connectors.polar.fields.environment.label", hint: "jskit.connectors.polar.fields.environment.hint",
|
|
616
|
+
items: [{ title: "jskit.connectors.polar.fields.environment.items.sandbox.title", value: "sandbox" }, { title: "jskit.connectors.polar.fields.environment.items.production.title", value: "production" }] }]
|
|
617
617
|
});
|
|
618
618
|
|
|
619
619
|
const storyblokDefinition = Object.freeze({
|
|
620
|
-
...definition("storyblok", "Storyblok", "
|
|
620
|
+
...definition("storyblok", "Storyblok", "jskit.connectors.storyblok.description",
|
|
621
621
|
"https://www.storyblok.com/docs/concepts/access-tokens", [
|
|
622
622
|
"Select the intended Storyblok space and open Settings, then Access Tokens.",
|
|
623
623
|
"Create a named Public token for published content, or a Preview token when this application needs draft content.",
|
|
@@ -628,15 +628,15 @@ const storyblokDefinition = Object.freeze({
|
|
|
628
628
|
"If verification fails, check the token type and space region, then reconnect after correcting Env. Disconnect removes the app connection; delete a token in Storyblok Settings → Access Tokens when it must stop working everywhere."
|
|
629
629
|
]),
|
|
630
630
|
settingsSchema: createSchema({ region: { type: "string", enum: ["eu", "us", "ca", "ap", "cn"], defaultTo: "eu" } }),
|
|
631
|
-
settingsFields: [{ name: "region", label: "
|
|
631
|
+
settingsFields: [{ name: "region", label: "jskit.connectors.storyblok.fields.region.label", hint: "jskit.connectors.storyblok.fields.region.hint",
|
|
632
632
|
items: [
|
|
633
|
-
{ title: "
|
|
634
|
-
{ title: "
|
|
635
|
-
{ title: "
|
|
633
|
+
{ title: "jskit.connectors.storyblok.fields.region.items.eu.title", value: "eu" }, { title: "jskit.connectors.storyblok.fields.region.items.us.title", value: "us" },
|
|
634
|
+
{ title: "jskit.connectors.storyblok.fields.region.items.ca.title", value: "ca" }, { title: "jskit.connectors.storyblok.fields.region.items.ap.title", value: "ap" },
|
|
635
|
+
{ title: "jskit.connectors.storyblok.fields.region.items.cn.title", value: "cn" }
|
|
636
636
|
] }]
|
|
637
637
|
});
|
|
638
638
|
|
|
639
|
-
const ashbyDefinition = definition("ashby", "Ashby", "
|
|
639
|
+
const ashbyDefinition = definition("ashby", "Ashby", "jskit.connectors.ashby.description",
|
|
640
640
|
"https://docs.ashbyhq.com/how-do-i-generate-an-api-key", [
|
|
641
641
|
"As an Ashby Organization Admin, open Admin > Integrations > API Keys and choose + New.",
|
|
642
642
|
"Name the key for this application, leave the optional integration partner unset, and choose Create API Key. Keys initially have no endpoint permissions: select Jobs read (jobsRead) for verification. Add Candidates read (candidatesRead) for candidates/applications and Candidates write (candidatesWrite) for profile edits, sourcing and stage changes. Add Interviews read (interviewsRead) for interview-plan/stage lookup and Hiring Process read (hiringProcessMetadataRead) for archive reasons.",
|
|
@@ -644,7 +644,7 @@ const ashbyDefinition = definition("ashby", "Ashby", "Read hiring data, maintain
|
|
|
644
644
|
"Enter env:ASHBY_API_KEY in API key reference here and save. Choose Set credential in Env, paste the key as the ASHBY_API_KEY value and save it there. Return here and choose Connect account or Verify again. Check connection only reads current status.",
|
|
645
645
|
"No OAuth registration or callback URL is needed. Verification lists jobs without creating candidates or changing hiring stages. This organization key serves an administrator-approved hiring workflow; it is not an applicant login or public careers form. For missing_endpoint_permission, reopen the key, correct Jobs read and Save. A key that was not copied must be replaced. To rotate, create a replacement and update Env before verifying. To revoke, open the old key by name and click Disable; Disconnect only removes the application connection."
|
|
646
646
|
]);
|
|
647
|
-
const lexwareDefinition = definition("lexware", "Lexware", "
|
|
647
|
+
const lexwareDefinition = definition("lexware", "Lexware", "jskit.connectors.lexware.description",
|
|
648
648
|
"https://help.lexware.de/de-form/articles/548863-alles-rund-um-public-api", [
|
|
649
649
|
"You need Lexware Office XL for Public API access. In the intended account, open Erweiterungen > Weitere Apps > Public API, or app.lexware.de/addons/public-api.",
|
|
650
650
|
"Choose API-Schlüssel erstellen and the individual-permissions option. Enable reading contacts for verification. Add article and accounting-document read permissions for those operations; allow invoice creation only if the app will create drafts.",
|
|
@@ -656,7 +656,7 @@ const lexwareDefinition = definition("lexware", "Lexware", "Read accounting cont
|
|
|
656
656
|
"No OAuth registration or callback URL is needed. Verification reads contacts. Keys expire after at most 24 months: create a replacement and update Env before expiry. Public API does not mean the key is safe to expose."
|
|
657
657
|
]);
|
|
658
658
|
const sevdeskDefinition = Object.freeze({
|
|
659
|
-
...definition("sevdesk", "Sevdesk", "
|
|
659
|
+
...definition("sevdesk", "Sevdesk", "jskit.connectors.sevdesk.description",
|
|
660
660
|
"https://hilfe.sevdesk.de/de/articles/9374740-wo-finde-ich-meinen-api-token-in-sevdesk", [
|
|
661
661
|
"In the intended sevdesk account, open Erweiterungen > Integrationen and locate API-Token für Integrationen.",
|
|
662
662
|
"Choose Einblenden and enter your sevdesk account password. Copy the displayed API token. Depending on your plan, Erweiterungen > API also offers Einblenden.",
|
|
@@ -664,10 +664,10 @@ const sevdeskDefinition = Object.freeze({
|
|
|
664
664
|
"No OAuth registration or callback URL is needed. Paste only the token, without adding Bearer. Verification reads contacts without modifying accounting data.",
|
|
665
665
|
"This token belongs to its sevdesk user. Naming another configuration does not create a separate provider account or change the token's access."
|
|
666
666
|
]),
|
|
667
|
-
apiKeyReferenceLabel: "
|
|
667
|
+
apiKeyReferenceLabel: "jskit.connectors.sevdesk.apiKeyReferenceLabel"
|
|
668
668
|
});
|
|
669
669
|
|
|
670
|
-
const apolloIoDefinition = definition("apollo-io", "Apollo.io", "
|
|
670
|
+
const apolloIoDefinition = definition("apollo-io", "Apollo.io", "jskit.connectors.apolloIo.description",
|
|
671
671
|
"https://docs.apollo.io/docs/create-api-key", [
|
|
672
672
|
"API access depends on your Apollo plan. In the intended workspace, open Settings > Integrations > API Keys, then API Keys > Create new key.",
|
|
673
673
|
"Enter a name and description. Keep api/v1/accounts/search enabled for verification. Add only the permitted endpoints needed by your app: api/v1/mixed_people/api_search for prospect people, api/v1/mixed_companies/search for companies, api/v1/people/match and api/v1/organizations/enrich for enrichment. Keep Set as master key off when endpoint permissions suffice.",
|
|
@@ -676,7 +676,7 @@ const apolloIoDefinition = definition("apollo-io", "Apollo.io", "Find prospects,
|
|
|
676
676
|
"Verification reads saved accounts; it does not enrich, write CRM records or spend enrichment credits. Company prospect searches and enrichment can consume credits when your app invokes them. Review current Apollo pricing and require explicit approval or an administrator-authorized usage policy in your app.",
|
|
677
677
|
"No OAuth registration or callback URL is needed. This key acts for the Apollo workspace, not an individual end user's account. Keys in that workspace share its limits. To replace access, regenerate the key and update Env before verifying again. Disconnect removes the local connection; delete the key on Apollo's API keys page to revoke provider access."
|
|
678
678
|
]);
|
|
679
|
-
const attentionDefinition = definition("attention", "Attention", "
|
|
679
|
+
const attentionDefinition = definition("attention", "Attention", "jskit.connectors.attention.description",
|
|
680
680
|
"https://docs.attention.com/api-authentication", [
|
|
681
681
|
"Sign into app.attention.tech as an organization administrator. Open your profile avatar at the top left, Settings, then Organization > API Keys.",
|
|
682
682
|
"Choose + Create API Key at the top right and give it a name identifying this application. Copy the value in API Key Created before closing; it is shown once.",
|
|
@@ -687,7 +687,7 @@ const attentionDefinition = definition("attention", "Attention", "Read conversat
|
|
|
687
687
|
]);
|
|
688
688
|
|
|
689
689
|
const telegramDefinition = Object.freeze({
|
|
690
|
-
...definition("telegram", "Telegram", "
|
|
690
|
+
...definition("telegram", "Telegram", "jskit.connectors.telegram.description",
|
|
691
691
|
"https://core.telegram.org/bots/tutorial", [
|
|
692
692
|
"In Telegram, open the verified BotFather account and send /newbot. Choose a display name and an available username ending in bot.",
|
|
693
693
|
"Copy the token returned by BotFather. Enter env:TELEGRAM_BOT_TOKEN in Bot token reference here and save. Choose Set credential in Env, paste the token as the TELEGRAM_BOT_TOKEN value and save it there.",
|
|
@@ -696,9 +696,9 @@ const telegramDefinition = Object.freeze({
|
|
|
696
696
|
"For polling, first check that no webhook is configured. Use one app worker and save update offsets after successful processing. Verification never polls; disconnect does not revoke the bot token or discard updates.",
|
|
697
697
|
"Use separate bots for independent public and paid application identities. Replacing a token for the same bot does not create another bot."
|
|
698
698
|
]),
|
|
699
|
-
apiKeyReferenceLabel: "
|
|
699
|
+
apiKeyReferenceLabel: "jskit.connectors.telegram.apiKeyReferenceLabel"
|
|
700
700
|
});
|
|
701
|
-
const klipyDefinition = definition("klipy", "KLIPY", "
|
|
701
|
+
const klipyDefinition = definition("klipy", "KLIPY", "jskit.connectors.klipy.description",
|
|
702
702
|
"https://klipy.com/blog/klipy-partner-panel", [
|
|
703
703
|
"Sign into KLIPY Partner Panel and choose Add Platform. Enter the platform name, contact email, company website and product description, then accept the API terms and submit.",
|
|
704
704
|
"Follow the key-creation flow, give the key an application-specific name and enter App URL when available. Copy the resulting test key. The application owner chooses any optional advertising settings in KLIPY separately.",
|
|
@@ -712,7 +712,7 @@ const klipyDefinition = definition("klipy", "KLIPY", "Browse clips, GIFs, sticke
|
|
|
712
712
|
]);
|
|
713
713
|
|
|
714
714
|
const clayDefinition = Object.freeze({
|
|
715
|
-
...definition("clay", "Clay", "
|
|
715
|
+
...definition("clay", "Clay", "jskit.connectors.clay.description",
|
|
716
716
|
"https://developers.clay.com/public-api/authentication", [
|
|
717
717
|
"Open Clay Settings > Account > API keys (beta). Create a Public API key for the intended user and workspace. The older Clay workspace API key is a different credential.",
|
|
718
718
|
"Copy the new key. Enter env:CLAY_PUBLIC_API_KEY in Public API key reference here and save. Choose Set credential in Env, paste the key as CLAY_PUBLIC_API_KEY and save it there. Return here and choose Connect account or Verify again. Check connection only refreshes local status.",
|
|
@@ -723,7 +723,7 @@ const clayDefinition = Object.freeze({
|
|
|
723
723
|
"Search filters use the current query-mode reference. The legacy filters-mode API is deprecated. The application saves this connection configuration; assistant tool attachment requires explicit host integration.",
|
|
724
724
|
"To replace the key, create another Public API key, update Env and verify before retiring the previous key. Disconnect removes local state, not the key in Clay."
|
|
725
725
|
]),
|
|
726
|
-
apiKeyReferenceLabel: "
|
|
726
|
+
apiKeyReferenceLabel: "jskit.connectors.clay.apiKeyReferenceLabel"
|
|
727
727
|
});
|
|
728
728
|
|
|
729
729
|
const tokenDefinitions = Object.freeze([
|