@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/apify.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Apify
|
|
2
|
+
|
|
3
|
+
Import `apifyProvider` from `@jskit-ai/connectors-catalog/server/apify`.
|
|
4
|
+
The adapter discovers Actors, starts bounded runs, reads status, requests cancellation,
|
|
5
|
+
and retrieves dataset/storage results. Verification only lists Actors; it does not
|
|
6
|
+
start runs, create schedules or spend compute credits.
|
|
7
|
+
|
|
8
|
+
## Set up access
|
|
9
|
+
|
|
10
|
+
1. Sign in to [Apify Console](https://console.apify.com/settings/integrations).
|
|
11
|
+
Select the account or organization that should own this connection.
|
|
12
|
+
2. Open **Settings → API & Integrations** and find the API tokens section.
|
|
13
|
+
3. Start creating a token. In **Description**, identify the application. For an
|
|
14
|
+
expiring token, enable **Set expiration date** and fill **Date**.
|
|
15
|
+
A standard token leaves **Limit token permissions** off. It has broad account
|
|
16
|
+
access, including capabilities beyond this adapter's operations; use this
|
|
17
|
+
documented setup only if the application owner accepts that access. Keep the
|
|
18
|
+
token exclusively in the trusted application backend. Choose **Create**, then
|
|
19
|
+
copy the issued token. Do not broaden an existing token just to pass a check.
|
|
20
|
+
A token created under your personal account does not cover organizations
|
|
21
|
+
you belong to. Switch into the organization first for its tokens; organization
|
|
22
|
+
personal tokens inherit the member's access, while organization tokens require
|
|
23
|
+
owner or Manage access tokens permission.
|
|
24
|
+
4. Store the token outside application source as `APIFY_TOKEN`. Set the
|
|
25
|
+
configuration slot's provider to `apify`, mode to `shared` or `assistant`,
|
|
26
|
+
scopes to `[]`, and authentication to `api-key` with reference
|
|
27
|
+
`env:APIFY_TOKEN`. In Vibe64, enter that value in **API key reference**, save,
|
|
28
|
+
then use **Set credential in Env** to save the token as `APIFY_TOKEN`.
|
|
29
|
+
This mode has no callback/client registration.
|
|
30
|
+
5. Save and choose **Connect account**, or **Verify again** for a connected
|
|
31
|
+
account. **Check connection** only reads its current status. CLI applications
|
|
32
|
+
call `connectApiKey`. Inspect the Actor list for the expected
|
|
33
|
+
account's resources. Revoke/replace the token through the same settings page.
|
|
34
|
+
See [Account settings](https://docs.apify.com/account/settings) and
|
|
35
|
+
[API integration](https://docs.apify.com/integrations/api).
|
|
36
|
+
|
|
37
|
+
## Scoped tokens and failed checks
|
|
38
|
+
|
|
39
|
+
The adapter accepts scoped tokens too, but this guide does not establish a
|
|
40
|
+
minimum scoped permission set for `GET /v2/actors`. If your policy requires
|
|
41
|
+
scoped access, enable **Limit token permissions** and establish Actor-list
|
|
42
|
+
access with Apify before connecting. Storage Read alone is not proof of that
|
|
43
|
+
access. A 403 during Connect account or Verify again means this read was denied; it does not
|
|
44
|
+
prove the token is invalid or should be replaced with a broader token. A 401
|
|
45
|
+
requires checking the token value, expiry and revocation. Never put the token
|
|
46
|
+
in frontend code or source control.
|
|
47
|
+
|
|
48
|
+
This guide's documented standard-token path is distinct from unverified
|
|
49
|
+
least-privilege configuration. No live token issuance or permission test has
|
|
50
|
+
been performed. The connection check remains the same authenticated Actor-list
|
|
51
|
+
operation the fragment provides; it does not run Actors or spend compute.
|
|
52
|
+
|
|
53
|
+
For a scoped token that runs Actors and retrieves output, grant **Run** on the
|
|
54
|
+
chosen Actor and allow access to its default run storages. Without that storage
|
|
55
|
+
access, a run can succeed while reading its output fails. Review the execution
|
|
56
|
+
permission mode: **Full access** gives the running Actor account-wide access;
|
|
57
|
+
**Restricted access** can require additional permissions for that Actor's work.
|
|
58
|
+
These settings do not establish the separate minimum permission for Actor listing.
|
|
59
|
+
See [scoped token execution](https://docs.apify.com/integrations/api#actor-execution).
|
|
60
|
+
Disconnecting locally does not revoke the token: revoke it in Apify Console when
|
|
61
|
+
provider access must end, including access from other applications using it.
|
|
62
|
+
|
|
63
|
+
## Runtime and AI composition
|
|
64
|
+
|
|
65
|
+
`actors.list` calls `GET /v2/actors` with Bearer authentication. Supported inputs
|
|
66
|
+
are `limit` (1–1000, default 100), `offset` (default 0), and `desc` (default false).
|
|
67
|
+
The list includes Actors the user created or used. The result retains the `data`
|
|
68
|
+
envelope and its `items`, `total`, `offset`, `count` and `limit`. The caller
|
|
69
|
+
requests subsequent pages. See [List Actors](https://docs.apify.com/api/v2/actors-get).
|
|
70
|
+
|
|
71
|
+
Use the [API-key source pattern](../patterns/api-key-connection/PATTERN.md)
|
|
72
|
+
with this provider. The application authorizer controls who can inspect the
|
|
73
|
+
shared Actor list. CLI and UI configuration use the same file and secret
|
|
74
|
+
reference; connection metadata uses the existing file-store adapter.
|
|
75
|
+
|
|
76
|
+
## Provisioning automation and capacity
|
|
77
|
+
|
|
78
|
+
Once a token exists, an AI can configure this adapter and query the list through
|
|
79
|
+
documented APIs. This pass did not verify an API for issuing the initial token
|
|
80
|
+
with equivalent normal-account permissions; use the console for that step.
|
|
81
|
+
Actor creation and run APIs are separate capabilities, not evidence that token
|
|
82
|
+
or organization creation can be automated without operator involvement.
|
|
83
|
+
|
|
84
|
+
The application owner supplies its authorized Apify token and arranges the
|
|
85
|
+
account or organization budget. Multiple tokens in one account do not reserve
|
|
86
|
+
separate compute credits or concurrency. Private Actors still require explicit
|
|
87
|
+
access; a configuration label cannot grant access to another account's resources.
|
|
88
|
+
|
|
89
|
+
Fixtures cover authentication, pagination, malformed success, input validation,
|
|
90
|
+
file-store restart, token rotation, owner isolation, disconnect and 401/403/429.
|
|
91
|
+
No real Apify account or Actor was invoked.
|
|
92
|
+
|
|
93
|
+
## Run an Actor and retrieve its output
|
|
94
|
+
|
|
95
|
+
Select an Actor ID from `actors.list`, or an explicitly chosen Store Actor using
|
|
96
|
+
`owner~actor-name`. Call `actors.get` with `{ actorId }` to inspect it. Review the
|
|
97
|
+
Actor's own input documentation and price before submitting: Actor inputs and
|
|
98
|
+
pricing vary; a token does not make every Actor free or accessible.
|
|
99
|
+
|
|
100
|
+
```js
|
|
101
|
+
const started = await connections.invoke({ context, integrationId: "scraper",
|
|
102
|
+
operation: "runs.start", input: { actorId: "owner~actor-name",
|
|
103
|
+
input: { query: "your actor-specific input" }, timeout: 120, maxTotalChargeUsd: 1 } });
|
|
104
|
+
const runId = started.data.id;
|
|
105
|
+
const current = await connections.invoke({ context, integrationId: "scraper",
|
|
106
|
+
operation: "runs.get", input: { runId } });
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`runs.start` requires an Actor-specific JSON `input`, a timeout of 1–86400 seconds,
|
|
110
|
+
and an explicit positive `maxTotalChargeUsd` (minimum 0.01). Optional `build`
|
|
111
|
+
selects a version/tag. The adapter requests immediate return and disables
|
|
112
|
+
restart-on-error. Persist `data.id` before subsequent work. Provider minimum
|
|
113
|
+
charges or account policy can still reject a requested cap.
|
|
114
|
+
[Start a run](https://docs.apify.com/api/v2/acts-runs-post).
|
|
115
|
+
|
|
116
|
+
Poll `runs.get` on a bounded application schedule. `READY`/`RUNNING` are not
|
|
117
|
+
completion; inspect `SUCCEEDED`, `FAILED`, `TIMED-OUT`, and `ABORTED`, retaining
|
|
118
|
+
`statusMessage` for useful diagnostics. `runs.abort` takes `{ runId }` and requests
|
|
119
|
+
graceful cancellation. An `ABORTING` response remains pending; check status again
|
|
120
|
+
rather than immediately claiming cancellation finished. A lost start response has
|
|
121
|
+
an uncertain outcome: inspect the account's runs before creating another paid run.
|
|
122
|
+
[Read status](https://docs.apify.com/api/v2/actor-run-get),
|
|
123
|
+
[abort](https://docs.apify.com/api/v2/actor-run-abort-post).
|
|
124
|
+
|
|
125
|
+
For results, use `data.defaultDatasetId` from the run with `datasets.items`:
|
|
126
|
+
`{ datasetId, offset: 0, limit: 100 }`. It returns JSON items. Advance offset by
|
|
127
|
+
the received count until a short page after the run finishes. No cleaning or
|
|
128
|
+
unwinding is applied, so pagination reflects raw items. A running Actor can append
|
|
129
|
+
items; an empty page before completion does not establish final completion.
|
|
130
|
+
[Dataset items](https://docs.apify.com/api/v2/dataset-items-get).
|
|
131
|
+
|
|
132
|
+
Use `data.defaultKeyValueStoreId` with `stores.record` and `{ storeId, key }`,
|
|
133
|
+
for example `key: "OUTPUT"` where that Actor documents OUTPUT. It returns
|
|
134
|
+
`{ contentType, bodyBase64, size }` for JSON, text or binary records. Decode
|
|
135
|
+
`bodyBase64` in the application; serve downloads with the application's own access
|
|
136
|
+
checks and safe content-disposition policy. This bounded operation rejects records
|
|
137
|
+
over 8 MiB; larger files require the framework's native streaming client. It does
|
|
138
|
+
not follow provider redirects with credentials.
|
|
139
|
+
[Stored record](https://docs.apify.com/api/v2/key-value-store-record-get).
|
|
140
|
+
|
|
141
|
+
Authorize every run, cancellation and storage read against the application's
|
|
142
|
+
owner and chosen resources. Connection success does not prove run or storage
|
|
143
|
+
permission for every resource. The inline token guide retains the distinction
|
|
144
|
+
between standard-token access and scoped permissions whose exact role mapping
|
|
145
|
+
has not been live-verified. Surface denied permissions without silently replacing
|
|
146
|
+
a restricted token with an unrestricted one.
|
|
147
|
+
|
|
148
|
+
`test/apify.test.js` passes the actual connection-service workflow using controlled
|
|
149
|
+
responses: actor selection, explicit budget/timeout, run terminal states, pending
|
|
150
|
+
cancellation, dataset pagination, JSON/binary storage, 8 MiB bound, input and
|
|
151
|
+
owner rejection, 403/429 and uncertain submissions without automatic retries.
|
|
152
|
+
No live Actor or paid account operation was performed.
|
|
153
|
+
|
|
154
|
+
## Limitations
|
|
155
|
+
|
|
156
|
+
Vibe64 coding-assistant attachment is deferred. For example, the generated app
|
|
157
|
+
can start an authorized scraper, show run progress and read the resulting dataset,
|
|
158
|
+
but asking Vibe64's Codex/OpenCode assistant to scrape a site does not grant it
|
|
159
|
+
access to this connection. The app composes its own input screen, bounded status
|
|
160
|
+
polling and output presentation. This connector does not create Actors or schedules.
|
|
161
|
+
Records over 8 MiB use the framework's native streaming client. Live token issuance,
|
|
162
|
+
scoped permission checks and generated-app execution were not exercised.
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Apollo.io
|
|
2
|
+
|
|
3
|
+
Import `apolloIoProvider` from `@jskit-ai/connectors-catalog/server/apollo-io`.
|
|
4
|
+
This adapter searches prospects, enriches selected people/companies and reads or
|
|
5
|
+
changes saved contacts, accounts and deals in an Apollo workspace.
|
|
6
|
+
|
|
7
|
+
## Provider setup
|
|
8
|
+
|
|
9
|
+
1. Sign into the intended Apollo workspace. Open **Settings → Integrations →
|
|
10
|
+
API Keys**, then **API Keys → Create new key**.
|
|
11
|
+
2. Enter a name and description. Enable `api/v1/accounts/search` for this key.
|
|
12
|
+
Keep **Set as master key** off when the selected endpoint permissions suffice.
|
|
13
|
+
Add the endpoint permissions below only for capabilities the app will use.
|
|
14
|
+
3. Choose **Create API key**, then **Copy**. Store the value under
|
|
15
|
+
`APOLLO_API_KEY` in the backend environment.
|
|
16
|
+
4. Add Apollo.io in Vibe64, give the integration a display name and enter
|
|
17
|
+
`env:APOLLO_API_KEY` in **API key reference**. Save the file configuration,
|
|
18
|
+
use **Set credential in Env** to supply the value, then **Connect account**
|
|
19
|
+
(or **Verify again**). **Check connection** only reads current status.
|
|
20
|
+
|
|
21
|
+
Key access also depends on the account's provider plan. Apollo's developer
|
|
22
|
+
dashboard exposes key regeneration/deletion and a Usage screen for endpoint
|
|
23
|
+
limits. A scoped key can receive 403 when an endpoint is not allowed.
|
|
24
|
+
[Key creation and management](https://docs.apollo.io/docs/create-api-key).
|
|
25
|
+
|
|
26
|
+
## Portable configuration and runtime
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"schemaVersion": 1,
|
|
31
|
+
"registrations": {},
|
|
32
|
+
"integrations": {
|
|
33
|
+
"companies": {
|
|
34
|
+
"provider": "apollo-io",
|
|
35
|
+
"displayName": "Saved sales accounts",
|
|
36
|
+
"accountMode": "shared",
|
|
37
|
+
"scopes": [],
|
|
38
|
+
"authentication": { "method": "api-key", "secretRef": "env:APOLLO_API_KEY" }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Use the [API-key composition pattern](../patterns/api-key-connection/PATTERN.md)
|
|
45
|
+
with `providers: [apolloIoProvider]`, environment-reference resolution and the
|
|
46
|
+
file connection store. CLI and Vibe64 edit this same configuration. Runtime
|
|
47
|
+
connection records remain encrypted JSON outside exported source.
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
await connections.connectApiKey({ context, integrationId: "companies" });
|
|
51
|
+
const page = await connections.invoke({
|
|
52
|
+
context, integrationId: "companies", operation: "accounts.search",
|
|
53
|
+
input: { page: 1, per_page: 25, q_organization_name: "Design" }
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The request is `POST https://api.apollo.io/api/v1/accounts/search`, with JSON
|
|
58
|
+
search inputs and the credential in `X-Api-Key`. The fragment accepts integer
|
|
59
|
+
`page` 1–500, integer `per_page` 1–100 and an optional nonempty name query up to
|
|
60
|
+
256 characters. Defaults are page 1 and 25 results; the query-length cap is a
|
|
61
|
+
local bound. The endpoint searches saved company accounts and currently
|
|
62
|
+
documents zero credit consumption. Searching Apollo's prospect database or
|
|
63
|
+
enriching people uses different endpoints.
|
|
64
|
+
[Saved-account search](https://docs.apollo.io/reference/search-for-accounts).
|
|
65
|
+
|
|
66
|
+
The adapter validates the `accounts` collection and preserves the result
|
|
67
|
+
envelope. It performs one request, accepts an empty page, and does not assume
|
|
68
|
+
that all matching records fit within the provider's display limit. Request
|
|
69
|
+
pages explicitly and narrow the name query when needed. Additional operations are listed below. The app explicitly chooses each
|
|
70
|
+
page; there is no automatic scan, enrichment or background synchronization.
|
|
71
|
+
|
|
72
|
+
Verification uses the same saved-account operation, so a public health reply
|
|
73
|
+
cannot mark this connection as verified. Keys are resolved per request, sent
|
|
74
|
+
only to the fixed HTTPS origin, and never written into portable configuration.
|
|
75
|
+
After provider-side regeneration, update the environment value and reverify.
|
|
76
|
+
Disconnect removes local state; provider revocation is a separate key action.
|
|
77
|
+
|
|
78
|
+
## Ownership, automation and application capacity
|
|
79
|
+
|
|
80
|
+
Apollo API keys represent a workspace. Requests act as its longest-standing
|
|
81
|
+
active administrator, so authorize CRM changes against the app owner and intended Apollo workspace.
|
|
82
|
+
Partners accessing individual users use OAuth. That partner flow and app login
|
|
83
|
+
are not implemented by this API-key fragment.
|
|
84
|
+
[Authentication and request identity](https://docs.apollo.io/reference/authentication).
|
|
85
|
+
|
|
86
|
+
An AI can prepare configuration, library calls and paging logic. The reviewed
|
|
87
|
+
key-creation guide provides dashboard steps; an API for issuing initial keys
|
|
88
|
+
was not verified. Treat that bootstrap as an owner/admin task. Partner OAuth
|
|
89
|
+
would require separate registration work and an adapter rather than replacing
|
|
90
|
+
an API key with an OAuth token in this module.
|
|
91
|
+
|
|
92
|
+
Create an authorized key for the application, with a recognizable name for
|
|
93
|
+
revocation and attribution. Customer-owned data
|
|
94
|
+
requires keys for the appropriate customer workspace. These are key names,
|
|
95
|
+
not universal OAuth app identities, and no callback URL is involved.
|
|
96
|
+
|
|
97
|
+
Apollo limits are per team and endpoint, across minute/hour/day windows. All
|
|
98
|
+
keys and users share those limits; child workspaces also share their parent's
|
|
99
|
+
allowance. Separate keys therefore do not create independent capacity.
|
|
100
|
+
The application owner must arrange the capacity and usage limits it needs. The runtime surfaces 429 failures and does not
|
|
101
|
+
automatically retry requests.
|
|
102
|
+
[Rate limits](https://docs.apollo.io/reference/rate-limits).
|
|
103
|
+
|
|
104
|
+
## Focused evidence
|
|
105
|
+
|
|
106
|
+
Tests use simulated provider replies and actual temporary encrypted JSON
|
|
107
|
+
storage. They verify headers, POST bodies, empty accounts, page/name boundaries,
|
|
108
|
+
malformed replies, provider failures, restart, rotation, ownership and
|
|
109
|
+
disconnect. The editor case verifies secret references, setup links and reload.
|
|
110
|
+
Live API calls, provider signup and sample-app generation are excluded.
|
|
111
|
+
|
|
112
|
+
## Operations and endpoint permissions
|
|
113
|
+
|
|
114
|
+
API-key permissions are provider settings, not OAuth scopes in `integrations.json`.
|
|
115
|
+
Always keep `api/v1/accounts/search` for the harmless connection check. Add only
|
|
116
|
+
rows your app needs. A 403 can mean key permission or plan access; do not silently
|
|
117
|
+
switch to a master key. Current endpoint reference tables list scoped-key options,
|
|
118
|
+
although some older response-example labels still mention master keys.
|
|
119
|
+
|
|
120
|
+
| Operation | Endpoint permission | Inputs and behavior |
|
|
121
|
+
| --- | --- | --- |
|
|
122
|
+
| `people.search` | `api/v1/mixed_people/api_search` | Name/keyword, titles, locations, company IDs/domains; paged prospects without email/phone disclosure. |
|
|
123
|
+
| `organizations.search` | `api/v1/mixed_companies/search` | Company name, domains, locations, page; requires `allowCreditConsumption: true`. |
|
|
124
|
+
| `people.enrich` | `api/v1/people/match` | Apollo person `id` from search, `allowCreditConsumption: true`; personal email reveal defaults false. |
|
|
125
|
+
| `organizations.enrich` | `api/v1/organizations/enrich` | Bare `domain` without scheme/www, `allowCreditConsumption: true`. |
|
|
126
|
+
| `contacts.search` | `api/v1/contacts/search` | Keywords, stage/list IDs, page. |
|
|
127
|
+
| `contacts.create` / `contacts.update` | `api/v1/contacts/create` / `api/v1/contacts/update` | Names, email, employer, title, account, stage, lists, phone/location; update takes contact `id`. |
|
|
128
|
+
| `accounts.create` / `accounts.update` | `api/v1/accounts/create` / `api/v1/accounts/update` | Name/domain, owner, stage, phone/address; update takes saved account `id`. |
|
|
129
|
+
| `deals.list` | `deals/api/v1/opportunities/search` | Page and optional amount/is_closed/is_won sort. |
|
|
130
|
+
| `deals.create` / `deals.update` | `deals/api/v1/opportunities/create` / `deals/api/v1/opportunities/update` | Name, owner, amount, stage, close date; create can set account; update takes deal `id`. |
|
|
131
|
+
| `dealStages.list` | `deals/api/v1/opportunity_stages/index` | Stage identifiers for this workspace. |
|
|
132
|
+
| `users.list` | `api/v1/users/search` | Paged owner identifiers for this workspace. |
|
|
133
|
+
|
|
134
|
+
Search pages use `page` 1–500 and `per_page` 1–100 (default 25). Preserve the raw
|
|
135
|
+
provider envelope, including pagination or match information; an empty page is
|
|
136
|
+
valid. Narrow filters before reaching the provider's result cap. A connected key
|
|
137
|
+
does not prove that every optional endpoint or record is accessible.
|
|
138
|
+
|
|
139
|
+
Sources: [people search](https://docs.apollo.io/reference/people-api-search),
|
|
140
|
+
[company search](https://docs.apollo.io/reference/organization-search),
|
|
141
|
+
[people enrichment](https://docs.apollo.io/reference/people-enrichment),
|
|
142
|
+
[company enrichment](https://docs.apollo.io/reference/organization-enrichment),
|
|
143
|
+
[contact search](https://docs.apollo.io/reference/search-for-contacts),
|
|
144
|
+
[contact create](https://docs.apollo.io/reference/create-a-contact),
|
|
145
|
+
[contact update](https://docs.apollo.io/reference/update-a-contact),
|
|
146
|
+
[account create](https://docs.apollo.io/reference/create-an-account),
|
|
147
|
+
[account update](https://docs.apollo.io/reference/update-an-account),
|
|
148
|
+
[deal list](https://docs.apollo.io/reference/list-all-deals),
|
|
149
|
+
[deal create](https://docs.apollo.io/reference/create-deal),
|
|
150
|
+
[deal update](https://docs.apollo.io/reference/update-deal),
|
|
151
|
+
[deal stages](https://docs.apollo.io/reference/list-deal-stages),
|
|
152
|
+
[workspace users](https://docs.apollo.io/reference/get-a-list-of-users).
|
|
153
|
+
|
|
154
|
+
## Compose a useful application workflow
|
|
155
|
+
|
|
156
|
+
1. Search prospects, then let the authorized user choose the person/company.
|
|
157
|
+
2. Before company search or enrichment, disclose provider credit usage. The app's
|
|
158
|
+
authorizer must enforce explicit user approval or an administrator-approved
|
|
159
|
+
budget policy; `allowCreditConsumption` is an input acknowledgement, not a
|
|
160
|
+
billing limit or authorization system. The adapter strips it from the request.
|
|
161
|
+
3. Enrich only the selected identifier/domain. Preserve `match_confidence` and
|
|
162
|
+
null/no-match replies; a successful HTTP response need not identify a person.
|
|
163
|
+
Phone reveal and waterfall enrichment are disabled because they require a
|
|
164
|
+
separate asynchronous webhook workflow. No emails or phone numbers are
|
|
165
|
+
invented when Apollo does not return them.
|
|
166
|
+
4. Let an authorized user save/update the desired CRM record. Contact creation
|
|
167
|
+
requires an explicit `run_dedupe` choice: false can create duplicates; true
|
|
168
|
+
can overwrite fields on an existing matched contact. Updating `label_names`
|
|
169
|
+
replaces its lists; omitted fields remain omitted. Account creation has no
|
|
170
|
+
automatic deduplication: search saved accounts first and retain returned IDs.
|
|
171
|
+
5. Create or update a deal using an actual saved account ID and a stage from
|
|
172
|
+
`dealStages.list`. Owner IDs come from `users.list`. Deal amounts are decimal
|
|
173
|
+
strings without currency symbols/commas; currency comes from Apollo settings.
|
|
174
|
+
Close dates must be real `YYYY-MM-DD` dates. Persist the returned deal ID.
|
|
175
|
+
|
|
176
|
+
```js
|
|
177
|
+
const people = await connections.invoke({ context, integrationId: "companies",
|
|
178
|
+
operation: "people.search", input: { person_titles: ["Designer"], per_page: 10 } });
|
|
179
|
+
// After application authorization and approval of provider credit use:
|
|
180
|
+
const selected = await connections.invoke({ context, integrationId: "companies",
|
|
181
|
+
operation: "people.enrich", input: { id: selectedPersonId, allowCreditConsumption: true } });
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
The HTTP layer makes one request per invocation. After an uncertain create or
|
|
185
|
+
enrichment response, inspect Apollo before retrying; retrying can duplicate a
|
|
186
|
+
record or spend credits again. Handle 403/422 as permission/input failures and
|
|
187
|
+
429 with a bounded app policy. Do not expose the workspace key to browser code.
|
|
188
|
+
The same operations work in a CLI-owned Node app without Vibe64; other frameworks
|
|
189
|
+
use their own HTTP client against the documented endpoints and read the same Env
|
|
190
|
+
reference from project configuration.
|
|
191
|
+
|
|
192
|
+
## Limitations
|
|
193
|
+
|
|
194
|
+
Editor coding-assistant attachment is deferred. For example, a generated sales
|
|
195
|
+
app can search, enrich approved leads and save deals, but asking Vibe64's coding
|
|
196
|
+
assistant to find leads does not grant it this connection. The app owns lead and
|
|
197
|
+
CRM screens, authorization and usage budgets. This adapter does not implement
|
|
198
|
+
partner OAuth, outreach sequences, bulk jobs, deletion, custom-field discovery,
|
|
199
|
+
or phone/waterfall webhooks. Native framework clients can compose those separate
|
|
200
|
+
provider APIs when needed. Live accounts, charges and generated apps are untested.
|
package/docs/asana.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Asana
|
|
2
|
+
|
|
3
|
+
Import `asanaProvider` from `@jskit-ai/connectors-catalog/server/asana`.
|
|
4
|
+
This adapter discovers workspaces/projects/tasks and creates or updates projects
|
|
5
|
+
and tasks through a personal access token.
|
|
6
|
+
|
|
7
|
+
## Configure access
|
|
8
|
+
|
|
9
|
+
1. Sign into the intended Asana account and open the developer console. The
|
|
10
|
+
official developer guide links it under **My apps**.
|
|
11
|
+
2. Create a personal access token and provide a description identifying this
|
|
12
|
+
application. Copy the generated token while available.
|
|
13
|
+
3. Store it in backend Env as `ASANA_TOKEN`. Treat it as opaque; there is no
|
|
14
|
+
local prefix/length assumption about Asana's token format.
|
|
15
|
+
4. Save provider `asana`, mode `shared` or `assistant`, `scopes: []`, and
|
|
16
|
+
authentication `{ "method": "api-key", "secretRef": "env:ASANA_TOKEN" }`.
|
|
17
|
+
5. In Vibe64 use **Set credential in Env** to save the token, then
|
|
18
|
+
**Connect account** or **Verify again**. **Check connection** only reads
|
|
19
|
+
status. CLI applications verify with `connectApiKey`. Manage/deauthorize personal tokens from the
|
|
20
|
+
developer console. Organization policy can limit personal-token access.
|
|
21
|
+
[Token instructions](https://developers.asana.com/docs/personal-access-token).
|
|
22
|
+
|
|
23
|
+
## Runtime and AI composition
|
|
24
|
+
|
|
25
|
+
`workspaces.list` calls `GET https://app.asana.com/api/1.0/workspaces` using
|
|
26
|
+
Bearer authorization. It accepts `limit` (1–100, default 50) and optional
|
|
27
|
+
`offset`. Results contain compact workspace records under `data` and may
|
|
28
|
+
include `next_page.offset`; pass that opaque offset to request another page.
|
|
29
|
+
The verifier uses this list operation. If extended to OAuth, this endpoint's
|
|
30
|
+
documented read scope is `workspaces:read`.
|
|
31
|
+
[Workspace endpoint](https://developers.asana.com/reference/getworkspaces).
|
|
32
|
+
|
|
33
|
+
The [API-key pattern](../patterns/api-key-connection/PATTERN.md) supplies the
|
|
34
|
+
same portable JSON and server library wiring for CLI and editor consumers.
|
|
35
|
+
The backend owns whether its users may access the shared account's workspaces.
|
|
36
|
+
|
|
37
|
+
## Automation and application registrations
|
|
38
|
+
|
|
39
|
+
An AI can prepare the configuration and runtime calls after a token is supplied.
|
|
40
|
+
The verified personal-token creation path is the developer console; no API that
|
|
41
|
+
creates the initial personal token was established in this pass. Asana recommends
|
|
42
|
+
OAuth for applications acting for other users. That application-registration and
|
|
43
|
+
consent flow remains separate from this personal-token fragment.
|
|
44
|
+
|
|
45
|
+
Each application supplies its owner's token. Differently named personal tokens
|
|
46
|
+
may still share workspace/user limits. Apps requiring individual user consent
|
|
47
|
+
must implement the supported OAuth flow with their own registration.
|
|
48
|
+
Automated fixtures cover authorization headers, pagination, file-store restart,
|
|
49
|
+
credential replacement, cross-application isolation, disconnect and controlled
|
|
50
|
+
provider failures. No workspace was accessed with a real token.
|
|
51
|
+
|
|
52
|
+
## Project and task workflow
|
|
53
|
+
|
|
54
|
+
The adapter uses these documented endpoints with Bearer authentication and
|
|
55
|
+
`{ data: ... }` JSON for writes. A successful list of workspaces proves neither
|
|
56
|
+
write permission nor access to every private project. Your backend authorizer
|
|
57
|
+
must enforce who may invoke each operation for the shared account.
|
|
58
|
+
|
|
59
|
+
| Operation | Required inputs and result |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `projects.list` | `workspace`, optional `archived`, `limit`, opaque `offset`; returns project records. |
|
|
62
|
+
| `projects.get` | Project `gid`; includes name, notes, owner, privacy, archive and dates. |
|
|
63
|
+
| `projects.create` | `workspace`, `name`, explicit `privacy_setting` (`private` or `public_to_workspace`); optional owner, notes and dates. |
|
|
64
|
+
| `projects.update` | Project `gid` and only changed fields; supports archive/unarchive. |
|
|
65
|
+
| `users.list` / `teams.list` | `workspace`, page inputs; identifiers for assignment/sharing. Teams apply to organization workspaces. |
|
|
66
|
+
| `projectMembers.add` | `project`, `member` (team or user GID), explicit `access_level` (`admin`, `editor`, `commenter`). |
|
|
67
|
+
| `tasks.list` | `project`, page inputs, optional `completed_since` (date-time or `now` for incomplete tasks). |
|
|
68
|
+
| `tasks.get` | Task `gid`; includes assignment, completion, due/start dates, notes and project IDs. |
|
|
69
|
+
| `tasks.create` | `workspace`, `name`; optional `projects` GIDs, parent task, assignee GID, notes, dates and completed flag. |
|
|
70
|
+
| `tasks.update` | Task `gid` plus changed work-tracking fields; omitted fields are not overwritten. |
|
|
71
|
+
|
|
72
|
+
1. Choose a workspace from `workspaces.list` and a project from `projects.list`,
|
|
73
|
+
or explicitly create a project with the desired privacy setting. Persist its
|
|
74
|
+
returned `data.gid` before granting membership. Organization policy may deny
|
|
75
|
+
a privacy level or sharing action. If sharing fails after creation, show the
|
|
76
|
+
existing project and retry only the intended sharing action after resolution.
|
|
77
|
+
2. For team sharing, use `teams.list` and `projectMembers.add` after the user
|
|
78
|
+
confirms the member and access level. The old project `team` argument and
|
|
79
|
+
`private_to_team` setting are deprecated; this adapter uses the documented
|
|
80
|
+
membership endpoint and `access_level`, not the deprecated membership `role`.
|
|
81
|
+
3. Choose an assignee using `users.list`, then create a task in the workspace
|
|
82
|
+
and selected project. This adapter accepts user GIDs for assignment; use null
|
|
83
|
+
to unassign. Persist the returned task GID for subsequent changes.
|
|
84
|
+
4. Change only the intended fields. `completed: true` completes a task; false
|
|
85
|
+
reopens it. Empty notes clear the description. Null dates clear dates. When
|
|
86
|
+
sending `start_on`, also send `due_on`; dates must be real `YYYY-MM-DD` values.
|
|
87
|
+
Project start must precede its due date; task start cannot follow its due date.
|
|
88
|
+
A task's workspace cannot change. The creation-only `projects` list is not
|
|
89
|
+
accepted by task update; native addProject/removeProject APIs handle moves.
|
|
90
|
+
5. Request each next page using `next_page.offset`, not a returned URL. Read/list
|
|
91
|
+
operations request the task/project fields used for work tracking rather than
|
|
92
|
+
relying on Asana's compact default response. Stop when `next_page` is null.
|
|
93
|
+
|
|
94
|
+
```js
|
|
95
|
+
const created = await connections.invoke({ context, integrationId: "work",
|
|
96
|
+
operation: "tasks.create", input: { workspace: workspaceGid,
|
|
97
|
+
projects: [projectGid], name: "Review release", assignee: ownerGid,
|
|
98
|
+
due_on: "2026-12-31" } });
|
|
99
|
+
await connections.invoke({ context, integrationId: "work", operation: "tasks.update",
|
|
100
|
+
input: { gid: created.data.gid, completed: true } });
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
A lost create response has an uncertain outcome. Inspect the project/task list
|
|
104
|
+
before retrying; the adapter does not replay writes. Display permission failures,
|
|
105
|
+
missing resources, invalid values and rate limits distinctly in the application.
|
|
106
|
+
The same ordinary Node library works in CLI-built applications without Vibe64;
|
|
107
|
+
other frameworks read the configuration/Env reference and use their native HTTP
|
|
108
|
+
client for these endpoints. No Vibe64 server is needed at application runtime.
|
|
109
|
+
|
|
110
|
+
Sources: [projects](https://developers.asana.com/reference/getprojects),
|
|
111
|
+
[create project](https://developers.asana.com/reference/createproject),
|
|
112
|
+
[update project](https://developers.asana.com/reference/updateproject),
|
|
113
|
+
[membership](https://developers.asana.com/reference/createmembership),
|
|
114
|
+
[project tasks](https://developers.asana.com/reference/gettasksforproject),
|
|
115
|
+
[create task](https://developers.asana.com/reference/createtask),
|
|
116
|
+
[update task](https://developers.asana.com/reference/updatetask),
|
|
117
|
+
[official request/response schemas](https://github.com/Asana/openapi/blob/master/defs/asana_oas.yaml).
|
|
118
|
+
|
|
119
|
+
## Limitations
|
|
120
|
+
|
|
121
|
+
Editor coding-assistant attachment is deferred. For example, a generated app can
|
|
122
|
+
create a release project, assign a task and mark it complete, but asking Vibe64's
|
|
123
|
+
coding assistant to inspect your Asana backlog does not give it this connection.
|
|
124
|
+
The app owns its work-tracking screens and resource permissions. OAuth user consent,
|
|
125
|
+
attachments, comments, custom fields, task moves and destructive deletion are not
|
|
126
|
+
implemented here. Live Asana access and generated-app execution were not exercised.
|