@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.
- package/README.md +192 -0
- package/docs/ai-upstream-notices.md +51 -0
- package/docs/ai.md +191 -0
- package/docs/airtable.md +130 -0
- package/docs/algolia.md +190 -0
- package/docs/amazon-redshift.md +229 -0
- package/docs/amplitude.md +210 -0
- package/docs/apify.md +162 -0
- package/docs/apollo-io.md +200 -0
- package/docs/asana.md +126 -0
- package/docs/ashby.md +188 -0
- package/docs/atlassian.md +224 -0
- package/docs/attention.md +162 -0
- package/docs/aws-athena.md +150 -0
- package/docs/aws-credentials.md +75 -0
- package/docs/aws-s3.md +193 -0
- package/docs/bigquery.md +146 -0
- package/docs/brevo.md +122 -0
- package/docs/calendly.md +158 -0
- package/docs/canva.md +191 -0
- package/docs/chargebee.md +192 -0
- package/docs/clay.md +194 -0
- package/docs/clickhouse.md +242 -0
- package/docs/confidence-exp.md +74 -0
- package/docs/confidence-flags.md +75 -0
- package/docs/confidence-oauth.md +137 -0
- package/docs/contentful.md +123 -0
- package/docs/databricks.md +180 -0
- package/docs/dbt-semantic-layer.md +175 -0
- package/docs/elevenlabs.md +102 -0
- package/docs/figma.md +132 -0
- package/docs/firebase-cloud-messaging.md +262 -0
- package/docs/firecrawl.md +137 -0
- package/docs/fireflies.md +95 -0
- package/docs/fireworks-ai.md +53 -0
- package/docs/gatewayapi.md +113 -0
- package/docs/gemini-enterprise.md +224 -0
- package/docs/github-api.md +133 -0
- package/docs/gitlab-api.md +138 -0
- package/docs/gmail.md +133 -0
- package/docs/gong.md +205 -0
- package/docs/google-ads.md +156 -0
- package/docs/google-analytics.md +202 -0
- package/docs/google-docs.md +105 -0
- package/docs/google-drive.md +108 -0
- package/docs/google-maps-platform.md +208 -0
- package/docs/google-oauth.md +123 -0
- package/docs/google-search-console.md +124 -0
- package/docs/google-sheets.md +94 -0
- package/docs/google-slides.md +95 -0
- package/docs/granola.md +178 -0
- package/docs/hex.md +161 -0
- package/docs/heygen.md +124 -0
- package/docs/hubspot.md +142 -0
- package/docs/incident-io.md +118 -0
- package/docs/inngest.md +178 -0
- package/docs/klipy.md +149 -0
- package/docs/lexware.md +144 -0
- package/docs/lightspeed.md +193 -0
- package/docs/linear.md +137 -0
- package/docs/linkedin.md +196 -0
- package/docs/logo-dev.md +152 -0
- package/docs/mailgun.md +153 -0
- package/docs/mapbox.md +174 -0
- package/docs/microsoft-excel.md +97 -0
- package/docs/microsoft-fabric.md +249 -0
- package/docs/microsoft-oauth.md +143 -0
- package/docs/microsoft-onedrive.md +76 -0
- package/docs/microsoft-onenote.md +75 -0
- package/docs/microsoft-outlook.md +90 -0
- package/docs/microsoft-powerpoint.md +119 -0
- package/docs/microsoft-sharepoint.md +75 -0
- package/docs/microsoft-teams.md +72 -0
- package/docs/microsoft-word.md +119 -0
- package/docs/miro.md +117 -0
- package/docs/n8n.md +169 -0
- package/docs/notion.md +137 -0
- package/docs/oura.md +161 -0
- package/docs/paddle.md +168 -0
- package/docs/perplexity.md +85 -0
- package/docs/pipedrive.md +120 -0
- package/docs/polar.md +63 -0
- package/docs/posthog.md +227 -0
- package/docs/prestashop.md +151 -0
- package/docs/replicate.md +60 -0
- package/docs/resend.md +153 -0
- package/docs/salesforce.md +234 -0
- package/docs/sanity.md +122 -0
- package/docs/semrush.md +276 -0
- package/docs/sentry.md +112 -0
- package/docs/sevdesk.md +107 -0
- package/docs/shopify.md +206 -0
- package/docs/slack.md +257 -0
- package/docs/snowflake.md +271 -0
- package/docs/storyblok.md +130 -0
- package/docs/stripe.md +77 -0
- package/docs/supabase.md +51 -0
- package/docs/tally.md +105 -0
- package/docs/telegram.md +165 -0
- package/docs/tiktok.md +201 -0
- package/docs/twilio.md +284 -0
- package/docs/twitch.md +428 -0
- package/docs/wave.md +440 -0
- package/docs/wix.md +1249 -0
- package/docs/wiz.md +177 -0
- package/docs/woocommerce.md +400 -0
- package/docs/wordpress-com.md +358 -0
- package/docs/wordpress-self-hosted.md +252 -0
- package/docs/workday.md +292 -0
- package/docs/x-twitter.md +188 -0
- package/docs/xero.md +429 -0
- package/docs/zoho-books.md +214 -0
- package/docs/zoho-crm.md +192 -0
- package/package.json +153 -0
- package/patterns/ai-connections/PATTERN.md +84 -0
- package/patterns/ai-connections/example/ai-model.js +11 -0
- package/patterns/ai-connections/example/perplexity-answer.js +29 -0
- package/patterns/api-key-connection/PATTERN.md +368 -0
- package/patterns/api-key-connection/example/connections.js +18 -0
- package/patterns/api-key-connection/example/integrations.json +19 -0
- package/patterns/assistant-mcp/PATTERN.md +110 -0
- package/patterns/assistant-mcp/example/integrations.json +13 -0
- package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
- package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
- package/patterns/aws-storage-queries/PATTERN.md +169 -0
- package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
- package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
- package/patterns/aws-storage-queries/example/formats/package.json +12 -0
- package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
- package/patterns/aws-storage-queries/example/integrations.json +38 -0
- package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
- package/patterns/event-delivery/PATTERN.md +151 -0
- package/patterns/event-delivery/example/integrations.json +17 -0
- package/patterns/firebase-messaging/PATTERN.md +156 -0
- package/patterns/firebase-messaging/example/server/notifications.js +23 -0
- package/patterns/google-ads-search/PATTERN.md +92 -0
- package/patterns/google-ads-search/example/ads-setup.js +25 -0
- package/patterns/oauth-connection/PATTERN.md +724 -0
- package/patterns/oauth-connection/example/integrations.json +20 -0
- package/patterns/paddle-catalogue/PATTERN.md +78 -0
- package/patterns/paddle-catalogue/example/create-products.js +38 -0
- package/patterns/public-image/PATTERN.md +84 -0
- package/patterns/public-image/example/integrations.json +13 -0
- package/patterns/public-image/example/logo-url.js +16 -0
- package/patterns/redshift-queries/PATTERN.md +150 -0
- package/patterns/redshift-queries/example/integrations.json +33 -0
- package/patterns/source-scanning/PATTERN.md +83 -0
- package/patterns/source-scanning/example/source-scanner.js +13 -0
- package/src/client/firebase-cloud-messaging.js +10 -0
- package/src/client/google-analytics.js +72 -0
- package/src/client/google-maps-platform.js +39 -0
- package/src/client/logo-dev.js +36 -0
- package/src/server/ai.js +46 -0
- package/src/server/airtable.js +67 -0
- package/src/server/algolia.js +63 -0
- package/src/server/amazon-redshift.js +96 -0
- package/src/server/amplitude.js +31 -0
- package/src/server/apify.js +68 -0
- package/src/server/apollo-io.js +85 -0
- package/src/server/asana.js +64 -0
- package/src/server/ashby.js +61 -0
- package/src/server/atlassian.js +32 -0
- package/src/server/attention.js +93 -0
- package/src/server/aws-athena.js +82 -0
- package/src/server/aws-s3.js +49 -0
- package/src/server/awsTransport.js +75 -0
- package/src/server/bigquery.js +97 -0
- package/src/server/brevo.js +97 -0
- package/src/server/calendly.js +77 -0
- package/src/server/canva.js +13 -0
- package/src/server/chargebee.js +88 -0
- package/src/server/clay.js +78 -0
- package/src/server/clickhouse.js +66 -0
- package/src/server/confidence.js +29 -0
- package/src/server/contentful.js +40 -0
- package/src/server/databricks.js +55 -0
- package/src/server/dbt-semantic-layer.js +95 -0
- package/src/server/elevenlabs.js +81 -0
- package/src/server/figma.js +24 -0
- package/src/server/firebase-cloud-messaging.js +111 -0
- package/src/server/firecrawl.js +70 -0
- package/src/server/fireflies.js +31 -0
- package/src/server/fireworks-ai.js +16 -0
- package/src/server/gatewayapi.js +48 -0
- package/src/server/gemini-enterprise.js +47 -0
- package/src/server/github-api.js +90 -0
- package/src/server/gitlab-api.js +67 -0
- package/src/server/gmail.js +60 -0
- package/src/server/gong.js +52 -0
- package/src/server/google-ads-search.js +134 -0
- package/src/server/google-ads.js +80 -0
- package/src/server/google-docs.js +36 -0
- package/src/server/google-drive.js +71 -0
- package/src/server/google-maps-platform.js +90 -0
- package/src/server/google-search-console.js +31 -0
- package/src/server/google-sheets.js +60 -0
- package/src/server/google-slides.js +36 -0
- package/src/server/google.js +61 -0
- package/src/server/granola.js +115 -0
- package/src/server/graphqlOperation.js +15 -0
- package/src/server/hex.js +29 -0
- package/src/server/heygen.js +54 -0
- package/src/server/hubspot.js +85 -0
- package/src/server/incident-io.js +68 -0
- package/src/server/inngest.js +86 -0
- package/src/server/jsonOperation.js +34 -0
- package/src/server/klipy.js +34 -0
- package/src/server/lexware.js +59 -0
- package/src/server/lightspeed.js +82 -0
- package/src/server/linear.js +52 -0
- package/src/server/linkedin.js +74 -0
- package/src/server/mailgun.js +76 -0
- package/src/server/mapbox.js +46 -0
- package/src/server/mcpRegistration.js +41 -0
- package/src/server/mcpTransport.js +60 -0
- package/src/server/microsoft-excel.js +67 -0
- package/src/server/microsoft-fabric.js +81 -0
- package/src/server/microsoft-onedrive.js +58 -0
- package/src/server/microsoft-onenote.js +52 -0
- package/src/server/microsoft-outlook.js +58 -0
- package/src/server/microsoft-powerpoint.js +5 -0
- package/src/server/microsoft-sharepoint.js +46 -0
- package/src/server/microsoft-teams.js +29 -0
- package/src/server/microsoft-word.js +5 -0
- package/src/server/microsoft.js +88 -0
- package/src/server/miro.js +29 -0
- package/src/server/n8n.js +78 -0
- package/src/server/notion.js +76 -0
- package/src/server/oura.js +48 -0
- package/src/server/paddle.js +83 -0
- package/src/server/perplexity.js +15 -0
- package/src/server/pipedrive.js +95 -0
- package/src/server/polar.js +20 -0
- package/src/server/posthog.js +44 -0
- package/src/server/prestashop.js +42 -0
- package/src/server/replicate.js +42 -0
- package/src/server/resend.js +93 -0
- package/src/server/salesforce.js +84 -0
- package/src/server/sanity.js +31 -0
- package/src/server/semrush.js +359 -0
- package/src/server/sentry.js +30 -0
- package/src/server/sevdesk.js +20 -0
- package/src/server/shopify.js +99 -0
- package/src/server/slack.js +143 -0
- package/src/server/snowflake.js +139 -0
- package/src/server/storyblok.js +49 -0
- package/src/server/stripe.js +13 -0
- package/src/server/supabase.js +13 -0
- package/src/server/tally.js +78 -0
- package/src/server/telegram.js +55 -0
- package/src/server/tiktok.js +86 -0
- package/src/server/twilio.js +90 -0
- package/src/server/twitch.js +409 -0
- package/src/server/wave.js +520 -0
- package/src/server/wix.js +1048 -0
- package/src/server/wiz.js +117 -0
- package/src/server/woocommerce.js +412 -0
- package/src/server/wordpress-com.js +236 -0
- package/src/server/wordpress-self-hosted.js +134 -0
- package/src/server/workday.js +136 -0
- package/src/server/x-twitter.js +110 -0
- package/src/server/xero.js +397 -0
- package/src/server/zoho-books.js +90 -0
- package/src/server/zoho-crm.js +89 -0
- package/src/server/zohoOAuth.js +21 -0
- package/src/shared/ai-models.json +8049 -0
- package/src/shared/ai.js +63 -0
- package/src/shared/algolia.js +29 -0
- package/src/shared/amazon-redshift.js +51 -0
- package/src/shared/amplitude.js +28 -0
- package/src/shared/atlassian.js +43 -0
- package/src/shared/aws.js +72 -0
- package/src/shared/canva.js +66 -0
- package/src/shared/chargebee.js +26 -0
- package/src/shared/clickhouse.js +38 -0
- package/src/shared/confidence.js +28 -0
- package/src/shared/databricks.js +33 -0
- package/src/shared/dbt-semantic-layer.js +32 -0
- package/src/shared/definitions.js +140 -0
- package/src/shared/figma.js +21 -0
- package/src/shared/firebase-cloud-messaging.js +45 -0
- package/src/shared/gemini-enterprise.js +33 -0
- package/src/shared/gong.js +33 -0
- package/src/shared/google-ads-search.js +31 -0
- package/src/shared/google-ads.js +28 -0
- package/src/shared/google-maps-platform.js +28 -0
- package/src/shared/google.js +133 -0
- package/src/shared/granola.js +25 -0
- package/src/shared/hex.js +28 -0
- package/src/shared/inngest.js +35 -0
- package/src/shared/lightspeed.js +75 -0
- package/src/shared/linkedin.js +27 -0
- package/src/shared/logo-dev.js +21 -0
- package/src/shared/mapbox.js +38 -0
- package/src/shared/mcp.js +92 -0
- package/src/shared/microsoft-fabric.js +47 -0
- package/src/shared/microsoft.js +231 -0
- package/src/shared/miro.js +27 -0
- package/src/shared/oura.js +23 -0
- package/src/shared/posthog.js +33 -0
- package/src/shared/prestashop.js +23 -0
- package/src/shared/salesforce.js +36 -0
- package/src/shared/semrush.js +24 -0
- package/src/shared/shopify.js +51 -0
- package/src/shared/siteUrl.js +12 -0
- package/src/shared/slack.js +88 -0
- package/src/shared/snowflake.js +55 -0
- package/src/shared/tiktok.js +22 -0
- package/src/shared/tokens.js +747 -0
- package/src/shared/twilio.js +41 -0
- package/src/shared/twitch.js +49 -0
- package/src/shared/wave.js +52 -0
- package/src/shared/wix.js +40 -0
- package/src/shared/wiz.js +41 -0
- package/src/shared/wordpress-com.js +30 -0
- package/src/shared/wordpress.js +69 -0
- package/src/shared/workday.js +50 -0
- package/src/shared/x-twitter.js +19 -0
- package/src/shared/xero.js +46 -0
- package/src/shared/zoho-books.js +39 -0
- package/src/shared/zoho-crm.js +43 -0
- package/src/shared/zoho-regions.js +12 -0
- package/test/ai.test.js +136 -0
- package/test/airtable.test.js +125 -0
- package/test/algolia.test.js +207 -0
- package/test/amazon-redshift.test.js +272 -0
- package/test/amplitude.test.js +239 -0
- package/test/apify.test.js +93 -0
- package/test/apollo-io.test.js +125 -0
- package/test/asana.test.js +99 -0
- package/test/ashby.test.js +97 -0
- package/test/atlassian.test.js +249 -0
- package/test/attention.test.js +79 -0
- package/test/aws.test.js +405 -0
- package/test/brevo.test.js +71 -0
- package/test/calendly.test.js +136 -0
- package/test/canva.test.js +258 -0
- package/test/chargebee.test.js +195 -0
- package/test/clickhouse.test.js +278 -0
- package/test/confidence.test.js +205 -0
- package/test/databricks.test.js +253 -0
- package/test/dbt-semantic-layer.test.js +221 -0
- package/test/designMcp.test.js +336 -0
- package/test/elevenlabs.test.js +52 -0
- package/test/firebase-cloud-messaging.test.js +242 -0
- package/test/firecrawl.test.js +66 -0
- package/test/gemini-enterprise.test.js +218 -0
- package/test/github-api.test.js +167 -0
- package/test/gitlab-api.test.js +160 -0
- package/test/gong.test.js +192 -0
- package/test/google-ads.test.js +350 -0
- package/test/google-maps-platform.test.js +191 -0
- package/test/google.test.js +710 -0
- package/test/granola.test.js +240 -0
- package/test/hex.test.js +253 -0
- package/test/heygen.test.js +121 -0
- package/test/hubspot.test.js +103 -0
- package/test/inngest.test.js +219 -0
- package/test/lightspeed.test.js +250 -0
- package/test/linear.test.js +146 -0
- package/test/linkedin.test.js +243 -0
- package/test/logo-dev.test.js +79 -0
- package/test/mailgun.test.js +107 -0
- package/test/mapbox.test.js +181 -0
- package/test/mcp.test.js +227 -0
- package/test/microsoft-fabric.test.js +258 -0
- package/test/microsoft.test.js +554 -0
- package/test/n8nOAuth.test.js +188 -0
- package/test/notionOAuth.test.js +183 -0
- package/test/oura.test.js +211 -0
- package/test/paddleCatalogue.test.js +51 -0
- package/test/paddlePermissions.test.js +101 -0
- package/test/perplexityComposition.test.js +39 -0
- package/test/pipedriveOAuth.test.js +140 -0
- package/test/posthog.test.js +200 -0
- package/test/prestashop.test.js +207 -0
- package/test/resend.test.js +163 -0
- package/test/salesforce.test.js +276 -0
- package/test/semrush.test.js +479 -0
- package/test/sentry.test.js +35 -0
- package/test/shopify.test.js +247 -0
- package/test/slack.test.js +320 -0
- package/test/snowflake.test.js +391 -0
- package/test/tally.test.js +75 -0
- package/test/telegram.test.js +58 -0
- package/test/tiktok.test.js +243 -0
- package/test/tokens.test.js +1079 -0
- package/test/twilio.test.js +221 -0
- package/test/twitch.test.js +573 -0
- package/test/wave.test.js +678 -0
- package/test/wix.test.js +1099 -0
- package/test/wiz.test.js +185 -0
- package/test/wordpress-com.test.js +469 -0
- package/test/wordpress.test.js +660 -0
- package/test/workday.test.js +314 -0
- package/test/x-twitter.test.js +256 -0
- package/test/xero.test.js +700 -0
- package/test/zoho-books.test.js +253 -0
- package/test/zoho-crm.test.js +223 -0
package/docs/inngest.md
ADDED
|
@@ -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.
|
package/docs/lexware.md
ADDED
|
@@ -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.
|