@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
@@ -0,0 +1,178 @@
1
+ # Inngest
2
+
3
+ Import `inngestProvider` from `@jskit-ai/connectors-catalog/server/inngest`.
4
+ This fragment sends one explicitly authorized event and reads registered app
5
+ and function metadata. The UI edits the same portable configuration as a CLI.
6
+ It supports shared and assistant accounts, using the owner's credentials.
7
+
8
+ ## Manual setup
9
+
10
+ 1. Sign into Inngest Cloud and select the intended environment using the
11
+ environment selector.
12
+ 2. Click the adjacent key icon, choose **Event keys**, then **+ Create Event
13
+ Key**. Set a descriptive name, choose **Save changes**, and use **Copy**.
14
+ Apply event-name/IP restrictions appropriate to the application's events.
15
+ 3. Store that value in the backend environment as `INNGEST_EVENT_KEY`. Enter
16
+ `env:INNGEST_EVENT_KEY` in the editor's **Event Key reference** field.
17
+ 4. In the intended environment's **Signing Key** tab, copy its Signing Key.
18
+ Store it as `INNGEST_SIGNING_KEY` and enter `env:INNGEST_SIGNING_KEY` in
19
+ **Signing Key reference**. The two keys have different purposes.
20
+ 5. Leave **Branch environment (optional)** empty for ordinary delivery. For
21
+ branch delivery, enter the intended branch identifier. This field only
22
+ affects event delivery, not metadata queries.
23
+ 6. Save configuration. Choose **Set credential in Env** to save
24
+ `INNGEST_SIGNING_KEY`; under **Inngest Event Key**, choose **Set credential in Env** to save
25
+ `INNGEST_EVENT_KEY` separately.
26
+ Save both values in backend Env, return, and choose **Connect account**.
27
+ This verifies metadata only. Separately implement and register the
28
+ application's workflow functions using Inngest's SDK.
29
+
30
+ [Event Key creation](https://www.inngest.com/docs/events/creating-an-event-key),
31
+ [Signing Key configuration and rotation](https://www.inngest.com/docs/platform/signing-keys).
32
+ Both keys remain secrets. Changing a signing key also affects any application
33
+ serve endpoint using it; coordinate SDK rotation independently of this connector.
34
+
35
+ ## Configuration and runtime
36
+
37
+ ```json
38
+ {
39
+ "schemaVersion": 1,
40
+ "registrations": {},
41
+ "integrations": {
42
+ "workflows": {
43
+ "provider": "inngest",
44
+ "displayName": "Report workflows",
45
+ "accountMode": "shared",
46
+ "scopes": [],
47
+ "authentication": {
48
+ "method": "api-key",
49
+ "secretRef": "env:INNGEST_SIGNING_KEY"
50
+ },
51
+ "settings": {
52
+ "eventKeyRef": "env:INNGEST_EVENT_KEY"
53
+ }
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ The required `eventKeyRef` uses the core's secret-reference grammar. Optional
60
+ `branchEnvironment` accepts 1–255 printable ASCII characters without spaces.
61
+ Strings use shared schema normalization. Clearing the branch removes it from
62
+ the file. Changing either reference or the branch requires verification again.
63
+
64
+ Compose the provider with the [API-key file-runtime pattern](../patterns/api-key-connection/PATTERN.md).
65
+ The existing connection owner handles authorization, environment resolution,
66
+ file persistence and disconnect. No database or Vibe64 server is required by
67
+ the CLI. The [event-delivery pattern](../patterns/event-delivery/PATTERN.md)
68
+ adds application-owned event authorization and explains the workflow boundary.
69
+
70
+ | Operation | Input | Effect |
71
+ |---|---|---|
72
+ | `apps.list` | Optional `limit` 1–100, `cursor`, `archived` | Read one app metadata page; defaults to 20 and excludes archived apps. |
73
+ | `functions.list` | Required `appId`; optional `limit` 1–100 and `cursor` | Read one function metadata page for that app. |
74
+ | `events.send` | Required `name` and object `data`; optional `id`, `ts`, `v`, object `user` | Send one event, which may start registered workflows. |
75
+
76
+ `connectApiKey` calls `apps.list` using the Signing Key as a bearer credential.
77
+ It validates the metadata page before recording a grant. It does not send a
78
+ test event, resolve the Event Key, prove the two keys belong to the same
79
+ environment, or prove a workflow exists. An empty app list is valid.
80
+
81
+ Metadata uses `https://api.inngest.com/v2/apps` and the app's `/functions`
82
+ endpoint. These endpoints are marked beta in the reviewed
83
+ [official v2 schema](https://api-docs.inngest.com/api-specs/v2.json).
84
+ The provider preserves `data` and `page`, including opaque cursors; requesting
85
+ another page is explicit. Inngest also offers separate v2 API keys, but this
86
+ initial form models the application Signing Key and Event Key pairing.
87
+ [REST authentication](https://api-docs.inngest.com/authentication).
88
+
89
+ `events.send` resolves the Event Key only after application authorization and
90
+ sends JSON to `https://inn.gs/e/<encoded-key>`. It removes the Signing Key header
91
+ and adds `x-inngest-env` only when a branch is configured. Redirects are rejected;
92
+ the caller cannot supply an alternative destination. The normal Event API is
93
+ used, rather than the low-volume v2 event debugging endpoint.
94
+ [HTTP event delivery](https://www.inngest.com/docs/events).
95
+
96
+ This fragment accepts one event, not a batch. It bounds names to 255 characters,
97
+ IDs to 512 and versions to 255; `ts` must be integer Unix milliseconds from
98
+ 1980 onward within JavaScript's safe-integer range. Unknown fields and invalid
99
+ objects are rejected before HTTP. Application policy receives the event input
100
+ before credentials are resolved. It must authorize the event name, payload and
101
+ tenant, not merely membership in the shared connection.
102
+
103
+ A successful result requires status 200 and one nonempty event receipt ID.
104
+ That receipt acknowledges delivery, not successful workflow execution. There
105
+ are no automatic retries. A timeout or cancellation can occur after remote
106
+ acceptance, so the application must reconcile before resending. A stable event
107
+ `id` can help Inngest deduplicate function runs within its documented 24-hour
108
+ window; include the event type and business operation in that identifier.
109
+ [Event IDs and deduplication](https://www.inngest.com/docs/events#deduplication).
110
+ Provider failures return safe connector errors without credentials or provider
111
+ response text. Local disconnect neither deletes the provider keys nor cancels
112
+ accepted workflow runs.
113
+
114
+ ## AI automation and application ownership
115
+
116
+ AI can prepare configuration, reference bindings, JSKIT composition, event
117
+ payloads and SDK function code. An authorized operator can automate supported
118
+ management tasks through the [Inngest CLI](https://www.inngest.com/docs/cli) and
119
+ v2 API after credential bootstrap. The reviewed schema exposes environment
120
+ creation and app metadata operations; that does not establish automated account
121
+ signup or initial credential issuance. Use the dashboard steps above for the
122
+ initial keys and validate the current API before adding provisioning calls.
123
+
124
+ The application owner supplies its Event and Signing Keys through private Env.
125
+ These are not OAuth registrations. Separate Event Keys support independent rotation and
126
+ attribution, but labels or environments do not establish independent billing
127
+ or quota pools. The application owner must obtain
128
+ the provider capacity it needs. Signing Keys belong in the application backend,
129
+ never the editor binary or browser bundle.
130
+
131
+ No OAuth callback is involved. The editor VM and published app can have different
132
+ domains. If the app hosts Inngest functions, its SDK endpoint/worker registration
133
+ belongs to that deployed app and must be configured separately. Self-hosted
134
+ Inngest endpoints, OAuth, function registration, schedule management and run
135
+ cancellation are not implemented by this fragment.
136
+
137
+ ## Focused proof
138
+
139
+ Nine provider tests use simulated HTTP replies and actual temporary encrypted
140
+ JSON files. They cover metadata verification, separate credential destinations,
141
+ encoded Event Keys, branch delivery/removal, payload policy, malformed replies,
142
+ pagination, rotation, ownership, restart, disconnect and cancellation without
143
+ replay. Editor tests cover both references, branch validation, reload and
144
+ optional-field removal. Live provisioning, event delivery, workflow execution
145
+ and generated sample apps are excluded from this proof.
146
+
147
+ Credential creation and signing-key instructions were rechecked against current
148
+ official documentation on 2026-09-12. The screen now explains both Env entries,
149
+ the optional branch and the limits of connection verification. Updated rendered
150
+ review passed with simulated connection responses; no live event has been sent.
151
+
152
+ ## Native functions and scheduled work
153
+
154
+ The [event-delivery pattern](../patterns/event-delivery/PATTERN.md#native-functions-and-cron)
155
+ now includes an app-owned function and cron composition using the current native
156
+ Inngest SDK. Install that SDK in the application only when it hosts functions;
157
+ the connector package does not acquire a workflow-engine dependency.
158
+
159
+ Deploy the native serve handler at the application's `/api/inngest` route. Set
160
+ `INNGEST_SIGNING_KEY` from the same intended environment so the SDK validates
161
+ Inngest requests; do not replace signature verification with a public unguarded
162
+ business action. Other frameworks use a supported native SDK/serve adapter. If
163
+ none exists for that framework, event submission still works, but a separate
164
+ supported function host is an explicit application choice, not a JSKIT sidecar.
165
+
166
+ In Inngest Cloud select the environment, open Apps, choose Sync App / Sync New
167
+ App, enter the deployed HTTPS serve URL and Sync App. After function changes,
168
+ open that app and Resync. If the domain changes use Override for the new URL,
169
+ keeping the same SDK app ID. The editor does not perform this deployment/sync.
170
+ [Sync guide](https://www.inngest.com/docs/apps/cloud), reviewed 2026-09-13.
171
+
172
+ **LIMITATIONS:** No automatic SDK installation, function generation/deployment,
173
+ provider app sync, workflow dashboard, run cancellation or self-hosted endpoint
174
+ mode. Example: an app can submit a report event, but a report only runs after
175
+ its own SDK function is deployed and synced. Schedule execution and SDK business
176
+ functions are native application composition, not tested live or through a
177
+ generated app here. Editor-assistant attachment is deferred. The connector's
178
+ metadata check does not prove the Event Key or function availability.
package/docs/klipy.md ADDED
@@ -0,0 +1,149 @@
1
+ # KLIPY
2
+
3
+ Import `klipyProvider` from `@jskit-ai/connectors-catalog/server/klipy`.
4
+ This own-key adapter browses and searches clips, GIFs, stickers and existing AI
5
+ emojis. It does not generate new emojis or implement managed billing.
6
+
7
+ ## Manual provider setup
8
+
9
+ 1. Sign into [Partner Panel](https://partner.klipy.com) and choose **Add Platform**.
10
+ 2. Enter the platform name, contact email, company website and product
11
+ description; accept the API terms and submit.
12
+ 3. Create a named API key. Supply its **App URL** when available.
13
+ 4. Store the value as `KLIPY_APP_KEY` in the backend environment. In Vibe64,
14
+ add KLIPY, enter `env:KLIPY_APP_KEY` in **API key reference**, and choose
15
+ **Save configuration**. Choose **Set credential in Env**, save the real key
16
+ as `KLIPY_APP_KEY`, then return and choose **Connect account**. This reads
17
+ trending metadata and consumes an API request; it does not grant production
18
+ approval. No OAuth callback is required.
19
+ 5. When the application is ready, open the key's **⋯ → Request Production**.
20
+ Supply its category, estimated monthly active users and a screen recording,
21
+ then choose **Apply**. Provider approval is a separate step.
22
+
23
+ [Partner Panel setup](https://klipy.com/blog/klipy-partner-panel).
24
+
25
+ Test keys allow 100 requests per hour. The developer page describes production
26
+ approval and an advertising option in **Update App Details**. Production
27
+ capacity and advertising behavior belong to the provider agreement; this
28
+ adapter makes no unlimited-capacity promise.
29
+ [Developer setup and limits](https://klipy.com/developers).
30
+
31
+ ## Portable configuration and runtime
32
+
33
+ ```json
34
+ {
35
+ "schemaVersion": 1,
36
+ "registrations": {},
37
+ "integrations": {
38
+ "media": {
39
+ "provider": "klipy",
40
+ "displayName": "Clip search",
41
+ "accountMode": "shared",
42
+ "scopes": [],
43
+ "authentication": { "method": "api-key", "secretRef": "env:KLIPY_APP_KEY" }
44
+ }
45
+ }
46
+ }
47
+ ```
48
+
49
+ Compose the [API-key pattern](../patterns/api-key-connection/PATTERN.md) with
50
+ `providers: [klipyProvider]`, application authorization and private file storage.
51
+ The same configuration and runtime calls work from a manually wired CLI. The
52
+ provider module adds no database or Vibe64 service dependency.
53
+
54
+ ```js
55
+ await connections.connectApiKey({ context, integrationId: "media" });
56
+ const clips = await connections.invoke({
57
+ context, integrationId: "media", operation: "clips.search",
58
+ input: { q: "happy dog", per_page: 8, locale: "us" }
59
+ });
60
+ ```
61
+
62
+ | Operation | GET path after `/api/v1/<app_key>` | Required input |
63
+ |---|---|---|
64
+ | `clips.trending` (verification) | `/clips/trending` | None |
65
+ | `clips.search` | `/clips/search` | `q` |
66
+ | `gifs.trending`, `gifs.search` | `/gifs/trending`, `/gifs/search` | `q` for search |
67
+ | `stickers.trending`, `stickers.search` | `/stickers/trending`, `/stickers/search` | `q` for search |
68
+ | `emojis.trending`, `emojis.search` | `/emojis/trending`, `/emojis/search` | `q` for search |
69
+
70
+ The documented Clip API uses a key in the path. Pages start at 1; trending page
71
+ sizes range from 1 to 50 and search sizes from 8 to 50, with 24 as the default.
72
+ Both accept `customer_id`, a two-letter locale and a content-filter level.
73
+ The success envelope contains `result: true` and items in `data.data`.
74
+ [Clip API](https://docs.klipy.com/clips-api).
75
+
76
+ Local defaults are page 1, 24 items and `content_filter: "high"`. The runtime
77
+ accepts `off`, `low`, `medium` or `high` when explicitly supplied; the filter is
78
+ not a guarantee about every item's suitability. Local bounds cap pages at
79
+ 100000, queries at 500 characters and customer identifiers at 256 characters.
80
+ Verification supplies no customer identity. If personalization is needed,
81
+ application code chooses an appropriate stable identifier; the adapter never
82
+ uses an email or account ID implicitly.
83
+
84
+ The module validates the collection envelope and preserves remaining response
85
+ metadata and media fields. Empty results are valid. Request another page
86
+ explicitly; returned links are not followed with credentials. A false `result`
87
+ does not verify a connection. HTTP authentication failures, permission errors
88
+ and rate limits become shared connector errors; arbitrary error bodies are
89
+ discarded. There is no automatic retry or background synchronization.
90
+
91
+ The backend encodes the key into the path only after checking the fixed HTTPS
92
+ destination. Logs and tracing must redact authenticated request paths. Source
93
+ and saved connection state contain references, and environment changes take
94
+ effect on the next call. Local disconnect does not revoke the provider key.
95
+ An app key is not a login identity or a per-user OAuth grant.
96
+
97
+ ## API provisioning and application ownership
98
+
99
+ No public bootstrap API for initial platforms, keys or production approval was
100
+ verified in the linked documentation. An AI can prepare the configuration,
101
+ runtime wiring and approval information; account access and the documented
102
+ Partner Panel steps remain manual. Do not infer a provisioning API from the
103
+ dashboard's internal requests.
104
+
105
+ Create a key for the application and keep it in private Env. Distinct names alone
106
+ do not establish independent production limits; confirm the required capacity
107
+ with KLIPY. Preserve the customer's key ownership when exporting or moving the
108
+ application. This module consumes an explicitly supplied key.
109
+
110
+ Outbound reads need no OAuth callback, so VM subdomains and custom deployment
111
+ domains do not alter authentication. Record the intended application URL in
112
+ provider setup and satisfy its content/attribution agreement in the application.
113
+
114
+ ## Focused evidence
115
+
116
+ Fixtures check trending verification, search encoding, pagination bounds,
117
+ locale/filter errors, unsuccessful envelopes, key rotation, private file-store
118
+ restart, owner isolation and provider failures. Core tests cover path encoding,
119
+ invalid destinations, ambiguous prefixes and error redaction. The editor test
120
+ checks the secret reference, setup link and reload persistence. No live key,
121
+ production approval, media use or generated sample application is exercised.
122
+
123
+ The official Partner Panel guide was rechecked on 2026-09-12. Expanded screen
124
+ steps cover Env handoff, connection verification, production approval and local
125
+ disconnect. Updated rendered review passed using simulated connection responses.
126
+
127
+ ## Embedding and limits
128
+
129
+ The application supplies its own picker and native HTTP/runtime wiring in any
130
+ framework, using the same JSON and private Env. Use **Search KLIPY** as the
131
+ search placeholder. Choose an appropriate returned image/video format; preserve
132
+ its complete URL and delivery metadata. Images need meaningful alt text; clips
133
+ need user-controlled playback. Do not download media through this adapter.
134
+
135
+ Follow [KLIPY integration requirements](https://docs.klipy.com/clips-api): custom
136
+ server-side requests need prior provider approval, including this backend
137
+ integration. Proxying/caching requires separate approval. Preserve ranking,
138
+ reporting and any ad entries and delivery requirements; this reader preserves
139
+ the envelope but does not implement those UI events. Check these requirements
140
+ before shipping. The Partner Panel controls ads and content restrictions.
141
+
142
+ **LIMITATIONS:** No picker, ad renderer, share/report tracking, caching, new AI
143
+ emoji generation or automatic editor-assistant attachment. Example: a customer
144
+ can search existing dog stickers through app code, but cannot create a new dog
145
+ emoji through this adapter. Public docs advertise generation and status endpoints;
146
+ the request/result contract could not be established from the accessible docs,
147
+ so no guessed generation operation was added. No live/provider approval or
148
+ generated-app execution is claimed. Collection search intentionally uses the
149
+ same conservative local 8–50 item bound across these families.
@@ -0,0 +1,144 @@
1
+ # Lexware Office
2
+
3
+ Import `lexwareProvider` from `@jskit-ai/connectors-catalog/server/lexware`.
4
+ This adapter verifies an API key, reads accounting resources and creates draft invoices. The provider calls this
5
+ its Public API; its bearer key is still a private backend credential.
6
+
7
+ ## Provider setup
8
+
9
+ 1. Sign into the intended Lexware Office account. Public API access requires
10
+ the XL plan. Open **Erweiterungen → Weitere Apps → Public API**, or
11
+ [the Public API settings](https://app.lexware.de/addons/public-api).
12
+ 2. Select **API-Schlüssel erstellen**. In **Neuen API-Schlüssel erstellen**,
13
+ select individual permissions and enable contact reading. Add article/document
14
+ read access and invoice creation only for the operations needed. Choose **WEITER**,
15
+ give the key a name, then choose **API-Schlüssel erstellen**.
16
+ 3. Copy the key before closing the dialog; it is not displayed again. Store it
17
+ as `LEXWARE_API_KEY` in the backend environment. Add Lexware in Vibe64 and
18
+ enter `env:LEXWARE_API_KEY` in **API key reference**.
19
+ 4. Record the expiry for operations: keys may be valid for up to 24 months.
20
+ Use the provider's renewal controls before expiry. Changed permissions
21
+ require a new key; update the environment binding and verify it before
22
+ retiring the previous key.
23
+
24
+ [Provider key setup and lifecycle](https://help.lexware.de/de-form/articles/548863-alles-rund-um-public-api).
25
+
26
+ ## Configuration and library calls
27
+
28
+ ```json
29
+ {
30
+ "schemaVersion": 1,
31
+ "registrations": {},
32
+ "integrations": {
33
+ "contacts": {
34
+ "provider": "lexware",
35
+ "displayName": "Accounting contacts",
36
+ "accountMode": "shared",
37
+ "scopes": [],
38
+ "authentication": { "method": "api-key", "secretRef": "env:LEXWARE_API_KEY" }
39
+ }
40
+ }
41
+ }
42
+ ```
43
+
44
+ Compose `providers: [lexwareProvider]` with the
45
+ [API-key pattern](../patterns/api-key-connection/PATTERN.md), environment
46
+ references, an authorized application context and the file connection store.
47
+ Both CLI and editor use this schema. Runtime state uses encrypted JSON outside
48
+ application source; a database is not required.
49
+
50
+ ```js
51
+ await connections.connectApiKey({ context, integrationId: "contacts" });
52
+ const page = await connections.invoke({
53
+ context, integrationId: "contacts", operation: "contacts.list",
54
+ input: { page: 0, size: 25, customer: true }
55
+ });
56
+ ```
57
+
58
+ The runtime uses bearer authentication and
59
+ `GET https://api.lexware.io/v1/contacts`. The current origin replaces the old
60
+ Lexoffice API origin. Pages are zero-based; size defaults to 25 with a maximum
61
+ of 250 for contacts. Optional `customer` and `vendor` booleans filter contact
62
+ roles. Results include `content` and page metadata (`first`, `last`, `number`,
63
+ `size`, `totalPages`, `totalElements`, `numberOfElements`).
64
+ [API documentation](https://developers.lexware.io/docs/).
65
+
66
+ The fragment requires positive integer size and caps the page number at 100000.
67
+ It validates the envelope while preserving contact fields and empty pages.
68
+ Request the next numbered page explicitly until `last` is true. It performs no
69
+ background scan. Name/email searches, sorting and partner OAuth
70
+ are outside this fragment; unsupported input fields are rejected rather than
71
+ forwarded. Provider-specific escaping for text searches therefore needs an
72
+ explicit implementation before those filters can be added.
73
+
74
+ The key is sent only to the fixed HTTPS API origin; redirects are rejected.
75
+ Changing the environment key takes effect on the next request. A rejected key
76
+ requires verification again. Disconnect deletes the local connection record,
77
+ not the provider key. A contact's email address is not proof of an app user's
78
+ identity; the application owns login and authorization.
79
+
80
+ ## Automation and application ownership
81
+
82
+ An AI can prepare JSON, secret references, JSKIT composition and contact-reading
83
+ code. The reviewed setup guide describes dashboard key creation, without a
84
+ self-service API for creating customer accounts or their API keys. Treat those
85
+ as manual owner/admin steps. A partner authorization flow would need its own
86
+ documented adapter and agreement; this fragment does not activate one.
87
+
88
+ The application's key is a credential, not an OAuth app registration. Customer-owned accounting connections require
89
+ customer-owned keys. There is no callback URL, so VM subdomains and deployed
90
+ app domains do not affect this key flow.
91
+
92
+ Lexware documents a client rate limit of two requests per second across API
93
+ endpoints. The reviewed material does not establish that issuing another key
94
+ provides an independent allowance. Apply usage limits in the application and
95
+ confirm provider capacity before claiming quota isolation.
96
+ [API rate limits](https://developers.lexware.io/docs/).
97
+
98
+ ## Focused evidence
99
+
100
+ Simulated replies and real temporary file state verify authentication, restart,
101
+ rotation, ownership, disconnect, empty/full contact pages, role filters,
102
+ fractional/oversized input rejection and malformed/provider failures. The
103
+ editor check verifies reference-only storage and persistence after reload.
104
+ Live provider accounts, billing changes and sample-app generation are excluded.
105
+
106
+ ## Accounting operations
107
+
108
+ `contacts.get`, `articles.get`, `invoices.get`, `vouchers.get` take a resource UUID.
109
+ `articles.list` accepts page/size plus articleNumber, gtin and PRODUCT/SERVICE type.
110
+ `vouchers.list` reads `/v1/voucherlist`: choose voucherType and voucherStatus
111
+ explicitly, optionally contactId/archived/page/size. The invoice type must be
112
+ retrieved with invoices.get; bookkeeping purchase/sales vouchers use vouchers.get.
113
+ Other voucher types require their native endpoint.
114
+
115
+ `invoices.createDraft` deliberately creates only net-EUR invoices for an existing
116
+ contact, with 1–100 custom lines. It takes contactId, voucherDate, shippingDate,
117
+ shippingType (service/delivery), lineItems and optional title/introduction/remark.
118
+ Each line supplies name, quantity, unitName, netAmount and taxRatePercentage.
119
+ No tax rate is inferred. Review accounting values and authorization in app code.
120
+ Review/finalize the resulting draft in Lexware; there is no send/payment action.
121
+
122
+ ```js
123
+ await connections.invoke({ context, integrationId: "contacts",
124
+ operation: "invoices.createDraft", input: {
125
+ contactId: approvedCustomer.lexwareId,
126
+ voucherDate: approvedInvoice.date, shippingDate: approvedInvoice.serviceDate,
127
+ shippingType: "service", lineItems: approvedInvoice.lines
128
+ }
129
+ });
130
+ ```
131
+
132
+ `approvedCustomer` and `approvedInvoice` are app-owned, authorized business data.
133
+ A Laravel or other native backend can use its own HTTP client with the same
134
+ private key/configuration and the documented Lexware endpoint. JSKIT adds no
135
+ accounting database, tax engine or scheduler. A CLI uses the same library call.
136
+
137
+ **LIMITATIONS:** No contact/article/voucher writes, receipt uploads, PDF downloads,
138
+ quotation workflows, gross/tax-free invoice creation, finalization or event
139
+ subscription receiver. Example: a booking can prepare a draft for an existing
140
+ customer, but cannot ingest an expense receipt or deliver an invoice PDF with
141
+ this adapter. Native app code must cover those features separately. Editor
142
+ assistant attachment is deferred. No live financial action or generated app was
143
+ executed. Failed/uncertain creation is never automatically repeated: inspect
144
+ vouchers first. Provider validation remains authoritative.
@@ -0,0 +1,193 @@
1
+ # Lightspeed Retail X-Series
2
+
3
+ Import `lightspeedProvider` from `@jskit-ai/connectors-catalog/server/lightspeed`.
4
+ This first fragment provides OAuth and three read operations through the existing
5
+ connection service and encrypted file store. CLI and editor users share the same
6
+ configuration contract. Saving the file does not connect a store.
7
+
8
+ ## Create the provider registration
9
+
10
+ 1. Open the [X-Series developer portal](https://developers.retail.lightspeed.app/).
11
+ Register a developer account; a retail-store login is a separate account.
12
+ 2. Sign in, open **Applications**, and choose **Create**. Enter the application
13
+ details requested by the portal and your backend's exact redirect URI.
14
+ 3. Copy **Client ID** into the form and **Save configuration**. Use
15
+ **Set credential in Env** for **Client Secret** and **Set callback in Env**
16
+ for the exact registered redirect URI. Save Env values, then return to the
17
+ integration. The application backend must implement that route.
18
+ 4. Copy the store prefix from its `https://PREFIX.retail.lightspeed.app` address.
19
+ Configure that store before starting authorization.
20
+ 5. Save the file, call `beginAuthorization`, and open its URL in a system browser.
21
+ Authorize the intended retailer. Pass the callback to `completeAuthorization`
22
+ with the same authenticated owner. Use explicit local cancellation if a declined
23
+ callback lacks state; do not associate it with an arbitrary pending attempt.
24
+ 6. New registrations initially allow 30 stores. Request provider approval before
25
+ operating a public production integration. Personal tokens are a separate
26
+ option, outside this OAuth fragment. [Authorization](https://x-series-api.lightspeedhq.com/docs/authorization)
27
+
28
+ ## Portable configuration and editor fields
29
+
30
+ ```json
31
+ {
32
+ "schemaVersion": 1,
33
+ "registrations": {
34
+ "lightspeed": {
35
+ "source": "own",
36
+ "clientId": "REPLACE_WITH_LIGHTSPEED_CLIENT_ID",
37
+ "clientSecretRef": "env:LIGHTSPEED_CLIENT_SECRET",
38
+ "callbackUrlRef": "env:LIGHTSPEED_CALLBACK_URL"
39
+ }
40
+ },
41
+ "integrations": {
42
+ "retail": {
43
+ "provider": "lightspeed",
44
+ "displayName": "Store inventory",
45
+ "accountMode": "shared",
46
+ "authentication": { "method": "oauth2", "registrationRef": "lightspeed" },
47
+ "settings": { "domainPrefix": "your-store" },
48
+ "scopes": ["products:read", "customers:read", "outlets:read"]
49
+ }
50
+ }
51
+ }
52
+ ```
53
+
54
+ In Vibe64, add **Lightspeed** in **Integrations**, choose the account mode, and
55
+ enter **Client ID**, **Client secret reference**, **Callback URL reference** and
56
+ **Domain prefix**. Edit permissions, then **Save configuration**. The client
57
+ authentication method defaults to `client_secret_post`. Use reference values,
58
+ not raw secrets or a literal callback URL. The domain field accepts a lowercase
59
+ DNS label, not a whole URL. It cannot select arbitrary external hosts.
60
+
61
+ The initial form includes 49 permission choices and initially selects 16 reads.
62
+ The JSON above narrows access to the three implemented operations. Retain
63
+ `products:read` for connection verification. Other selectable permissions record
64
+ an intended grant; they do not implement additional operations. Provider scopes
65
+ are space-separated and the runtime respects the actual token grant.
66
+ [Scope reference](https://x-series-api.lightspeedhq.com/docs/scopes)
67
+
68
+ `shared` means the host deliberately authorizes several app users to use one
69
+ store connection. `per-user` gives each authenticated subject a separate grant;
70
+ the configured store still applies to that slot. `assistant` uses the assistant
71
+ owner. The host's `authorize` policy establishes those owners and any narrower
72
+ record permissions. This configuration does not implement app login.
73
+
74
+ ## Runtime and operation contract
75
+
76
+ | Operation | Required scope | Result |
77
+ | --- | --- | --- |
78
+ | `products.list` | `products:read` | Product page; also used for verification |
79
+ | `customers.list` | `customers:read` | Customer page, preserving nullable fields |
80
+ | `outlets.list` | `outlets:read` | Outlet page |
81
+
82
+ All three accept `page_size` 1–100 (library default 20), optional integer `after`
83
+ and `before` version bounds, and `deleted` (default false). This fragment bounds
84
+ page size to 100; it does not assert that as the provider's maximum. Version
85
+ numbers must fit JavaScript's safe integer range. A combined lower bound must be
86
+ less than its upper bound. Unknown inputs, arbitrary destinations, name/SKU
87
+ searches and writes are rejected before transport.
88
+
89
+ Each invocation requests exactly one page and preserves provider records and
90
+ version metadata. The caller chooses whether to request the next version page;
91
+ there is no background traversal. Empty pages use null version bounds. The
92
+ customer reference also permits an absent envelope version; row versions remain
93
+ available. Missing IDs, unsafe versions, contradictory bounds and oversized
94
+ responses fail validation. [Products](https://x-series-api.lightspeedhq.com/reference/listproducts),
95
+ [customers](https://x-series-api.lightspeedhq.com/reference/listcustomers),
96
+ [outlets](https://x-series-api.lightspeedhq.com/reference/listoutlets).
97
+
98
+ The adapter pins `/api/2026-07/` reads. Lightspeed uses quarterly dated releases
99
+ with at least twelve months of support and can serve an older requested version
100
+ through a supported fallback after expiry. Review this pin against provider
101
+ changes; it is not a promise of an immutable remote API.
102
+ [Version policy](https://x-series-api.lightspeedhq.com/docs/versioning-strategy)
103
+
104
+ Authorization starts at `https://secure.retail.lightspeed.app/connect`.
105
+ Token exchange uses the configured store's `/api/1.0/token`; callback-supplied
106
+ hosts never choose the credential destination. Successful token responses must
107
+ identify that store and include scopes, expiry and a refresh token. Every rotated
108
+ refresh token is saved before the next read. The shared runtime sends PKCE;
109
+ Lightspeed's reviewed guide does not establish its enforcement. Verify that
110
+ behavior with an approved test registration before production use.
111
+
112
+ Cancellation reaches transport. Rate limits, missing permissions and revoked
113
+ access have separate errors; calls are not retried automatically. A local
114
+ `disconnect` deletes the stored grant without revoking it at the provider. If
115
+ refresh returns an incomplete grant after consuming the old token, reconnect;
116
+ do not repeatedly retry the spent refresh token.
117
+
118
+ ## Application ownership, callbacks and capacity
119
+
120
+ The application owner creates the provider registration and stores its secret
121
+ in the application's private Env. Public Vibe64, Vibe64 Online and CLI users use
122
+ this same ownership model. The configuration file holds the client ID and Env
123
+ references; the editor does not own the application's grants.
124
+
125
+ Register the exact callback implemented by the application. For a hosted project,
126
+ start with its assigned application URL and append the implemented callback path.
127
+ Save that same URL through the application's callback Env reference. On a domain
128
+ or host change, update both the provider registration and callback Env if the URL
129
+ changes. Preserve the application's identity and persistent grant store when
130
+ moving it; neither a new editor URL nor a new hosting address creates a new owner.
131
+ See the [callback guide](../../connectors-core/docs/oauth-callbacks.md) and
132
+ [application setup command](../../connectors-core/docs/setup-command.md).
133
+
134
+ The owner must obtain any required Lightspeed approval and retain the configured
135
+ store prefix with the application's connection. Separate registrations alone do
136
+ not prove independent provider quotas; confirm capacity at the provider account
137
+ or store boundary before promising isolation.
138
+
139
+ ## Automation, CLI parity and proof
140
+
141
+ An AI can write and validate this JSON, compose the JSKIT service and file store,
142
+ wire an authenticated callback and implement explicit page presentation. There
143
+ is no verified public registration-provisioning API in the reviewed material;
144
+ do not invent one. Account creation, store consent and public-app approval remain
145
+ operator/provider steps. Authorized browser assistance can help with available
146
+ portal fields without guaranteeing unattended account creation or approval.
147
+
148
+ A trusted CLI uses the same library, references and owner policy with a registered
149
+ callback listener. The open-source editor never needs a database to edit this
150
+ file and must not bundle a commercial client secret. Provider setup and runtime
151
+ operations are reusable package code; the app owns routes, rendering and policy.
152
+
153
+ Local proof uses controlled HTTP responses and temporary encrypted files. It
154
+ covers scopes, store binding, refresh rotation, ownership, pagination, malformed
155
+ responses, cancellation and editor persistence. No live retail account, provider
156
+ registration, consent, data mutation or generated app was used. R-Series,
157
+ K-Series, personal-token mode, webhook setup and additional API operations are
158
+ outside this initial fragment.
159
+
160
+ Credential instructions were rechecked against the official authorization guide
161
+ on 2026-09-12. Screen steps now name the Env handoff, fixed store slot, shared
162
+ and per-user connection entry points, explicit cancellation and local disconnect.
163
+ Updated rendered review passed with simulated connection responses.
164
+
165
+ ## Inventory and sales reads
166
+
167
+ `sales.list` uses the same version bounds/page_size as product pages, without
168
+ a deleted filter. It requires sales:read. Correlate customer/outlet/product IDs
169
+ in the returned sale with the app's authorized records. The app owns reporting,
170
+ privacy and any aggregation; this connector installs no dashboard.
171
+
172
+ `inventory.list` requires inventory:read and POSTs a read request to
173
+ `/api/2026-07/inventory`. Input: after/before version bounds, size (local1–1000,
174
+ default100), include_deleted, sort_direction (defaultasc), product_id and variants.
175
+ Request variants only with a product ID. It returns a flat array, not a data
176
+ wrapper. Preserve current_inventory_level and quantity_to_procure separately.
177
+ Advance an ascending scan explicitly using the maximum returned version; never
178
+ follow a provider-supplied URL with credentials. The app controls polling and
179
+ reconciliation during concurrent stock changes.
180
+
181
+ [Inventory contract](https://x-series-api.lightspeedhq.com/reference/listinventoryrecords),
182
+ [quantity migration](https://x-series-api.lightspeedhq.com/docs/2026-04-release-notes),
183
+ [sales pages](https://x-series-api.lightspeedhq.com/reference/listsales).
184
+
185
+ A CLI app uses these same connection operations. Other frameworks implement
186
+ native HTTP calls with their own project-owned OAuth grant and the same JSON/Env
187
+ contract; no Vibe64 runtime or JSKIT sidecar is required.
188
+
189
+ **LIMITATIONS:** No POS/dashboard UI, customer/product/stock/payment/sale writes,
190
+ gift-card/store-credit workflows, webhook receiver or automatic editor tool
191
+ attachment. Example: an app can report low stock and sales totals, but cannot
192
+ replenish a shelf or charge a customer through this adapter. Adding a write scope
193
+ does not implement a write operation. No live retailer or generated app was used.