@jskit-ai/connectors-catalog 0.1.1

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 (399) hide show
  1. package/README.md +192 -0
  2. package/docs/ai-upstream-notices.md +51 -0
  3. package/docs/ai.md +191 -0
  4. package/docs/airtable.md +130 -0
  5. package/docs/algolia.md +190 -0
  6. package/docs/amazon-redshift.md +229 -0
  7. package/docs/amplitude.md +210 -0
  8. package/docs/apify.md +162 -0
  9. package/docs/apollo-io.md +200 -0
  10. package/docs/asana.md +126 -0
  11. package/docs/ashby.md +188 -0
  12. package/docs/atlassian.md +224 -0
  13. package/docs/attention.md +162 -0
  14. package/docs/aws-athena.md +150 -0
  15. package/docs/aws-credentials.md +75 -0
  16. package/docs/aws-s3.md +193 -0
  17. package/docs/bigquery.md +146 -0
  18. package/docs/brevo.md +122 -0
  19. package/docs/calendly.md +158 -0
  20. package/docs/canva.md +191 -0
  21. package/docs/chargebee.md +192 -0
  22. package/docs/clay.md +194 -0
  23. package/docs/clickhouse.md +242 -0
  24. package/docs/confidence-exp.md +74 -0
  25. package/docs/confidence-flags.md +75 -0
  26. package/docs/confidence-oauth.md +137 -0
  27. package/docs/contentful.md +123 -0
  28. package/docs/databricks.md +180 -0
  29. package/docs/dbt-semantic-layer.md +175 -0
  30. package/docs/elevenlabs.md +102 -0
  31. package/docs/figma.md +132 -0
  32. package/docs/firebase-cloud-messaging.md +262 -0
  33. package/docs/firecrawl.md +137 -0
  34. package/docs/fireflies.md +95 -0
  35. package/docs/fireworks-ai.md +53 -0
  36. package/docs/gatewayapi.md +113 -0
  37. package/docs/gemini-enterprise.md +224 -0
  38. package/docs/github-api.md +133 -0
  39. package/docs/gitlab-api.md +138 -0
  40. package/docs/gmail.md +133 -0
  41. package/docs/gong.md +205 -0
  42. package/docs/google-ads.md +156 -0
  43. package/docs/google-analytics.md +202 -0
  44. package/docs/google-docs.md +105 -0
  45. package/docs/google-drive.md +108 -0
  46. package/docs/google-maps-platform.md +208 -0
  47. package/docs/google-oauth.md +123 -0
  48. package/docs/google-search-console.md +124 -0
  49. package/docs/google-sheets.md +94 -0
  50. package/docs/google-slides.md +95 -0
  51. package/docs/granola.md +178 -0
  52. package/docs/hex.md +161 -0
  53. package/docs/heygen.md +124 -0
  54. package/docs/hubspot.md +142 -0
  55. package/docs/incident-io.md +118 -0
  56. package/docs/inngest.md +178 -0
  57. package/docs/klipy.md +149 -0
  58. package/docs/lexware.md +144 -0
  59. package/docs/lightspeed.md +193 -0
  60. package/docs/linear.md +137 -0
  61. package/docs/linkedin.md +196 -0
  62. package/docs/logo-dev.md +152 -0
  63. package/docs/mailgun.md +153 -0
  64. package/docs/mapbox.md +174 -0
  65. package/docs/microsoft-excel.md +97 -0
  66. package/docs/microsoft-fabric.md +249 -0
  67. package/docs/microsoft-oauth.md +143 -0
  68. package/docs/microsoft-onedrive.md +76 -0
  69. package/docs/microsoft-onenote.md +75 -0
  70. package/docs/microsoft-outlook.md +90 -0
  71. package/docs/microsoft-powerpoint.md +119 -0
  72. package/docs/microsoft-sharepoint.md +75 -0
  73. package/docs/microsoft-teams.md +72 -0
  74. package/docs/microsoft-word.md +119 -0
  75. package/docs/miro.md +117 -0
  76. package/docs/n8n.md +169 -0
  77. package/docs/notion.md +137 -0
  78. package/docs/oura.md +161 -0
  79. package/docs/paddle.md +168 -0
  80. package/docs/perplexity.md +85 -0
  81. package/docs/pipedrive.md +120 -0
  82. package/docs/polar.md +63 -0
  83. package/docs/posthog.md +227 -0
  84. package/docs/prestashop.md +151 -0
  85. package/docs/replicate.md +60 -0
  86. package/docs/resend.md +153 -0
  87. package/docs/salesforce.md +234 -0
  88. package/docs/sanity.md +122 -0
  89. package/docs/semrush.md +276 -0
  90. package/docs/sentry.md +112 -0
  91. package/docs/sevdesk.md +107 -0
  92. package/docs/shopify.md +206 -0
  93. package/docs/slack.md +257 -0
  94. package/docs/snowflake.md +271 -0
  95. package/docs/storyblok.md +130 -0
  96. package/docs/stripe.md +77 -0
  97. package/docs/supabase.md +51 -0
  98. package/docs/tally.md +105 -0
  99. package/docs/telegram.md +165 -0
  100. package/docs/tiktok.md +201 -0
  101. package/docs/twilio.md +284 -0
  102. package/docs/twitch.md +428 -0
  103. package/docs/wave.md +440 -0
  104. package/docs/wix.md +1249 -0
  105. package/docs/wiz.md +177 -0
  106. package/docs/woocommerce.md +400 -0
  107. package/docs/wordpress-com.md +358 -0
  108. package/docs/wordpress-self-hosted.md +252 -0
  109. package/docs/workday.md +292 -0
  110. package/docs/x-twitter.md +188 -0
  111. package/docs/xero.md +429 -0
  112. package/docs/zoho-books.md +214 -0
  113. package/docs/zoho-crm.md +192 -0
  114. package/package.json +153 -0
  115. package/patterns/ai-connections/PATTERN.md +84 -0
  116. package/patterns/ai-connections/example/ai-model.js +11 -0
  117. package/patterns/ai-connections/example/perplexity-answer.js +29 -0
  118. package/patterns/api-key-connection/PATTERN.md +368 -0
  119. package/patterns/api-key-connection/example/connections.js +18 -0
  120. package/patterns/api-key-connection/example/integrations.json +19 -0
  121. package/patterns/assistant-mcp/PATTERN.md +110 -0
  122. package/patterns/assistant-mcp/example/integrations.json +13 -0
  123. package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
  124. package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
  125. package/patterns/aws-storage-queries/PATTERN.md +169 -0
  126. package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
  127. package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
  128. package/patterns/aws-storage-queries/example/formats/package.json +12 -0
  129. package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
  130. package/patterns/aws-storage-queries/example/integrations.json +38 -0
  131. package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
  132. package/patterns/event-delivery/PATTERN.md +151 -0
  133. package/patterns/event-delivery/example/integrations.json +17 -0
  134. package/patterns/firebase-messaging/PATTERN.md +156 -0
  135. package/patterns/firebase-messaging/example/server/notifications.js +23 -0
  136. package/patterns/google-ads-search/PATTERN.md +92 -0
  137. package/patterns/google-ads-search/example/ads-setup.js +25 -0
  138. package/patterns/oauth-connection/PATTERN.md +724 -0
  139. package/patterns/oauth-connection/example/integrations.json +20 -0
  140. package/patterns/paddle-catalogue/PATTERN.md +78 -0
  141. package/patterns/paddle-catalogue/example/create-products.js +38 -0
  142. package/patterns/public-image/PATTERN.md +84 -0
  143. package/patterns/public-image/example/integrations.json +13 -0
  144. package/patterns/public-image/example/logo-url.js +16 -0
  145. package/patterns/redshift-queries/PATTERN.md +150 -0
  146. package/patterns/redshift-queries/example/integrations.json +33 -0
  147. package/patterns/source-scanning/PATTERN.md +83 -0
  148. package/patterns/source-scanning/example/source-scanner.js +13 -0
  149. package/src/client/firebase-cloud-messaging.js +10 -0
  150. package/src/client/google-analytics.js +72 -0
  151. package/src/client/google-maps-platform.js +39 -0
  152. package/src/client/logo-dev.js +36 -0
  153. package/src/server/ai.js +46 -0
  154. package/src/server/airtable.js +67 -0
  155. package/src/server/algolia.js +63 -0
  156. package/src/server/amazon-redshift.js +96 -0
  157. package/src/server/amplitude.js +31 -0
  158. package/src/server/apify.js +68 -0
  159. package/src/server/apollo-io.js +85 -0
  160. package/src/server/asana.js +64 -0
  161. package/src/server/ashby.js +61 -0
  162. package/src/server/atlassian.js +32 -0
  163. package/src/server/attention.js +93 -0
  164. package/src/server/aws-athena.js +82 -0
  165. package/src/server/aws-s3.js +49 -0
  166. package/src/server/awsTransport.js +75 -0
  167. package/src/server/bigquery.js +97 -0
  168. package/src/server/brevo.js +97 -0
  169. package/src/server/calendly.js +77 -0
  170. package/src/server/canva.js +13 -0
  171. package/src/server/chargebee.js +88 -0
  172. package/src/server/clay.js +78 -0
  173. package/src/server/clickhouse.js +66 -0
  174. package/src/server/confidence.js +29 -0
  175. package/src/server/contentful.js +40 -0
  176. package/src/server/databricks.js +55 -0
  177. package/src/server/dbt-semantic-layer.js +95 -0
  178. package/src/server/elevenlabs.js +81 -0
  179. package/src/server/figma.js +24 -0
  180. package/src/server/firebase-cloud-messaging.js +111 -0
  181. package/src/server/firecrawl.js +70 -0
  182. package/src/server/fireflies.js +31 -0
  183. package/src/server/fireworks-ai.js +16 -0
  184. package/src/server/gatewayapi.js +48 -0
  185. package/src/server/gemini-enterprise.js +47 -0
  186. package/src/server/github-api.js +90 -0
  187. package/src/server/gitlab-api.js +67 -0
  188. package/src/server/gmail.js +60 -0
  189. package/src/server/gong.js +52 -0
  190. package/src/server/google-ads-search.js +134 -0
  191. package/src/server/google-ads.js +80 -0
  192. package/src/server/google-docs.js +36 -0
  193. package/src/server/google-drive.js +71 -0
  194. package/src/server/google-maps-platform.js +90 -0
  195. package/src/server/google-search-console.js +31 -0
  196. package/src/server/google-sheets.js +60 -0
  197. package/src/server/google-slides.js +36 -0
  198. package/src/server/google.js +61 -0
  199. package/src/server/granola.js +115 -0
  200. package/src/server/graphqlOperation.js +15 -0
  201. package/src/server/hex.js +29 -0
  202. package/src/server/heygen.js +54 -0
  203. package/src/server/hubspot.js +85 -0
  204. package/src/server/incident-io.js +68 -0
  205. package/src/server/inngest.js +86 -0
  206. package/src/server/jsonOperation.js +34 -0
  207. package/src/server/klipy.js +34 -0
  208. package/src/server/lexware.js +59 -0
  209. package/src/server/lightspeed.js +82 -0
  210. package/src/server/linear.js +52 -0
  211. package/src/server/linkedin.js +74 -0
  212. package/src/server/mailgun.js +76 -0
  213. package/src/server/mapbox.js +46 -0
  214. package/src/server/mcpRegistration.js +41 -0
  215. package/src/server/mcpTransport.js +60 -0
  216. package/src/server/microsoft-excel.js +67 -0
  217. package/src/server/microsoft-fabric.js +81 -0
  218. package/src/server/microsoft-onedrive.js +58 -0
  219. package/src/server/microsoft-onenote.js +52 -0
  220. package/src/server/microsoft-outlook.js +58 -0
  221. package/src/server/microsoft-powerpoint.js +5 -0
  222. package/src/server/microsoft-sharepoint.js +46 -0
  223. package/src/server/microsoft-teams.js +29 -0
  224. package/src/server/microsoft-word.js +5 -0
  225. package/src/server/microsoft.js +88 -0
  226. package/src/server/miro.js +29 -0
  227. package/src/server/n8n.js +78 -0
  228. package/src/server/notion.js +76 -0
  229. package/src/server/oura.js +48 -0
  230. package/src/server/paddle.js +83 -0
  231. package/src/server/perplexity.js +15 -0
  232. package/src/server/pipedrive.js +95 -0
  233. package/src/server/polar.js +20 -0
  234. package/src/server/posthog.js +44 -0
  235. package/src/server/prestashop.js +42 -0
  236. package/src/server/replicate.js +42 -0
  237. package/src/server/resend.js +93 -0
  238. package/src/server/salesforce.js +84 -0
  239. package/src/server/sanity.js +31 -0
  240. package/src/server/semrush.js +359 -0
  241. package/src/server/sentry.js +30 -0
  242. package/src/server/sevdesk.js +20 -0
  243. package/src/server/shopify.js +99 -0
  244. package/src/server/slack.js +143 -0
  245. package/src/server/snowflake.js +139 -0
  246. package/src/server/storyblok.js +49 -0
  247. package/src/server/stripe.js +13 -0
  248. package/src/server/supabase.js +13 -0
  249. package/src/server/tally.js +78 -0
  250. package/src/server/telegram.js +55 -0
  251. package/src/server/tiktok.js +86 -0
  252. package/src/server/twilio.js +90 -0
  253. package/src/server/twitch.js +409 -0
  254. package/src/server/wave.js +520 -0
  255. package/src/server/wix.js +1048 -0
  256. package/src/server/wiz.js +117 -0
  257. package/src/server/woocommerce.js +412 -0
  258. package/src/server/wordpress-com.js +236 -0
  259. package/src/server/wordpress-self-hosted.js +134 -0
  260. package/src/server/workday.js +136 -0
  261. package/src/server/x-twitter.js +110 -0
  262. package/src/server/xero.js +397 -0
  263. package/src/server/zoho-books.js +90 -0
  264. package/src/server/zoho-crm.js +89 -0
  265. package/src/server/zohoOAuth.js +21 -0
  266. package/src/shared/ai-models.json +8049 -0
  267. package/src/shared/ai.js +63 -0
  268. package/src/shared/algolia.js +29 -0
  269. package/src/shared/amazon-redshift.js +51 -0
  270. package/src/shared/amplitude.js +28 -0
  271. package/src/shared/atlassian.js +43 -0
  272. package/src/shared/aws.js +72 -0
  273. package/src/shared/canva.js +66 -0
  274. package/src/shared/chargebee.js +26 -0
  275. package/src/shared/clickhouse.js +38 -0
  276. package/src/shared/confidence.js +28 -0
  277. package/src/shared/databricks.js +33 -0
  278. package/src/shared/dbt-semantic-layer.js +32 -0
  279. package/src/shared/definitions.js +140 -0
  280. package/src/shared/figma.js +21 -0
  281. package/src/shared/firebase-cloud-messaging.js +45 -0
  282. package/src/shared/gemini-enterprise.js +33 -0
  283. package/src/shared/gong.js +33 -0
  284. package/src/shared/google-ads-search.js +31 -0
  285. package/src/shared/google-ads.js +28 -0
  286. package/src/shared/google-maps-platform.js +28 -0
  287. package/src/shared/google.js +133 -0
  288. package/src/shared/granola.js +25 -0
  289. package/src/shared/hex.js +28 -0
  290. package/src/shared/inngest.js +35 -0
  291. package/src/shared/lightspeed.js +75 -0
  292. package/src/shared/linkedin.js +27 -0
  293. package/src/shared/logo-dev.js +21 -0
  294. package/src/shared/mapbox.js +38 -0
  295. package/src/shared/mcp.js +92 -0
  296. package/src/shared/microsoft-fabric.js +47 -0
  297. package/src/shared/microsoft.js +231 -0
  298. package/src/shared/miro.js +27 -0
  299. package/src/shared/oura.js +23 -0
  300. package/src/shared/posthog.js +33 -0
  301. package/src/shared/prestashop.js +23 -0
  302. package/src/shared/salesforce.js +36 -0
  303. package/src/shared/semrush.js +24 -0
  304. package/src/shared/shopify.js +51 -0
  305. package/src/shared/siteUrl.js +12 -0
  306. package/src/shared/slack.js +88 -0
  307. package/src/shared/snowflake.js +55 -0
  308. package/src/shared/tiktok.js +22 -0
  309. package/src/shared/tokens.js +747 -0
  310. package/src/shared/twilio.js +41 -0
  311. package/src/shared/twitch.js +49 -0
  312. package/src/shared/wave.js +52 -0
  313. package/src/shared/wix.js +40 -0
  314. package/src/shared/wiz.js +41 -0
  315. package/src/shared/wordpress-com.js +30 -0
  316. package/src/shared/wordpress.js +69 -0
  317. package/src/shared/workday.js +50 -0
  318. package/src/shared/x-twitter.js +19 -0
  319. package/src/shared/xero.js +46 -0
  320. package/src/shared/zoho-books.js +39 -0
  321. package/src/shared/zoho-crm.js +43 -0
  322. package/src/shared/zoho-regions.js +12 -0
  323. package/test/ai.test.js +136 -0
  324. package/test/airtable.test.js +125 -0
  325. package/test/algolia.test.js +207 -0
  326. package/test/amazon-redshift.test.js +272 -0
  327. package/test/amplitude.test.js +239 -0
  328. package/test/apify.test.js +93 -0
  329. package/test/apollo-io.test.js +125 -0
  330. package/test/asana.test.js +99 -0
  331. package/test/ashby.test.js +97 -0
  332. package/test/atlassian.test.js +249 -0
  333. package/test/attention.test.js +79 -0
  334. package/test/aws.test.js +405 -0
  335. package/test/brevo.test.js +71 -0
  336. package/test/calendly.test.js +136 -0
  337. package/test/canva.test.js +258 -0
  338. package/test/chargebee.test.js +195 -0
  339. package/test/clickhouse.test.js +278 -0
  340. package/test/confidence.test.js +205 -0
  341. package/test/databricks.test.js +253 -0
  342. package/test/dbt-semantic-layer.test.js +221 -0
  343. package/test/designMcp.test.js +336 -0
  344. package/test/elevenlabs.test.js +52 -0
  345. package/test/firebase-cloud-messaging.test.js +242 -0
  346. package/test/firecrawl.test.js +66 -0
  347. package/test/gemini-enterprise.test.js +218 -0
  348. package/test/github-api.test.js +167 -0
  349. package/test/gitlab-api.test.js +160 -0
  350. package/test/gong.test.js +192 -0
  351. package/test/google-ads.test.js +350 -0
  352. package/test/google-maps-platform.test.js +191 -0
  353. package/test/google.test.js +710 -0
  354. package/test/granola.test.js +240 -0
  355. package/test/hex.test.js +253 -0
  356. package/test/heygen.test.js +121 -0
  357. package/test/hubspot.test.js +103 -0
  358. package/test/inngest.test.js +219 -0
  359. package/test/lightspeed.test.js +250 -0
  360. package/test/linear.test.js +146 -0
  361. package/test/linkedin.test.js +243 -0
  362. package/test/logo-dev.test.js +79 -0
  363. package/test/mailgun.test.js +107 -0
  364. package/test/mapbox.test.js +181 -0
  365. package/test/mcp.test.js +227 -0
  366. package/test/microsoft-fabric.test.js +258 -0
  367. package/test/microsoft.test.js +554 -0
  368. package/test/n8nOAuth.test.js +188 -0
  369. package/test/notionOAuth.test.js +183 -0
  370. package/test/oura.test.js +211 -0
  371. package/test/paddleCatalogue.test.js +51 -0
  372. package/test/paddlePermissions.test.js +101 -0
  373. package/test/perplexityComposition.test.js +39 -0
  374. package/test/pipedriveOAuth.test.js +140 -0
  375. package/test/posthog.test.js +200 -0
  376. package/test/prestashop.test.js +207 -0
  377. package/test/resend.test.js +163 -0
  378. package/test/salesforce.test.js +276 -0
  379. package/test/semrush.test.js +479 -0
  380. package/test/sentry.test.js +35 -0
  381. package/test/shopify.test.js +247 -0
  382. package/test/slack.test.js +320 -0
  383. package/test/snowflake.test.js +391 -0
  384. package/test/tally.test.js +75 -0
  385. package/test/telegram.test.js +58 -0
  386. package/test/tiktok.test.js +243 -0
  387. package/test/tokens.test.js +1079 -0
  388. package/test/twilio.test.js +221 -0
  389. package/test/twitch.test.js +573 -0
  390. package/test/wave.test.js +678 -0
  391. package/test/wix.test.js +1099 -0
  392. package/test/wiz.test.js +185 -0
  393. package/test/wordpress-com.test.js +469 -0
  394. package/test/wordpress.test.js +660 -0
  395. package/test/workday.test.js +314 -0
  396. package/test/x-twitter.test.js +256 -0
  397. package/test/xero.test.js +700 -0
  398. package/test/zoho-books.test.js +253 -0
  399. package/test/zoho-crm.test.js +223 -0
package/docs/stripe.md ADDED
@@ -0,0 +1,77 @@
1
+ # Stripe
2
+
3
+ Import `stripeProvider` from `@jskit-ai/connectors-catalog/server/stripe`.
4
+ The initial fragment reads a merchant account's balance. It does not implement
5
+ checkout, subscriptions, refunds, webhooks or Stripe Connect onboarding.
6
+
7
+ ## Configure access
8
+
9
+ Before creating a key, [create or sign into your own Stripe account](https://dashboard.stripe.com/register).
10
+ Select the business that will receive this application's payments. Complete
11
+ Stripe's requested activation information in its Dashboard before accepting live
12
+ payments. Saving a key does not create, activate or approve a merchant account.
13
+ Keep sandbox and live credentials separate.
14
+
15
+ 1. Select the intended Stripe account and sandbox/live mode in the Dashboard.
16
+ Open **API keys**, then **Create restricted key**.
17
+ 2. Start with zero permissions, give the key an application-specific name and
18
+ grant **Balance** read access. Leave unrelated resources disabled.
19
+ 3. Choose **Create key**, complete the verification prompt and copy the value
20
+ while visible. Finish the note/save dialog. These controls and the option
21
+ to duplicate a key are described in the
22
+ [restricted-key guide](https://docs.stripe.com/keys/restricted-api-keys).
23
+ 4. Put the value in backend Env as `STRIPE_API_KEY`. Save provider `stripe`,
24
+ mode `shared` or `assistant`, `scopes: []`, and authentication
25
+ `{ "method": "api-key", "secretRef": "env:STRIPE_API_KEY" }`.
26
+ 5. Run `connectApiKey` to verify balance access. Publishable keys are unsuitable;
27
+ restricted and secret keys authenticate backend requests. Bearer auth is
28
+ supported alongside Basic auth.
29
+ [Authentication](https://docs.stripe.com/api/authentication).
30
+
31
+ ## Runtime and AI composition
32
+
33
+ `balance.read` performs `GET https://api.stripe.com/v1/balance` with no input.
34
+ The returned object retains `available`, `pending`, currency amounts and
35
+ `livemode`. It uses the account's configured Stripe API version; no version
36
+ override or connected-account header is supplied by this fragment.
37
+ [Balance endpoint](https://docs.stripe.com/api/balance/balance_retrieve).
38
+
39
+ Use the [API-key pattern](../patterns/api-key-connection/PATTERN.md) with this
40
+ provider. The CLI and editor use identical JSON and file-store library wiring.
41
+ Applications must authorize who can see the shared merchant account's balance.
42
+
43
+ ## Automation and application ownership
44
+
45
+ An AI can author the configuration and balance call after the owner supplies a
46
+ key. This pass establishes Dashboard key creation, not an API for bootstrapping
47
+ the merchant account or issuing its initial restricted key. Account activation
48
+ and any requested business verification remain owner tasks.
49
+
50
+ The application owner supplies a key for its merchant account through private
51
+ Env. Separate keys do not create separate merchants or prove separate capacity.
52
+ An application serving multiple merchants needs explicit merchant ownership and
53
+ its own Stripe Connect design; it cannot silently collect each merchant's revenue
54
+ into one unrelated account. That design is outside this balance fragment.
55
+
56
+ Automatic merchant onboarding uses Stripe Connect, a separate platform
57
+ integration with explicit account responsibilities and Dashboard access. It is
58
+ not provided by entering this project's API key. See Stripe's current
59
+ [connected-account configuration](https://docs.stripe.com/connect/accounts-v2/connected-account-configuration).
60
+ This connector does not create connected accounts or depend on a platform's
61
+ Connect credentials. Exported applications continue using their own merchant
62
+ credentials and application database.
63
+
64
+ Automated tests cover balance shape, headers, file-store restart, credential
65
+ replacement, isolation, disconnect and errors. They make no live Stripe calls.
66
+
67
+ ## Full application payments
68
+
69
+ This connector's operations are only part of a billing implementation. For
70
+ checkout, subscriptions, feature access, renewal credits and durable catalogue
71
+ mappings, read [payments-core](../../payments-core/README.md) and its
72
+ [standalone composition guide](../../payments-core/docs/standalone.md). These
73
+ JavaScript libraries work from ordinary app code or a CLI without Vibe64 or
74
+ Genesis. Other frameworks consume the [portable contract](../../payments-core/docs/contract.md)
75
+ and its static examples using their own runtime libraries. Keep provider setup
76
+ from this guide; do not substitute a successful connection check for working
77
+ checkout, verified webhooks or merchant approval.
@@ -0,0 +1,51 @@
1
+ # Supabase
2
+
3
+ Import `supabaseProvider` from `@jskit-ai/connectors-catalog/server/supabase`.
4
+ This fragment lists project metadata through the Management API. It does not
5
+ install storage, connect to Postgres, configure login or execute SQL.
6
+
7
+ ## Configure access
8
+
9
+ 1. Open Supabase's [account token settings](https://supabase.com/dashboard/account/tokens)
10
+ and generate a personal access token for this application.
11
+ 2. Where available, choose a scoped token with the intended resources and
12
+ project-read permission. Scoped tokens are in a gradual alpha rollout;
13
+ classic tokens instead inherit the account's full access. Review that choice
14
+ before supplying a token. [Token guide](https://supabase.com/docs/guides/platform/personal-access-tokens).
15
+ 3. Put the token into backend Env as `SUPABASE_ACCESS_TOKEN`. Project anon,
16
+ publishable, secret and service-role keys are different from Management API
17
+ credentials. [API authentication](https://supabase.com/docs/reference/api/introduction).
18
+ 4. Save provider `supabase`, mode `shared` or `assistant`, `scopes: []`, and
19
+ authentication
20
+ `{ "method": "api-key", "secretRef": "env:SUPABASE_ACCESS_TOKEN" }`.
21
+ 5. Run `connectApiKey`. The project-list endpoint requires `projects_read` for
22
+ a fine-grained token; its corresponding OAuth scope is `projects:read`.
23
+ Empty accessible-project lists are valid.
24
+ [Project endpoint](https://supabase.com/docs/reference/api/v1-list-all-projects).
25
+
26
+ ## Runtime and AI composition
27
+
28
+ `projects.list` performs `GET https://api.supabase.com/v1/projects` with
29
+ Bearer authorization and no inputs. It returns the array of project metadata.
30
+ The fragment contains no project-creation or database-mutation operation.
31
+
32
+ Use the [API-key pattern](../patterns/api-key-connection/PATTERN.md), supplying
33
+ this provider and the JSON file store. Configuration and runtime state remain
34
+ files for the editor. A separate application may explicitly install a database
35
+ for its own purpose; this integration does not make that decision.
36
+
37
+ ## Automation and application ownership
38
+
39
+ The Management API offers further provisioning endpoints after authentication,
40
+ so an AI can prepare API requests and application wiring with suitable owner
41
+ authority. This pass verifies token bootstrap through account settings, not an
42
+ API for creating the first personal token. OAuth registration for other users
43
+ is a distinct flow.
44
+
45
+ Personal tokens act for their owner and allowed resources. Each application
46
+ owner supplies its authorized token through private Env. Separate token names
47
+ are not sufficient evidence of independent organization limits or billing.
48
+
49
+ Fixtures cover project records, empty results, invalid payloads, credential
50
+ replacement, file-store restart, isolation and provider errors. No Supabase
51
+ project or database is created or accessed during these tests.
package/docs/tally.md ADDED
@@ -0,0 +1,105 @@
1
+ # Tally
2
+
3
+ Import `tallyProvider` from `@jskit-ai/connectors-catalog/server/tally`.
4
+ The adapter lists account forms and reads their submissions with an API key.
5
+
6
+ ## Configure access
7
+
8
+ 1. Sign into the intended Tally user account. Keys inherit that user's resource
9
+ access, including access changes made later.
10
+ 2. Open **Settings → API keys → Create API key**.
11
+ 3. Create and copy the key while it is displayed. This flow does not provide
12
+ per-form permission selection; do not invent scope checkboxes in application
13
+ setup that imply the provider enforces them.
14
+ 4. Store the key in backend Env as `TALLY_API_KEY`.
15
+ 5. Save provider `tally`, mode `shared` or `assistant`, `scopes: []`, and
16
+ authentication `{ "method": "api-key", "secretRef": "env:TALLY_API_KEY" }`.
17
+ 6. Verify through `connectApiKey`. Manage keys in Settings; removing the owner
18
+ from an organization also affects their keys' access.
19
+ [Key ownership and setup](https://developers.tally.so/api-reference/api-keys).
20
+
21
+ ## Runtime and AI composition
22
+
23
+ `forms.list` sends `GET https://api.tally.so/forms` with Bearer authorization
24
+ and `tally-version: 2025-02-01`. Inputs are `page` (starting at 1) and `limit`
25
+ (1–500, default 50). The response retains `items`, `page`, `limit`, `total`
26
+ and `hasMore`. Increment the page while `hasMore` is true. The connection check
27
+ uses the same operation; it does not create forms or fetch submission content during verification.
28
+ [Forms API](https://developers.tally.so/api-reference/endpoint/forms/list),
29
+ [version header](https://tally.so/help/api).
30
+
31
+ Use the [API-key pattern](../patterns/api-key-connection/PATTERN.md) from CLI
32
+ code or an application service. The application owns which form metadata each
33
+ of its users may see; a shared provider key is not end-user authentication.
34
+
35
+ ## Automation and application registrations
36
+
37
+ After interactive key setup, an AI can wire calls and prepare forms or webhooks
38
+ using documented provider APIs. The adapter exposes listing, draft creation, reading/updating forms and submission retrieval. No ordinary
39
+ API for creating the initial API key was verified; it remains an operator step.
40
+
41
+ This mode has no provider app/client ID. The application owner supplies its
42
+ user's authorized key through private Env. Distinct configuration names cannot
43
+ create independent capacity from one user's keys. Tests simulate pagination,
44
+ header versioning, bad keys, rate limits, malformed results, file-store restart,
45
+ rotation and cross-application isolation. No live forms were created or accessed.
46
+
47
+ ## Submission retrieval
48
+
49
+ Invoke `submissions.list` with `formId`, optional `page` (default 1), `limit`
50
+ (1–500, default 50), `filter` (`completed` by default, or `all`/`partial`) and
51
+ `afterId` from an earlier submission. GET `/forms/{formId}/submissions` retains
52
+ questions, answers, provider totals and `hasMore`. Advance pages explicitly;
53
+ keep the form/filter with pagination state and deduplicate imported submissions
54
+ by ID. An empty page is valid. False, zero and structured answers are preserved.
55
+
56
+ The application owns who can read these responses and how they are retained.
57
+ A shared key does not grant every app user access to every form. Do not fetch
58
+ returned PDF/preview/file URLs automatically or render answers as trusted HTML.
59
+ Other frameworks can use their native server HTTP client with the same Env
60
+ Bearer token and version header; no JSKIT or Vibe64 process is required.
61
+ [Submission API](https://developers.tally.so/api-reference/endpoint/forms/submissions/list).
62
+
63
+ No live submission was read.
64
+
65
+
66
+ ## Create, review and publish
67
+
68
+ ```js
69
+ const draft = await connections.invoke({
70
+ context: authenticatedOwner, integrationId: "forms", operation: "forms.create",
71
+ input: { blocks: [
72
+ { uuid: crypto.randomUUID(), type: "FORM_TITLE", groupUuid: crypto.randomUUID(),
73
+ groupType: "FORM_TITLE", payload: { title: "Booking request" } },
74
+ { uuid: crypto.randomUUID(), type: "INPUT_TEXT", groupUuid: crypto.randomUUID(),
75
+ groupType: "INPUT_TEXT", payload: { isRequired: true, placeholder: "Your name" } }
76
+ ] }
77
+ });
78
+ // After the application's explicit review/approval:
79
+ await connections.invoke({ context: authenticatedOwner, integrationId: "forms",
80
+ operation: "forms.update", input: { formId: draft.id, status: "PUBLISHED" } });
81
+ ```
82
+
83
+ `forms.create` accepts native `blocks` (up to 500), optional workspace/template/
84
+ folder IDs and status (default `DRAFT`). The provider uses the account's default
85
+ workspace when no workspace ID is supplied. Native block schema and account
86
+ access remain Tally's authority; local validation checks the outer block shape,
87
+ not every block-specific payload. Construct fresh UUIDs for new blocks and retain
88
+ existing identifiers when editing. Never blindly replay an uncertain creation:
89
+ list forms and reconcile the result before deliberately retrying.
90
+
91
+ `forms.get` returns blocks and metadata. `forms.update` accepts a name, status
92
+ (`BLANK`, `DRAFT`, `PUBLISHED`) or replacement blocks; omitted fields are not sent.
93
+ Fetch and review before replacing blocks, since existing submissions may refer
94
+ to old questions. No automatic publication, polling loop or form designer is
95
+ created by configuring the connector.
96
+ [Create](https://developers.tally.so/api-reference/endpoint/forms/post),
97
+ [read](https://developers.tally.so/api-reference/endpoint/forms/get),
98
+ [update](https://developers.tally.so/api-reference/endpoint/forms/patch).
99
+
100
+ Other frameworks send the same JSON via their own server HTTP client and Env
101
+ binding. The application owns review screens, publication decisions, ingestion
102
+ and retention. A native Tally embed or hosted form can collect answers without
103
+ exposing this administrative API key to the browser. Settings, webhooks, form
104
+ trash and response deletion are not implemented by this adapter; account-level
105
+ setup and advanced form editing remain available in Tally.
@@ -0,0 +1,165 @@
1
+ # Telegram
2
+
3
+ Import `telegramProvider` from `@jskit-ai/connectors-catalog/server/telegram`.
4
+ The adapter reads bot identity/webhook status, sends plain text and chat actions,
5
+ and receives message updates through explicit polling. It does not change
6
+ webhooks or authenticate application users.
7
+
8
+ ## Manual provider setup
9
+
10
+ 1. Open Telegram and find the verified [BotFather](https://t.me/BotFather).
11
+ 2. Send `/newbot`, supply a display name, then choose an available username
12
+ ending in `bot`. Keep the returned token private.
13
+ 3. Store the token in your backend environment as `TELEGRAM_BOT_TOKEN`.
14
+ 4. Add Telegram in Vibe64. Enter `env:TELEGRAM_BOT_TOKEN` in **Bot token
15
+ reference** and save. The CLI uses exactly the same JSON below.
16
+ 5. Run the application's connection verification. Saving an editor form alone
17
+ does not contact Telegram or prove that the token works.
18
+
19
+ BotFather manages bot creation and tokens; the token belongs to a bot rather
20
+ than its owner's personal Telegram mailbox.
21
+ [Telegram bot tutorial](https://core.telegram.org/bots/tutorial).
22
+
23
+ ## Portable configuration and runtime
24
+
25
+ ```json
26
+ {
27
+ "schemaVersion": 1,
28
+ "registrations": {},
29
+ "integrations": {
30
+ "bot": {
31
+ "provider": "telegram",
32
+ "displayName": "Service bot",
33
+ "accountMode": "shared",
34
+ "scopes": [],
35
+ "authentication": { "method": "api-key", "secretRef": "env:TELEGRAM_BOT_TOKEN" }
36
+ }
37
+ }
38
+ }
39
+ ```
40
+
41
+ Compose the [API-key pattern](../patterns/api-key-connection/PATTERN.md) with
42
+ `providers: [telegramProvider]`, application authorization and a file connection
43
+ store. Runtime state is private text files outside the source tree; no editor
44
+ database or generated project is required to use the library from a CLI.
45
+
46
+ ```js
47
+ await connections.connectApiKey({ context, integrationId: "bot" });
48
+ const status = await connections.invoke({
49
+ context, integrationId: "bot", operation: "webhook.read"
50
+ });
51
+ console.log(status.result.pending_update_count);
52
+ ```
53
+
54
+ | Operation | Telegram method | Input | Result |
55
+ |---|---|---|---|
56
+ | `profile.read` (verification) | `getMe` | `{}` | `{ ok: true, result: bot }` |
57
+ | `webhook.read` | `getWebhookInfo` | `{}` | `{ ok: true, result: webhook }` |
58
+
59
+ Bot API requests use `https://api.telegram.org/bot<TOKEN>/<METHOD>`.
60
+ `getMe` identifies the bot. `getWebhookInfo` reports delivery configuration and
61
+ pending updates; its URL is empty when no outgoing webhook is configured.
62
+ `getUpdates` and webhooks are alternative delivery mechanisms, so verification
63
+ must not start polling or acknowledge updates. Telegram error envelopes contain
64
+ `ok: false`, a description and an error code.
65
+ [Bot API methods and envelopes](https://core.telegram.org/bots/api).
66
+
67
+ The adapter checks the token's numeric-ID/colon/token shape before transport,
68
+ validates successful bot and webhook fields, and preserves extra response data.
69
+ Only the fixed API origin receives credentials. Source and connection records
70
+ contain references; update the environment binding for token rotation.
71
+ HTTP failures and unsuccessful JSON envelopes become safe connector errors;
72
+ an unauthorized token marks a previously verified connection as needing
73
+ reconnection. Provider descriptions are not returned. This fragment does not
74
+ schedule retries or expose Telegram's optional retry-delay payload.
75
+
76
+ The request pathname contains the credential. Redact it in application HTTP
77
+ logs and tracing. Authorize webhook reads because the returned URL can reveal
78
+ application configuration. Disconnect deletes local state only; it leaves the
79
+ bot and its delivery configuration intact.
80
+
81
+ ## API provisioning and application ownership
82
+
83
+ For ordinary manual setup, create a bot for the application through BotFather
84
+ with an available username. Store its token in the application's private Env. Rotating a token for one bot retains that
85
+ bot's identity; it does not create independent message delivery or capacity.
86
+
87
+ Telegram also documents **managed bots**: a manager provides a new-bot link,
88
+ the user confirms creation, and the manager receives a `managed_bot` update.
89
+ Authorized manager methods can retrieve or replace the managed bot's token.
90
+ This offers API-assisted provisioning after the manager and user-confirmed flow
91
+ exist; it is not an unattended generic bot-creation endpoint. An AI can prepare
92
+ the manager workflow and bot profile configuration, but must not invent a
93
+ `createBot` call or silently replace a live token.
94
+ [Managed bots and BotFather controls](https://core.telegram.org/bots/features).
95
+
96
+ This runtime fragment does not implement managed-bot provisioning, webhook
97
+ registration or Telegram Login. Those are separate operations with different
98
+ ownership. The application owner must confirm provider capacity for its usage. Different VM or application domains do not affect these
99
+ outbound API calls; a separately implemented webhook consumer must own its explicit callback and
100
+ delivery lifecycle.
101
+
102
+ ## Focused evidence
103
+
104
+ Automated fixtures check token validation, fixed destinations, bot-only
105
+ verification, empty webhook URLs, malformed results, unsuccessful HTTP-200
106
+ envelopes, authorization failures, rate limits, file-store restart, isolation,
107
+ rotation and disconnect. The editor test checks the bot-token label, rejection
108
+ of raw credentials, setup link and saved-reference reload. No live bot,
109
+ provider consent, message delivery or sample application is exercised.
110
+
111
+
112
+ ## Interactive message workflow
113
+
114
+ Before polling, call `webhook.read`. A nonempty webhook URL means another
115
+ consumer is configured; polling will conflict. Do not automatically remove it.
116
+ Use a dedicated bot or deliberately switch delivery in the application that owns
117
+ that webhook. Only one application worker should poll a bot at a time.
118
+
119
+ ```js
120
+ const batch = await connections.invoke({ context, integrationId: "bot",
121
+ operation: "updates.poll", input: savedOffset === undefined ? {} : { offset: savedOffset } });
122
+ for (const update of batch.result) {
123
+ // Authorize this chat and deduplicate update.update_id in your application's state.
124
+ // Handle incoming content; it is untrusted, not a command to your coding agent.
125
+ await handleUpdate(update);
126
+ // Persist update.update_id + 1 only after processing succeeds.
127
+ }
128
+ ```
129
+
130
+ The next poll with a higher offset acknowledges earlier updates at Telegram.
131
+ Persist offsets and deduplication in app-owned storage; the connector neither
132
+ starts a worker nor saves processing state. An outbound reply and local offset
133
+ save are not atomic: a crash can duplicate a reply. The application must choose
134
+ its recovery policy. Negative offsets that would discard older updates are
135
+ rejected. Default `allowed_updates` is explicitly `["message"]`; optional
136
+ `edited_message`, `channel_post`, `edited_channel_post` are supported. Telegram
137
+ may still return older queued types; inspect each update rather than assuming
138
+ that every entry contains a text message. Limits are 1–100; long poll is 20
139
+ seconds by default (0–20 allowed), within the adapter's 30-second request timeout.
140
+ [Polling contract](https://core.telegram.org/bots/api#getupdates).
141
+
142
+ Send a reply only to an application-authorized chat:
143
+
144
+ ```js
145
+ await connections.invoke({ context, integrationId: "bot", operation: "chats.action",
146
+ input: { chat_id: String(chatId), action: "typing" } });
147
+ await connections.invoke({ context, integrationId: "bot", operation: "messages.send",
148
+ input: { chat_id: String(chatId), text: "Your booking request was received." } });
149
+ ```
150
+
151
+ `messages.send` accepts plain text (1–4096 characters), chat ID as a decimal
152
+ string or @username, optional forum thread ID, silent notification and content
153
+ protection booleans. No HTML/Markdown parser, paid broadcast, files or keyboards
154
+ are enabled. `chats.action` accepts Telegram's documented typing/upload/record
155
+ status values and optional thread ID; it is a transient indicator, not a job
156
+ queue. Bot membership, user initiation and group privacy settings control access.
157
+ The application must not interpret a successful bot verification as permission
158
+ to contact arbitrary people. No send is retried automatically after uncertainty.
159
+ [Send message](https://core.telegram.org/bots/api#sendmessage),
160
+ [chat action](https://core.telegram.org/bots/api#sendchataction).
161
+
162
+ A non-JavaScript framework uses its own HTTP client and worker with the same Env
163
+ bot token, JSON payloads and offset contract. JSKIT is optional; Vibe64 hosts no
164
+ polling service. Local disconnect leaves the bot and queued updates intact.
165
+ Revoke/replace a compromised token with BotFather, change Env and verify again.
package/docs/tiktok.md ADDED
@@ -0,0 +1,201 @@
1
+ # TikTok
2
+
3
+ Import `tiktokProvider` from `@jskit-ai/connectors-catalog/server/tiktok`.
4
+ The library reads the consenting creator's profile, statistics and public video
5
+ metadata. CLI and server consumers use the same configuration and connection
6
+ service; Vibe64 edits that file through shared fields and validation.
7
+
8
+ ## Provider setup
9
+
10
+ 1. At [TikTok for Developers](https://developers.tiktok.com/), sign in, open
11
+ your profile menu, choose **Manage apps**, then **Connect an app**.
12
+ Select the owning organization/account and confirm.
13
+ 2. Complete the app's identity, icon, description and website under its details.
14
+ Select Web. In the products section add Login Kit and Display API.
15
+ 3. In Login Kit's Web settings enter the backend callback described below.
16
+ Copy the **Client key**, not the separate App ID, and store the client secret
17
+ in the backend environment.
18
+ 4. Before production submission, verify your configured website/policy URLs
19
+ through URL properties. Complete the review explanation and demo, save,
20
+ then submit the application-owned registration. [Registration and review](https://developers.tiktok.com/docs/en/getting-started-create-an-app).
21
+ 5. In **Scopes**, add `user.info.basic`, `user.info.profile`, `user.info.stats`
22
+ and `video.list` as needed. Basic access verifies the account; users may
23
+ decline the others. The runtime blocks an operation lacking its granted
24
+ permission. [Scope selection](https://developers.tiktok.com/docs/en/scopes-overview).
25
+ 6. Start in Sandbox with designated test accounts. Production availability
26
+ requires approval for the actual products and use case.
27
+ [Display API prerequisites](https://developers.tiktok.com/docs/en/display-api-get-started).
28
+ 7. Set `TIKTOK_CLIENT_SECRET` and `TIKTOK_CALLBACK_URL` on the callback-owning
29
+ backend. Save their references in JSON. Saving configuration does not start
30
+ consent or prove provider approval.
31
+
32
+ For a Web registration, the callback must be an exact static HTTPS URI, shorter
33
+ than 512 characters, without a query or fragment. HTTP loopback callbacks are
34
+ not accepted by this adapter. The authorize URL uses `client_key` and comma
35
+ separated permissions. An operator CLI can invoke the same library through an
36
+ HTTPS callback-owning backend; this fragment does not implement TikTok's
37
+ separate native Desktop journey. Keep the confidential secret off distributed
38
+ clients. The shared runtime sends PKCE parameters, but TikTok's Web guide does
39
+ not establish enforcement of them. [Web flow](https://developers.tiktok.com/doc/login-kit-web/),
40
+ [Desktop flow](https://developers.tiktok.com/docs/en/login-kit-desktop).
41
+
42
+ ```json
43
+ {
44
+ "schemaVersion": 1,
45
+ "registrations": {
46
+ "creator-app": {
47
+ "source": "own",
48
+ "clientId": "YOUR_TIKTOK_CLIENT_KEY",
49
+ "clientSecretRef": "env:TIKTOK_CLIENT_SECRET",
50
+ "callbackUrlRef": "env:TIKTOK_CALLBACK_URL"
51
+ }
52
+ },
53
+ "integrations": {
54
+ "creator": {
55
+ "provider": "tiktok",
56
+ "displayName": "Creator account",
57
+ "accountMode": "per-user",
58
+ "scopes": ["user.info.basic", "user.info.stats", "user.info.profile", "video.list"],
59
+ "authentication": { "method": "oauth2", "registrationRef": "creator-app" }
60
+ }
61
+ }
62
+ }
63
+ ```
64
+
65
+ ## Runtime composition
66
+
67
+ Use the packaged [OAuth connection pattern](../patterns/oauth-connection/PATTERN.md) to construct `connections` from
68
+ this provider, parsed JSON, host authorization, reference resolution and the
69
+ encrypted file store. Pass `tiktokProvider` to both configuration validation and
70
+ the connection service. No copied application template or database is required.
71
+
72
+ ```js
73
+ const pending = await connections.beginAuthorization({
74
+ context: authenticatedOwner, integrationId: "creator"
75
+ });
76
+ // Open pending.authorizationUrl in the user's browser.
77
+ // In the registered backend callback, recover the same trusted owner:
78
+ await connections.completeAuthorization({
79
+ context: authenticatedOwner, integrationId: "creator", callbackUrl
80
+ });
81
+ const page = await connections.invoke({
82
+ context: authenticatedOwner, integrationId: "creator",
83
+ operation: "videos.list", input: { max_count: 10 }
84
+ });
85
+ // If page.data.has_more, explicitly request its data.cursor on a later call.
86
+ ```
87
+
88
+ The host derives ownership from an authenticated session or trusted CLI operator.
89
+ It must not accept application or subject identities from arbitrary browser
90
+ input. Shared and assistant modes require the host to authorize every caller
91
+ before mapping to the shared subject. A builder's connected account does not
92
+ become all app users' individual accounts.
93
+
94
+ | Operation | Permission | Input and result |
95
+ |---|---|---|
96
+ | `profile.read` (verification) | `user.info.basic` | No input; `open_id`, `display_name`, `avatar_url` |
97
+ | `profile.extended` | `user.info.profile` | No input; username, bio, profile link and verification flag |
98
+ | `profile.stats` | `user.info.stats` | No input; follower, following, like and video counts |
99
+ | `videos.list` | `video.list` | `max_count` 1–20, default 10; optional nonnegative safe-integer `cursor`; one public video page with IDs, titles and cover URLs |
100
+
101
+ Profile operations use GET `/v2/user/info/`; video pages use POST
102
+ `/v2/video/list/`, both on `https://open.tiktokapis.com`. Each operation selects
103
+ only its own fields and returns the validated original envelope. Keep video
104
+ IDs as strings. Pagination cursors are millisecond timestamps; preserve them
105
+ with their connection/query rather than automatically crawling every page.
106
+ [Profile fields](https://developers.tiktok.com/docs/en/tiktok-api-v2-get-user-info),
107
+ [video pagination](https://developers.tiktok.com/docs/en/tiktok-api-v2-video-list).
108
+
109
+ The service verifies basic profile access before saving tokens. It encrypts
110
+ credentials outside source, binds attempts to their owner and consumes each
111
+ attempt once. Initial grants are bounded by configured scopes; refresh can
112
+ shrink existing permissions but cannot expand them. Rotated refresh tokens
113
+ replace previous ones. TikTok's `refresh_expires_in` is validated but not stored
114
+ as a proactive expiry cutoff in this initial implementation; provider rejection
115
+ requires reconnection. Local disconnect deletes local access only. Provider
116
+ revocation is a separate action, currently unwired.
117
+ [Token exchange, refresh and revocation](https://developers.tiktok.com/docs/en/oauth-user-access-token-management).
118
+
119
+ Provider error codes distinguish revoked/expired access from missing scopes,
120
+ including TikTok's scope error that uses HTTP 401. Permission failures preserve
121
+ the connection; invalid access marks it for reconnect. Rate-limit failures are
122
+ reported without automatic retries. Cancellation, timeout and malformed data
123
+ are explicit errors, and provider message/log text is omitted.
124
+ [API errors](https://developers.tiktok.com/docs/en/tiktok-api-v2-error-handling),
125
+ [OAuth errors](https://developers.tiktok.com/docs/en/oauth-error-handling).
126
+
127
+ ## Creator gallery in an application
128
+
129
+ A useful first screen is a creator header and a paged list of public video
130
+ cards. The application's authenticated backend calls `profile.read` and
131
+ `videos.list`; it sends those results to that same authorized viewer, never the
132
+ connection record or tokens. For example, after the OAuth pattern has provided
133
+ `connections` and the host has derived `authenticatedOwner`:
134
+
135
+ ```js
136
+ const request = { context: authenticatedOwner, integrationId: "creator" };
137
+ const creator = await connections.invoke({ ...request, operation: "profile.read" });
138
+ const videos = await connections.invoke({ ...request, operation: "videos.list",
139
+ input: { max_count: 10, ...(cursor === undefined ? {} : { cursor }) } });
140
+ const gallery = {
141
+ name: creator.data.user.display_name,
142
+ avatarUrl: creator.data.user.avatar_url,
143
+ videos: videos.data.videos,
144
+ nextCursor: videos.data.has_more ? videos.data.cursor : null
145
+ };
146
+ // Return gallery through the framework's authenticated JSON response.
147
+ ```
148
+
149
+ The frontend renders `name` and each video `title` as escaped text, uses HTTPS
150
+ image URLs for the avatar and covers, and offers **Load more** only when
151
+ `nextCursor !== null`. Append the next page with duplicate IDs removed. Keep the
152
+ cursor in the current account's gallery state; clear displayed data on account
153
+ switch or disconnect. Show an empty state for an account with no public videos.
154
+ When `video.list` was declined, keep the profile visible and offer reconnection
155
+ with that permission instead of presenting a broken gallery. A thumbnail can
156
+ expire or disappear: show an image fallback and refresh metadata on the next
157
+ explicit load. Do not permanently copy the media or interpret titles as HTML.
158
+
159
+ This composition shows metadata cards. It does not provide playback, posting,
160
+ downloads or a persistent mirror of the account. A removed/private video may
161
+ vanish between pages; do not assume the feed is an immutable snapshot.
162
+ [Public-video listing](https://developers.tiktok.com/docs/en/tiktok-api-v2-video-list).
163
+
164
+ A Node app or CLI consumes the same installed JSKIT exports and file without
165
+ Vibe64. A different framework owns its OAuth/token storage and native HTTP calls:
166
+ read the same registration references and ownership/scopes, call GET
167
+ `/v2/user/info/` and JSON POST `/v2/video/list/`, then build the same gallery
168
+ response. It must retain the provider-specific `client_key`, comma scopes and
169
+ refresh-token rules described above. JSKIT supplies no PHP implementation.
170
+
171
+ ## Online, public and custom domains
172
+
173
+ Each application owns its provider registration, callback route, credentials
174
+ and grants. Hosted and installed editors configure the same app-owned setup;
175
+ neither supplies a shared Vibe64 registration or token gateway. Use the app's
176
+ assigned public URL as the initial callback origin, append the route the backend
177
+ actually implements, and register the exact URL with the provider. Keep the
178
+ client secret and callback binding in the application's Env.
179
+
180
+ A custom-domain or hosting move that changes the callback requires updating both
181
+ the provider registration and the app's Env. Preserve the application's identity
182
+ and private connection store, validate callback state and initiator, and allow
183
+ only application-approved return destinations. The editor's address is not the
184
+ provider callback. See the [callback contract](../../connectors-core/docs/oauth-callbacks.md)
185
+ and [setup command](../../connectors-core/docs/setup-command.md).
186
+
187
+ Separate registrations do not prove separate quota pools or provider approval.
188
+ The app developer must obtain approval for the actual integration and user flow.
189
+
190
+ ## Automation assessment and limits
191
+
192
+ | Task | What can be automated |
193
+ |---|---|
194
+ | Create/configure the application registration | Reviewed documentation establishes console setup, not a general provisioning API. AI can guide an authorized operator and prepare configuration; registration/review approval is external work. |
195
+ | Configure callbacks and permissions | Prepare exact values and validate the file. Console setup and ownership verification remain operator steps until an authorized automation route is established. |
196
+ | Consent, refresh and reads | The library implements these exchanges once a valid registration and user consent exist. It cannot grant consent for the user. |
197
+ | Application login, posting, Research API | Outside this fragment. A successful data connection alone does not implement the app's login/session system. |
198
+
199
+ The initial fragment is tested with controlled token/API responses and the editor
200
+ configuration UI. No live TikTok registration, production approval, provider
201
+ consent or generated application has been exercised.