@jskit-ai/connectors-catalog 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/README.md +192 -0
  2. package/docs/ai-upstream-notices.md +51 -0
  3. package/docs/ai.md +191 -0
  4. package/docs/airtable.md +130 -0
  5. package/docs/algolia.md +190 -0
  6. package/docs/amazon-redshift.md +229 -0
  7. package/docs/amplitude.md +210 -0
  8. package/docs/apify.md +162 -0
  9. package/docs/apollo-io.md +200 -0
  10. package/docs/asana.md +126 -0
  11. package/docs/ashby.md +188 -0
  12. package/docs/atlassian.md +224 -0
  13. package/docs/attention.md +162 -0
  14. package/docs/aws-athena.md +150 -0
  15. package/docs/aws-credentials.md +75 -0
  16. package/docs/aws-s3.md +193 -0
  17. package/docs/bigquery.md +146 -0
  18. package/docs/brevo.md +122 -0
  19. package/docs/calendly.md +158 -0
  20. package/docs/canva.md +191 -0
  21. package/docs/chargebee.md +192 -0
  22. package/docs/clay.md +194 -0
  23. package/docs/clickhouse.md +242 -0
  24. package/docs/confidence-exp.md +74 -0
  25. package/docs/confidence-flags.md +75 -0
  26. package/docs/confidence-oauth.md +137 -0
  27. package/docs/contentful.md +123 -0
  28. package/docs/databricks.md +180 -0
  29. package/docs/dbt-semantic-layer.md +175 -0
  30. package/docs/elevenlabs.md +102 -0
  31. package/docs/figma.md +132 -0
  32. package/docs/firebase-cloud-messaging.md +262 -0
  33. package/docs/firecrawl.md +137 -0
  34. package/docs/fireflies.md +95 -0
  35. package/docs/fireworks-ai.md +53 -0
  36. package/docs/gatewayapi.md +113 -0
  37. package/docs/gemini-enterprise.md +224 -0
  38. package/docs/github-api.md +133 -0
  39. package/docs/gitlab-api.md +138 -0
  40. package/docs/gmail.md +133 -0
  41. package/docs/gong.md +205 -0
  42. package/docs/google-ads.md +156 -0
  43. package/docs/google-analytics.md +202 -0
  44. package/docs/google-docs.md +105 -0
  45. package/docs/google-drive.md +108 -0
  46. package/docs/google-maps-platform.md +208 -0
  47. package/docs/google-oauth.md +123 -0
  48. package/docs/google-search-console.md +124 -0
  49. package/docs/google-sheets.md +94 -0
  50. package/docs/google-slides.md +95 -0
  51. package/docs/granola.md +178 -0
  52. package/docs/hex.md +161 -0
  53. package/docs/heygen.md +124 -0
  54. package/docs/hubspot.md +142 -0
  55. package/docs/incident-io.md +118 -0
  56. package/docs/inngest.md +178 -0
  57. package/docs/klipy.md +149 -0
  58. package/docs/lexware.md +144 -0
  59. package/docs/lightspeed.md +193 -0
  60. package/docs/linear.md +137 -0
  61. package/docs/linkedin.md +196 -0
  62. package/docs/logo-dev.md +152 -0
  63. package/docs/mailgun.md +153 -0
  64. package/docs/mapbox.md +174 -0
  65. package/docs/microsoft-excel.md +97 -0
  66. package/docs/microsoft-fabric.md +249 -0
  67. package/docs/microsoft-oauth.md +143 -0
  68. package/docs/microsoft-onedrive.md +76 -0
  69. package/docs/microsoft-onenote.md +75 -0
  70. package/docs/microsoft-outlook.md +90 -0
  71. package/docs/microsoft-powerpoint.md +119 -0
  72. package/docs/microsoft-sharepoint.md +75 -0
  73. package/docs/microsoft-teams.md +72 -0
  74. package/docs/microsoft-word.md +119 -0
  75. package/docs/miro.md +117 -0
  76. package/docs/n8n.md +169 -0
  77. package/docs/notion.md +137 -0
  78. package/docs/oura.md +161 -0
  79. package/docs/paddle.md +168 -0
  80. package/docs/perplexity.md +85 -0
  81. package/docs/pipedrive.md +120 -0
  82. package/docs/polar.md +63 -0
  83. package/docs/posthog.md +227 -0
  84. package/docs/prestashop.md +151 -0
  85. package/docs/replicate.md +60 -0
  86. package/docs/resend.md +153 -0
  87. package/docs/salesforce.md +234 -0
  88. package/docs/sanity.md +122 -0
  89. package/docs/semrush.md +276 -0
  90. package/docs/sentry.md +112 -0
  91. package/docs/sevdesk.md +107 -0
  92. package/docs/shopify.md +206 -0
  93. package/docs/slack.md +257 -0
  94. package/docs/snowflake.md +271 -0
  95. package/docs/storyblok.md +130 -0
  96. package/docs/stripe.md +77 -0
  97. package/docs/supabase.md +51 -0
  98. package/docs/tally.md +105 -0
  99. package/docs/telegram.md +165 -0
  100. package/docs/tiktok.md +201 -0
  101. package/docs/twilio.md +284 -0
  102. package/docs/twitch.md +428 -0
  103. package/docs/wave.md +440 -0
  104. package/docs/wix.md +1249 -0
  105. package/docs/wiz.md +177 -0
  106. package/docs/woocommerce.md +400 -0
  107. package/docs/wordpress-com.md +358 -0
  108. package/docs/wordpress-self-hosted.md +252 -0
  109. package/docs/workday.md +292 -0
  110. package/docs/x-twitter.md +188 -0
  111. package/docs/xero.md +429 -0
  112. package/docs/zoho-books.md +214 -0
  113. package/docs/zoho-crm.md +192 -0
  114. package/package.json +153 -0
  115. package/patterns/ai-connections/PATTERN.md +84 -0
  116. package/patterns/ai-connections/example/ai-model.js +11 -0
  117. package/patterns/ai-connections/example/perplexity-answer.js +29 -0
  118. package/patterns/api-key-connection/PATTERN.md +368 -0
  119. package/patterns/api-key-connection/example/connections.js +18 -0
  120. package/patterns/api-key-connection/example/integrations.json +19 -0
  121. package/patterns/assistant-mcp/PATTERN.md +110 -0
  122. package/patterns/assistant-mcp/example/integrations.json +13 -0
  123. package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
  124. package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
  125. package/patterns/aws-storage-queries/PATTERN.md +169 -0
  126. package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
  127. package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
  128. package/patterns/aws-storage-queries/example/formats/package.json +12 -0
  129. package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
  130. package/patterns/aws-storage-queries/example/integrations.json +38 -0
  131. package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
  132. package/patterns/event-delivery/PATTERN.md +151 -0
  133. package/patterns/event-delivery/example/integrations.json +17 -0
  134. package/patterns/firebase-messaging/PATTERN.md +156 -0
  135. package/patterns/firebase-messaging/example/server/notifications.js +23 -0
  136. package/patterns/google-ads-search/PATTERN.md +92 -0
  137. package/patterns/google-ads-search/example/ads-setup.js +25 -0
  138. package/patterns/oauth-connection/PATTERN.md +724 -0
  139. package/patterns/oauth-connection/example/integrations.json +20 -0
  140. package/patterns/paddle-catalogue/PATTERN.md +78 -0
  141. package/patterns/paddle-catalogue/example/create-products.js +38 -0
  142. package/patterns/public-image/PATTERN.md +84 -0
  143. package/patterns/public-image/example/integrations.json +13 -0
  144. package/patterns/public-image/example/logo-url.js +16 -0
  145. package/patterns/redshift-queries/PATTERN.md +150 -0
  146. package/patterns/redshift-queries/example/integrations.json +33 -0
  147. package/patterns/source-scanning/PATTERN.md +83 -0
  148. package/patterns/source-scanning/example/source-scanner.js +13 -0
  149. package/src/client/firebase-cloud-messaging.js +10 -0
  150. package/src/client/google-analytics.js +72 -0
  151. package/src/client/google-maps-platform.js +39 -0
  152. package/src/client/logo-dev.js +36 -0
  153. package/src/server/ai.js +46 -0
  154. package/src/server/airtable.js +67 -0
  155. package/src/server/algolia.js +63 -0
  156. package/src/server/amazon-redshift.js +96 -0
  157. package/src/server/amplitude.js +31 -0
  158. package/src/server/apify.js +68 -0
  159. package/src/server/apollo-io.js +85 -0
  160. package/src/server/asana.js +64 -0
  161. package/src/server/ashby.js +61 -0
  162. package/src/server/atlassian.js +32 -0
  163. package/src/server/attention.js +93 -0
  164. package/src/server/aws-athena.js +82 -0
  165. package/src/server/aws-s3.js +49 -0
  166. package/src/server/awsTransport.js +75 -0
  167. package/src/server/bigquery.js +97 -0
  168. package/src/server/brevo.js +97 -0
  169. package/src/server/calendly.js +77 -0
  170. package/src/server/canva.js +13 -0
  171. package/src/server/chargebee.js +88 -0
  172. package/src/server/clay.js +78 -0
  173. package/src/server/clickhouse.js +66 -0
  174. package/src/server/confidence.js +29 -0
  175. package/src/server/contentful.js +40 -0
  176. package/src/server/databricks.js +55 -0
  177. package/src/server/dbt-semantic-layer.js +95 -0
  178. package/src/server/elevenlabs.js +81 -0
  179. package/src/server/figma.js +24 -0
  180. package/src/server/firebase-cloud-messaging.js +111 -0
  181. package/src/server/firecrawl.js +70 -0
  182. package/src/server/fireflies.js +31 -0
  183. package/src/server/fireworks-ai.js +16 -0
  184. package/src/server/gatewayapi.js +48 -0
  185. package/src/server/gemini-enterprise.js +47 -0
  186. package/src/server/github-api.js +90 -0
  187. package/src/server/gitlab-api.js +67 -0
  188. package/src/server/gmail.js +60 -0
  189. package/src/server/gong.js +52 -0
  190. package/src/server/google-ads-search.js +134 -0
  191. package/src/server/google-ads.js +80 -0
  192. package/src/server/google-docs.js +36 -0
  193. package/src/server/google-drive.js +71 -0
  194. package/src/server/google-maps-platform.js +90 -0
  195. package/src/server/google-search-console.js +31 -0
  196. package/src/server/google-sheets.js +60 -0
  197. package/src/server/google-slides.js +36 -0
  198. package/src/server/google.js +61 -0
  199. package/src/server/granola.js +115 -0
  200. package/src/server/graphqlOperation.js +15 -0
  201. package/src/server/hex.js +29 -0
  202. package/src/server/heygen.js +54 -0
  203. package/src/server/hubspot.js +85 -0
  204. package/src/server/incident-io.js +68 -0
  205. package/src/server/inngest.js +86 -0
  206. package/src/server/jsonOperation.js +34 -0
  207. package/src/server/klipy.js +34 -0
  208. package/src/server/lexware.js +59 -0
  209. package/src/server/lightspeed.js +82 -0
  210. package/src/server/linear.js +52 -0
  211. package/src/server/linkedin.js +74 -0
  212. package/src/server/mailgun.js +76 -0
  213. package/src/server/mapbox.js +46 -0
  214. package/src/server/mcpRegistration.js +41 -0
  215. package/src/server/mcpTransport.js +60 -0
  216. package/src/server/microsoft-excel.js +67 -0
  217. package/src/server/microsoft-fabric.js +81 -0
  218. package/src/server/microsoft-onedrive.js +58 -0
  219. package/src/server/microsoft-onenote.js +52 -0
  220. package/src/server/microsoft-outlook.js +58 -0
  221. package/src/server/microsoft-powerpoint.js +5 -0
  222. package/src/server/microsoft-sharepoint.js +46 -0
  223. package/src/server/microsoft-teams.js +29 -0
  224. package/src/server/microsoft-word.js +5 -0
  225. package/src/server/microsoft.js +88 -0
  226. package/src/server/miro.js +29 -0
  227. package/src/server/n8n.js +78 -0
  228. package/src/server/notion.js +76 -0
  229. package/src/server/oura.js +48 -0
  230. package/src/server/paddle.js +83 -0
  231. package/src/server/perplexity.js +15 -0
  232. package/src/server/pipedrive.js +95 -0
  233. package/src/server/polar.js +20 -0
  234. package/src/server/posthog.js +44 -0
  235. package/src/server/prestashop.js +42 -0
  236. package/src/server/replicate.js +42 -0
  237. package/src/server/resend.js +93 -0
  238. package/src/server/salesforce.js +84 -0
  239. package/src/server/sanity.js +31 -0
  240. package/src/server/semrush.js +359 -0
  241. package/src/server/sentry.js +30 -0
  242. package/src/server/sevdesk.js +20 -0
  243. package/src/server/shopify.js +99 -0
  244. package/src/server/slack.js +143 -0
  245. package/src/server/snowflake.js +139 -0
  246. package/src/server/storyblok.js +49 -0
  247. package/src/server/stripe.js +13 -0
  248. package/src/server/supabase.js +13 -0
  249. package/src/server/tally.js +78 -0
  250. package/src/server/telegram.js +55 -0
  251. package/src/server/tiktok.js +86 -0
  252. package/src/server/twilio.js +90 -0
  253. package/src/server/twitch.js +409 -0
  254. package/src/server/wave.js +520 -0
  255. package/src/server/wix.js +1048 -0
  256. package/src/server/wiz.js +117 -0
  257. package/src/server/woocommerce.js +412 -0
  258. package/src/server/wordpress-com.js +236 -0
  259. package/src/server/wordpress-self-hosted.js +134 -0
  260. package/src/server/workday.js +136 -0
  261. package/src/server/x-twitter.js +110 -0
  262. package/src/server/xero.js +397 -0
  263. package/src/server/zoho-books.js +90 -0
  264. package/src/server/zoho-crm.js +89 -0
  265. package/src/server/zohoOAuth.js +21 -0
  266. package/src/shared/ai-models.json +8049 -0
  267. package/src/shared/ai.js +63 -0
  268. package/src/shared/algolia.js +29 -0
  269. package/src/shared/amazon-redshift.js +51 -0
  270. package/src/shared/amplitude.js +28 -0
  271. package/src/shared/atlassian.js +43 -0
  272. package/src/shared/aws.js +72 -0
  273. package/src/shared/canva.js +66 -0
  274. package/src/shared/chargebee.js +26 -0
  275. package/src/shared/clickhouse.js +38 -0
  276. package/src/shared/confidence.js +28 -0
  277. package/src/shared/databricks.js +33 -0
  278. package/src/shared/dbt-semantic-layer.js +32 -0
  279. package/src/shared/definitions.js +140 -0
  280. package/src/shared/figma.js +21 -0
  281. package/src/shared/firebase-cloud-messaging.js +45 -0
  282. package/src/shared/gemini-enterprise.js +33 -0
  283. package/src/shared/gong.js +33 -0
  284. package/src/shared/google-ads-search.js +31 -0
  285. package/src/shared/google-ads.js +28 -0
  286. package/src/shared/google-maps-platform.js +28 -0
  287. package/src/shared/google.js +133 -0
  288. package/src/shared/granola.js +25 -0
  289. package/src/shared/hex.js +28 -0
  290. package/src/shared/inngest.js +35 -0
  291. package/src/shared/lightspeed.js +75 -0
  292. package/src/shared/linkedin.js +27 -0
  293. package/src/shared/logo-dev.js +21 -0
  294. package/src/shared/mapbox.js +38 -0
  295. package/src/shared/mcp.js +92 -0
  296. package/src/shared/microsoft-fabric.js +47 -0
  297. package/src/shared/microsoft.js +231 -0
  298. package/src/shared/miro.js +27 -0
  299. package/src/shared/oura.js +23 -0
  300. package/src/shared/posthog.js +33 -0
  301. package/src/shared/prestashop.js +23 -0
  302. package/src/shared/salesforce.js +36 -0
  303. package/src/shared/semrush.js +24 -0
  304. package/src/shared/shopify.js +51 -0
  305. package/src/shared/siteUrl.js +12 -0
  306. package/src/shared/slack.js +88 -0
  307. package/src/shared/snowflake.js +55 -0
  308. package/src/shared/tiktok.js +22 -0
  309. package/src/shared/tokens.js +747 -0
  310. package/src/shared/twilio.js +41 -0
  311. package/src/shared/twitch.js +49 -0
  312. package/src/shared/wave.js +52 -0
  313. package/src/shared/wix.js +40 -0
  314. package/src/shared/wiz.js +41 -0
  315. package/src/shared/wordpress-com.js +30 -0
  316. package/src/shared/wordpress.js +69 -0
  317. package/src/shared/workday.js +50 -0
  318. package/src/shared/x-twitter.js +19 -0
  319. package/src/shared/xero.js +46 -0
  320. package/src/shared/zoho-books.js +39 -0
  321. package/src/shared/zoho-crm.js +43 -0
  322. package/src/shared/zoho-regions.js +12 -0
  323. package/test/ai.test.js +136 -0
  324. package/test/airtable.test.js +125 -0
  325. package/test/algolia.test.js +207 -0
  326. package/test/amazon-redshift.test.js +272 -0
  327. package/test/amplitude.test.js +239 -0
  328. package/test/apify.test.js +93 -0
  329. package/test/apollo-io.test.js +125 -0
  330. package/test/asana.test.js +99 -0
  331. package/test/ashby.test.js +97 -0
  332. package/test/atlassian.test.js +249 -0
  333. package/test/attention.test.js +79 -0
  334. package/test/aws.test.js +405 -0
  335. package/test/brevo.test.js +71 -0
  336. package/test/calendly.test.js +136 -0
  337. package/test/canva.test.js +258 -0
  338. package/test/chargebee.test.js +195 -0
  339. package/test/clickhouse.test.js +278 -0
  340. package/test/confidence.test.js +205 -0
  341. package/test/databricks.test.js +253 -0
  342. package/test/dbt-semantic-layer.test.js +221 -0
  343. package/test/designMcp.test.js +336 -0
  344. package/test/elevenlabs.test.js +52 -0
  345. package/test/firebase-cloud-messaging.test.js +242 -0
  346. package/test/firecrawl.test.js +66 -0
  347. package/test/gemini-enterprise.test.js +218 -0
  348. package/test/github-api.test.js +167 -0
  349. package/test/gitlab-api.test.js +160 -0
  350. package/test/gong.test.js +192 -0
  351. package/test/google-ads.test.js +350 -0
  352. package/test/google-maps-platform.test.js +191 -0
  353. package/test/google.test.js +710 -0
  354. package/test/granola.test.js +240 -0
  355. package/test/hex.test.js +253 -0
  356. package/test/heygen.test.js +121 -0
  357. package/test/hubspot.test.js +103 -0
  358. package/test/inngest.test.js +219 -0
  359. package/test/lightspeed.test.js +250 -0
  360. package/test/linear.test.js +146 -0
  361. package/test/linkedin.test.js +243 -0
  362. package/test/logo-dev.test.js +79 -0
  363. package/test/mailgun.test.js +107 -0
  364. package/test/mapbox.test.js +181 -0
  365. package/test/mcp.test.js +227 -0
  366. package/test/microsoft-fabric.test.js +258 -0
  367. package/test/microsoft.test.js +554 -0
  368. package/test/n8nOAuth.test.js +188 -0
  369. package/test/notionOAuth.test.js +183 -0
  370. package/test/oura.test.js +211 -0
  371. package/test/paddleCatalogue.test.js +51 -0
  372. package/test/paddlePermissions.test.js +101 -0
  373. package/test/perplexityComposition.test.js +39 -0
  374. package/test/pipedriveOAuth.test.js +140 -0
  375. package/test/posthog.test.js +200 -0
  376. package/test/prestashop.test.js +207 -0
  377. package/test/resend.test.js +163 -0
  378. package/test/salesforce.test.js +276 -0
  379. package/test/semrush.test.js +479 -0
  380. package/test/sentry.test.js +35 -0
  381. package/test/shopify.test.js +247 -0
  382. package/test/slack.test.js +320 -0
  383. package/test/snowflake.test.js +391 -0
  384. package/test/tally.test.js +75 -0
  385. package/test/telegram.test.js +58 -0
  386. package/test/tiktok.test.js +243 -0
  387. package/test/tokens.test.js +1079 -0
  388. package/test/twilio.test.js +221 -0
  389. package/test/twitch.test.js +573 -0
  390. package/test/wave.test.js +678 -0
  391. package/test/wix.test.js +1099 -0
  392. package/test/wiz.test.js +185 -0
  393. package/test/wordpress-com.test.js +469 -0
  394. package/test/wordpress.test.js +660 -0
  395. package/test/workday.test.js +314 -0
  396. package/test/x-twitter.test.js +256 -0
  397. package/test/xero.test.js +700 -0
  398. package/test/zoho-books.test.js +253 -0
  399. package/test/zoho-crm.test.js +223 -0
package/docs/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.