@jskit-ai/connectors-catalog 0.2.3 → 0.2.4

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 (192) hide show
  1. package/README.md +4 -4
  2. package/docs/ai.md +3 -3
  3. package/docs/airtable.md +1 -1
  4. package/docs/algolia.md +2 -2
  5. package/docs/amazon-redshift.md +2 -2
  6. package/docs/apollo-io.md +2 -2
  7. package/docs/asana.md +2 -2
  8. package/docs/ashby.md +1 -1
  9. package/docs/attention.md +2 -2
  10. package/docs/aws-athena.md +1 -1
  11. package/docs/aws-credentials.md +3 -3
  12. package/docs/aws-s3.md +1 -1
  13. package/docs/bigquery.md +2 -2
  14. package/docs/brevo.md +2 -2
  15. package/docs/calendly.md +3 -3
  16. package/docs/canva.md +2 -2
  17. package/docs/chargebee.md +2 -2
  18. package/docs/clay.md +2 -2
  19. package/docs/clickhouse.md +1 -1
  20. package/docs/confidence-flags.md +1 -1
  21. package/docs/contentful.md +1 -1
  22. package/docs/dbt-semantic-layer.md +2 -2
  23. package/docs/elevenlabs.md +2 -2
  24. package/docs/firebase-cloud-messaging.md +3 -3
  25. package/docs/firecrawl.md +4 -4
  26. package/docs/fireflies.md +1 -1
  27. package/docs/gatewayapi.md +1 -1
  28. package/docs/gemini-enterprise.md +1 -1
  29. package/docs/github-api.md +1 -1
  30. package/docs/gitlab-api.md +1 -1
  31. package/docs/gmail.md +1 -1
  32. package/docs/gong.md +1 -1
  33. package/docs/google-ads.md +3 -3
  34. package/docs/google-analytics.md +2 -2
  35. package/docs/google-docs.md +1 -1
  36. package/docs/google-drive.md +1 -1
  37. package/docs/google-maps-platform.md +2 -2
  38. package/docs/google-search-console.md +1 -1
  39. package/docs/google-sheets.md +1 -1
  40. package/docs/google-slides.md +2 -2
  41. package/docs/granola.md +2 -2
  42. package/docs/hex.md +2 -2
  43. package/docs/heygen.md +2 -2
  44. package/docs/inngest.md +1 -1
  45. package/docs/klipy.md +1 -1
  46. package/docs/lightspeed.md +2 -2
  47. package/docs/linear.md +1 -1
  48. package/docs/linkedin.md +2 -2
  49. package/docs/mailgun.md +1 -1
  50. package/docs/microsoft-excel.md +2 -2
  51. package/docs/microsoft-fabric.md +1 -1
  52. package/docs/microsoft-outlook.md +1 -1
  53. package/docs/microsoft-powerpoint.md +1 -1
  54. package/docs/microsoft-teams.md +1 -1
  55. package/docs/microsoft-word.md +1 -1
  56. package/docs/notion.md +1 -1
  57. package/docs/oura.md +3 -3
  58. package/docs/paddle.md +3 -3
  59. package/docs/pipedrive.md +2 -2
  60. package/docs/prestashop.md +1 -1
  61. package/docs/replicate.md +1 -1
  62. package/docs/resend.md +1 -1
  63. package/docs/salesforce.md +1 -1
  64. package/docs/sanity.md +3 -3
  65. package/docs/semrush.md +2 -2
  66. package/docs/sentry.md +1 -1
  67. package/docs/slack.md +1 -1
  68. package/docs/snowflake.md +5 -5
  69. package/docs/storyblok.md +1 -1
  70. package/docs/stripe.md +2 -2
  71. package/docs/tally.md +1 -1
  72. package/docs/telegram.md +2 -2
  73. package/docs/tiktok.md +3 -3
  74. package/docs/twilio.md +3 -3
  75. package/docs/twitch.md +2 -2
  76. package/docs/wave.md +3 -3
  77. package/docs/wix.md +13 -13
  78. package/docs/wordpress-com.md +1 -1
  79. package/docs/wordpress-self-hosted.md +1 -1
  80. package/docs/workday.md +2 -2
  81. package/docs/x-twitter.md +3 -3
  82. package/docs/xero.md +3 -3
  83. package/docs/zoho-books.md +2 -2
  84. package/docs/zoho-crm.md +2 -2
  85. package/package.json +4 -3
  86. package/patterns/ai-connections/PATTERN.md +16 -1
  87. package/patterns/ai-connections/example/ai-model.js +12 -3
  88. package/patterns/ai-connections/example/perplexity-answer.js +15 -4
  89. package/patterns/api-key-connection/PATTERN.md +9 -1
  90. package/patterns/api-key-connection/example/connections.js +5 -2
  91. package/patterns/aws-storage-queries/PATTERN.md +13 -3
  92. package/patterns/aws-storage-queries/example/s3-transfer.js +14 -3
  93. package/patterns/event-delivery/PATTERN.md +1 -1
  94. package/patterns/firebase-messaging/PATTERN.md +10 -0
  95. package/patterns/firebase-messaging/example/server/notifications.js +8 -0
  96. package/patterns/google-ads-search/PATTERN.md +18 -7
  97. package/patterns/google-ads-search/example/ads-setup.js +13 -5
  98. package/patterns/oauth-connection/PATTERN.md +1 -1
  99. package/patterns/paddle-catalogue/PATTERN.md +11 -2
  100. package/patterns/paddle-catalogue/example/create-products.js +5 -2
  101. package/patterns/public-image/PATTERN.md +10 -1
  102. package/patterns/public-image/example/logo-url.js +4 -1
  103. package/patterns/redshift-queries/PATTERN.md +1 -1
  104. package/patterns/source-scanning/PATTERN.md +13 -2
  105. package/patterns/source-scanning/example/source-scanner.js +9 -0
  106. package/src/server/ai.js +19 -5
  107. package/src/server/apify.js +2 -2
  108. package/src/server/asana.js +6 -6
  109. package/src/server/ashby.js +2 -1
  110. package/src/server/attention.js +12 -11
  111. package/src/server/awsTransport.js +6 -0
  112. package/src/server/bigquery.js +5 -4
  113. package/src/server/brevo.js +2 -1
  114. package/src/server/clay.js +2 -1
  115. package/src/server/clickhouse.js +2 -1
  116. package/src/server/confidence.js +6 -1
  117. package/src/server/connectorValues.js +33 -0
  118. package/src/server/databricks.js +7 -7
  119. package/src/server/dbt-semantic-layer.js +5 -5
  120. package/src/server/elevenlabs.js +2 -2
  121. package/src/server/firebase-cloud-messaging.js +2 -2
  122. package/src/server/gemini-enterprise.js +5 -5
  123. package/src/server/google-ads-search.js +68 -48
  124. package/src/server/google-ads.js +15 -17
  125. package/src/server/google-drive.js +7 -7
  126. package/src/server/google-maps-platform.js +4 -2
  127. package/src/server/google-search-console.js +4 -3
  128. package/src/server/google.js +8 -4
  129. package/src/server/googleAdsApi.js +14 -0
  130. package/src/server/granola.js +2 -2
  131. package/src/server/hubspot.js +2 -1
  132. package/src/server/incident-io.js +3 -2
  133. package/src/server/lexware.js +5 -4
  134. package/src/server/lightspeed.js +7 -5
  135. package/src/server/linkedin.js +2 -2
  136. package/src/server/mcpTransport.js +8 -4
  137. package/src/server/microsoft-fabric.js +3 -3
  138. package/src/server/microsoft-onedrive.js +2 -2
  139. package/src/server/microsoft-onenote.js +4 -3
  140. package/src/server/microsoft-outlook.js +6 -6
  141. package/src/server/microsoft-sharepoint.js +4 -2
  142. package/src/server/microsoft-teams.js +2 -1
  143. package/src/server/microsoft.js +20 -13
  144. package/src/server/notion.js +2 -1
  145. package/src/server/pipedrive.js +2 -1
  146. package/src/server/salesforce.js +12 -12
  147. package/src/server/semrush.js +9 -8
  148. package/src/server/snowflake.js +20 -20
  149. package/src/server/storyblok.js +2 -1
  150. package/src/server/tally.js +2 -1
  151. package/src/server/telegram.js +2 -6
  152. package/src/server/tiktok.js +3 -3
  153. package/src/server/twilio.js +3 -2
  154. package/src/server/twitch.js +5 -3
  155. package/src/server/types.js +13 -0
  156. package/src/server/wix.js +20 -878
  157. package/src/server/wixBookings.js +449 -0
  158. package/src/server/wixCms.js +132 -0
  159. package/src/server/wixStores.js +296 -0
  160. package/src/server/wixValues.js +35 -0
  161. package/src/server/wiz.js +18 -4
  162. package/src/server/woocommerce.js +1 -1
  163. package/src/server/wordpress-com.js +2 -1
  164. package/src/server/workday.js +9 -9
  165. package/src/server/x-twitter.js +2 -1
  166. package/src/server/xero.js +40 -40
  167. package/src/server/zoho-books.js +6 -6
  168. package/src/server/zoho-crm.js +5 -5
  169. package/src/shared/confidence.js +6 -1
  170. package/src/shared/dbt-semantic-layer.js +1 -1
  171. package/src/shared/figma.js +1 -1
  172. package/src/shared/google.js +8 -4
  173. package/src/shared/googleScope.js +4 -0
  174. package/src/shared/microsoft-fabric.js +4 -5
  175. package/src/shared/microsoft.js +8 -3
  176. package/src/shared/salesforce.js +1 -1
  177. package/src/shared/tokens.js +7 -3
  178. package/src/shared/uuid.js +13 -0
  179. package/src/shared/wix.js +4 -3
  180. package/src/shared/zoho-books.js +3 -4
  181. package/src/shared/zoho-crm.js +1 -1
  182. package/src/shared/{zoho-regions.js → zoho.js} +4 -1
  183. package/test/ai.test.js +1 -1
  184. package/test/brevo.test.js +1 -1
  185. package/test/chargebee.test.js +1 -1
  186. package/test/google-ads.test.js +8 -4
  187. package/test/linkedin.test.js +1 -1
  188. package/test/resend.test.js +2 -2
  189. package/test/salesforce.test.js +1 -1
  190. package/test/snowflake.test.js +7 -7
  191. package/test/tiktok.test.js +1 -1
  192. package/test/wiz.test.js +1 -1
@@ -1,9 +1,9 @@
1
1
  import { ConnectorError } from "@jskit-ai/connectors-core/server";
2
2
  import { tiktokDefinition } from "../shared/tiktok.js";
3
3
  import { jsonOperation } from "./jsonOperation.js";
4
+ import { isCount } from "./connectorValues.js";
4
5
 
5
6
  const textId = (value) => typeof value === "string" && value.length > 0 && value.length <= 1024 && !/[\p{Cc}]/u.test(value);
6
- const count = (value) => Number.isSafeInteger(value) && value >= 0;
7
7
 
8
8
  function checkReply(value) {
9
9
  const code = value?.error?.code ?? value?.code;
@@ -55,14 +55,14 @@ const tiktokProvider = Object.freeze({
55
55
  "profile.extended": profileOperation(["username", "bio_description", "profile_deep_link", "is_verified"], "user.info.profile", (user) =>
56
56
  ["username", "bio_description", "profile_deep_link"].every((field) => typeof user?.[field] === "string") && typeof user?.is_verified === "boolean"),
57
57
  "profile.stats": profileOperation(["follower_count", "following_count", "likes_count", "video_count"], "user.info.stats", (user) =>
58
- ["follower_count", "following_count", "likes_count", "video_count"].every((field) => count(user?.[field]))),
58
+ ["follower_count", "following_count", "likes_count", "video_count"].every((field) => isCount(user?.[field]))),
59
59
  "videos.list": {
60
60
  ...jsonOperation("https://open.tiktokapis.com/v2/video/list/?fields=id,title,cover_image_url", {
61
61
  max_count: { type: "integer", min: 1, max: 20, defaultTo: 10 },
62
62
  cursor: { type: "integer", min: 0, max: Number.MAX_SAFE_INTEGER }
63
63
  }, (value) => value?.error?.code === "ok" && Array.isArray(value.data?.videos) && value.data.videos.length <= 20 &&
64
64
  value.data.videos.every((video) => textId(video?.id) && typeof video.title === "string" && typeof video.cover_image_url === "string") &&
65
- typeof value.data.has_more === "boolean" && count(value.data.cursor), "POST"),
65
+ typeof value.data.has_more === "boolean" && isCount(value.data.cursor), "POST"),
66
66
  scopes: ["video.list"]
67
67
  }
68
68
  },
@@ -14,13 +14,14 @@ const callbackUrl = { type: "string", maxLength: 2048, validator: value => {
14
14
  try { const url = new URL(value); return url.protocol === "https:" && !url.username && !url.password && !url.hash || "Use an HTTPS URL without credentials or a fragment."; }
15
15
  catch { return "Use an absolute HTTPS URL."; }
16
16
  } };
17
- function resourceOperation(resource, method, fields, checkInput) {
17
+ function acceptAnyValues() {}
18
+ function resourceOperation(resource, method, fields, checkInput = acceptAnyValues) {
18
19
  const schema = createSchema(fields);
19
20
  return {
20
21
  scopes: [],
21
22
  request(input, settings) {
22
23
  const { resourceSid, ...values } = validateSchemaPayload({ schema, mode: "replace" }, input, { statusCode: 422 });
23
- checkInput?.(values, settings);
24
+ checkInput(values, settings);
24
25
  const url = `${origins[settings.region]}/2010-04-01/Accounts/${settings.accountSid}/${resource}${resourceSid ? `/${resourceSid}` : ""}.json`;
25
26
  if (method === "GET") return { method, url };
26
27
  return { method, url, headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams(values).toString() };
@@ -2,6 +2,7 @@ import { ConnectorError } from "@jskit-ai/connectors-core/server";
2
2
  import { twitchDefinition } from "../shared/twitch.js";
3
3
  import { jsonOperation } from "./jsonOperation.js";
4
4
  import { createSchema } from "json-rest-schema";
5
+ import { isRecord } from "@jskit-ai/kernel/shared/support/normalize";
5
6
 
6
7
  const validationUrl = "https://id.twitch.tv/oauth2/validate";
7
8
  const userId = (value) => typeof value === "string" && /^[1-9]\d*$/u.test(value);
@@ -27,16 +28,17 @@ const choiceList = max => ({ type: "array", required: true,
27
28
  validator: values => values.length >= 2 && values.length <= max || `Use between two and ${max} choices.` });
28
29
  const interactionResult = value => Array.isArray(value?.data) && value.data.every(item =>
29
30
  typeof item?.id === "string" && userId(item.broadcaster_id) && typeof item.status === "string");
30
- function helixOperation(path, fields, scopes, validateResult, method = "GET", checkInput) {
31
+ function acceptAnyBody() {}
32
+ function helixOperation(path, fields, scopes, validateResult, method = "GET", checkInput = acceptAnyBody) {
31
33
  const operation = jsonOperation(`https://api.twitch.tv/helix/${path}`, fields, validateResult, method === "GET" ? "GET" : "POST");
32
34
  return { ...operation, scopes, request(input) {
33
35
  const request = operation.request(input);
34
- checkInput?.(request.body);
36
+ checkInput(request.body);
35
37
  return { ...request, method };
36
38
  } };
37
39
  }
38
40
  const page = (value, record) => Array.isArray(value?.data) && value.data.every(record) &&
39
- value.pagination && typeof value.pagination === "object" && !Array.isArray(value.pagination) &&
41
+ isRecord(value.pagination) &&
40
42
  (value.pagination.cursor === undefined || typeof value.pagination.cursor === "string");
41
43
  function analyticsOperation(kind, identity) {
42
44
  const date = { type: "string", validator: value => /^\d{4}-\d{2}-\d{2}T00:00:00Z$/u.test(value) &&
@@ -0,0 +1,13 @@
1
+ // The types of the services connectors-catalog builds, for code that receives them,
2
+ // and the contracts of what an application passes them.
3
+
4
+ /** @typedef {ReturnType<typeof import("./ai.js").createAiConnectionResolver>} AiConnectionResolver */
5
+ /** @typedef {ReturnType<typeof import("./google-ads-search.js").createGoogleAdsSearchService>} GoogleAdsSearchService */
6
+
7
+ /**
8
+ * The application's choice of what to scan for an authorized owner: an
9
+ * immutable source snapshot and its revision, never a path from the browser.
10
+ * @typedef {(owner: import("@jskit-ai/connectors-core/server/types").ConnectionOwner, request: { integrationId: string, signal?: AbortSignal }) => Promise<{ directory: string, revision: string }>} WizScanTargetResolver
11
+ */
12
+
13
+ export {};