@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.
Files changed (137) hide show
  1. package/CHANGELOG.md +1722 -0
  2. package/README.md +11 -0
  3. package/locales/en.json +3139 -0
  4. package/package.json +7 -6
  5. package/src/server/ai.js +4 -4
  6. package/src/server/amazon-redshift.js +5 -5
  7. package/src/server/apify.js +1 -1
  8. package/src/server/apollo-io.js +1 -1
  9. package/src/server/asana.js +3 -3
  10. package/src/server/ashby.js +3 -3
  11. package/src/server/attention.js +2 -2
  12. package/src/server/aws-athena.js +3 -3
  13. package/src/server/aws-s3.js +1 -1
  14. package/src/server/awsTransport.js +9 -9
  15. package/src/server/brevo.js +3 -3
  16. package/src/server/calendly.js +2 -2
  17. package/src/server/chargebee.js +1 -1
  18. package/src/server/databricks.js +2 -2
  19. package/src/server/dbt-semantic-layer.js +8 -8
  20. package/src/server/elevenlabs.js +4 -4
  21. package/src/server/firebase-cloud-messaging.js +8 -8
  22. package/src/server/firecrawl.js +2 -2
  23. package/src/server/gatewayapi.js +4 -4
  24. package/src/server/github-api.js +3 -3
  25. package/src/server/gitlab-api.js +1 -1
  26. package/src/server/gmail.js +1 -1
  27. package/src/server/gong.js +4 -4
  28. package/src/server/google-ads-search.js +16 -16
  29. package/src/server/google-ads.js +7 -7
  30. package/src/server/google-drive.js +8 -6
  31. package/src/server/google-maps-platform.js +5 -5
  32. package/src/server/google-search-console.js +1 -1
  33. package/src/server/google-sheets.js +3 -2
  34. package/src/server/google.js +3 -2
  35. package/src/server/granola.js +5 -5
  36. package/src/server/hubspot.js +5 -3
  37. package/src/server/inngest.js +4 -4
  38. package/src/server/klipy.js +1 -1
  39. package/src/server/lightspeed.js +4 -4
  40. package/src/server/linear.js +2 -2
  41. package/src/server/linkedin.js +6 -6
  42. package/src/server/mapbox.js +1 -1
  43. package/src/server/mcpRegistration.js +3 -2
  44. package/src/server/mcpTransport.js +1 -1
  45. package/src/server/microsoft-fabric.js +3 -3
  46. package/src/server/microsoft-onedrive.js +1 -1
  47. package/src/server/microsoft-onenote.js +1 -1
  48. package/src/server/microsoft-outlook.js +1 -1
  49. package/src/server/microsoft.js +4 -3
  50. package/src/server/n8n.js +4 -4
  51. package/src/server/oura.js +1 -1
  52. package/src/server/paddle.js +1 -1
  53. package/src/server/pipedrive.js +4 -4
  54. package/src/server/posthog.js +3 -3
  55. package/src/server/salesforce.js +8 -8
  56. package/src/server/semrush.js +25 -25
  57. package/src/server/shopify.js +6 -6
  58. package/src/server/slack.js +10 -10
  59. package/src/server/snowflake.js +5 -5
  60. package/src/server/tally.js +1 -1
  61. package/src/server/telegram.js +1 -1
  62. package/src/server/tiktok.js +14 -14
  63. package/src/server/twilio.js +3 -3
  64. package/src/server/twitch.js +22 -21
  65. package/src/server/wave.js +34 -34
  66. package/src/server/wix.js +73 -73
  67. package/src/server/wiz.js +18 -18
  68. package/src/server/woocommerce.js +23 -23
  69. package/src/server/wordpress-com.js +3 -3
  70. package/src/server/wordpress-self-hosted.js +2 -2
  71. package/src/server/workday.js +3 -3
  72. package/src/server/x-twitter.js +6 -6
  73. package/src/server/xero.js +15 -15
  74. package/src/server/zoho-books.js +8 -8
  75. package/src/server/zoho-crm.js +5 -5
  76. package/src/server/zohoOAuth.js +1 -1
  77. package/src/shared/ai.js +24 -13
  78. package/src/shared/algolia.js +4 -4
  79. package/src/shared/amazon-redshift.js +16 -16
  80. package/src/shared/amplitude.js +6 -6
  81. package/src/shared/atlassian.js +19 -19
  82. package/src/shared/aws.js +18 -18
  83. package/src/shared/canva.js +18 -18
  84. package/src/shared/chargebee.js +3 -3
  85. package/src/shared/clickhouse.js +9 -9
  86. package/src/shared/confidence.js +6 -6
  87. package/src/shared/databricks.js +8 -8
  88. package/src/shared/dbt-semantic-layer.js +7 -7
  89. package/src/shared/english-ai.js +6 -0
  90. package/src/shared/english-definitions.js +34 -0
  91. package/src/shared/english-texts.js +7 -0
  92. package/src/shared/figma.js +2 -2
  93. package/src/shared/firebase-cloud-messaging.js +11 -11
  94. package/src/shared/firecrawl.js +1 -1
  95. package/src/shared/gemini-enterprise.js +7 -7
  96. package/src/shared/gong.js +5 -5
  97. package/src/shared/google-ads.js +5 -5
  98. package/src/shared/google-maps-platform.js +7 -7
  99. package/src/shared/google.js +40 -40
  100. package/src/shared/granola.js +5 -5
  101. package/src/shared/hex.js +7 -7
  102. package/src/shared/inngest.js +8 -8
  103. package/src/shared/lightspeed.js +52 -52
  104. package/src/shared/linkedin.js +6 -6
  105. package/src/shared/logo-dev.js +3 -3
  106. package/src/shared/mapbox.js +6 -6
  107. package/src/shared/mcp.js +9 -9
  108. package/src/shared/microsoft-fabric.js +9 -9
  109. package/src/shared/microsoft.js +52 -52
  110. package/src/shared/miro.js +5 -5
  111. package/src/shared/oura.js +5 -5
  112. package/src/shared/posthog.js +9 -9
  113. package/src/shared/prestashop.js +5 -5
  114. package/src/shared/resend.js +1 -1
  115. package/src/shared/salesforce.js +8 -8
  116. package/src/shared/semrush.js +6 -6
  117. package/src/shared/shopify.js +26 -26
  118. package/src/shared/slack.js +61 -61
  119. package/src/shared/snowflake.js +15 -15
  120. package/src/shared/tiktok.js +7 -7
  121. package/src/shared/tokens.js +126 -126
  122. package/src/shared/twilio.js +7 -7
  123. package/src/shared/twitch.js +24 -24
  124. package/src/shared/wave.js +33 -33
  125. package/src/shared/wix.js +5 -5
  126. package/src/shared/wiz.js +14 -14
  127. package/src/shared/wordpress-com.js +9 -9
  128. package/src/shared/wordpress.js +11 -11
  129. package/src/shared/workday.js +8 -8
  130. package/src/shared/x-twitter.js +5 -5
  131. package/src/shared/xero.js +25 -25
  132. package/src/shared/zoho-books.js +10 -10
  133. package/src/shared/zoho-crm.js +16 -16
  134. package/src/shared/zoho-regions.js +8 -8
  135. package/test/englishDefinitions.test.js +37 -0
  136. package/test/i18nCatalog.test.js +16 -0
  137. package/test/shopify.test.js +3 -1
@@ -10,28 +10,28 @@ function definition(id, name, description, permission, label, organizationOnly =
10
10
  accountModes: ["shared", "per-user", "assistant"], authenticationMethods: ["oauth2"],
11
11
  scopes: [
12
12
  { value: permission, label, recommended: true },
13
- { value: "offline_access", label: "Keep access when you are away", recommended: true }
13
+ { value: "offline_access", label: "jskit.connectors.microsoft.scopes.offlineAccess.label", recommended: true }
14
14
  ],
15
15
  settingsSchema: createSchema({
16
16
  tenantId: { type: "string", maxLength: 36, defaultTo: authority,
17
17
  validator: (value) => audiences.includes(value) || /^[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}$/iu.test(value) ||
18
18
  `Use ${audiences.join(", ")} or your Directory (tenant) ID as a GUID.` }
19
19
  }),
20
- settingsFields: [{ name: "tenantId", label: "Directory (tenant) ID", placeholder: authority,
21
- hint: `Use ${authority} for the default audience, or the directory GUID for a single-tenant app. This is not the Application (client) ID.` }]
20
+ settingsFields: [{ name: "tenantId", label: "jskit.connectors.microsoft.fields.tenantId.label", placeholder: authority,
21
+ hint: { key: "jskit.connectors.microsoft.fields.tenantId.hint", params: { authority } } }]
22
22
  });
23
23
  }
24
24
 
25
25
  const microsoftOutlookDefinition = Object.freeze({
26
- ...definition("microsoft-outlook", "Microsoft Outlook", "Read messages and files, send text mail, manage read/folder state and calendar appointments.", "Mail.Read", "Read your mail"),
26
+ ...definition("microsoft-outlook", "Microsoft Outlook", "jskit.connectors.microsoftOutlook.description", "Mail.Read", "jskit.connectors.microsoftOutlook.scopes.mailRead.label"),
27
27
  scopes: [
28
- { value: "Mail.Read", label: "Read your mail", required: true, recommended: true },
29
- { value: "Mail.ReadWrite", label: "Read and write your mail", recommended: true },
30
- { value: "Mail.Send", label: "Send mail as you", recommended: true },
31
- { value: "Mail.ReadBasic", label: "Read basic mail properties" },
32
- { value: "Calendars.Read", label: "Read your calendars" },
33
- { value: "Calendars.ReadWrite", label: "Read and write your calendars", recommended: true },
34
- { value: "offline_access", label: "Keep access when you are away", recommended: true }
28
+ { value: "Mail.Read", label: "jskit.connectors.microsoftOutlook.scopes.mailRead.label", required: true, recommended: true },
29
+ { value: "Mail.ReadWrite", label: "jskit.connectors.microsoftOutlook.scopes.mailReadWrite.label", recommended: true },
30
+ { value: "Mail.Send", label: "jskit.connectors.microsoftOutlook.scopes.mailSend.label", recommended: true },
31
+ { value: "Mail.ReadBasic", label: "jskit.connectors.microsoftOutlook.scopes.mailReadBasic.label" },
32
+ { value: "Calendars.Read", label: "jskit.connectors.microsoftOutlook.scopes.calendarsRead.label" },
33
+ { value: "Calendars.ReadWrite", label: "jskit.connectors.microsoftOutlook.scopes.calendarsReadWrite.label", recommended: true },
34
+ { value: "offline_access", label: "jskit.connectors.microsoftOutlook.scopes.offlineAccess.label", recommended: true }
35
35
  ],
36
36
  setup: {
37
37
  url: registrationUrl,
@@ -50,14 +50,14 @@ const microsoftOutlookDefinition = Object.freeze({
50
50
  }
51
51
  });
52
52
  const microsoftOneDriveDefinition = Object.freeze({
53
- ...definition("microsoft-onedrive", "Microsoft OneDrive", "Browse folders, obtain file downloads and upload small files.", "Files.Read", "Read your files"),
53
+ ...definition("microsoft-onedrive", "Microsoft OneDrive", "jskit.connectors.microsoftOneDrive.description", "Files.Read", "jskit.connectors.microsoftOneDrive.scopes.filesRead.label"),
54
54
  scopes: [
55
- { value: "Files.Read", label: "Read your files", required: true, recommended: true },
56
- { value: "Files.Read.All", label: "Read all files you can access", recommended: true },
57
- { value: "Files.ReadWrite", label: "Read and write your files", recommended: true },
58
- { value: "Files.ReadWrite.All", label: "Read and write all files you can access" },
59
- { value: "Files.ReadWrite.AppFolder", label: "Read and write files in the application's folder" },
60
- { value: "offline_access", label: "Keep access when you are away", recommended: true }
55
+ { value: "Files.Read", label: "jskit.connectors.microsoftOneDrive.scopes.filesRead.label", required: true, recommended: true },
56
+ { value: "Files.Read.All", label: "jskit.connectors.microsoftOneDrive.scopes.filesReadAll.label", recommended: true },
57
+ { value: "Files.ReadWrite", label: "jskit.connectors.microsoftOneDrive.scopes.filesReadWrite.label", recommended: true },
58
+ { value: "Files.ReadWrite.All", label: "jskit.connectors.microsoftOneDrive.scopes.filesReadWriteAll.label" },
59
+ { value: "Files.ReadWrite.AppFolder", label: "jskit.connectors.microsoftOneDrive.scopes.filesReadWriteAppFolder.label" },
60
+ { value: "offline_access", label: "jskit.connectors.microsoftOneDrive.scopes.offlineAccess.label", recommended: true }
61
61
  ],
62
62
  setup: {
63
63
  url: registrationUrl,
@@ -75,13 +75,13 @@ const microsoftOneDriveDefinition = Object.freeze({
75
75
  }
76
76
  });
77
77
  const microsoftExcelDefinition = Object.freeze({
78
- ...definition("microsoft-excel", "Microsoft Excel", "Browse workbooks and read or update bounded cell ranges with explicit sessions.", "Files.Read", "Read your files"),
78
+ ...definition("microsoft-excel", "Microsoft Excel", "jskit.connectors.microsoftExcel.description", "Files.Read", "jskit.connectors.microsoftExcel.scopes.filesRead.label"),
79
79
  scopes: [
80
- { value: "Files.Read", label: "Read your files", required: true, recommended: true },
81
- { value: "Files.ReadWrite", label: "Read and write your files (required by Excel worksheets)", recommended: true },
82
- { value: "Files.Read.All", label: "Read all files you can access" },
83
- { value: "Files.ReadWrite.All", label: "Read and write all files you can access" },
84
- { value: "offline_access", label: "Keep access when you are away", recommended: true }
80
+ { value: "Files.Read", label: "jskit.connectors.microsoftExcel.scopes.filesRead.label", required: true, recommended: true },
81
+ { value: "Files.ReadWrite", label: "jskit.connectors.microsoftExcel.scopes.filesReadWrite.label", recommended: true },
82
+ { value: "Files.Read.All", label: "jskit.connectors.microsoftExcel.scopes.filesReadAll.label" },
83
+ { value: "Files.ReadWrite.All", label: "jskit.connectors.microsoftExcel.scopes.filesReadWriteAll.label" },
84
+ { value: "offline_access", label: "jskit.connectors.microsoftExcel.scopes.offlineAccess.label", recommended: true }
85
85
  ],
86
86
  setup: {
87
87
  url: registrationUrl,
@@ -100,16 +100,16 @@ const microsoftExcelDefinition = Object.freeze({
100
100
  }
101
101
  });
102
102
  const microsoftTeamsDefinition = Object.freeze({
103
- ...definition("microsoft-teams", "Microsoft Teams", "Browse teams/channels and read or send channel and existing-chat messages.", "Team.ReadBasic.All", "List joined teams", true),
103
+ ...definition("microsoft-teams", "Microsoft Teams", "jskit.connectors.microsoftTeams.description", "Team.ReadBasic.All", "jskit.connectors.microsoftTeams.scopes.teamReadBasicAll.label", true),
104
104
  scopes: [
105
- { value: "Team.ReadBasic.All", label: "List joined teams", required: true, recommended: true },
106
- { value: "Channel.ReadBasic.All", label: "List channels in teams", required: true, recommended: true },
107
- { value: "User.Read", label: "Read user profile", required: true, recommended: true },
108
- { value: "ChannelMessage.Send", label: "Send messages to channels", recommended: true },
109
- { value: "ChannelMessage.Read.All", label: "Read channel messages" },
110
- { value: "Chat.ReadWrite", label: "Read and send chat messages" },
111
- { value: "User.Read.All", label: "Read all users' full profiles", recommended: true },
112
- { value: "offline_access", label: "Keep access when you are away", recommended: true }
105
+ { value: "Team.ReadBasic.All", label: "jskit.connectors.microsoftTeams.scopes.teamReadBasicAll.label", required: true, recommended: true },
106
+ { value: "Channel.ReadBasic.All", label: "jskit.connectors.microsoftTeams.scopes.channelReadBasicAll.label", required: true, recommended: true },
107
+ { value: "User.Read", label: "jskit.connectors.microsoftTeams.scopes.userRead.label", required: true, recommended: true },
108
+ { value: "ChannelMessage.Send", label: "jskit.connectors.microsoftTeams.scopes.channelMessageSend.label", recommended: true },
109
+ { value: "ChannelMessage.Read.All", label: "jskit.connectors.microsoftTeams.scopes.channelMessageReadAll.label" },
110
+ { value: "Chat.ReadWrite", label: "jskit.connectors.microsoftTeams.scopes.chatReadWrite.label" },
111
+ { value: "User.Read.All", label: "jskit.connectors.microsoftTeams.scopes.userReadAll.label", recommended: true },
112
+ { value: "offline_access", label: "jskit.connectors.microsoftTeams.scopes.offlineAccess.label", recommended: true }
113
113
  ],
114
114
  setup: {
115
115
  url: registrationUrl,
@@ -127,14 +127,14 @@ const microsoftTeamsDefinition = Object.freeze({
127
127
  }
128
128
  });
129
129
  const microsoftOneNoteDefinition = Object.freeze({
130
- ...definition("microsoft-onenote", "Microsoft OneNote", "Browse notebooks and pages, read content, and create or append text notes.", "Notes.Read", "Read your notebooks"),
130
+ ...definition("microsoft-onenote", "Microsoft OneNote", "jskit.connectors.microsoftOneNote.description", "Notes.Read", "jskit.connectors.microsoftOneNote.scopes.notesRead.label"),
131
131
  scopes: [
132
- { value: "Notes.Read", label: "Read your notebooks", required: true, recommended: true },
133
- { value: "Notes.Read.All", label: "Read notebooks you can access in your organization", recommended: true },
134
- { value: "Notes.ReadWrite.All", label: "Read and modify notebooks you can access in your organization", recommended: true },
135
- { value: "Notes.Create", label: "Create pages in OneNote notebooks", recommended: true },
136
- { value: "Notes.ReadWrite", label: "Read and modify your notebooks", recommended: true },
137
- { value: "offline_access", label: "Keep access when you are away", recommended: true }
132
+ { value: "Notes.Read", label: "jskit.connectors.microsoftOneNote.scopes.notesRead.label", required: true, recommended: true },
133
+ { value: "Notes.Read.All", label: "jskit.connectors.microsoftOneNote.scopes.notesReadAll.label", recommended: true },
134
+ { value: "Notes.ReadWrite.All", label: "jskit.connectors.microsoftOneNote.scopes.notesReadWriteAll.label", recommended: true },
135
+ { value: "Notes.Create", label: "jskit.connectors.microsoftOneNote.scopes.notesCreate.label", recommended: true },
136
+ { value: "Notes.ReadWrite", label: "jskit.connectors.microsoftOneNote.scopes.notesReadWrite.label", recommended: true },
137
+ { value: "offline_access", label: "jskit.connectors.microsoftOneNote.scopes.offlineAccess.label", recommended: true }
138
138
  ],
139
139
  setup: {
140
140
  url: registrationUrl,
@@ -152,18 +152,18 @@ const microsoftOneNoteDefinition = Object.freeze({
152
152
  }
153
153
  });
154
154
  const microsoftSharePointDefinition = Object.freeze({
155
- ...definition("microsoft-sharepoint", "Microsoft SharePoint", "Browse sites/libraries, transfer small files and edit list items.", "Sites.Read.All", "Read items in all site collections", true, [
156
- { name: "search", required: true, label: "Site search", hint: "Enter a search term for accessible SharePoint sites. Verification performs this search without changing a site." }
155
+ ...definition("microsoft-sharepoint", "Microsoft SharePoint", "jskit.connectors.microsoftSharePoint.description", "Sites.Read.All", "jskit.connectors.microsoftSharePoint.scopes.sitesReadAll.label", true, [
156
+ { name: "search", required: true, label: "jskit.connectors.microsoftSharePoint.verificationFields.search.label", hint: "jskit.connectors.microsoftSharePoint.verificationFields.search.hint" }
157
157
  ]),
158
158
  scopes: [
159
- { value: "Sites.Read.All", label: "Read items in all site collections", required: true, recommended: true },
160
- { value: "User.Read", label: "Read user profile", required: true, recommended: true },
161
- { value: "Sites.ReadWrite.All", label: "Edit or delete items in all site collections", recommended: true },
162
- { value: "Sites.Manage.All", label: "Create, edit, and delete items and lists in all site collections" },
163
- { value: "Sites.FullControl.All", label: "Have full control of all site collections" },
164
- { value: "Files.Read.All", label: "Read all files that user can access", recommended: true },
165
- { value: "Files.ReadWrite.All", label: "Read and write all files that user can access" },
166
- { value: "offline_access", label: "Keep access when you are away", recommended: true }
159
+ { value: "Sites.Read.All", label: "jskit.connectors.microsoftSharePoint.scopes.sitesReadAll.label", required: true, recommended: true },
160
+ { value: "User.Read", label: "jskit.connectors.microsoftSharePoint.scopes.userRead.label", required: true, recommended: true },
161
+ { value: "Sites.ReadWrite.All", label: "jskit.connectors.microsoftSharePoint.scopes.sitesReadWriteAll.label", recommended: true },
162
+ { value: "Sites.Manage.All", label: "jskit.connectors.microsoftSharePoint.scopes.sitesManageAll.label" },
163
+ { value: "Sites.FullControl.All", label: "jskit.connectors.microsoftSharePoint.scopes.sitesFullControlAll.label" },
164
+ { value: "Files.Read.All", label: "jskit.connectors.microsoftSharePoint.scopes.filesReadAll.label", recommended: true },
165
+ { value: "Files.ReadWrite.All", label: "jskit.connectors.microsoftSharePoint.scopes.filesReadWriteAll.label" },
166
+ { value: "offline_access", label: "jskit.connectors.microsoftSharePoint.scopes.offlineAccess.label", recommended: true }
167
167
  ],
168
168
  setup: {
169
169
  url: registrationUrl,
@@ -182,7 +182,7 @@ const microsoftSharePointDefinition = Object.freeze({
182
182
  }
183
183
  });
184
184
  const microsoftWordDefinition = Object.freeze({
185
- ...definition("microsoft-word", "Microsoft Word", "Browse Word files and folders in your drive and read document metadata.", "Files.Read", "Read your files"),
185
+ ...definition("microsoft-word", "Microsoft Word", "jskit.connectors.microsoftWord.description", "Files.Read", "jskit.connectors.microsoftWord.scopes.filesRead.label"),
186
186
  setup: {
187
187
  url: registrationUrl,
188
188
  steps: [
@@ -197,7 +197,7 @@ const microsoftWordDefinition = Object.freeze({
197
197
  }
198
198
  });
199
199
  const microsoftPowerPointDefinition = Object.freeze({
200
- ...definition("microsoft-powerpoint", "Microsoft PowerPoint", "Browse PowerPoint files and folders in your drive and read presentation metadata.", "Files.Read", "Read your files"),
200
+ ...definition("microsoft-powerpoint", "Microsoft PowerPoint", "jskit.connectors.microsoftPowerPoint.description", "Files.Read", "jskit.connectors.microsoftPowerPoint.scopes.filesRead.label"),
201
201
  setup: {
202
202
  url: registrationUrl,
203
203
  steps: [
@@ -1,11 +1,11 @@
1
1
  const miroDefinition = Object.freeze({
2
- id: "miro", name: "Miro", description: "Use Miro board tools through the assistant owner's selected team.",
2
+ id: "miro", name: "Miro", description: "jskit.connectors.miro.description",
3
3
  accountModes: ["assistant"], authenticationMethods: ["oauth2"],
4
4
  scopes: [
5
- { value: "boards:read", label: "Read boards", recommended: true },
6
- { value: "boards:write", label: "Create and edit boards" },
7
- { value: "openid", label: "Include account identity" },
8
- { value: "email", label: "Read your email address" }
5
+ { value: "boards:read", label: "jskit.connectors.miro.scopes.boardsRead.label", recommended: true },
6
+ { value: "boards:write", label: "jskit.connectors.miro.scopes.boardsWrite.label" },
7
+ { value: "openid", label: "jskit.connectors.miro.scopes.openid.label" },
8
+ { value: "email", label: "jskit.connectors.miro.scopes.email.label" }
9
9
  ],
10
10
  setup: {
11
11
  url: "https://developers.miro.com/docs/connecting-to-miro-mcp",
@@ -1,11 +1,11 @@
1
1
  const ouraDefinition = Object.freeze({
2
- id: "oura", name: "Oura", description: "Connect an individual's Oura account to read sleep, readiness, activity, heart-rate and permitted profile data.",
2
+ id: "oura", name: "Oura", description: "jskit.connectors.oura.description",
3
3
  accountModes: ["per-user"], authenticationMethods: ["oauth2"],
4
4
  scopes: [
5
- { value: "daily", label: "Read daily sleep, activity and readiness summaries", required: true },
6
- { value: "heartrate", label: "Read heart-rate samples" },
7
- { value: "personal", label: "Read personal profile information" },
8
- { value: "email", label: "Read the account email address" }
5
+ { value: "daily", label: "jskit.connectors.oura.scopes.daily.label", required: true },
6
+ { value: "heartrate", label: "jskit.connectors.oura.scopes.heartrate.label" },
7
+ { value: "personal", label: "jskit.connectors.oura.scopes.personal.label" },
8
+ { value: "email", label: "jskit.connectors.oura.scopes.email.label" }
9
9
  ],
10
10
  setup: {
11
11
  url: "https://support.ouraring.com/hc/en-us/articles/4415266939155-The-Oura-API",
@@ -1,23 +1,23 @@
1
1
  import { createSchema } from "json-rest-schema";
2
2
 
3
3
  const posthogDefinition = Object.freeze({
4
- id: "posthog", name: "PostHog", description: "Capture events and evaluate flags with a public project token.",
4
+ id: "posthog", name: "PostHog", description: "jskit.connectors.posthog.description",
5
5
  accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
6
- apiKeyReferenceLabel: "Project token reference",
7
- verificationFields: [{ name: "distinct_id", required: true, label: "Verification user ID",
8
- hint: "Enter the identity whose feature flags should be evaluated. This check does not submit an analytics event." }],
9
- apiKeyReferenceHint: "Use an environment reference for the project's public token (phc_). Your app may expose that token in its frontend. It cannot read private analytics.",
6
+ apiKeyReferenceLabel: "jskit.connectors.posthog.apiKeyReferenceLabel",
7
+ verificationFields: [{ name: "distinct_id", required: true, label: "jskit.connectors.posthog.verificationFields.distinctId.label",
8
+ hint: "jskit.connectors.posthog.verificationFields.distinctId.hint" }],
9
+ apiKeyReferenceHint: "jskit.connectors.posthog.apiKeyReferenceHint",
10
10
  settingsSchema: createSchema({
11
11
  region: { type: "string", enum: ["eu", "us"], defaultTo: "eu" },
12
12
  projectId: { type: "string", required: true, minLength: 1, maxLength: 20,
13
13
  validator: (value) => /^[1-9][0-9]*$/u.test(value) || "Enter the numeric project ID from PostHog project settings." }
14
14
  }),
15
15
  settingsFields: [
16
- { name: "region", label: "Region", hint: "Choose the PostHog Cloud region containing this project.", items: [
17
- { value: "eu", title: "Europe (eu.i.posthog.com)" }, { value: "us", title: "United States (us.i.posthog.com)" }
16
+ { name: "region", label: "jskit.connectors.posthog.fields.region.label", hint: "jskit.connectors.posthog.fields.region.hint", items: [
17
+ { value: "eu", title: "jskit.connectors.posthog.fields.region.items.eu.title" }, { value: "us", title: "jskit.connectors.posthog.fields.region.items.us.title" }
18
18
  ] },
19
- { name: "projectId", label: "Project ID", placeholder: "12345",
20
- hint: "Public numeric ID from project settings. Public API requests use the token to select the project; verification does not match this ID to the token." }
19
+ { name: "projectId", label: "jskit.connectors.posthog.fields.projectId.label", placeholder: "12345",
20
+ hint: "jskit.connectors.posthog.fields.projectId.hint" }
21
21
  ],
22
22
  setup: {
23
23
  url: "https://posthog.com/docs/settings/projects",
@@ -2,13 +2,13 @@ import { createSchema } from "json-rest-schema";
2
2
  import { httpsSiteUrlField } from "./siteUrl.js";
3
3
 
4
4
  const prestashopDefinition = Object.freeze({
5
- id: "prestashop", name: "PrestaShop", description: "Read products and orders from your PrestaShop store.",
5
+ id: "prestashop", name: "PrestaShop", description: "jskit.connectors.prestashop.description",
6
6
  accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
7
- apiKeyReferenceLabel: "Webservice API key reference",
8
- apiKeyReferenceHint: "Store the Webservice key outside source. Grant GET for products, and for orders if the application needs order reads.",
7
+ apiKeyReferenceLabel: "jskit.connectors.prestashop.apiKeyReferenceLabel",
8
+ apiKeyReferenceHint: "jskit.connectors.prestashop.apiKeyReferenceHint",
9
9
  settingsSchema: createSchema({ siteUrl: httpsSiteUrlField }),
10
- settingsFields: [{ name: "siteUrl", label: "Store URL", placeholder: "https://shop.example.com",
11
- hint: "Use the HTTPS store address before /api, keeping any installation subdirectory." }],
10
+ settingsFields: [{ name: "siteUrl", label: "jskit.connectors.prestashop.fields.siteUrl.label", placeholder: "https://shop.example.com",
11
+ hint: "jskit.connectors.prestashop.fields.siteUrl.hint" }],
12
12
  setup: {
13
13
  url: "https://devdocs.prestashop-project.org/9/webservice/tutorials/creating-access/",
14
14
  steps: [
@@ -1,5 +1,5 @@
1
1
  const resendDefinition = Object.freeze({
2
- id: "resend", name: "Resend", description: "Send transactional email and manage contact segments and draft broadcasts.",
2
+ id: "resend", name: "Resend", description: "jskit.connectors.resend.description",
3
3
  accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
4
4
  setup: {
5
5
  url: "https://resend.com/docs/create-an-api-key",
@@ -4,7 +4,7 @@ const label = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?";
4
4
  const production = new RegExp(`^https://${label}(?:\\.develop)?\\.my\\.salesforce\\.com/?$`, "u");
5
5
  const sandbox = new RegExp(`^https://${label}\\.sandbox\\.my\\.salesforce\\.com/?$`, "u");
6
6
  const salesforceDefinition = Object.freeze({
7
- id: "salesforce", name: "Salesforce", description: "Explore Salesforce objects and read records with your organisation's API permissions.",
7
+ id: "salesforce", name: "Salesforce", description: "jskit.connectors.salesforce.description",
8
8
  accountModes: ["shared", "per-user", "assistant"], authenticationMethods: ["oauth2"],
9
9
  oauthClientAuthenticationMethods: ["client_secret_post"],
10
10
  settingsSchema: createSchema({
@@ -13,16 +13,16 @@ const salesforceDefinition = Object.freeze({
13
13
  (object.environment === "sandbox" ? sandbox : production).test(value) || "Enter a lowercase HTTPS My Domain URL matching the selected environment, without a path, query or port." }
14
14
  }),
15
15
  settingsFields: [
16
- { name: "environment", label: "Environment", items: [{ value: "production", title: "Production" }, { value: "sandbox", title: "Sandbox" }],
17
- hint: "Production includes Developer Edition. Sandbox uses the org's .sandbox.my.salesforce.com domain." },
18
- { name: "accountUrl", label: "Account URL", placeholder: "https://acme.my.salesforce.com",
19
- hint: "Copy My Domain from Salesforce Setup. The same org receives authorization and API requests." }
16
+ { name: "environment", label: "jskit.connectors.salesforce.fields.environment.label", items: [{ value: "production", title: "jskit.connectors.salesforce.fields.environment.items.production.title" }, { value: "sandbox", title: "jskit.connectors.salesforce.fields.environment.items.sandbox.title" }],
17
+ hint: "jskit.connectors.salesforce.fields.environment.hint" },
18
+ { name: "accountUrl", label: "jskit.connectors.salesforce.fields.accountUrl.label", placeholder: "https://acme.my.salesforce.com",
19
+ hint: "jskit.connectors.salesforce.fields.accountUrl.hint" }
20
20
  ],
21
21
  scopes: [
22
- { value: "api", label: "Access Salesforce APIs with this user's permissions", recommended: true },
23
- { value: "refresh_token", label: "Keep access when the user is away", recommended: true }
22
+ { value: "api", label: "jskit.connectors.salesforce.scopes.api.label", recommended: true },
23
+ { value: "refresh_token", label: "jskit.connectors.salesforce.scopes.refreshToken.label", recommended: true }
24
24
  ],
25
- permissionsHint: "Salesforce's api permission can allow writes. This runtime exposes reads; your app still authorizes each query. Connecting an account does not sign the person into your application.",
25
+ permissionsHint: "jskit.connectors.salesforce.permissionsHint",
26
26
  setup: { url: "https://help.salesforce.com/s/articleView?id=sf.external_client_apps.htm&type=5", steps: [
27
27
  "In Salesforce Setup, open My Domain and copy the org's login URL. Select Production for production/Developer Edition or Sandbox for a sandbox org.",
28
28
  "Open External Client App Manager and create an External Client App. Enter its name, API name and contact email; use Local for an app used only by this org.",
@@ -2,14 +2,14 @@ import { createSchema } from "json-rest-schema";
2
2
  import { secretReference } from "@jskit-ai/connectors-core/shared/configuration";
3
3
 
4
4
  const semrushDefinition = Object.freeze({
5
- id: "semrush", name: "Semrush", description: "Read keyword and backlink reports and manage Semrush projects using a V4 API key.",
5
+ id: "semrush", name: "Semrush", description: "jskit.connectors.semrush.description",
6
6
  accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
7
7
  settingsSchema: createSchema({ v3ApiKeyRef: { ...secretReference, required: false } }),
8
- settingsFields: [{ name: "v3ApiKeyRef", label: "V3 API key reference (optional)", placeholder: "env:SEMRUSH_V3_KEY",
9
- environmentCredential: { label: "Semrush V3 API key", public: false },
10
- hint: "For domain overview and domain/URL/subfolder keyword reports and position tracking: My profile > API Keys > copy your Version 3 key into this project's Env. Leave empty if only using V4 reports/projects." }],
11
- apiKeyReferenceLabel: "V4 API key reference",
12
- apiKeyReferenceHint: "Use a new Semrush V4 key: Read-only for reports and project reads, Read and write for creating, renaming or deleting projects. V3 keys and OAuth tokens are different credentials.",
8
+ settingsFields: [{ name: "v3ApiKeyRef", label: "jskit.connectors.semrush.fields.v3ApiKeyRef.label", placeholder: "env:SEMRUSH_V3_KEY",
9
+ environmentCredential: { label: "jskit.connectors.semrush.fields.v3ApiKeyRef.environmentCredential.label", public: false },
10
+ hint: "jskit.connectors.semrush.fields.v3ApiKeyRef.hint" }],
11
+ apiKeyReferenceLabel: "jskit.connectors.semrush.apiKeyReferenceLabel",
12
+ apiKeyReferenceHint: "jskit.connectors.semrush.apiKeyReferenceHint",
13
13
  setup: { url: "https://developer.semrush.com/api/v4/get-started/quick-start/", steps: [
14
14
  "Open the profile icon in Semrush, then My profile > API Keys > + Create API key.",
15
15
  "Create a V4 key for this application. Select Read-only for reports and project reads, or Read and write if the app creates, renames or deletes projects; choose an expiry. Projects access requires SEO Business and available API units.",
@@ -1,42 +1,42 @@
1
1
  import { createSchema } from "json-rest-schema";
2
2
 
3
3
  const shopifyDefinition = Object.freeze({
4
- id: "shopify", name: "Shopify", description: "Connect a Shopify store and control what the assistant may change.",
4
+ id: "shopify", name: "Shopify", description: "jskit.connectors.shopify.description",
5
5
  accountModes: ["shared", "assistant"], authenticationMethods: ["oauth2", "api-key"],
6
6
  oauthGrantTypes: ["client_credentials"], oauthClientAuthenticationMethods: ["client_secret_post"],
7
- authenticationLabels: { oauth2: "App in your Shopify organization", "api-key": "Existing Admin API access token" },
8
- authenticationHint: "Client credentials require the app and store in the same Shopify organization. Connecting another merchant requires a separate Shopify installation flow.",
9
- apiKeyReferenceLabel: "Admin API access token reference",
10
- apiKeyReferenceHint: "Use env:SHOPIFY_ADMIN_TOKEN. A Storefront token, client secret or App Automation Token cannot be used here.",
7
+ authenticationLabels: { oauth2: "jskit.connectors.shopify.authenticationLabels.oauth2", "api-key": "jskit.connectors.shopify.authenticationLabels.apiKey" },
8
+ authenticationHint: "jskit.connectors.shopify.authenticationHint",
9
+ apiKeyReferenceLabel: "jskit.connectors.shopify.apiKeyReferenceLabel",
10
+ apiKeyReferenceHint: "jskit.connectors.shopify.apiKeyReferenceHint",
11
11
  settingsSchema: createSchema({
12
12
  shopDomain: { type: "string", required: true, noTrim: true, maxLength: 77,
13
13
  validator: (value) => /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.myshopify\.com$/u.test(value) ||
14
14
  "Enter the store's permanent name.myshopify.com domain without a protocol, path or port." }
15
15
  }),
16
- settingsFields: [{ name: "shopDomain", label: "Shopify store domain", placeholder: "your-store.myshopify.com",
17
- hint: "Use the permanent myshopify.com address, including when your storefront uses a custom domain." }],
16
+ settingsFields: [{ name: "shopDomain", label: "jskit.connectors.shopify.fields.shopDomain.label", placeholder: "your-store.myshopify.com",
17
+ hint: "jskit.connectors.shopify.fields.shopDomain.hint" }],
18
18
  scopes: [
19
- { value: "read_products", label: "Read products", recommended: true },
20
- { value: "write_products", label: "Create, update and delete products" }
19
+ { value: "read_products", label: "jskit.connectors.shopify.scopes.readProducts.label", recommended: true },
20
+ { value: "write_products", label: "jskit.connectors.shopify.scopes.writeProducts.label" }
21
21
  ],
22
- permissionsHint: "Match the scopes approved for the installed Shopify app. Write access includes reads. Assistant permission choices do not grant Shopify scopes or staff permissions.",
22
+ permissionsHint: "jskit.connectors.shopify.permissionsHint",
23
23
  assistantActions: [
24
- { value: "enable", label: "Enable Shopify" },
25
- { value: "connect", label: "Connect your Shopify store" },
26
- { value: "claim", label: "Claim your store" },
27
- { value: "products.list", label: "Read products" },
28
- { value: "products.create", label: "Create product" },
29
- { value: "products.update", label: "Update product" },
30
- { value: "products.delete", label: "Delete product" },
31
- { value: "variants.create", label: "Add product variant" },
32
- { value: "variants.update", label: "Update product variant" },
33
- { value: "variants.delete", label: "Delete product variant" },
34
- { value: "discountCodes.create", label: "Create discount code" },
35
- { value: "discountCodes.update", label: "Update discount code" },
36
- { value: "discountCodes.delete", label: "Delete discount code" },
37
- { value: "priceRules.create", label: "Create price rule" },
38
- { value: "priceRules.update", label: "Update price rule" },
39
- { value: "priceRules.delete", label: "Delete price rule" }
24
+ { value: "enable", label: "jskit.connectors.shopify.assistantActions.enable.label" },
25
+ { value: "connect", label: "jskit.connectors.shopify.assistantActions.connect.label" },
26
+ { value: "claim", label: "jskit.connectors.shopify.assistantActions.claim.label" },
27
+ { value: "products.list", label: "jskit.connectors.shopify.assistantActions.productsList.label" },
28
+ { value: "products.create", label: "jskit.connectors.shopify.assistantActions.productsCreate.label" },
29
+ { value: "products.update", label: "jskit.connectors.shopify.assistantActions.productsUpdate.label" },
30
+ { value: "products.delete", label: "jskit.connectors.shopify.assistantActions.productsDelete.label" },
31
+ { value: "variants.create", label: "jskit.connectors.shopify.assistantActions.variantsCreate.label" },
32
+ { value: "variants.update", label: "jskit.connectors.shopify.assistantActions.variantsUpdate.label" },
33
+ { value: "variants.delete", label: "jskit.connectors.shopify.assistantActions.variantsDelete.label" },
34
+ { value: "discountCodes.create", label: "jskit.connectors.shopify.assistantActions.discountCodesCreate.label" },
35
+ { value: "discountCodes.update", label: "jskit.connectors.shopify.assistantActions.discountCodesUpdate.label" },
36
+ { value: "discountCodes.delete", label: "jskit.connectors.shopify.assistantActions.discountCodesDelete.label" },
37
+ { value: "priceRules.create", label: "jskit.connectors.shopify.assistantActions.priceRulesCreate.label" },
38
+ { value: "priceRules.update", label: "jskit.connectors.shopify.assistantActions.priceRulesUpdate.label" },
39
+ { value: "priceRules.delete", label: "jskit.connectors.shopify.assistantActions.priceRulesDelete.label" }
40
40
  ],
41
41
  setup: { url: "https://shopify.dev/docs/apps/build/authentication-authorization/client-credentials-grant", steps: [
42
42
  "Open the Shopify Dev Dashboard, choose your organization, open Apps and create an app for your store.",
@@ -2,74 +2,74 @@ import { createSchema } from "json-rest-schema";
2
2
  import { secretReference } from "@jskit-ai/connectors-core/shared/configuration";
3
3
 
4
4
  const scopes = [
5
- {"value": "channels:history", "label": "View messages and other content in public channels you are in", "actors": ["user", "bot"], "recommended": true},
6
- {"value": "channels:read", "label": "View basic information about public channels in a workspace", "actors": ["user", "bot"], "recommended": true},
7
- {"value": "bookmarks:read", "label": "List bookmarks", "actors": ["user", "bot"]},
8
- {"value": "bookmarks:write", "label": "Create, edit, and remove bookmarks", "actors": ["user", "bot"]},
9
- {"value": "calls:read", "label": "View information about ongoing and past calls", "actors": ["user", "bot"]},
10
- {"value": "calls:write", "label": "Start and manage calls in a workspace", "actors": ["user", "bot"]},
11
- {"value": "canvases:read", "label": "Access contents of canvases created inside Slack.", "actors": ["user", "bot"]},
12
- {"value": "canvases:write", "label": "Create, edit and remove canvases", "actors": ["user", "bot"]},
13
- {"value": "channels:write", "label": "Manage a user's public channels and create new ones on a user's behalf", "actors": ["user"]},
14
- {"value": "channels:write.invites", "label": "Invite members to public channels", "actors": ["user", "bot"]},
15
- {"value": "channels:write.topic", "label": "Set the description of public channels", "actors": ["user", "bot"]},
16
- {"value": "chat:write", "label": "Send messages", "actors": ["user", "bot"]},
17
- {"value": "dnd:read", "label": "View Do Not Disturb settings for people in a workspace", "actors": ["user", "bot"]},
18
- {"value": "dnd:write", "label": "Edit a user's Do Not Disturb settings", "actors": ["user"]},
19
- {"value": "emoji:read", "label": "View custom emoji in a workspace", "actors": ["user", "bot"]},
20
- {"value": "files:read", "label": "View files shared in channels and conversations that your Slack app has been added to", "actors": ["user", "bot"]},
21
- {"value": "files:write", "label": "Upload, edit, and delete files as your Slack app", "actors": ["user", "bot"]},
22
- {"value": "groups:history", "label": "View messages and other content in private channels that your Slack app has been added to", "actors": ["user", "bot"]},
23
- {"value": "groups:read", "label": "View basic information about private channels that your Slack app has been added to", "actors": ["user", "bot"]},
24
- {"value": "groups:write", "label": "Manage private channels that your Slack app has been added to and create new ones", "actors": ["user", "bot"]},
25
- {"value": "groups:write.invites", "label": "Invite members to private channels", "actors": ["user", "bot"]},
26
- {"value": "groups:write.topic", "label": "Set the description of private channels", "actors": ["user", "bot"]},
27
- {"value": "im:history", "label": "View messages and other content in direct messages you are in", "actors": ["user", "bot"]},
28
- {"value": "im:read", "label": "View basic information about direct messages you are in", "actors": ["user", "bot"]},
29
- {"value": "im:write", "label": "Start direct messages with people", "actors": ["user", "bot"]},
30
- {"value": "im:write.topic", "label": "Set the description in direct messages", "actors": ["user", "bot"]},
31
- {"value": "lists:read", "label": "View Slack Lists", "actors": ["user", "bot"]},
32
- {"value": "lists:write", "label": "Create, edit, and delete Slack Lists", "actors": ["user", "bot"]},
33
- {"value": "mpim:history", "label": "View messages and other content in group direct messages that your Slack app has been added to", "actors": ["user", "bot"]},
34
- {"value": "mpim:read", "label": "View basic information about group direct messages that your Slack app has been added to", "actors": ["user", "bot"]},
35
- {"value": "mpim:write", "label": "Start group direct messages with people", "actors": ["user", "bot"]},
36
- {"value": "mpim:write.topic", "label": "Set the description in group direct messages", "actors": ["user", "bot"]},
37
- {"value": "pins:read", "label": "View pinned content in channels and conversations that your Slack app has been added to", "actors": ["user", "bot"]},
38
- {"value": "pins:write", "label": "Add and remove pinned messages and files", "actors": ["user", "bot"]},
39
- {"value": "reactions:read", "label": "View emoji reactions", "actors": ["user", "bot"]},
40
- {"value": "reactions:write", "label": "Add and edit emoji reactions", "actors": ["user", "bot"]},
41
- {"value": "reminders:read", "label": "View reminders created by your Slack app", "actors": ["user"]},
42
- {"value": "reminders:write", "label": "Add, remove, or mark reminders as complete", "actors": ["user"]},
43
- {"value": "search:read.files", "label": "Search a workspace's content in files", "actors": ["user", "bot"]},
44
- {"value": "search:read.im", "label": "Search a workspace's content in direct messages", "actors": ["user"]},
45
- {"value": "search:read.mpim", "label": "Search a workspace's content in group direct messages", "actors": ["user"]},
46
- {"value": "search:read.private", "label": "Search a workspace's content in private channels", "actors": ["user"]},
47
- {"value": "search:read.public", "label": "Search a workspace's content in public channels", "actors": ["user", "bot"]},
48
- {"value": "search:read.users", "label": "Search a workspace's users", "actors": ["user", "bot"]},
49
- {"value": "team:read", "label": "View the name, email domain, and icon for workspaces your Slack app is connected to", "actors": ["user", "bot"]},
50
- {"value": "usergroups:read", "label": "View user groups in a workspace", "actors": ["user", "bot"]},
51
- {"value": "usergroups:write", "label": "Create and manage user groups", "actors": ["user", "bot"]},
52
- {"value": "users:read", "label": "View people in a workspace", "actors": ["user", "bot"]},
53
- {"value": "users:read.email", "label": "View email addresses of people in a workspace", "actors": ["user", "bot"]},
54
- {"value": "users:write", "label": "Set presence for your Slack app", "actors": ["user", "bot"]},
55
- {"value": "users.profile:read", "label": "View profile details about people in a workspace", "actors": ["user", "bot"]},
56
- {"value": "users.profile:write", "label": "Edit a user's profile information and status", "actors": ["user"]},
57
- {"value": "channels:join", "label": "Join public channels in a workspace", "actors": ["bot"]},
58
- {"value": "channels:manage", "label": "Manage public channels that your Slack app has been added to and create new ones", "actors": ["bot"]},
59
- {"value": "chat:write.customize", "label": "Customize the content of messages sent by your Slack app", "actors": ["bot"]},
60
- {"value": "chat:write.public", "label": "Send messages to channels your Slack app isn't a member of", "actors": ["bot"]},
61
- {"value": "metadata.message:read", "label": "Allows your Slack app to read message metadata in channels that your Slack app has been added to", "actors": ["bot"]}
5
+ {"value": "channels:history", "label": "jskit.connectors.slack.scopes.channelsHistory.label", "actors": ["user", "bot"], "recommended": true},
6
+ {"value": "channels:read", "label": "jskit.connectors.slack.scopes.channelsRead.label", "actors": ["user", "bot"], "recommended": true},
7
+ {"value": "bookmarks:read", "label": "jskit.connectors.slack.scopes.bookmarksRead.label", "actors": ["user", "bot"]},
8
+ {"value": "bookmarks:write", "label": "jskit.connectors.slack.scopes.bookmarksWrite.label", "actors": ["user", "bot"]},
9
+ {"value": "calls:read", "label": "jskit.connectors.slack.scopes.callsRead.label", "actors": ["user", "bot"]},
10
+ {"value": "calls:write", "label": "jskit.connectors.slack.scopes.callsWrite.label", "actors": ["user", "bot"]},
11
+ {"value": "canvases:read", "label": "jskit.connectors.slack.scopes.canvasesRead.label", "actors": ["user", "bot"]},
12
+ {"value": "canvases:write", "label": "jskit.connectors.slack.scopes.canvasesWrite.label", "actors": ["user", "bot"]},
13
+ {"value": "channels:write", "label": "jskit.connectors.slack.scopes.channelsWrite.label", "actors": ["user"]},
14
+ {"value": "channels:write.invites", "label": "jskit.connectors.slack.scopes.channelsWriteInvites.label", "actors": ["user", "bot"]},
15
+ {"value": "channels:write.topic", "label": "jskit.connectors.slack.scopes.channelsWriteTopic.label", "actors": ["user", "bot"]},
16
+ {"value": "chat:write", "label": "jskit.connectors.slack.scopes.chatWrite.label", "actors": ["user", "bot"]},
17
+ {"value": "dnd:read", "label": "jskit.connectors.slack.scopes.dndRead.label", "actors": ["user", "bot"]},
18
+ {"value": "dnd:write", "label": "jskit.connectors.slack.scopes.dndWrite.label", "actors": ["user"]},
19
+ {"value": "emoji:read", "label": "jskit.connectors.slack.scopes.emojiRead.label", "actors": ["user", "bot"]},
20
+ {"value": "files:read", "label": "jskit.connectors.slack.scopes.filesRead.label", "actors": ["user", "bot"]},
21
+ {"value": "files:write", "label": "jskit.connectors.slack.scopes.filesWrite.label", "actors": ["user", "bot"]},
22
+ {"value": "groups:history", "label": "jskit.connectors.slack.scopes.groupsHistory.label", "actors": ["user", "bot"]},
23
+ {"value": "groups:read", "label": "jskit.connectors.slack.scopes.groupsRead.label", "actors": ["user", "bot"]},
24
+ {"value": "groups:write", "label": "jskit.connectors.slack.scopes.groupsWrite.label", "actors": ["user", "bot"]},
25
+ {"value": "groups:write.invites", "label": "jskit.connectors.slack.scopes.groupsWriteInvites.label", "actors": ["user", "bot"]},
26
+ {"value": "groups:write.topic", "label": "jskit.connectors.slack.scopes.groupsWriteTopic.label", "actors": ["user", "bot"]},
27
+ {"value": "im:history", "label": "jskit.connectors.slack.scopes.imHistory.label", "actors": ["user", "bot"]},
28
+ {"value": "im:read", "label": "jskit.connectors.slack.scopes.imRead.label", "actors": ["user", "bot"]},
29
+ {"value": "im:write", "label": "jskit.connectors.slack.scopes.imWrite.label", "actors": ["user", "bot"]},
30
+ {"value": "im:write.topic", "label": "jskit.connectors.slack.scopes.imWriteTopic.label", "actors": ["user", "bot"]},
31
+ {"value": "lists:read", "label": "jskit.connectors.slack.scopes.listsRead.label", "actors": ["user", "bot"]},
32
+ {"value": "lists:write", "label": "jskit.connectors.slack.scopes.listsWrite.label", "actors": ["user", "bot"]},
33
+ {"value": "mpim:history", "label": "jskit.connectors.slack.scopes.mpimHistory.label", "actors": ["user", "bot"]},
34
+ {"value": "mpim:read", "label": "jskit.connectors.slack.scopes.mpimRead.label", "actors": ["user", "bot"]},
35
+ {"value": "mpim:write", "label": "jskit.connectors.slack.scopes.mpimWrite.label", "actors": ["user", "bot"]},
36
+ {"value": "mpim:write.topic", "label": "jskit.connectors.slack.scopes.mpimWriteTopic.label", "actors": ["user", "bot"]},
37
+ {"value": "pins:read", "label": "jskit.connectors.slack.scopes.pinsRead.label", "actors": ["user", "bot"]},
38
+ {"value": "pins:write", "label": "jskit.connectors.slack.scopes.pinsWrite.label", "actors": ["user", "bot"]},
39
+ {"value": "reactions:read", "label": "jskit.connectors.slack.scopes.reactionsRead.label", "actors": ["user", "bot"]},
40
+ {"value": "reactions:write", "label": "jskit.connectors.slack.scopes.reactionsWrite.label", "actors": ["user", "bot"]},
41
+ {"value": "reminders:read", "label": "jskit.connectors.slack.scopes.remindersRead.label", "actors": ["user"]},
42
+ {"value": "reminders:write", "label": "jskit.connectors.slack.scopes.remindersWrite.label", "actors": ["user"]},
43
+ {"value": "search:read.files", "label": "jskit.connectors.slack.scopes.searchReadFiles.label", "actors": ["user", "bot"]},
44
+ {"value": "search:read.im", "label": "jskit.connectors.slack.scopes.searchReadIm.label", "actors": ["user"]},
45
+ {"value": "search:read.mpim", "label": "jskit.connectors.slack.scopes.searchReadMpim.label", "actors": ["user"]},
46
+ {"value": "search:read.private", "label": "jskit.connectors.slack.scopes.searchReadPrivate.label", "actors": ["user"]},
47
+ {"value": "search:read.public", "label": "jskit.connectors.slack.scopes.searchReadPublic.label", "actors": ["user", "bot"]},
48
+ {"value": "search:read.users", "label": "jskit.connectors.slack.scopes.searchReadUsers.label", "actors": ["user", "bot"]},
49
+ {"value": "team:read", "label": "jskit.connectors.slack.scopes.teamRead.label", "actors": ["user", "bot"]},
50
+ {"value": "usergroups:read", "label": "jskit.connectors.slack.scopes.usergroupsRead.label", "actors": ["user", "bot"]},
51
+ {"value": "usergroups:write", "label": "jskit.connectors.slack.scopes.usergroupsWrite.label", "actors": ["user", "bot"]},
52
+ {"value": "users:read", "label": "jskit.connectors.slack.scopes.usersRead.label", "actors": ["user", "bot"]},
53
+ {"value": "users:read.email", "label": "jskit.connectors.slack.scopes.usersReadEmail.label", "actors": ["user", "bot"]},
54
+ {"value": "users:write", "label": "jskit.connectors.slack.scopes.usersWrite.label", "actors": ["user", "bot"]},
55
+ {"value": "users.profile:read", "label": "jskit.connectors.slack.scopes.usersProfileRead.label", "actors": ["user", "bot"]},
56
+ {"value": "users.profile:write", "label": "jskit.connectors.slack.scopes.usersProfileWrite.label", "actors": ["user"]},
57
+ {"value": "channels:join", "label": "jskit.connectors.slack.scopes.channelsJoin.label", "actors": ["bot"]},
58
+ {"value": "channels:manage", "label": "jskit.connectors.slack.scopes.channelsManage.label", "actors": ["bot"]},
59
+ {"value": "chat:write.customize", "label": "jskit.connectors.slack.scopes.chatWriteCustomize.label", "actors": ["bot"]},
60
+ {"value": "chat:write.public", "label": "jskit.connectors.slack.scopes.chatWritePublic.label", "actors": ["bot"]},
61
+ {"value": "metadata.message:read", "label": "jskit.connectors.slack.scopes.metadataMessageRead.label", "actors": ["bot"]}
62
62
  ];
63
63
 
64
64
  const slackDefinition = Object.freeze({
65
- id: "slack", name: "Slack", description: "Connect as a Slack user or install a bot to read conversations and send messages.",
65
+ id: "slack", name: "Slack", description: "jskit.connectors.slack.description",
66
66
  accountModes: ["shared", "per-user", "assistant"], authenticationMethods: ["oauth2"],
67
67
  scopes,
68
68
  scopesForSettings: ({ actor = "user" } = {}) => scopes.filter((scope) => scope.actors.includes(actor)),
69
69
  settingsSchema: createSchema({ signingSecretRef: { ...secretReference, required: false }, actor: { type: "string", enum: ["user", "bot"], defaultTo: "user" } }),
70
- settingsFields: [{ name: "signingSecretRef", label: "Signing secret reference (optional)", placeholder: "env:SLACK_SIGNING_SECRET", hint: "For incoming events and interactions: Basic Information → App Credentials → Signing Secret. Keep the value in application Env, separate from Client Secret." }, { name: "actor", label: "Act in Slack as", items: [
71
- { value: "user", title: "Connected user" }, { value: "bot", title: "Installed bot" }
72
- ], hint: "User access acts as the person who connects. Bot access acts as the app in its installed workspace. Changing this choice removes permissions unavailable to that identity and requires reconnecting." }],
70
+ settingsFields: [{ name: "signingSecretRef", label: "jskit.connectors.slack.fields.signingSecretRef.label", placeholder: "env:SLACK_SIGNING_SECRET", hint: "jskit.connectors.slack.fields.signingSecretRef.hint" }, { name: "actor", label: "jskit.connectors.slack.fields.actor.label", items: [
71
+ { value: "user", title: "jskit.connectors.slack.fields.actor.items.user.title" }, { value: "bot", title: "jskit.connectors.slack.fields.actor.items.bot.title" }
72
+ ], hint: "jskit.connectors.slack.fields.actor.hint" }],
73
73
  setup: {
74
74
  url: "https://docs.slack.dev/authentication/installing-with-oauth/",
75
75
  steps: [