@vm0/cli 9.237.1 → 9.237.2

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 (94) hide show
  1. package/{agent-G5NJDTZD.js → agent-2NTLUZ3Q.js} +5 -5
  2. package/{banking-RE4Y55OB.js → banking-GYL2ITBM.js} +3 -3
  3. package/{chat-TRC4V4LW.js → chat-6UAO4EJO.js} +4 -4
  4. package/{chunk-ZWYDJ3AZ.js → chunk-2J262TOD.js} +2 -2
  5. package/{chunk-ZJOHVGBX.js → chunk-2JZ66FKH.js} +2 -2
  6. package/{chunk-AJUYZVZU.js → chunk-AEL2XKIL.js} +2 -2
  7. package/{chunk-UFRPDBLC.js → chunk-E5VVOBJ4.js} +69 -39
  8. package/chunk-E5VVOBJ4.js.map +1 -0
  9. package/{chunk-G55J25QR.js → chunk-GPZFXJF6.js} +10 -3
  10. package/chunk-GPZFXJF6.js.map +1 -0
  11. package/{chunk-FAIVSEFV.js → chunk-HEGJPPBN.js} +3 -2
  12. package/chunk-HEGJPPBN.js.map +1 -0
  13. package/{chunk-LAUWX3TW.js → chunk-HU44PZDH.js} +4 -4
  14. package/{chunk-4KHAQF4M.js → chunk-JKB6P3VO.js} +2 -2
  15. package/{chunk-SSQSKO3U.js → chunk-MBQ64I5M.js} +2 -2
  16. package/{chunk-DNWL4DAH.js → chunk-NPC4JKK2.js} +2 -2
  17. package/{chunk-RNGEJBP2.js → chunk-OHQONXKG.js} +3 -3
  18. package/{chunk-G5FQWKVF.js → chunk-OJDPK7NK.js} +2 -2
  19. package/{chunk-G5FQWKVF.js.map → chunk-OJDPK7NK.js.map} +1 -1
  20. package/{computer-use-GESXXHFG.js → computer-use-TZP5D27S.js} +3 -3
  21. package/{connector-SDQMMKIT.js → connector-4LDVG2YU.js} +4 -4
  22. package/{credit-JTKH4UMZ.js → credit-ASJ5RACS.js} +4 -4
  23. package/{developer-support-2JW3QPDC.js → developer-support-CUUQTNHK.js} +3 -3
  24. package/{doctor-VPBYKX77.js → doctor-4XKNSIOM.js} +7 -7
  25. package/{generate-F7ZPK6IV.js → generate-I2VLS2N6.js} +5 -5
  26. package/{github-GDPM257C.js → github-SVWWHKGN.js} +3 -3
  27. package/{goal-M2AYUQJ4.js → goal-CQDVC4YO.js} +3 -3
  28. package/{host-OJR3FPYM.js → host-HOMIDNAL.js} +3 -3
  29. package/index.js +15 -15
  30. package/{logs-H5JYXHA6.js → logs-YIPQV5UX.js} +8 -8
  31. package/{maps-PLCIA2DA.js → maps-SO3MLFWJ.js} +3 -3
  32. package/{memory-EJSR4TVG.js → memory-KV2RFKQS.js} +3 -3
  33. package/{model-5YKXB5ND.js → model-U6DTR7JY.js} +4 -4
  34. package/{model-provider-4EUN45KQ.js → model-provider-5LGQU6VF.js} +4 -4
  35. package/{org-NY3ZQYMJ.js → org-2UDAOW4R.js} +3 -3
  36. package/package.json +1 -1
  37. package/{phone-LJFIA4YV.js → phone-7WJLTTW2.js} +3 -3
  38. package/{preference-H4WF5NXY.js → preference-MSMPINCM.js} +3 -3
  39. package/{relationship-2OHALC26.js → relationship-XC64ZBSX.js} +3 -3
  40. package/{resource-2DLQU6OU.js → resource-W7JNLMJP.js} +4 -4
  41. package/{search-BDC7KHXU.js → search-XK5LO4BC.js} +8 -8
  42. package/{secret-DYZ2K6QX.js → secret-5CFIBLLI.js} +4 -4
  43. package/{slack-DRX6JAGE.js → slack-7J33PAP5.js} +3 -3
  44. package/{teams-K2XTVCGT.js → teams-IWY7IFLD.js} +3 -3
  45. package/{telegram-XNU3XVPW.js → telegram-QWZYLAJW.js} +3 -3
  46. package/{variable-J5FV4HHC.js → variable-3LUSNJRP.js} +3 -3
  47. package/{video-HSB2R7TK.js → video-XHTZYJWK.js} +2 -2
  48. package/{web-MRZE6CNW.js → web-C76UB3WO.js} +3 -3
  49. package/{whoami-5SM2Z5BX.js → whoami-K6I3CEDK.js} +5 -5
  50. package/{workflow-6ZJZKTJ5.js → workflow-K2OP7MBH.js} +3 -3
  51. package/zero.js +34 -34
  52. package/chunk-FAIVSEFV.js.map +0 -1
  53. package/chunk-G55J25QR.js.map +0 -1
  54. package/chunk-UFRPDBLC.js.map +0 -1
  55. /package/{agent-G5NJDTZD.js.map → agent-2NTLUZ3Q.js.map} +0 -0
  56. /package/{banking-RE4Y55OB.js.map → banking-GYL2ITBM.js.map} +0 -0
  57. /package/{chat-TRC4V4LW.js.map → chat-6UAO4EJO.js.map} +0 -0
  58. /package/{chunk-ZWYDJ3AZ.js.map → chunk-2J262TOD.js.map} +0 -0
  59. /package/{chunk-ZJOHVGBX.js.map → chunk-2JZ66FKH.js.map} +0 -0
  60. /package/{chunk-AJUYZVZU.js.map → chunk-AEL2XKIL.js.map} +0 -0
  61. /package/{chunk-LAUWX3TW.js.map → chunk-HU44PZDH.js.map} +0 -0
  62. /package/{chunk-4KHAQF4M.js.map → chunk-JKB6P3VO.js.map} +0 -0
  63. /package/{chunk-SSQSKO3U.js.map → chunk-MBQ64I5M.js.map} +0 -0
  64. /package/{chunk-DNWL4DAH.js.map → chunk-NPC4JKK2.js.map} +0 -0
  65. /package/{chunk-RNGEJBP2.js.map → chunk-OHQONXKG.js.map} +0 -0
  66. /package/{computer-use-GESXXHFG.js.map → computer-use-TZP5D27S.js.map} +0 -0
  67. /package/{connector-SDQMMKIT.js.map → connector-4LDVG2YU.js.map} +0 -0
  68. /package/{credit-JTKH4UMZ.js.map → credit-ASJ5RACS.js.map} +0 -0
  69. /package/{developer-support-2JW3QPDC.js.map → developer-support-CUUQTNHK.js.map} +0 -0
  70. /package/{doctor-VPBYKX77.js.map → doctor-4XKNSIOM.js.map} +0 -0
  71. /package/{generate-F7ZPK6IV.js.map → generate-I2VLS2N6.js.map} +0 -0
  72. /package/{github-GDPM257C.js.map → github-SVWWHKGN.js.map} +0 -0
  73. /package/{goal-M2AYUQJ4.js.map → goal-CQDVC4YO.js.map} +0 -0
  74. /package/{host-OJR3FPYM.js.map → host-HOMIDNAL.js.map} +0 -0
  75. /package/{logs-H5JYXHA6.js.map → logs-YIPQV5UX.js.map} +0 -0
  76. /package/{maps-PLCIA2DA.js.map → maps-SO3MLFWJ.js.map} +0 -0
  77. /package/{memory-EJSR4TVG.js.map → memory-KV2RFKQS.js.map} +0 -0
  78. /package/{model-5YKXB5ND.js.map → model-U6DTR7JY.js.map} +0 -0
  79. /package/{model-provider-4EUN45KQ.js.map → model-provider-5LGQU6VF.js.map} +0 -0
  80. /package/{org-NY3ZQYMJ.js.map → org-2UDAOW4R.js.map} +0 -0
  81. /package/{phone-LJFIA4YV.js.map → phone-7WJLTTW2.js.map} +0 -0
  82. /package/{preference-H4WF5NXY.js.map → preference-MSMPINCM.js.map} +0 -0
  83. /package/{relationship-2OHALC26.js.map → relationship-XC64ZBSX.js.map} +0 -0
  84. /package/{resource-2DLQU6OU.js.map → resource-W7JNLMJP.js.map} +0 -0
  85. /package/{search-BDC7KHXU.js.map → search-XK5LO4BC.js.map} +0 -0
  86. /package/{secret-DYZ2K6QX.js.map → secret-5CFIBLLI.js.map} +0 -0
  87. /package/{slack-DRX6JAGE.js.map → slack-7J33PAP5.js.map} +0 -0
  88. /package/{teams-K2XTVCGT.js.map → teams-IWY7IFLD.js.map} +0 -0
  89. /package/{telegram-XNU3XVPW.js.map → telegram-QWZYLAJW.js.map} +0 -0
  90. /package/{variable-J5FV4HHC.js.map → variable-3LUSNJRP.js.map} +0 -0
  91. /package/{video-HSB2R7TK.js.map → video-XHTZYJWK.js.map} +0 -0
  92. /package/{web-MRZE6CNW.js.map → web-C76UB3WO.js.map} +0 -0
  93. /package/{whoami-5SM2Z5BX.js.map → whoami-K6I3CEDK.js.map} +0 -0
  94. /package/{workflow-6ZJZKTJ5.js.map → workflow-K2OP7MBH.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../packages/api-contracts/src/contracts/model-providers.ts","../../../packages/connectors/src/feature-switch-key.ts","../../../packages/api-contracts/src/contracts/model-price-tiers.ts","../../../packages/api-contracts/src/contracts/model-provider-types.ts","../../../packages/api-contracts/src/contracts/model-provider-firewalls.ts","../src/lib/api/domains/registry-resources.ts","../../../packages/api-contracts/src/contracts/registry-resources.ts","../../../packages/api-contracts/src/contracts/base.ts","../src/lib/api/domains/zero-user-preferences.ts","../../../packages/api-contracts/src/contracts/zero-user-preferences.ts","../src/lib/api/domains/zero-orgs.ts","../../../packages/api-contracts/src/contracts/zero-org.ts","../../../packages/api-contracts/src/contracts/orgs.ts","../../../packages/api-contracts/src/contracts/org-members.ts","../../../packages/api-contracts/src/contracts/cli-auth.ts","../../../packages/api-contracts/src/contracts/zero-org-list.ts","../../../packages/api-contracts/src/contracts/org-list.ts","../../../packages/api-contracts/src/contracts/zero-org-members.ts","../src/lib/api/domains/zero-billing.ts","../../../packages/api-contracts/src/contracts/zero-billing.ts","../../../packages/api-contracts/src/contracts/zero-attribution.ts","../src/lib/api/domains/zero-model-policies.ts","../../../packages/api-contracts/src/contracts/zero-model-policies.ts","../../../packages/api-contracts/src/contracts/zero-host.ts","../src/lib/api/domains/zero-agents.ts","../../../packages/api-contracts/src/contracts/zero-agents.ts","../../../packages/api-contracts/src/contracts/chat-threads.ts","../../../packages/api-contracts/src/contracts/runs.ts","../../../packages/connectors/src/firewall-types.ts","../../../packages/connectors/src/firewall-url-utils.ts","../../../packages/connectors/src/segment-parser.ts","../../../packages/api-contracts/src/contracts/logs.ts","../../../packages/api-contracts/src/contracts/zero-goals.ts","../../../packages/api-contracts/src/contracts/zero-user-permission-grants.ts","../../../packages/api-contracts/src/contracts/connector-ref.ts","../../../packages/api-contracts/src/contracts/user-connectors.ts","../../../packages/api-contracts/src/contracts/zero-agent-custom-connectors.ts","../src/lib/api/domains/zero-goals.ts","../src/lib/api/domains/zero-connectors.ts","../../../packages/api-contracts/src/contracts/zero-connectors.ts","../../../packages/connectors/src/connectors.ts","../../../packages/connectors/src/connectors/github.ts","../../../packages/connectors/src/connectors/gmail.ts","../../../packages/connectors/src/connectors/notion.ts","../../../packages/connectors/src/connectors/x.ts","../../../packages/connectors/src/connectors/google-drive.ts","../../../packages/connectors/src/connectors/slack.ts","../../../packages/connectors/src/connectors/slock.ts","../../../packages/connectors/src/connectors/google-sheets.ts","../../../packages/connectors/src/connectors/google-calendar.ts","../../../packages/connectors/src/connectors/google-docs.ts","../../../packages/connectors/src/connectors/google-cloud.ts","../../../packages/connectors/src/connectors/linear.ts","../../../packages/connectors/src/connectors/intervals-icu.ts","../../../packages/connectors/src/connectors/vercel.ts","../../../packages/connectors/src/connectors/strava.ts","../../../packages/connectors/src/connectors/google-meet.ts","../../../packages/connectors/src/connectors/google-search-console.ts","../../../packages/connectors/src/connectors/google-analytics.ts","../../../packages/connectors/src/connectors/hubspot.ts","../../../packages/connectors/src/connectors/sentry.ts","../../../packages/connectors/src/connectors/todoist.ts","../../../packages/connectors/src/connectors/xero.ts","../../../packages/connectors/src/connectors/airtable.ts","../../../packages/connectors/src/connectors/docusign.ts","../../../packages/connectors/src/connectors/google-ads.ts","../../../packages/connectors/src/connectors/google-maps.ts","../../../packages/connectors/src/connectors/gumroad.ts","../../../packages/connectors/src/connectors/nintendo-store.ts","../../../packages/connectors/src/connectors/playstation.ts","../../../packages/connectors/src/connectors/spotify.ts","../../../packages/connectors/src/connectors/steam.ts","../../../packages/connectors/src/connectors/agentmail.ts","../../../packages/connectors/src/connectors/archer.ts","../../../packages/connectors/src/connectors/ardent.ts","../../../packages/connectors/src/connectors/arga-labs.ts","../../../packages/connectors/src/connectors/armature.ts","../../../packages/connectors/src/connectors/bentolabs-ai.ts","../../../packages/connectors/src/connectors/bloom.ts","../../../packages/connectors/src/connectors/chert.ts","../../../packages/connectors/src/connectors/inth.ts","../../../packages/connectors/src/connectors/insforge.ts","../../../packages/connectors/src/connectors/interfaze.ts","../../../packages/connectors/src/connectors/keyframe-labs.ts","../../../packages/connectors/src/connectors/kugelaudio.ts","../../../packages/connectors/src/connectors/limrun.ts","../../../packages/connectors/src/connectors/minicor.ts","../../../packages/connectors/src/connectors/netter.ts","../../../packages/connectors/src/connectors/oddpool.ts","../../../packages/connectors/src/connectors/primitive.ts","../../../packages/connectors/src/connectors/qomplement.ts","../../../packages/connectors/src/connectors/rentahuman.ts","../../../packages/connectors/src/connectors/replicas.ts","../../../packages/connectors/src/connectors/river-markets.ts","../../../packages/connectors/src/connectors/runtime.ts","../../../packages/connectors/src/connectors/salesgraph.ts","../../../packages/connectors/src/connectors/silmaril.ts","../../../packages/connectors/src/connectors/smol-machines.ts","../../../packages/connectors/src/connectors/stablebrowse.ts","../../../packages/connectors/src/connectors/testerarmy.ts","../../../packages/connectors/src/connectors/totalis.ts","../../../packages/connectors/src/connectors/trellis.ts","../../../packages/connectors/src/connectors/voquill.ts","../../../packages/connectors/src/connectors/agora.ts","../../../packages/connectors/src/connectors/ahrefs.ts","../../../packages/connectors/src/connectors/adzuna.ts","../../../packages/connectors/src/connectors/altium-365.ts","../../../packages/connectors/src/connectors/alchemy.ts","../../../packages/connectors/src/connectors/amplitude.ts","../../../packages/connectors/src/connectors/amadeus.ts","../../../packages/connectors/src/connectors/anthropic-managed-agents.ts","../../../packages/connectors/src/connectors/apify.ts","../../../packages/connectors/src/connectors/apollo.ts","../../../packages/connectors/src/connectors/asana.ts","../../../packages/connectors/src/connectors/ashby.ts","../../../packages/connectors/src/connectors/atlassian.ts","../../../packages/connectors/src/connectors/attio.ts","../../../packages/connectors/src/connectors/atlascloud.ts","../../../packages/connectors/src/connectors/aviationstack.ts","../../../packages/connectors/src/connectors/aws.ts","../../../packages/connectors/src/connectors/axiom.ts","../../../packages/connectors/src/connectors/base44.ts","../../../packages/connectors/src/connectors/bentoml.ts","../../../packages/connectors/src/connectors/bfl.ts","../../../packages/connectors/src/connectors/bitrefill.ts","../../../packages/connectors/src/connectors/bitrix.ts","../../../packages/connectors/src/connectors/bland.ts","../../../packages/connectors/src/connectors/box.ts","../../../packages/connectors/src/connectors/brave-search.ts","../../../packages/connectors/src/connectors/brex.ts","../../../packages/connectors/src/connectors/brevo.ts","../../../packages/connectors/src/connectors/bright-data.ts","../../../packages/connectors/src/connectors/browserbase.ts","../../../packages/connectors/src/connectors/browserless.ts","../../../packages/connectors/src/connectors/browserstack.ts","../../../packages/connectors/src/connectors/browser-use.ts","../../../packages/connectors/src/connectors/bubblemaps.ts","../../../packages/connectors/src/connectors/buffer.ts","../../../packages/connectors/src/connectors/builtwith.ts","../../../packages/connectors/src/connectors/cal-com.ts","../../../packages/connectors/src/connectors/calendly.ts","../../../packages/connectors/src/connectors/canva.ts","../../../packages/connectors/src/connectors/chatwoot.ts","../../../packages/connectors/src/connectors/checkr.ts","../../../packages/connectors/src/connectors/clado.ts","../../../packages/connectors/src/connectors/clerk.ts","../../../packages/connectors/src/connectors/clearbit.ts","../../../packages/connectors/src/connectors/clickup.ts","../../../packages/connectors/src/connectors/close.ts","../../../packages/connectors/src/connectors/cloudflare.ts","../../../packages/connectors/src/connectors/cloudinary.ts","../../../packages/connectors/src/connectors/coda.ts","../../../packages/connectors/src/connectors/coingecko.ts","../../../packages/connectors/src/connectors/coresignal.ts","../../../packages/connectors/src/connectors/cronlytic.ts","../../../packages/connectors/src/connectors/crustdata.ts","../../../packages/connectors/src/connectors/cursor.ts","../../../packages/connectors/src/connectors/customer-io.ts","../../../packages/connectors/src/connectors/daytona.ts","../../../packages/connectors/src/connectors/db9.ts","../../../packages/connectors/src/connectors/deel.ts","../../../packages/connectors/src/connectors/defillama.ts","../../../packages/connectors/src/connectors/deepseek.ts","../../../packages/connectors/src/connectors/devto.ts","../../../packages/connectors/src/connectors/diffbot.ts","../../../packages/connectors/src/connectors/dify.ts","../../../packages/connectors/src/connectors/discord.ts","../../../packages/connectors/src/connectors/discord-webhook.ts","../../../packages/connectors/src/connectors/doppler.ts","../../../packages/connectors/src/connectors/doubao.ts","../../../packages/connectors/src/connectors/drive9.ts","../../../packages/connectors/src/connectors/dropbox.ts","../../../packages/connectors/src/connectors/dropbox-sign.ts","../../../packages/connectors/src/connectors/duffel.ts","../../../packages/connectors/src/connectors/e2b.ts","../../../packages/connectors/src/connectors/elevenlabs.ts","../../../packages/connectors/src/connectors/etsy.ts","../../../packages/connectors/src/connectors/etherscan.ts","../../../packages/connectors/src/connectors/exa.ts","../../../packages/connectors/src/connectors/explorium.ts","../../../packages/connectors/src/connectors/faire.ts","../../../packages/connectors/src/connectors/fal.ts","../../../packages/connectors/src/connectors/figma.ts","../../../packages/connectors/src/connectors/firecrawl.ts","../../../packages/connectors/src/connectors/fireflies.ts","../../../packages/connectors/src/connectors/flightaware.ts","../../../packages/connectors/src/connectors/freshdesk.ts","../../../packages/connectors/src/connectors/gamma.ts","../../../packages/connectors/src/connectors/garmin-connect.ts","../../../packages/connectors/src/connectors/gemini.ts","../../../packages/connectors/src/connectors/gitlab.ts","../../../packages/connectors/src/connectors/gong.ts","../../../packages/connectors/src/connectors/granola.ts","../../../packages/connectors/src/connectors/greenhouse.ts","../../../packages/connectors/src/connectors/groq.ts","../../../packages/connectors/src/connectors/helicone.ts","../../../packages/connectors/src/connectors/heygen.ts","../../../packages/connectors/src/connectors/hitem3d.ts","../../../packages/connectors/src/connectors/htmlcsstoimage.ts","../../../packages/connectors/src/connectors/honcho.ts","../../../packages/connectors/src/connectors/hugging-face.ts","../../../packages/connectors/src/connectors/hume.ts","../../../packages/connectors/src/connectors/hunter.ts","../../../packages/connectors/src/connectors/imgur.ts","../../../packages/connectors/src/connectors/infisical.ts","../../../packages/connectors/src/connectors/instagram.ts","../../../packages/connectors/src/connectors/instantly.ts","../../../packages/connectors/src/connectors/intercom.ts","../../../packages/connectors/src/connectors/ironclad.ts","../../../packages/connectors/src/connectors/jam.ts","../../../packages/connectors/src/connectors/jira.ts","../../../packages/connectors/src/connectors/jotform.ts","../../../packages/connectors/src/connectors/klaviyo.ts","../../../packages/connectors/src/connectors/kommo.ts","../../../packages/connectors/src/connectors/langfuse.ts","../../../packages/connectors/src/connectors/langsmith.ts","../../../packages/connectors/src/connectors/lark.ts","../../../packages/connectors/src/connectors/line.ts","../../../packages/connectors/src/connectors/loops.ts","../../../packages/connectors/src/connectors/luma.ts","../../../packages/connectors/src/connectors/luma-ai.ts","../../../packages/connectors/src/connectors/mailchimp.ts","../../../packages/connectors/src/connectors/mailsac.ts","../../../packages/connectors/src/connectors/make.ts","../../../packages/connectors/src/connectors/manus.ts","../../../packages/connectors/src/connectors/mapbox.ts","../../../packages/connectors/src/connectors/massive.ts","../../../packages/connectors/src/connectors/maskdb.ts","../../../packages/connectors/src/connectors/mathpix.ts","../../../packages/connectors/src/connectors/mem0.ts","../../../packages/connectors/src/connectors/mercury.ts","../../../packages/connectors/src/connectors/meshy.ts","../../../packages/connectors/src/connectors/meta-ads.ts","../../../packages/connectors/src/connectors/metabase.ts","../../../packages/connectors/src/connectors/microsoft-365.ts","../../../packages/connectors/src/connectors/tiktok-ads.ts","../../../packages/connectors/src/connectors/minimax.ts","../../../packages/connectors/src/connectors/minio.ts","../../../packages/connectors/src/connectors/miro.ts","../../../packages/connectors/src/connectors/mixpanel.ts","../../../packages/connectors/src/connectors/monday.ts","../../../packages/connectors/src/connectors/modal.ts","../../../packages/connectors/src/connectors/moss.ts","../../../packages/connectors/src/connectors/msg9.ts","../../../packages/connectors/src/connectors/n8n.ts","../../../packages/connectors/src/connectors/neon.ts","../../../packages/connectors/src/connectors/netdata.ts","../../../packages/connectors/src/connectors/novita.ts","../../../packages/connectors/src/connectors/nyne.ts","../../../packages/connectors/src/connectors/onyx.ts","../../../packages/connectors/src/connectors/openai.ts","../../../packages/connectors/src/connectors/openrouter.ts","../../../packages/connectors/src/connectors/openweather.ts","../../../packages/connectors/src/connectors/outlook-calendar.ts","../../../packages/connectors/src/connectors/outlook-mail.ts","../../../packages/connectors/src/connectors/pandadoc.ts","../../../packages/connectors/src/connectors/parallel.ts","../../../packages/connectors/src/connectors/pdf4me.ts","../../../packages/connectors/src/connectors/pdfco.ts","../../../packages/connectors/src/connectors/pdforge.ts","../../../packages/connectors/src/connectors/people-data-labs.ts","../../../packages/connectors/src/connectors/perplexity.ts","../../../packages/connectors/src/connectors/pexels.ts","../../../packages/connectors/src/connectors/pika.ts","../../../packages/connectors/src/connectors/pinecone.ts","../../../packages/connectors/src/connectors/pipedream.ts","../../../packages/connectors/src/connectors/pipedrive.ts","../../../packages/connectors/src/connectors/plain.ts","../../../packages/connectors/src/connectors/plausible.ts","../../../packages/connectors/src/connectors/podchaser.ts","../../../packages/connectors/src/connectors/posthog.ts","../../../packages/connectors/src/connectors/porkbun.ts","../../../packages/connectors/src/connectors/printful.ts","../../../packages/connectors/src/connectors/prisma-postgres.ts","../../../packages/connectors/src/connectors/profound.ts","../../../packages/connectors/src/connectors/productlane.ts","../../../packages/connectors/src/connectors/pushinator.ts","../../../packages/connectors/src/connectors/qdrant.ts","../../../packages/connectors/src/connectors/quickbooks.ts","../../../packages/connectors/src/connectors/qiita.ts","../../../packages/connectors/src/connectors/railway.ts","../../../packages/connectors/src/connectors/railway-project.ts","../../../packages/connectors/src/connectors/reap.ts","../../../packages/connectors/src/connectors/reddit.ts","../../../packages/connectors/src/connectors/reducto.ts","../../../packages/connectors/src/connectors/recraft.ts","../../../packages/connectors/src/connectors/render.ts","../../../packages/connectors/src/connectors/replicate.ts","../../../packages/connectors/src/connectors/reportei.ts","../../../packages/connectors/src/connectors/resend.ts","../../../packages/connectors/src/connectors/rentcast.ts","../../../packages/connectors/src/connectors/revenuecat.ts","../../../packages/connectors/src/connectors/runway.ts","../../../packages/connectors/src/connectors/salesforce.ts","../../../packages/connectors/src/connectors/scrapeninja.ts","../../../packages/connectors/src/connectors/segment.ts","../../../packages/connectors/src/connectors/semrush.ts","../../../packages/connectors/src/connectors/sendgrid.ts","../../../packages/connectors/src/connectors/serpapi.ts","../../../packages/connectors/src/connectors/servicenow.ts","../../../packages/connectors/src/connectors/shopify.ts","../../../packages/connectors/src/connectors/shortio.ts","../../../packages/connectors/src/connectors/similarweb.ts","../../../packages/connectors/src/connectors/slack-webhook.ts","../../../packages/connectors/src/connectors/snowflake.ts","../../../packages/connectors/src/connectors/sociavault.ts","../../../packages/connectors/src/connectors/sponge.ts","../../../packages/connectors/src/connectors/sproutgigs.ts","../../../packages/connectors/src/connectors/square.ts","../../../packages/connectors/src/connectors/stability-ai.ts","../../../packages/connectors/src/connectors/strapi.ts","../../../packages/connectors/src/connectors/streak.ts","../../../packages/connectors/src/connectors/stripe.ts","../../../packages/connectors/src/connectors/supabase.ts","../../../packages/connectors/src/connectors/supadata.ts","../../../packages/connectors/src/connectors/supermemory.ts","../../../packages/connectors/src/connectors/tavily.ts","../../../packages/connectors/src/connectors/test-oauth.ts","../../../packages/connectors/src/connectors/test-oauth-device.ts","../../../packages/connectors/src/connectors/testrail.ts","../../../packages/connectors/src/connectors/ticketmaster.ts","../../../packages/connectors/src/connectors/tldv.ts","../../../packages/connectors/src/connectors/together.ts","../../../packages/connectors/src/connectors/tripo.ts","../../../packages/connectors/src/connectors/twenty.ts","../../../packages/connectors/src/connectors/twilio.ts","../../../packages/connectors/src/connectors/typeform.ts","../../../packages/connectors/src/connectors/v0.ts","../../../packages/connectors/src/connectors/wandb.ts","../../../packages/connectors/src/connectors/webflow.ts","../../../packages/connectors/src/connectors/weread.ts","../../../packages/connectors/src/connectors/whale-alert.ts","../../../packages/connectors/src/connectors/wix.ts","../../../packages/connectors/src/connectors/workos.ts","../../../packages/connectors/src/connectors/wrike.ts","../../../packages/connectors/src/connectors/youtube.ts","../../../packages/connectors/src/connectors/zapier.ts","../../../packages/connectors/src/connectors/zapsign.ts","../../../packages/connectors/src/connectors/zendesk.ts","../../../packages/connectors/src/connectors/zep.ts","../../../packages/connectors/src/connectors/zeptomail.ts","../../../packages/connectors/src/connectors/zoom.ts","../../../packages/connectors/src/connector-config.ts","../../../packages/api-contracts/src/contracts/connector-schemas.ts","../../../packages/api-contracts/src/contracts/zero-connector-catalog.ts","../../../packages/api-contracts/src/contracts/zero-custom-connectors.ts","../src/lib/api/domains/zero-runs.ts","../../../packages/api-contracts/src/contracts/zero-runs.ts","../../../packages/api-contracts/src/contracts/webhooks.ts","../../../packages/api-contracts/src/contracts/runners.ts","../../../packages/api-contracts/src/contracts/storages.ts","../src/lib/api/domains/zero-chat.ts","../src/lib/api/domains/zero-developer-support.ts","../../../packages/api-contracts/src/contracts/zero-developer-support.ts","../../../packages/api-contracts/src/contracts/zero-computer-use-plugins.ts","../src/lib/api/domains/zero-computer-use.ts","../../../packages/api-contracts/src/contracts/zero-computer-use.ts","../src/lib/api/domains/zero-maps.ts","../src/lib/api/domains/zero-banking.ts","../src/lib/api/index.ts","../src/lib/api/domains/composes.ts","../../../packages/api-contracts/src/contracts/composes.ts","../src/lib/api/domains/runs.ts","../src/lib/api/domains/sessions.ts","../../../packages/api-contracts/src/contracts/sessions.ts","../src/lib/api/domains/storages.ts","../src/lib/api/domains/zero-secrets.ts","../../../packages/api-contracts/src/contracts/zero-secrets.ts","../../../packages/api-contracts/src/contracts/secrets.ts","../../../packages/api-contracts/src/contracts/variables.ts","../src/lib/api/domains/zero-variables.ts","../src/lib/api/domains/zero-org-secrets.ts","../src/lib/api/domains/zero-org-variables.ts","../src/lib/api/domains/zero-org-model-providers.ts","../../../packages/api-contracts/src/contracts/zero-model-providers.ts","../src/lib/api/domains/zero-workflows.ts","../../../packages/api-contracts/src/contracts/zero-workflows.ts","../src/lib/api/domains/integrations-slack.ts","../../../packages/api-contracts/src/contracts/integrations.ts","../src/lib/api/domains/integrations-telegram.ts","../src/lib/api/domains/integrations-teams.ts","../src/lib/api/domains/integrations-github.ts","../src/lib/api/domains/integrations-phone.ts","../src/lib/api/domains/zero-logs.ts","../src/lib/api/domains/zero-relationships.ts","../../../packages/api-contracts/src/contracts/zero-relationships.ts","../src/lib/api/domains/zero-memory.ts","../../../packages/api-contracts/src/contracts/zero-memory.ts","../src/lib/api/domains/logs.ts","../src/lib/api/domains/zero-host.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { FeatureSwitchKey } from \"@vm0/connectors/feature-switch-key\";\n\nimport {\n SUPPORTED_RUN_MODELS,\n VM0_MODEL_PRICE_TIER,\n VM0_MODEL_PRICE_TIER_LABEL,\n type SupportedRunModel,\n type Vm0ModelPriceTier,\n} from \"./model-price-tiers\";\nimport {\n MODEL_PROVIDER_TYPE_IDS,\n type ModelProviderFramework,\n type ModelProviderType,\n} from \"./model-provider-types\";\nexport {\n getModelProviderFirewall,\n MODEL_PROVIDER_ENV_PLACEHOLDERS,\n MODEL_PROVIDER_FIREWALL_CONFIGS,\n shouldInlineModelProviderFirewall,\n} from \"./model-provider-firewalls\";\nexport type {\n ModelProviderFramework,\n ModelProviderType,\n} from \"./model-provider-types\";\n\nexport {\n SUPPORTED_RUN_MODELS,\n VM0_MODEL_PRICE_TIER,\n VM0_MODEL_PRICE_TIER_LABEL,\n type SupportedRunModel,\n type Vm0ModelPriceTier,\n};\n\n/**\n * Secret field configuration for multi-secret providers\n */\nexport interface SecretFieldConfig {\n label: string;\n required: boolean;\n placeholder?: string;\n helpText?: string;\n /**\n * When true, this secret is persisted server-side and MUST NOT flow to the\n * runner/sandbox. Used for OAuth refresh tokens and ID tokens that the\n * server holds for refresh + plan-type validation but the sandbox must\n * never see (per #7365). Honored by `resolveMultiAuthProviderSecrets`.\n */\n serverOnly?: boolean;\n /**\n * When true, this secret is populated by a server-side parser from another\n * secret in the same authMethod (typically a single user-input field whose\n * raw value is exploded into multiple stored fields). UI MUST NOT render an\n * input for this secret; the storage validation layer still uses it.\n *\n * Example: `codex-oauth-token` / `auth_json` — user pastes `CODEX_AUTH_JSON`,\n * server parser writes `CHATGPT_ACCESS_TOKEN` / `_REFRESH_TOKEN` /\n * `_ACCOUNT_ID` / `_ID_TOKEN`. Those four are `derived: true`.\n */\n derived?: boolean;\n}\n\n/**\n * Auth method configuration for providers with multiple auth options\n */\nexport interface AuthMethodConfig {\n label: string;\n helpText?: string;\n secrets: Record<string, SecretFieldConfig>;\n}\n\nexport type ModelProviderEnvBindings = Record<string, string>;\n\nexport type ModelProviderFeatureStates = Partial<\n Record<FeatureSwitchKey, boolean>\n>;\n\nexport const modelProviderCodexRuntimeConfigSchema = z.object({\n providerId: z.string().regex(/^[A-Za-z0-9_-]+$/),\n name: z.string().min(1),\n baseUrl: z.url(),\n envKey: z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/),\n wireApi: z.literal(\"responses\"),\n supportsWebsockets: z.boolean(),\n modelCatalog: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type ModelProviderCodexRuntimeConfig = z.infer<\n typeof modelProviderCodexRuntimeConfigSchema\n>;\n\nconst MINIMAX_CODEX_BASE_URL = \"https://api.minimax.io/v1\";\n\nconst MINIMAX_CODEX_ENV_BINDINGS = {\n OPENAI_API_KEY: \"$secret\",\n OPENAI_MODEL: \"$model\",\n} as const satisfies ModelProviderEnvBindings;\n\nconst MINIMAX_CODEX_RUNTIME_CONFIG = {\n providerId: \"minimax\",\n name: \"MiniMax\",\n baseUrl: MINIMAX_CODEX_BASE_URL,\n envKey: \"OPENAI_API_KEY\",\n wireApi: \"responses\",\n supportsWebsockets: false,\n modelCatalog: {\n models: [\n {\n slug: \"MiniMax-M3\",\n display_name: \"MiniMax M3\",\n description: \"MiniMax M3\",\n default_reasoning_level: null,\n supported_reasoning_levels: [],\n shell_type: \"shell_command\",\n visibility: \"list\",\n supported_in_api: true,\n priority: 0,\n additional_speed_tiers: [],\n service_tiers: [],\n default_service_tier: null,\n availability_nux: null,\n upgrade: null,\n base_instructions: \"\",\n model_messages: null,\n include_skills_usage_instructions: false,\n supports_reasoning_summaries: false,\n default_reasoning_summary: \"auto\",\n support_verbosity: false,\n default_verbosity: null,\n apply_patch_tool_type: null,\n web_search_tool_type: \"text\",\n truncation_policy: { mode: \"bytes\", limit: 10_000 },\n supports_parallel_tool_calls: false,\n supports_image_detail_original: false,\n context_window: 1_000_000,\n max_context_window: null,\n auto_compact_token_limit: null,\n comp_hash: null,\n effective_context_window_percent: 95,\n experimental_supported_tools: [],\n input_modalities: [\"text\", \"image\"],\n supports_search_tool: false,\n use_responses_lite: false,\n auto_review_model_override: null,\n tool_mode: null,\n multi_agent_version: null,\n },\n ],\n },\n} as const satisfies ModelProviderCodexRuntimeConfig;\n\nconst GATED_MODEL_PROVIDER_FEATURE_SWITCHES: Partial<\n Record<ModelProviderType, FeatureSwitchKey>\n> = {};\n\nconst FRAMEWORK_SWITCHED_MODEL_PROVIDER_FEATURE_SWITCHES: Partial<\n Record<ModelProviderType, FeatureSwitchKey>\n> = {\n \"minimax-api-key\": FeatureSwitchKey.CodexFrameworkForMinimax,\n};\n\nfunction isFeatureEnabledForModelProvider(\n type: ModelProviderType,\n featureStates: ModelProviderFeatureStates | undefined,\n featureSwitches: Partial<Record<ModelProviderType, FeatureSwitchKey>>,\n): boolean {\n const switchKey = featureSwitches[type];\n return switchKey ? featureStates?.[switchKey] === true : false;\n}\n\nexport function isModelProviderTypeFeatureGated(\n type: ModelProviderType,\n): boolean {\n return GATED_MODEL_PROVIDER_FEATURE_SWITCHES[type] !== undefined;\n}\n\nexport function isModelProviderTypeEnabled(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): boolean {\n const switchKey = GATED_MODEL_PROVIDER_FEATURE_SWITCHES[type];\n return switchKey ? featureStates?.[switchKey] === true : true;\n}\n\nexport function isModelProviderFrameworkFeatureSwitched(\n type: ModelProviderType,\n): boolean {\n return FRAMEWORK_SWITCHED_MODEL_PROVIDER_FEATURE_SWITCHES[type] !== undefined;\n}\n\nexport function isModelProviderFrameworkSwitchEnabled(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): boolean {\n return isFeatureEnabledForModelProvider(\n type,\n featureStates,\n FRAMEWORK_SWITCHED_MODEL_PROVIDER_FEATURE_SWITCHES,\n );\n}\n\nfunction filterModelProviderTypesForFeatures(\n types: readonly ModelProviderType[],\n featureStates?: ModelProviderFeatureStates,\n): ModelProviderType[] {\n return types.filter((type) => {\n return isModelProviderTypeEnabled(type, featureStates);\n });\n}\n\n/**\n * The org slug authorized to use the VM0 managed provider.\n */\nexport const VM0_ORG_SLUG = \"vm0\";\n\nexport const DEFAULT_ORG_MODEL_POLICY_MODELS = [\n \"claude-fable-5\",\n \"claude-opus-4-8\",\n \"claude-sonnet-5\",\n \"gpt-5.6-sol\",\n \"gpt-5.6-terra\",\n \"gpt-5.6-luna\",\n] as const satisfies readonly SupportedRunModel[];\n\nexport const DEFAULT_ORG_MODEL_POLICY_DEFAULT_MODEL =\n \"gpt-5.6-terra\" as const satisfies SupportedRunModel;\n\nexport const LIMITED_FREE1_DEFAULT_RUN_MODEL =\n \"gpt-5.6-terra\" as const satisfies SupportedRunModel;\n\nexport const supportedRunModelSchema = z.enum(SUPPORTED_RUN_MODELS);\n\nexport const modelProviderCredentialScopeSchema = z.enum([\"org\", \"member\"]);\n\nexport type ModelProviderCredentialScope = z.infer<\n typeof modelProviderCredentialScopeSchema\n>;\n\nexport interface DefaultOrgModelPolicySeed {\n model: SupportedRunModel;\n isDefault: boolean;\n defaultProviderType: \"vm0\";\n credentialScope: \"org\";\n modelProviderId: null;\n}\n\nconst SUPPORTED_RUN_MODEL_LABELS: Record<SupportedRunModel, string> = {\n \"claude-fable-5\": \"Claude Fable 5\",\n \"claude-opus-4-8\": \"Claude Opus 4.8\",\n \"claude-opus-4-7\": \"Claude Opus 4.7\",\n \"claude-opus-4-6\": \"Claude Opus 4.6\",\n \"claude-sonnet-5\": \"Claude Sonnet 5\",\n \"claude-sonnet-4-6\": \"Claude Sonnet 4.6\",\n \"deepseek-v4-pro\": \"DeepSeek V4 Pro\",\n \"kimi-k2.7-code\": \"Kimi K2.7 Code\",\n \"MiniMax-M3\": \"MiniMax M3\",\n \"glm-5.2\": \"GLM-5.2\",\n \"glm-5.1\": \"GLM-5.1\",\n \"mimo-v2.5\": \"MiMo-V2.5\",\n \"hy3-preview\": \"Hy3 Preview\",\n \"gpt-5.6-sol\": \"GPT 5.6 Sol\",\n \"gpt-5.6-terra\": \"GPT 5.6 Terra\",\n \"gpt-5.6-luna\": \"GPT 5.6 Luna\",\n \"gpt-5.5\": \"GPT 5.5\",\n \"gpt-5.4\": \"GPT-5.4\",\n \"gpt-5.4-mini\": \"GPT-5.4 Mini\",\n};\n\nconst SUPPORTED_RUN_MODEL_SET: ReadonlySet<string> = new Set(\n SUPPORTED_RUN_MODELS,\n);\n\nexport function isSupportedRunModel(\n model: string | null | undefined,\n): model is SupportedRunModel {\n return typeof model === \"string\" && SUPPORTED_RUN_MODEL_SET.has(model);\n}\n\nexport function getVm0ModelPriceTier(\n model: string,\n): Vm0ModelPriceTier | undefined {\n return isSupportedRunModel(model) ? VM0_MODEL_PRICE_TIER[model] : undefined;\n}\n\nexport function getVm0ModelPriceTierLabel(tier: Vm0ModelPriceTier): string {\n return VM0_MODEL_PRICE_TIER_LABEL[tier];\n}\n\nexport function getCanonicalModelDisplayName(model: string): string {\n return isSupportedRunModel(model) ? SUPPORTED_RUN_MODEL_LABELS[model] : model;\n}\n\nexport function getDefaultOrgModelPolicySeed(\n defaultModel: SupportedRunModel = DEFAULT_ORG_MODEL_POLICY_DEFAULT_MODEL,\n): DefaultOrgModelPolicySeed[] {\n return DEFAULT_ORG_MODEL_POLICY_MODELS.map((model) => {\n return {\n model,\n isDefault: model === defaultModel,\n defaultProviderType: \"vm0\",\n credentialScope: \"org\",\n modelProviderId: null,\n };\n });\n}\n\n/**\n * Mapping from VM0 managed model names to their concrete provider type and vendor.\n * Used at build-context time to resolve the meta-provider to a real provider.\n *\n * NOTE: Defined before MODEL_PROVIDER_TYPES so the vm0 entry can derive its\n * models list from this mapping via Object.keys().\n */\ninterface Vm0ModelConfig {\n concreteType: ModelProviderType;\n vendor: string;\n // Overrides the display-name when substituting `$model` in the concrete\n // provider's env bindings. Needed when the upstream API expects a\n // different identifier than what we show to users (e.g. OpenRouter uses\n // \"z-ai/glm-5.1\" while our UI shows \"glm-5.1\").\n apiModel?: string;\n}\n\n// Key order is load-bearing: `Object.keys()` preserves insertion order and\n// `MODEL_PROVIDER_TYPES.vm0.models` is derived from it, which in turn drives\n// the order models appear in the Built-in model dropdown.\nexport const VM0_MODEL_TO_PROVIDER: Record<string, Vm0ModelConfig> = {\n \"claude-fable-5\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"claude-opus-4-8\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"claude-opus-4-7\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"claude-opus-4-6\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"claude-sonnet-5\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"claude-sonnet-4-6\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"glm-5.2\": {\n concreteType: \"zai-api-key\",\n vendor: \"zai\",\n },\n \"glm-5.1\": {\n concreteType: \"zai-api-key\",\n vendor: \"zai\",\n },\n \"mimo-v2.5\": {\n concreteType: \"openrouter-api-key\",\n vendor: \"openrouter\",\n apiModel: \"xiaomi/mimo-v2.5\",\n },\n \"hy3-preview\": {\n concreteType: \"openrouter-api-key\",\n vendor: \"openrouter\",\n apiModel: \"tencent/hy3-preview\",\n },\n \"kimi-k2.7-code\": {\n concreteType: \"moonshot-api-key\",\n vendor: \"moonshot\",\n },\n \"MiniMax-M3\": {\n concreteType: \"minimax-api-key\",\n vendor: \"minimax\",\n },\n \"deepseek-v4-pro\": {\n concreteType: \"deepseek-api-key\",\n vendor: \"deepseek\",\n },\n \"gpt-5.6-sol\": {\n concreteType: \"openai-api-key\",\n vendor: \"openai\",\n },\n \"gpt-5.6-terra\": {\n concreteType: \"openai-api-key\",\n vendor: \"openai\",\n },\n \"gpt-5.6-luna\": {\n concreteType: \"openai-api-key\",\n vendor: \"openai\",\n },\n \"gpt-5.5\": {\n concreteType: \"openai-api-key\",\n vendor: \"openai\",\n },\n \"gpt-5.4\": {\n concreteType: \"openai-api-key\",\n vendor: \"openai\",\n },\n \"gpt-5.4-mini\": {\n concreteType: \"openai-api-key\",\n vendor: \"openai\",\n },\n};\n\nexport const VM0_MODEL_ALIAS_TO_MODEL = {\n \"anthropic/claude-fable-5\": \"claude-fable-5\",\n \"anthropic/claude-opus-4.8\": \"claude-opus-4-8\",\n \"anthropic/claude-opus-4.7\": \"claude-opus-4-7\",\n \"anthropic/claude-opus-4.6\": \"claude-opus-4-6\",\n \"anthropic/claude-sonnet-5\": \"claude-sonnet-5\",\n \"anthropic/claude-sonnet-4.6\": \"claude-sonnet-4-6\",\n \"z-ai/glm-5.2\": \"glm-5.2\",\n \"z-ai/glm-5.1\": \"glm-5.1\",\n \"xiaomi/mimo-v2.5\": \"mimo-v2.5\",\n \"tencent/hy3-preview\": \"hy3-preview\",\n \"deepseek/deepseek-v4-pro\": \"deepseek-v4-pro\",\n} as const satisfies Record<string, keyof typeof VM0_MODEL_TO_PROVIDER>;\n\nconst VM0_MODEL_ALIAS_LOOKUP: Readonly<Record<string, string>> =\n VM0_MODEL_ALIAS_TO_MODEL;\n\nconst LIMITED_FREE1_ALLOWED_RUN_MODELS: ReadonlySet<string> = new Set([\n \"claude-sonnet-5\",\n \"gpt-5.6-terra\",\n \"gpt-5.6-luna\",\n]);\n\nexport function normalizeVm0ModelId(model: string): string {\n return VM0_MODEL_ALIAS_LOOKUP[model] ?? model;\n}\n\nexport function isLimitedFree1RestrictedRunModel(\n model: string | null | undefined,\n): boolean {\n if (!model) {\n return false;\n }\n const normalized = model.trim().toLowerCase();\n const canonicalModel = normalizeVm0ModelId(normalized);\n const unprefixedModel = canonicalModel.replace(/^(anthropic|openai)\\//, \"\");\n if (LIMITED_FREE1_ALLOWED_RUN_MODELS.has(unprefixedModel)) {\n return false;\n }\n const vendor = VM0_MODEL_TO_PROVIDER[canonicalModel]?.vendor;\n\n return (\n vendor === \"anthropic\" ||\n vendor === \"openai\" ||\n normalized.startsWith(\"anthropic/\") ||\n normalized.startsWith(\"openai/\") ||\n normalized.startsWith(\"claude-\") ||\n normalized.startsWith(\"gpt-\") ||\n normalized === \"fable\" ||\n normalized === \"anthropic/fable\"\n );\n}\n\nexport type ModelImageInputSupport = \"supported\" | \"unsupported\" | \"unknown\";\n\nconst IMAGE_INPUT_SUPPORTED_MODELS = new Set([\n \"claude-fable-5\",\n \"claude-opus-4-8\",\n \"claude-opus-4-7\",\n \"claude-opus-4-6\",\n \"claude-sonnet-5\",\n \"claude-sonnet-4-6\",\n \"anthropic/claude-fable-5\",\n \"anthropic/claude-opus-4.8\",\n \"anthropic/claude-opus-4.7\",\n \"anthropic/claude-opus-4.6\",\n \"anthropic/claude-sonnet-5\",\n \"anthropic/claude-opus-4.5\",\n \"anthropic/claude-sonnet-4.6\",\n \"anthropic/claude-sonnet-4.5\",\n \"kimi-k2.7-code\",\n \"MiniMax-M3\",\n \"mimo-v2.5\",\n \"xiaomi/mimo-v2.5\",\n]);\n\nconst IMAGE_INPUT_UNSUPPORTED_MODELS = new Set([\n \"glm-5.2\",\n \"glm-5.1\",\n \"glm-5\",\n \"glm-4.7\",\n \"glm-4.5-air\",\n \"z-ai/glm-5.2\",\n \"z-ai/glm-5.1\",\n \"zai/glm-5-turbo\",\n \"hy3-preview\",\n \"tencent/hy3-preview\",\n \"deepseek-v4-pro\",\n \"deepseek/deepseek-v4-pro\",\n \"MiniMax-M2.1\",\n \"minimax/minimax-m2.5\",\n]);\n\nexport function getModelImageInputSupport(\n model: string | null | undefined,\n): ModelImageInputSupport {\n if (!model) {\n return \"unknown\";\n }\n const normalized = normalizeVm0ModelId(model);\n if (\n IMAGE_INPUT_SUPPORTED_MODELS.has(normalized) ||\n IMAGE_INPUT_SUPPORTED_MODELS.has(model)\n ) {\n return \"supported\";\n }\n if (\n IMAGE_INPUT_UNSUPPORTED_MODELS.has(normalized) ||\n IMAGE_INPUT_UNSUPPORTED_MODELS.has(model)\n ) {\n return \"unsupported\";\n }\n return \"unknown\";\n}\n\nexport function modelSupportsImageInput(\n model: string | null | undefined,\n): boolean {\n return getModelImageInputSupport(model) === \"supported\";\n}\n\n/**\n * Return the VM0 managed models visible to callers.\n */\nexport function getVm0VisibleModels(): string[] {\n return Object.keys(VM0_MODEL_TO_PROVIDER);\n}\n\n/**\n * Model Provider type configuration\n * Maps type to framework, secret name, and display info\n *\n * For providers with `envBindings`, the secret is mapped to framework variables:\n * - `$secret` → the stored secret value (legacy single secret)\n * - `$secrets.X` → lookup secret X from the secrets map (multi-secret)\n * - `$model` → the selected model (or default)\n * - Other values are passed through as literals\n *\n * Provider types:\n * - Legacy providers: use `secretName` for single secret\n * - Multi-auth providers: use `authMethods` for multiple auth options with different secrets\n */\nexport const MODEL_PROVIDER_TYPES = {\n \"claude-code-oauth-token\": {\n framework: \"claude-code\" as const,\n secretName: \"CLAUDE_CODE_OAUTH_TOKEN\",\n label: \"Claude Code (OAuth Token)\",\n secretLabel: \"OAuth token\",\n helpText:\n \"To get your OAuth token, run: claude setup-token\\n(Requires Claude Pro or Max subscription)\",\n envBindings: {\n CLAUDE_CODE_OAUTH_TOKEN: \"$secret\",\n ANTHROPIC_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"claude-fable-5\",\n \"claude-sonnet-5\",\n \"claude-sonnet-4-6\",\n \"claude-opus-4-8\",\n \"claude-opus-4-7\",\n \"claude-opus-4-6\",\n ] as string[],\n defaultModel: \"claude-sonnet-4-6\",\n },\n \"anthropic-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"ANTHROPIC_API_KEY\",\n label: \"Anthropic\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://console.anthropic.com/settings/keys\",\n envBindings: {\n ANTHROPIC_API_KEY: \"$secret\",\n ANTHROPIC_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"claude-fable-5\",\n \"claude-sonnet-5\",\n \"claude-sonnet-4-6\",\n \"claude-opus-4-8\",\n \"claude-opus-4-7\",\n \"claude-opus-4-6\",\n ] as string[],\n defaultModel: \"claude-sonnet-4-6\",\n },\n \"openrouter-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"OPENROUTER_API_KEY\",\n label: \"OpenRouter\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://openrouter.ai/settings/keys\",\n envBindings: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://openrouter.ai/api\",\n ANTHROPIC_API_KEY: \"\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"anthropic/claude-fable-5\",\n \"anthropic/claude-opus-4.8\",\n \"anthropic/claude-opus-4.7\",\n \"anthropic/claude-sonnet-5\",\n \"anthropic/claude-sonnet-4.6\",\n \"anthropic/claude-opus-4.6\",\n \"anthropic/claude-opus-4.5\",\n \"anthropic/claude-sonnet-4.5\",\n \"z-ai/glm-5.2\",\n \"z-ai/glm-5.1\",\n \"xiaomi/mimo-v2.5\",\n \"tencent/hy3-preview\",\n \"deepseek/deepseek-v4-pro\",\n ] as string[],\n defaultModel: \"\",\n },\n \"moonshot-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"MOONSHOT_API_KEY\",\n label: \"Moonshot (Kimi)\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://platform.moonshot.ai/console/api-keys\",\n envBindings: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.moonshot.ai/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n // Moonshot rejects Anthropic document blocks; keep attachments as text.\n CLAUDE_CODE_DISABLE_ATTACHMENTS: \"1\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"kimi-k2.7-code\",\n \"kimi-k2-thinking-turbo\",\n \"kimi-k2-thinking\",\n ] as string[],\n defaultModel: \"kimi-k2.7-code\",\n },\n \"minimax-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"MINIMAX_API_KEY\",\n label: \"MiniMax\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://platform.minimax.io/user-center/basic-information/interface-key\",\n envBindings: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.minimax.io/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"3000000\",\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: \"1\",\n // MiniMax does not document support for Anthropic document blocks.\n CLAUDE_CODE_DISABLE_ATTACHMENTS: \"1\",\n } satisfies ModelProviderEnvBindings,\n models: [\"MiniMax-M3\", \"MiniMax-M2.1\"] as string[],\n defaultModel: \"MiniMax-M3\",\n },\n \"deepseek-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"DEEPSEEK_API_KEY\",\n label: \"DeepSeek\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://platform.deepseek.com/api_keys\",\n envBindings: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.deepseek.com/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"600000\",\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: \"1\",\n // DeepSeek explicitly rejects Anthropic document blocks.\n CLAUDE_CODE_DISABLE_ATTACHMENTS: \"1\",\n } satisfies ModelProviderEnvBindings,\n models: [\"deepseek-v4-pro\"] as string[],\n defaultModel: \"deepseek-v4-pro\",\n },\n \"zai-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"ZAI_API_KEY\",\n label: \"Z.AI (GLM)\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://z.ai/model-api\",\n envBindings: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.z.ai/api/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"3000000\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"glm-5.2\",\n \"glm-5.1\",\n \"glm-5\",\n \"glm-4.7\",\n \"glm-4.5-air\",\n ] as string[],\n defaultModel: \"glm-5.2\",\n },\n \"vercel-ai-gateway\": {\n framework: \"claude-code\" as const,\n secretName: \"VERCEL_AI_GATEWAY_API_KEY\",\n label: \"Vercel AI Gateway\",\n secretLabel: \"API key\",\n helpText: \"Get your API key from the Vercel AI Gateway dashboard\",\n envBindings: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://ai-gateway.vercel.sh\",\n ANTHROPIC_API_KEY: \"\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"anthropic/claude-fable-5\",\n \"anthropic/claude-opus-4.8\",\n \"anthropic/claude-opus-4.7\",\n \"anthropic/claude-opus-4.6\",\n \"anthropic/claude-sonnet-5\",\n \"anthropic/claude-opus-4.5\",\n \"anthropic/claude-sonnet-4.6\",\n \"anthropic/claude-sonnet-4.5\",\n \"minimax/minimax-m2.5\",\n \"zai/glm-5-turbo\",\n ] as string[],\n defaultModel: \"anthropic/claude-sonnet-4.6\",\n },\n // Codex-framework twin of openrouter-api-key. Same upstream gateway (OpenRouter)\n // and same API key (shared secretName), but routes through OpenRouter's\n // OpenAI-compatible endpoint surface for GPT models that codex CLI requires.\n // Pairing rule: the claude-code entry serves Anthropic Messages API\n // (/v1/messages); this codex entry serves OpenAI Chat Completions / Responses\n // (/v1/chat/completions, /v1/responses) under the same /api/v1 prefix.\n \"openrouter-codex\": {\n framework: \"codex\" as const,\n secretName: \"OPENROUTER_API_KEY\",\n label: \"OpenRouter (Codex)\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://openrouter.ai/settings/keys\",\n envBindings: {\n OPENAI_API_KEY: \"$secret\",\n OPENAI_BASE_URL: \"https://openrouter.ai/api/v1\",\n OPENAI_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"openai/gpt-5.5\",\n \"openai/gpt-5.4\",\n \"openai/gpt-5.4-mini\",\n ] as string[],\n defaultModel: \"openai/gpt-5.5\",\n },\n // Codex-framework twin of vercel-ai-gateway. Vercel exposes both\n // Anthropic Messages and OpenAI Chat Completions / Responses on the same\n // base URL, distinguished by path. The claude-code entry uses /v1/messages;\n // this codex entry uses /v1/chat/completions or /v1/responses (codex CLI\n // picks the path it needs).\n \"vercel-ai-gateway-codex\": {\n framework: \"codex\" as const,\n secretName: \"VERCEL_AI_GATEWAY_API_KEY\",\n label: \"Vercel AI Gateway (Codex)\",\n secretLabel: \"API key\",\n helpText: \"Get your API key from the Vercel AI Gateway dashboard\",\n envBindings: {\n OPENAI_API_KEY: \"$secret\",\n OPENAI_BASE_URL: \"https://ai-gateway.vercel.sh/v1\",\n OPENAI_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"openai/gpt-5.5\",\n \"openai/gpt-5.4\",\n \"openai/gpt-5.4-mini\",\n ] as string[],\n defaultModel: \"openai/gpt-5.5\",\n },\n \"openai-api-key\": {\n framework: \"codex\" as const,\n secretName: \"OPENAI_API_KEY\",\n label: \"OpenAI\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://platform.openai.com/api-keys\",\n envBindings: {\n OPENAI_API_KEY: \"$secret\",\n OPENAI_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"gpt-5.6-sol\",\n \"gpt-5.6-terra\",\n \"gpt-5.6-luna\",\n \"gpt-5.5\",\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n ] as string[],\n defaultModel: \"gpt-5.5\",\n },\n \"codex-oauth-token\": {\n framework: \"codex\" as const,\n label: \"ChatGPT (Codex)\",\n helpText:\n \"Run `codex login` on your machine, then paste the resulting \" +\n \"~/.codex/auth.json contents to authorize ChatGPT (Plus / Pro / \" +\n \"Business / Edu / Enterprise) for Codex.\",\n authMethods: {\n // Paste-based auth: client posts CODEX_AUTH_JSON, server parses it via\n // codex-auth-json-parser.ts and persists the four derived CHATGPT_*\n // fields. The raw blob is NEVER stored. The wire-shape secret\n // (CODEX_AUTH_JSON) is declared optional+serverOnly so the contract\n // accepts it on POST without persisting; the four CHATGPT_* fields are\n // the canonical stored secrets and the firewall layer reads from those.\n auth_json: {\n label: \"Codex auth.json\",\n helpText:\n \"Run `codex login` locally, then paste the contents of ~/.codex/auth.json below.\",\n secrets: {\n CODEX_AUTH_JSON: {\n label: \"auth.json contents\",\n required: false,\n serverOnly: true,\n placeholder: '{\"OPENAI_API_KEY\":null,\"tokens\":{...}}',\n helpText: \"Paste the entire contents of ~/.codex/auth.json\",\n },\n // CHATGPT_ACCESS_TOKEN and CHATGPT_ACCOUNT_ID reach the sandbox env\n // as placeholder values (substituted by the firewall token-replacement\n // layer at egress) — keeping them non-serverOnly preserves the\n // placeholder injection path. CHATGPT_REFRESH_TOKEN and\n // CHATGPT_ID_TOKEN stay serverOnly per the #7365 invariant.\n //\n // All four are `derived: true` — the server-side parser populates\n // them from the user-pasted CODEX_AUTH_JSON. The UI MUST NOT render\n // them as input fields (per #12024).\n CHATGPT_ACCESS_TOKEN: {\n label: \"CHATGPT_ACCESS_TOKEN\",\n required: true,\n derived: true,\n },\n CHATGPT_REFRESH_TOKEN: {\n label: \"CHATGPT_REFRESH_TOKEN\",\n required: true,\n serverOnly: true,\n derived: true,\n },\n CHATGPT_ACCOUNT_ID: {\n label: \"CHATGPT_ACCOUNT_ID\",\n required: true,\n derived: true,\n },\n CHATGPT_ID_TOKEN: {\n label: \"CHATGPT_ID_TOKEN\",\n required: true,\n serverOnly: true,\n derived: true,\n },\n },\n },\n } satisfies Record<string, AuthMethodConfig>,\n defaultAuthMethod: \"auth_json\",\n envBindings: {\n CHATGPT_ACCESS_TOKEN: \"$secrets.CHATGPT_ACCESS_TOKEN\",\n CHATGPT_ACCOUNT_ID: \"$secrets.CHATGPT_ACCOUNT_ID\",\n OPENAI_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [\n \"gpt-5.6-sol\",\n \"gpt-5.6-terra\",\n \"gpt-5.6-luna\",\n \"gpt-5.5\",\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n ] as string[],\n defaultModel: \"gpt-5.5\",\n },\n \"azure-foundry\": {\n framework: \"claude-code\" as const,\n label: \"Azure Foundry\",\n helpText:\n \"Run Claude on Microsoft Azure Foundry.\\nSetup guide: https://code.claude.com/docs/en/microsoft-foundry\",\n authMethods: {\n \"api-key\": {\n label: \"API Key\",\n helpText: \"Use an Azure Foundry API key for authentication\",\n secrets: {\n ANTHROPIC_FOUNDRY_API_KEY: {\n label: \"ANTHROPIC_FOUNDRY_API_KEY\",\n required: true,\n helpText: \"API key from Azure Foundry portal (Endpoints and keys)\",\n },\n ANTHROPIC_FOUNDRY_RESOURCE: {\n label: \"ANTHROPIC_FOUNDRY_RESOURCE\",\n required: true,\n placeholder: \"my-resource\",\n helpText: \"Azure resource name (from portal URL)\",\n },\n },\n },\n } satisfies Record<string, AuthMethodConfig>,\n defaultAuthMethod: \"api-key\",\n envBindings: {\n CLAUDE_CODE_USE_FOUNDRY: \"1\",\n ANTHROPIC_FOUNDRY_API_KEY: \"$secrets.ANTHROPIC_FOUNDRY_API_KEY\",\n ANTHROPIC_FOUNDRY_RESOURCE: \"$secrets.ANTHROPIC_FOUNDRY_RESOURCE\",\n ANTHROPIC_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [] as string[],\n defaultModel: \"\",\n allowCustomModel: true,\n customModelPlaceholder: \"claude-sonnet-4-5\",\n },\n \"aws-bedrock\": {\n framework: \"claude-code\" as const,\n label: \"AWS Bedrock\",\n helpText:\n \"Run Claude on AWS Bedrock.\\nSetup guide: https://code.claude.com/docs/en/amazon-bedrock\",\n authMethods: {\n \"api-key\": {\n label: \"Bedrock API Key\",\n helpText: \"Use a Bedrock API key for authentication\",\n secrets: {\n AWS_BEARER_TOKEN_BEDROCK: {\n label: \"AWS_BEARER_TOKEN_BEDROCK\",\n required: true,\n helpText: \"Bedrock API key from AWS console\",\n },\n AWS_REGION: {\n label: \"AWS_REGION\",\n required: true,\n placeholder: \"us-east-1\",\n helpText: \"e.g., us-east-1, us-west-2\",\n },\n },\n },\n \"access-keys\": {\n label: \"IAM Access Keys\",\n helpText: \"Use IAM access key secrets\",\n secrets: {\n AWS_ACCESS_KEY_ID: {\n label: \"AWS_ACCESS_KEY_ID\",\n required: true,\n helpText: \"IAM access key ID\",\n },\n AWS_SECRET_ACCESS_KEY: {\n label: \"AWS_SECRET_ACCESS_KEY\",\n required: true,\n helpText: \"IAM secret access key\",\n },\n AWS_SESSION_TOKEN: {\n label: \"AWS_SESSION_TOKEN\",\n required: false,\n helpText: \"Optional, for temporary secrets\",\n },\n AWS_REGION: {\n label: \"AWS_REGION\",\n required: true,\n placeholder: \"us-east-1\",\n helpText: \"e.g., us-east-1, us-west-2\",\n },\n },\n },\n } satisfies Record<string, AuthMethodConfig>,\n defaultAuthMethod: \"api-key\",\n envBindings: {\n CLAUDE_CODE_USE_BEDROCK: \"1\",\n AWS_REGION: \"$secrets.AWS_REGION\",\n AWS_BEARER_TOKEN_BEDROCK: \"$secrets.AWS_BEARER_TOKEN_BEDROCK\",\n AWS_ACCESS_KEY_ID: \"$secrets.AWS_ACCESS_KEY_ID\",\n AWS_SECRET_ACCESS_KEY: \"$secrets.AWS_SECRET_ACCESS_KEY\",\n AWS_SESSION_TOKEN: \"$secrets.AWS_SESSION_TOKEN\",\n ANTHROPIC_MODEL: \"$model\",\n } satisfies ModelProviderEnvBindings,\n models: [] as string[],\n defaultModel: \"\",\n allowCustomModel: true,\n customModelPlaceholder: \"anthropic.claude-sonnet-4-20250514-v1:0\",\n },\n vm0: {\n framework: \"claude-code\" as const,\n label: \"VM0 Managed\",\n models: Object.keys(VM0_MODEL_TO_PROVIDER) as string[],\n defaultModel: DEFAULT_ORG_MODEL_POLICY_DEFAULT_MODEL,\n },\n} as const satisfies Record<ModelProviderType, unknown>;\n\nconst MODEL_FIRST_PROVIDER_COMPATIBILITY = {\n \"claude-fable-5\": [\n \"vm0\",\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"vercel-ai-gateway\",\n ],\n \"claude-opus-4-8\": [\n \"vm0\",\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"vercel-ai-gateway\",\n ],\n \"claude-opus-4-7\": [\n \"vm0\",\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"vercel-ai-gateway\",\n ],\n \"claude-opus-4-6\": [\n \"vm0\",\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"vercel-ai-gateway\",\n ],\n \"claude-sonnet-5\": [\n \"vm0\",\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"vercel-ai-gateway\",\n ],\n \"claude-sonnet-4-6\": [\n \"vm0\",\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"vercel-ai-gateway\",\n ],\n \"gpt-5.6-sol\": [\"vm0\", \"openai-api-key\", \"codex-oauth-token\"],\n \"gpt-5.6-terra\": [\"vm0\", \"openai-api-key\", \"codex-oauth-token\"],\n \"gpt-5.6-luna\": [\"vm0\", \"openai-api-key\", \"codex-oauth-token\"],\n \"gpt-5.5\": [\n \"vm0\",\n \"openai-api-key\",\n \"codex-oauth-token\",\n \"openrouter-codex\",\n \"vercel-ai-gateway-codex\",\n ],\n \"gpt-5.4\": [\n \"vm0\",\n \"openai-api-key\",\n \"codex-oauth-token\",\n \"openrouter-codex\",\n \"vercel-ai-gateway-codex\",\n ],\n \"gpt-5.4-mini\": [\n \"vm0\",\n \"openai-api-key\",\n \"codex-oauth-token\",\n \"openrouter-codex\",\n \"vercel-ai-gateway-codex\",\n ],\n \"deepseek-v4-pro\": [\"vm0\", \"deepseek-api-key\", \"openrouter-api-key\"],\n \"kimi-k2.7-code\": [\"vm0\", \"moonshot-api-key\"],\n \"MiniMax-M3\": [\"vm0\", \"minimax-api-key\"],\n \"glm-5.2\": [\"vm0\", \"zai-api-key\", \"openrouter-api-key\"],\n \"glm-5.1\": [\"vm0\", \"zai-api-key\", \"openrouter-api-key\"],\n \"mimo-v2.5\": [\"vm0\", \"openrouter-api-key\"],\n \"hy3-preview\": [\"vm0\", \"openrouter-api-key\"],\n} as const satisfies Record<SupportedRunModel, readonly ModelProviderType[]>;\n\nconst PROVIDER_RUNTIME_MODEL_ALIASES: Partial<\n Record<ModelProviderType, Partial<Record<SupportedRunModel, string>>>\n> = {\n \"openrouter-api-key\": {\n \"claude-fable-5\": \"anthropic/claude-fable-5\",\n \"claude-opus-4-8\": \"anthropic/claude-opus-4.8\",\n \"claude-opus-4-7\": \"anthropic/claude-opus-4.7\",\n \"claude-opus-4-6\": \"anthropic/claude-opus-4.6\",\n \"claude-sonnet-5\": \"anthropic/claude-sonnet-5\",\n \"claude-sonnet-4-6\": \"anthropic/claude-sonnet-4.6\",\n \"deepseek-v4-pro\": \"deepseek/deepseek-v4-pro\",\n \"glm-5.2\": \"z-ai/glm-5.2\",\n \"glm-5.1\": \"z-ai/glm-5.1\",\n \"mimo-v2.5\": \"xiaomi/mimo-v2.5\",\n \"hy3-preview\": \"tencent/hy3-preview\",\n },\n \"vercel-ai-gateway\": {\n \"claude-fable-5\": \"anthropic/claude-fable-5\",\n \"claude-opus-4-8\": \"anthropic/claude-opus-4.8\",\n \"claude-opus-4-7\": \"anthropic/claude-opus-4.7\",\n \"claude-opus-4-6\": \"anthropic/claude-opus-4.6\",\n \"claude-sonnet-5\": \"anthropic/claude-sonnet-5\",\n \"claude-sonnet-4-6\": \"anthropic/claude-sonnet-4.6\",\n },\n \"openrouter-codex\": {\n \"gpt-5.5\": \"openai/gpt-5.5\",\n \"gpt-5.4\": \"openai/gpt-5.4\",\n \"gpt-5.4-mini\": \"openai/gpt-5.4-mini\",\n },\n \"vercel-ai-gateway-codex\": {\n \"gpt-5.5\": \"openai/gpt-5.5\",\n \"gpt-5.4\": \"openai/gpt-5.4\",\n \"gpt-5.4-mini\": \"openai/gpt-5.4-mini\",\n },\n};\n\nconst CANONICAL_RUN_MODEL_ALIASES: Readonly<Record<string, SupportedRunModel>> =\n {\n \"anthropic/claude-fable-5\": \"claude-fable-5\",\n \"anthropic/claude-opus-4.8\": \"claude-opus-4-8\",\n \"anthropic/claude-opus-4.7\": \"claude-opus-4-7\",\n \"anthropic/claude-opus-4.6\": \"claude-opus-4-6\",\n \"anthropic/claude-sonnet-5\": \"claude-sonnet-5\",\n \"anthropic/claude-sonnet-4.6\": \"claude-sonnet-4-6\",\n \"deepseek/deepseek-v4-pro\": \"deepseek-v4-pro\",\n \"z-ai/glm-5.2\": \"glm-5.2\",\n \"z-ai/glm-5.1\": \"glm-5.1\",\n \"xiaomi/mimo-v2.5\": \"mimo-v2.5\",\n \"tencent/hy3-preview\": \"hy3-preview\",\n };\n\nexport function normalizeRunModelId(model: string): string {\n return CANONICAL_RUN_MODEL_ALIASES[model] ?? model;\n}\n\nexport function getProvidersForModel(\n model: string,\n featureStates?: ModelProviderFeatureStates,\n): ModelProviderType[] {\n const canonical = normalizeRunModelId(model);\n if (!isSupportedRunModel(canonical)) {\n return [];\n }\n return filterModelProviderTypesForFeatures(\n MODEL_FIRST_PROVIDER_COMPATIBILITY[canonical],\n featureStates,\n );\n}\n\nexport function isModelSupportedByProvider(\n model: string,\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): boolean {\n return getProvidersForModel(model, featureStates).includes(type);\n}\n\nexport function getProviderRuntimeModel(\n type: ModelProviderType,\n model: string,\n): string {\n const canonical = normalizeRunModelId(model);\n if (!isSupportedRunModel(canonical)) {\n return model;\n }\n if (type === \"vm0\") {\n return VM0_MODEL_TO_PROVIDER[canonical]?.apiModel ?? canonical;\n }\n return PROVIDER_RUNTIME_MODEL_ALIASES[type]?.[canonical] ?? canonical;\n}\n\n/**\n * Provider types hidden from user-facing selection UI.\n * These lack static firewall support (dynamic URLs or SigV4), so token\n * replacement cannot be used. New selection is blocked until a proper\n * solution is implemented; existing configurations continue to work.\n */\nconst HIDDEN_PROVIDER_LIST = [\"aws-bedrock\", \"azure-foundry\"] as const;\n\nconst HIDDEN_PROVIDER_TYPES: ReadonlySet<ModelProviderType> = new Set(\n HIDDEN_PROVIDER_LIST,\n);\n\n/**\n * Get provider types available for user selection.\n * Excludes providers that are hidden from the UI (e.g., those without token replacement support).\n */\nexport function getSelectableProviderTypes(\n featureStates?: ModelProviderFeatureStates,\n): ModelProviderType[] {\n return (Object.keys(MODEL_PROVIDER_TYPES) as ModelProviderType[]).filter(\n (type) => {\n return (\n !HIDDEN_PROVIDER_TYPES.has(type) &&\n isModelProviderTypeEnabled(type, featureStates)\n );\n },\n );\n}\n\nexport const modelProviderTypeSchema = z.enum(MODEL_PROVIDER_TYPE_IDS);\n\nexport const modelProviderFrameworkSchema = z.enum([\"claude-code\", \"codex\"]);\n\n/**\n * Get the concrete provider type for a VM0 managed model.\n * Throws if the model is not in the VM0 model mapping.\n */\nexport function getVm0ConcreteProviderType(model: string): ModelProviderType {\n const entry = VM0_MODEL_TO_PROVIDER[model];\n if (!entry) {\n throw new Error(\n `Unknown VM0 model \"${model}\". Valid models: ${Object.keys(VM0_MODEL_TO_PROVIDER).join(\", \")}`,\n );\n }\n return entry.concreteType as ModelProviderType;\n}\n\n/**\n * Get the vendor name for a VM0 managed model.\n * Used for key pool lookup.\n */\nexport function getVm0Vendor(model: string): string {\n const entry = VM0_MODEL_TO_PROVIDER[model];\n if (!entry) {\n throw new Error(\n `Unknown VM0 model \"${model}\". Valid models: ${Object.keys(VM0_MODEL_TO_PROVIDER).join(\", \")}`,\n );\n }\n return entry.vendor;\n}\n\n/**\n * Get the upstream API model identifier for a VM0 managed model.\n * Falls back to the display name when no override is configured.\n */\nexport function getVm0ApiModel(model: string): string {\n const entry = VM0_MODEL_TO_PROVIDER[model];\n if (!entry) {\n throw new Error(\n `Unknown VM0 model \"${model}\". Valid models: ${Object.keys(VM0_MODEL_TO_PROVIDER).join(\", \")}`,\n );\n }\n return entry.apiModel ?? model;\n}\n\n/**\n * Get framework for a model provider type\n */\nexport function getFrameworkForType(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): ModelProviderFramework {\n if (isModelProviderFrameworkSwitchEnabled(type, featureStates)) {\n return \"codex\";\n }\n return MODEL_PROVIDER_TYPES[type]?.framework ?? \"claude-code\";\n}\n\n/**\n * Get secret name for a model provider type (legacy single-secret providers)\n * Returns undefined for multi-auth providers\n */\nexport function getSecretNameForType(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n if (!config) return undefined;\n return \"secretName\" in config ? config.secretName : undefined;\n}\n\n/**\n * Check if a model provider type has multiple auth methods\n */\nexport function hasAuthMethods(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n if (!config) return false;\n return \"authMethods\" in config;\n}\n\n/**\n * Get auth methods for a model provider type\n * Returns undefined for legacy single-secret providers\n */\nexport function getAuthMethodsForType(\n type: ModelProviderType,\n): Record<string, AuthMethodConfig> | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n if (!config) return undefined;\n return \"authMethods\" in config ? config.authMethods : undefined;\n}\n\n/**\n * Get default auth method for a model provider type\n * Returns undefined for legacy single-secret providers\n */\nexport function getDefaultAuthMethod(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"defaultAuthMethod\" in config ? config.defaultAuthMethod : undefined;\n}\n\n/**\n * Get secrets config for a specific auth method\n * Returns undefined if provider doesn't have auth methods or auth method doesn't exist\n */\nexport function getSecretsForAuthMethod(\n type: ModelProviderType,\n authMethod: string,\n): Record<string, SecretFieldConfig> | undefined {\n const authMethods = getAuthMethodsForType(type);\n if (!authMethods || !(authMethod in authMethods)) {\n return undefined;\n }\n const method = authMethods[authMethod];\n return method?.secrets;\n}\n\n/**\n * Get secret names for a specific auth method\n * Returns array of secret names required for the auth method\n */\nexport function getSecretNamesForAuthMethod(\n type: ModelProviderType,\n authMethod: string,\n): string[] | undefined {\n const secrets = getSecretsForAuthMethod(type, authMethod);\n if (!secrets) {\n return undefined;\n }\n return Object.keys(secrets);\n}\n\n/**\n * Get runtime environment bindings for a model provider type.\n * Returns undefined for providers without env bindings (use secret directly).\n */\nexport function getModelProviderEnvBindings(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): ModelProviderEnvBindings | undefined {\n if (isModelProviderFrameworkSwitchEnabled(type, featureStates)) {\n if (type === \"minimax-api-key\") {\n return MINIMAX_CODEX_ENV_BINDINGS;\n }\n }\n const config = MODEL_PROVIDER_TYPES[type];\n return \"envBindings\" in config ? config.envBindings : undefined;\n}\n\nexport function getModelProviderCodexRuntimeConfig(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): ModelProviderCodexRuntimeConfig | undefined {\n if (\n type === \"minimax-api-key\" &&\n isModelProviderFrameworkSwitchEnabled(type, featureStates)\n ) {\n return MINIMAX_CODEX_RUNTIME_CONFIG;\n }\n return undefined;\n}\n\n/**\n * Get the upstream base URL for a model provider type.\n *\n * Returns the framework-appropriate upstream base URL. Codex custom-provider\n * runtime config is authoritative when present; otherwise this falls back to\n * envBindings — ANTHROPIC_BASE_URL for claude-code, OPENAI_BASE_URL for codex.\n * Returns null when the provider relies on the SDK's default\n * (Anthropic-native providers, OpenAI direct).\n *\n * Used by areProvidersCompatible to detect session-continuation safety\n * across provider swaps. Providers hitting the same upstream URL are\n * compatible; different URLs imply different upstreams and so a\n * potentially different request/response contract.\n */\nexport function getProviderBaseUrl(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): string | null {\n const codexRuntimeConfig = getModelProviderCodexRuntimeConfig(\n type,\n featureStates,\n );\n if (codexRuntimeConfig) {\n return codexRuntimeConfig.baseUrl;\n }\n\n const envBindings = getModelProviderEnvBindings(type, featureStates);\n if (!envBindings) {\n return null;\n }\n const anthropicUrl = envBindings[\"ANTHROPIC_BASE_URL\"];\n if (anthropicUrl) {\n return anthropicUrl;\n }\n const openaiUrl = envBindings[\"OPENAI_BASE_URL\"];\n return openaiUrl ?? null;\n}\n\n/**\n * Check if two model providers are compatible for session continuation.\n * Providers are compatible if they resolve to the same upstream base URL.\n */\nexport function areProvidersCompatible(\n a: ModelProviderType,\n b: ModelProviderType,\n): boolean {\n return getProviderBaseUrl(a) === getProviderBaseUrl(b);\n}\n\n/**\n * Get available models for a model provider type\n * Returns undefined for providers without model selection\n */\nexport function getModels(type: ModelProviderType): string[] | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"models\" in config ? config.models : undefined;\n}\n\n/**\n * Get default model for a model provider type\n * Returns undefined for providers without model selection\n */\nexport function getDefaultModel(type: ModelProviderType): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"defaultModel\" in config ? config.defaultModel : undefined;\n}\n\n/**\n * Check if a model provider type supports model selection\n */\nexport function hasModelSelection(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n // Has predefined models OR allows custom model input\n return (\n (\"models\" in config && config.models.length > 0) ||\n (\"allowCustomModel\" in config && config.allowCustomModel === true)\n );\n}\n\n/**\n * Check if a model provider allows custom model input\n */\nexport function allowsCustomModel(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"allowCustomModel\" in config && config.allowCustomModel === true;\n}\n\n/**\n * Get custom model placeholder for a model provider type\n */\nexport function getCustomModelPlaceholder(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"customModelPlaceholder\" in config\n ? config.customModelPlaceholder\n : undefined;\n}\n\nexport const modelProviderSubscriptionUsageWindowSchema = z.object({\n usedPercent: z.number().nullable(),\n remainingPercent: z.number().nullable(),\n resetAt: z.string().nullable(),\n windowSeconds: z.number().nullable(),\n});\n\nexport const modelProviderSubscriptionUsageSchema = z.object({\n fiveHour: modelProviderSubscriptionUsageWindowSchema.nullable(),\n weekly: modelProviderSubscriptionUsageWindowSchema.nullable(),\n});\n\n/**\n * Model provider response\n */\nexport const modelProviderResponseSchema = z.object({\n id: z.uuid(),\n type: modelProviderTypeSchema,\n framework: modelProviderFrameworkSchema,\n secretName: z.string().nullable(), // Legacy single-secret (deprecated for multi-auth)\n authMethod: z.string().nullable(), // For multi-auth providers\n secretNames: z.array(z.string()).nullable(), // For multi-auth providers\n isDefault: z.boolean(),\n selectedModel: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n // OAuth account metadata populated by provider-specific connect flows. Other\n // provider types omit these.\n accountEmail: z.string().nullable().optional(),\n workspaceName: z.string().nullable().optional(),\n planType: z.string().nullable().optional(),\n // Subscription quota metadata. Providers omit these until an upstream source\n // exposes the reset cadence or next reset timestamp.\n subscriptionResetPeriod: z.string().nullable().optional(),\n subscriptionNextResetAt: z.string().nullable().optional(),\n subscriptionUsage: modelProviderSubscriptionUsageSchema.nullable().optional(),\n subscriptionResetCredits: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional(),\n // OAuth refresh state. `needsReconnect` flips to true when the firewall's\n // refresh attempt fails (#11921 writes this on the model_providers row).\n // `lastRefreshErrorCode` carries the typed code from `ChatgptRefreshError`\n // (e.g. `refresh_token_expired`) so the UI can render an actionable\n // re-connect message. Both fields are always emitted for OAuth-typed\n // providers; non-OAuth types default to false / null.\n needsReconnect: z.boolean(),\n lastRefreshErrorCode: z.string().nullable(),\n});\n\nexport type ModelProviderResponse = z.infer<typeof modelProviderResponseSchema>;\n\n/**\n * List model providers response\n */\nexport const modelProviderListResponseSchema = z.object({\n modelProviders: z.array(modelProviderResponseSchema),\n});\n\nexport type ModelProviderListResponse = z.infer<\n typeof modelProviderListResponseSchema\n>;\n\n/**\n * Create/update model provider request\n *\n * Legacy providers use `secret` (single string)\n * Multi-auth providers use `authMethod` + `secrets` (map)\n */\nexport const upsertModelProviderRequestSchema = z.object({\n type: modelProviderTypeSchema,\n secret: z.string().min(1).optional(), // Legacy single secret\n authMethod: z.string().optional(), // For multi-auth providers\n secrets: z.record(z.string(), z.string()).optional(), // For multi-auth providers\n selectedModel: z.string().optional(),\n});\n\nexport type UpsertModelProviderRequest = z.infer<\n typeof upsertModelProviderRequestSchema\n>;\n\n/**\n * Upsert response includes created flag\n */\nexport const upsertModelProviderResponseSchema = z.object({\n provider: modelProviderResponseSchema,\n created: z.boolean(),\n});\n\nexport type UpsertModelProviderResponse = z.infer<\n typeof upsertModelProviderResponseSchema\n>;\n\nexport const orgModelPolicyRouteStatusSchema = z.enum([\n \"valid\",\n \"missing_provider\",\n \"invalid\",\n]);\n\nexport type OrgModelPolicyRouteStatus = z.infer<\n typeof orgModelPolicyRouteStatusSchema\n>;\n\nexport const orgModelPolicySchema = z.object({\n id: z.uuid(),\n model: supportedRunModelSchema,\n modelLabel: z.string(),\n isDefault: z.boolean(),\n defaultProviderType: modelProviderTypeSchema,\n credentialScope: modelProviderCredentialScopeSchema,\n modelProviderId: z.uuid().nullable(),\n routeStatus: orgModelPolicyRouteStatusSchema,\n routeStatusReason: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type OrgModelPolicy = z.infer<typeof orgModelPolicySchema>;\n\nexport const updateOrgModelPolicySchema = z.object({\n model: supportedRunModelSchema,\n isDefault: z.boolean(),\n defaultProviderType: modelProviderTypeSchema,\n credentialScope: modelProviderCredentialScopeSchema,\n modelProviderId: z.uuid().nullable(),\n});\n\nexport type UpdateOrgModelPolicy = z.infer<typeof updateOrgModelPolicySchema>;\n\nexport const orgModelPoliciesResponseSchema = z.object({\n policies: z.array(orgModelPolicySchema),\n workspaceDefaultModel: supportedRunModelSchema.nullable(),\n workspaceDefaultPolicyId: z.uuid().nullable(),\n});\n\nexport type OrgModelPoliciesResponse = z.infer<\n typeof orgModelPoliciesResponseSchema\n>;\n\nexport const updateOrgModelPoliciesRequestSchema = z.object({\n policies: z.array(updateOrgModelPolicySchema),\n});\n\nexport type UpdateOrgModelPoliciesRequest = z.infer<\n typeof updateOrgModelPoliciesRequestSchema\n>;\n","/**\n * Feature switch keys\n *\n * Defines all available feature switch identifiers.\n */\nexport enum FeatureSwitchKey {\n Dummy = \"dummy\",\n AhrefsConnector = \"ahrefsConnector\",\n BentomlConnector = \"bentomlConnector\",\n BoxConnector = \"boxConnector\",\n CanvaConnector = \"canvaConnector\",\n DeelConnector = \"deelConnector\",\n DocuSignConnector = \"docusignConnector\",\n DropboxConnector = \"dropboxConnector\",\n FigmaConnector = \"figmaConnector\",\n MercuryConnector = \"mercuryConnector\",\n Microsoft365Connector = \"microsoft365Connector\",\n NeonConnector = \"neonConnector\",\n GarminConnectConnector = \"garminConnectConnector\",\n QuickBooksConnector = \"quickbooksConnector\",\n RedditConnector = \"redditConnector\",\n SupabaseConnector = \"supabaseConnector\",\n WebflowConnector = \"webflowConnector\",\n CloseConnector = \"closeConnector\",\n OutlookMailConnector = \"outlookMailConnector\",\n OutlookCalendarConnector = \"outlookCalendarConnector\",\n TikTokAdsConnector = \"tiktokAdsConnector\",\n AwsConnector = \"awsConnector\",\n NintendoStoreConnector = \"nintendoStoreConnector\",\n PosthogConnector = \"posthogConnector\",\n MailchimpConnector = \"mailchimpConnector\",\n ResendConnector = \"resendConnector\",\n PexelsConnector = \"pexelsConnector\",\n SpotifyConnector = \"spotifyConnector\",\n ZeroDebug = \"zeroDebug\",\n Banking = \"banking\",\n Lab = \"lab\",\n WorkflowWebhookTriggers = \"workflowWebhookTriggers\",\n NotionWorkflowTriggers = \"notionWorkflowTriggers\",\n AgentDetailWorkflowsTab = \"agentDetailWorkflowsTab\",\n TestOauthConnector = \"testOauthConnector\",\n FreshdeskConnector = \"freshdeskConnector\",\n StabilityAiConnector = \"stabilityAiConnector\",\n ZoomConnector = \"zoomConnector\",\n ApiKeys = \"apiKeys\",\n CodexFrameworkForMinimax = \"codexFrameworkForMinimax\",\n CodexFastMode = \"codexFastMode\",\n RealAgentInPreview = \"realAgentInPreview\",\n ComposerUploadPopover = \"composerUploadPopover\",\n\n ZapierConnector = \"zapierConnector\",\n MemoryViewer = \"memoryViewer\",\n RelationshipMemory = \"relationshipMemory\",\n RelationshipMemoryRuntimeInjection = \"relationshipMemoryRuntimeInjection\",\n HtmlArtifactCommentEditing = \"htmlArtifactCommentEditing\",\n ComputerUseDesktopPlugins = \"computerUseDesktopPlugins\",\n DesktopX64Download = \"desktopX64Download\",\n AgentUnreadIndicators = \"agentUnreadIndicators\",\n MobileUnreadChatThreadShortcuts = \"mobileUnreadChatThreadShortcuts\",\n ChatThreadUnifiedSearch = \"chatThreadUnifiedSearch\",\n ImageArtifactKeyboardNavigation = \"imageArtifactKeyboardNavigation\",\n SidebarManageIconCollapse = \"sidebarManageIconCollapse\",\n SidebarSubscriptionUsage = \"sidebarSubscriptionUsage\",\n TeamsIntegration = \"teamsIntegration\",\n ImageEditing = \"imageEditing\",\n PresentationGoogleSlidesUpload = \"presentationGoogleSlidesUpload\",\n Artifacts = \"artifacts\",\n ArtifactFavorites = \"artifactFavorites\",\n ArtifactPreviewImage = \"artifactPreviewImage\",\n ArtifactVideoPreview = \"artifactVideoPreview\",\n WorkflowTemplateCatalog = \"workflowTemplateCatalog\",\n WebsiteTemplates = \"websiteTemplates\",\n WorkflowQueue = \"workflowQueue\",\n WorkflowConnectorReadiness = \"workflowConnectorReadiness\",\n}\n","/**\n * Canonical VM0-managed run models and Built-in credit price tiers.\n *\n * Keep this module lightweight so public UI surfaces can read price tier data\n * without importing the full model provider contract schema.\n */\nexport const SUPPORTED_RUN_MODELS = [\n \"claude-fable-5\",\n \"gpt-5.6-sol\",\n \"gpt-5.6-terra\",\n \"gpt-5.6-luna\",\n \"gpt-5.5\",\n \"claude-opus-4-8\",\n \"claude-opus-4-7\",\n \"claude-opus-4-6\",\n \"claude-sonnet-5\",\n \"claude-sonnet-4-6\",\n \"deepseek-v4-pro\",\n \"kimi-k2.7-code\",\n \"MiniMax-M3\",\n \"glm-5.2\",\n \"glm-5.1\",\n \"mimo-v2.5\",\n \"hy3-preview\",\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n] as const;\n\nexport type SupportedRunModel = (typeof SUPPORTED_RUN_MODELS)[number];\n\nexport type Vm0ModelPriceTier = \"$\" | \"$$\" | \"$$$\" | \"$$$$\";\n\n/**\n * User-facing credit cost tier for Built-in model offerings. Only applies to\n * the `vm0` provider type; BYOK providers pay the vendor directly and do not\n * carry a platform tier.\n */\nexport const VM0_MODEL_PRICE_TIER = Object.freeze<\n Record<SupportedRunModel, Vm0ModelPriceTier>\n>({\n \"claude-fable-5\": \"$$$$\",\n \"gpt-5.6-sol\": \"$$$\",\n \"gpt-5.6-terra\": \"$$\",\n \"gpt-5.6-luna\": \"$\",\n \"gpt-5.5\": \"$$$\",\n \"claude-opus-4-8\": \"$$$\",\n \"claude-opus-4-7\": \"$$$\",\n \"claude-opus-4-6\": \"$$$\",\n \"claude-sonnet-5\": \"$$\",\n \"claude-sonnet-4-6\": \"$$\",\n \"deepseek-v4-pro\": \"$\",\n \"kimi-k2.7-code\": \"$\",\n \"MiniMax-M3\": \"$\",\n \"glm-5.2\": \"$\",\n \"glm-5.1\": \"$\",\n \"mimo-v2.5\": \"$\",\n \"hy3-preview\": \"$\",\n \"gpt-5.4\": \"$$\",\n \"gpt-5.4-mini\": \"$\",\n});\n\nexport const VM0_MODEL_PRICE_TIER_LABEL = Object.freeze<\n Record<Vm0ModelPriceTier, string>\n>({\n $: \"Economy tier for everyday simple tasks\",\n $$: \"Balanced cost and performance\",\n $$$: \"Frontier flagship model\",\n $$$$: \"Premium frontier model for the hardest tasks\",\n});\n","export const MODEL_PROVIDER_TYPE_IDS = [\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"moonshot-api-key\",\n \"minimax-api-key\",\n \"deepseek-api-key\",\n \"zai-api-key\",\n \"vercel-ai-gateway\",\n \"openrouter-codex\",\n \"vercel-ai-gateway-codex\",\n \"openai-api-key\",\n \"codex-oauth-token\",\n \"azure-foundry\",\n \"aws-bedrock\",\n \"vm0\",\n] as const;\n\nexport type ModelProviderType = (typeof MODEL_PROVIDER_TYPE_IDS)[number];\n\nexport type ModelProviderFramework = \"claude-code\" | \"codex\";\n","import type { ExpandedFirewallConfig } from \"@vm0/connectors/firewall-types\";\nimport { FeatureSwitchKey } from \"@vm0/connectors/feature-switch-key\";\n\nimport type {\n ModelProviderFramework,\n ModelProviderType,\n} from \"./model-provider-types\";\n\ntype ModelProviderFeatureStates = Partial<Record<FeatureSwitchKey, boolean>>;\n\ntype FirewallSupportedProvider = Exclude<\n ModelProviderType,\n \"aws-bedrock\" | \"azure-foundry\" | \"vm0\"\n>;\ntype LegacySingleSecretProvider = Exclude<\n FirewallSupportedProvider,\n \"codex-oauth-token\"\n>;\n\ninterface SingleSecretFirewallProviderConfig {\n readonly framework: ModelProviderFramework;\n readonly secretName: string;\n readonly anthropicBaseUrl?: string;\n readonly openaiBaseUrl?: string;\n}\n\nexport const MODEL_PROVIDER_ENV_PLACEHOLDERS = {\n // Placeholder: sk-ant-api03-{93 word/hyphen chars}AA (108 chars total)\n // Source: Semgrep regex \\Bsk-ant-api03-[\\w\\-]{93}AA\\B\n // https://semgrep.dev/blog/2025/secrets-story-and-prefixed-secrets/\n ANTHROPIC_API_KEY:\n \"sk-ant-api03-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCofAA\",\n // Placeholder: sk-ant-oat01-{93 word/hyphen chars}AA (108 chars total)\n // Source: same structure as API key; prefix from claude setup-token output\n // https://github.com/anthropics/claude-code/issues/18340\n // Example: sk-ant-oat01-xxxxx...xxxxx (1-year OAuth token)\n CLAUDE_CODE_OAUTH_TOKEN:\n \"sk-ant-oat01-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCofAA\",\n // Generic bearer-token marker for Claude-compatible gateways that map\n // provider-specific secrets into ANTHROPIC_AUTH_TOKEN.\n ANTHROPIC_AUTH_TOKEN: \"sk-CoffeeSafeLocalCoffeeSafeLocalCo\",\n // Placeholder: sk-proj-{chars}T3BlbkFJ{chars} (typical project key shape)\n // Source: mirrors the OpenAI connector firewall placeholder shape.\n OPENAI_API_KEY:\n \"sk-proj-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocaT3BlbkFJCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoca\",\n // Opaque fake marker, not a JWT. Codex ChatGPT mode reads auth.json, while\n // firewall auth substitutes this marker at egress.\n CHATGPT_ACCESS_TOKEN:\n \"chatgpt-token-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocal\",\n CHATGPT_ACCOUNT_ID: \"ws_VM0_PLACEHOLDER_DO_NOT_TRUST\",\n CHATGPT_REFRESH_TOKEN: \"rt_VM0_PLACEHOLDER_DO_NOT_TRUST\",\n} as const;\n\nconst MODEL_PROVIDER_FIREWALL_PROVIDER_CONFIGS: Record<\n LegacySingleSecretProvider,\n SingleSecretFirewallProviderConfig\n> = {\n \"anthropic-api-key\": {\n framework: \"claude-code\",\n secretName: \"ANTHROPIC_API_KEY\",\n },\n \"claude-code-oauth-token\": {\n framework: \"claude-code\",\n secretName: \"CLAUDE_CODE_OAUTH_TOKEN\",\n },\n \"openrouter-api-key\": {\n framework: \"claude-code\",\n secretName: \"OPENROUTER_API_KEY\",\n anthropicBaseUrl: \"https://openrouter.ai/api\",\n },\n \"moonshot-api-key\": {\n framework: \"claude-code\",\n secretName: \"MOONSHOT_API_KEY\",\n anthropicBaseUrl: \"https://api.moonshot.ai/anthropic\",\n },\n \"minimax-api-key\": {\n framework: \"claude-code\",\n secretName: \"MINIMAX_API_KEY\",\n anthropicBaseUrl: \"https://api.minimax.io/anthropic\",\n },\n \"deepseek-api-key\": {\n framework: \"claude-code\",\n secretName: \"DEEPSEEK_API_KEY\",\n anthropicBaseUrl: \"https://api.deepseek.com/anthropic\",\n },\n \"zai-api-key\": {\n framework: \"claude-code\",\n secretName: \"ZAI_API_KEY\",\n anthropicBaseUrl: \"https://api.z.ai/api/anthropic\",\n },\n \"vercel-ai-gateway\": {\n framework: \"claude-code\",\n secretName: \"VERCEL_AI_GATEWAY_API_KEY\",\n anthropicBaseUrl: \"https://ai-gateway.vercel.sh\",\n },\n \"openrouter-codex\": {\n framework: \"codex\",\n secretName: \"OPENROUTER_API_KEY\",\n openaiBaseUrl: \"https://openrouter.ai/api/v1\",\n },\n \"vercel-ai-gateway-codex\": {\n framework: \"codex\",\n secretName: \"VERCEL_AI_GATEWAY_API_KEY\",\n openaiBaseUrl: \"https://ai-gateway.vercel.sh/v1\",\n },\n \"openai-api-key\": {\n framework: \"codex\",\n secretName: \"OPENAI_API_KEY\",\n },\n};\n\nconst ANTHROPIC_API_BASE = \"https://api.anthropic.com\";\n\nfunction isLegacySingleSecretProvider(\n type: FirewallSupportedProvider,\n): type is LegacySingleSecretProvider {\n return type !== \"codex-oauth-token\";\n}\n\nfunction getFirewallBaseUrl(type: FirewallSupportedProvider): string {\n // codex-oauth-token targets ChatGPT's backend, not the public OpenAI API.\n if (!isLegacySingleSecretProvider(type)) {\n return \"https://chatgpt.com/backend-api/codex\";\n }\n\n const config = MODEL_PROVIDER_FIREWALL_PROVIDER_CONFIGS[type];\n if (config.framework === \"codex\") {\n return (\n config.openaiBaseUrl?.replace(/\\/+$/, \"\") ??\n \"https://api.openai.com/v1/responses\"\n );\n }\n\n const base = (config.anthropicBaseUrl ?? ANTHROPIC_API_BASE).replace(\n /\\/+$/,\n \"\",\n );\n return `${base}/v1/messages`;\n}\n\nfunction mpFirewall(\n type: LegacySingleSecretProvider,\n authHeader: { name: string; valuePrefix?: string },\n placeholderValue: string,\n): ExpandedFirewallConfig {\n const secretName = MODEL_PROVIDER_FIREWALL_PROVIDER_CONFIGS[type].secretName;\n const secretRef = `\\${{ secrets.${secretName} }}`;\n const headerValue = authHeader.valuePrefix\n ? `${authHeader.valuePrefix} ${secretRef}`\n : secretRef;\n return {\n name: `model-provider:${type}`,\n apis: [\n {\n base: getFirewallBaseUrl(type),\n auth: { headers: { [authHeader.name]: headerValue } },\n permissions: [],\n },\n ],\n placeholders: { [secretName]: placeholderValue },\n };\n}\n\n/**\n * Firewall gateway configs for model providers with static base URLs.\n * Used to auto-generate firewall entries that protect API tokens from sandbox exposure.\n * Excluded: aws-bedrock (dynamic region URLs + SigV4), azure-foundry (dynamic resource URLs).\n *\n * Claude Code gateway providers scope to /v1/messages so vm0-managed API keys\n * are only injected on LLM inference paths, not vendor admin endpoints.\n */\nexport const MODEL_PROVIDER_FIREWALL_CONFIGS = {\n \"anthropic-api-key\": mpFirewall(\n \"anthropic-api-key\",\n { name: \"x-api-key\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_API_KEY,\n ),\n \"claude-code-oauth-token\": mpFirewall(\n \"claude-code-oauth-token\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.CLAUDE_CODE_OAUTH_TOKEN,\n ),\n \"openrouter-api-key\": mpFirewall(\n \"openrouter-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_AUTH_TOKEN,\n ),\n \"moonshot-api-key\": mpFirewall(\n \"moonshot-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_AUTH_TOKEN,\n ),\n \"minimax-api-key\": mpFirewall(\n \"minimax-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_AUTH_TOKEN,\n ),\n \"deepseek-api-key\": mpFirewall(\n \"deepseek-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_AUTH_TOKEN,\n ),\n \"zai-api-key\": mpFirewall(\n \"zai-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_AUTH_TOKEN,\n ),\n \"vercel-ai-gateway\": mpFirewall(\n \"vercel-ai-gateway\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.ANTHROPIC_AUTH_TOKEN,\n ),\n // Codex-framework twin of openrouter-api-key. It reuses the same stored\n // OpenRouter secret, but the sandbox env name is OPENAI_API_KEY because codex\n // SDK hits OpenAI-compatible paths (/chat/completions, /responses) under\n // https://openrouter.ai/api/v1.\n \"openrouter-codex\": mpFirewall(\n \"openrouter-codex\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.OPENAI_API_KEY,\n ),\n // Codex-framework twin of vercel-ai-gateway. It reuses the same stored Vercel\n // secret, but the sandbox env name is OPENAI_API_KEY. Base URL is scoped to\n // the /v1 prefix so codex can use either /chat/completions or /responses.\n \"vercel-ai-gateway-codex\": mpFirewall(\n \"vercel-ai-gateway-codex\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.OPENAI_API_KEY,\n ),\n \"openai-api-key\": mpFirewall(\n \"openai-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n MODEL_PROVIDER_ENV_PLACEHOLDERS.OPENAI_API_KEY,\n ),\n // ChatGPT OAuth provider: multi-header injection plus unknown-policy auth.openai.com deny.\n \"codex-oauth-token\": {\n name: \"model-provider:codex-oauth-token\",\n apis: [\n {\n base: \"https://chatgpt.com/backend-api/codex\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CHATGPT_ACCESS_TOKEN }}\",\n \"ChatGPT-Account-ID\": \"${{ secrets.CHATGPT_ACCOUNT_ID }}\",\n },\n },\n permissions: [\n {\n name: \"codex:api\",\n description:\n \"Access the ChatGPT Codex backend with GET and POST requests.\",\n rules: [\"GET /{path*}\", \"POST /{path*}\"],\n },\n ],\n },\n {\n base: \"https://auth.openai.com\",\n auth: { headers: {} },\n permissions: [],\n },\n ],\n defaultPolicies: {\n unknownPolicy: \"deny\",\n },\n placeholders: {\n CHATGPT_ACCESS_TOKEN:\n MODEL_PROVIDER_ENV_PLACEHOLDERS.CHATGPT_ACCESS_TOKEN,\n CHATGPT_ACCOUNT_ID: MODEL_PROVIDER_ENV_PLACEHOLDERS.CHATGPT_ACCOUNT_ID,\n CHATGPT_REFRESH_TOKEN:\n MODEL_PROVIDER_ENV_PLACEHOLDERS.CHATGPT_REFRESH_TOKEN,\n },\n },\n} as const satisfies Record<FirewallSupportedProvider, ExpandedFirewallConfig>;\n\nconst MINIMAX_CODEX_FIREWALL_CONFIG = {\n name: \"model-provider:minimax-api-key\",\n apis: [\n {\n base: \"https://api.minimax.io/v1\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.MINIMAX_API_KEY }}\",\n },\n },\n permissions: [],\n },\n ],\n placeholders: {\n MINIMAX_API_KEY: MODEL_PROVIDER_ENV_PLACEHOLDERS.OPENAI_API_KEY,\n },\n} as const satisfies ExpandedFirewallConfig;\n\nfunction isFirewallSupported(\n type: ModelProviderType,\n): type is FirewallSupportedProvider {\n return type in MODEL_PROVIDER_FIREWALL_CONFIGS;\n}\n\nexport function getModelProviderFirewall(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): ExpandedFirewallConfig | undefined {\n if (\n type === \"minimax-api-key\" &&\n featureStates?.[FeatureSwitchKey.CodexFrameworkForMinimax] === true\n ) {\n return MINIMAX_CODEX_FIREWALL_CONFIG;\n }\n return isFirewallSupported(type)\n ? MODEL_PROVIDER_FIREWALL_CONFIGS[type]\n : undefined;\n}\n\nexport function shouldInlineModelProviderFirewall(\n type: ModelProviderType,\n featureStates?: ModelProviderFeatureStates,\n): boolean {\n return (\n type === \"minimax-api-key\" &&\n featureStates?.[FeatureSwitchKey.CodexFrameworkForMinimax] === true\n );\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport { registryResourceDownloadContract } from \"@vm0/api-contracts/contracts/registry-resources\";\n\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n// Keep registry resource downloads in the CLI release lifecycle.\nexport async function getRegistryResourceDownload(query: {\n id: string;\n}): Promise<{\n url: string;\n id: string;\n type: \"tar.gz\";\n sha256: string;\n expiresInSeconds: number;\n versionId: string;\n fileCount: number;\n size: number;\n}> {\n const config = await getClientConfig();\n const client = initClient(registryResourceDownloadContract, config);\n\n const result = await client.download({ query });\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Registry resource \"${query.id}\" not found`);\n}\n","import { z } from \"zod\";\n\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const registryResourceDownloadContract = c.router({\n download: {\n method: \"GET\",\n path: \"/api/registry/resources/download\",\n headers: authHeadersSchema,\n query: z.object({\n id: z.string().min(1, \"Resource id is required\"),\n }),\n responses: {\n 200: z.object({\n url: z.url(),\n id: z.string(),\n type: z.literal(\"tar.gz\"),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n expiresInSeconds: z.number().int().positive(),\n versionId: z.string(),\n fileCount: z.number().int().nonnegative(),\n size: z.number().nonnegative(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get a presigned URL for a private registry resource archive\",\n },\n});\n\nexport type RegistryResourceDownloadContract =\n typeof registryResourceDownloadContract;\n","import { z } from \"zod\";\n\nexport { initContract } from \"./trpc-contract\";\n\nconst MAX_DATE_TIMESTAMP_MS = 8_640_000_000_000_000;\n\nfunction rejectBlankQueryNumber(value: unknown): unknown {\n if (typeof value === \"string\" && value.trim().length === 0) {\n return Number.NaN;\n }\n\n return value;\n}\n\nexport function isValidDateTimestamp(value: number): boolean {\n return (\n Number.isSafeInteger(value) && Math.abs(value) <= MAX_DATE_TIMESTAMP_MS\n );\n}\n\nexport const timestampQueryNumberSchema = z.preprocess(\n rejectBlankQueryNumber,\n z.coerce\n .number()\n .refine(Number.isSafeInteger, {\n message: \"Value must be a safe integer\",\n })\n .refine(isValidDateTimestamp, {\n message: \"Timestamp is out of range\",\n }),\n);\n\n/**\n * Shared headers schema for endpoints requiring authentication.\n * The authorization header is optional - endpoints handle missing auth\n * by returning 401 responses.\n *\n */\nexport const authHeadersSchema = z.object({\n authorization: z.string().optional(),\n});\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroUserPreferencesContract,\n type UserPreferencesResponse,\n} from \"@vm0/api-contracts/contracts/zero-user-preferences\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * Get current user's preferences\n */\nexport async function getZeroUserPreferences(): Promise<UserPreferencesResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroUserPreferencesContract, config);\n\n const result = await client.get({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get user preferences\");\n}\n\n/**\n * Update user preferences\n */\nexport async function updateZeroUserPreferences(body: {\n timezone?: string;\n}): Promise<UserPreferencesResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroUserPreferencesContract, config);\n\n const result = await client.update({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update user preferences\");\n}\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * User preferences schemas (shared across contracts)\n */\nexport const sendModeSchema = z.enum([\"enter\", \"cmd-enter\"]);\nexport type SendMode = z.infer<typeof sendModeSchema>;\n\nexport const userPreferencesResponseSchema = z.object({\n timezone: z.string().nullable(),\n // Pinned agents are exposed as membership only. The API returns a stable\n // canonical order and ignores client-provided order on writes.\n pinnedAgentIds: z.array(z.string()),\n sendMode: sendModeSchema,\n captureNetworkBodiesRemaining: z.number().int().min(0),\n});\n\nexport type UserPreferencesResponse = z.infer<\n typeof userPreferencesResponseSchema\n>;\n\nexport const updateUserPreferencesRequestSchema = z\n .object({\n timezone: z.string().min(1).optional(),\n // Membership update only; request order is not used for display ordering.\n pinnedAgentIds: z.array(z.string()).optional(),\n sendMode: sendModeSchema.optional(),\n captureNetworkBodiesRemaining: z.number().int().min(0).optional(),\n })\n .refine(\n (data) => {\n return (\n data.timezone !== undefined ||\n data.pinnedAgentIds !== undefined ||\n data.sendMode !== undefined ||\n data.captureNetworkBodiesRemaining !== undefined\n );\n },\n {\n message: \"At least one preference must be provided\",\n },\n );\n\nexport type UpdateUserPreferencesRequest = z.infer<\n typeof updateUserPreferencesRequestSchema\n>;\n\n/**\n * Zero user preferences contract for /api/zero/user-preferences\n *\n * GET: Get current user's preferences\n * POST: Update user preferences\n */\nexport const zeroUserPreferencesContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/user-preferences\",\n headers: authHeadersSchema,\n responses: {\n 200: userPreferencesResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get user preferences\",\n },\n update: {\n method: \"POST\",\n path: \"/api/zero/user-preferences\",\n headers: authHeadersSchema,\n body: updateUserPreferencesRequestSchema,\n responses: {\n 200: userPreferencesResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update user preferences\",\n },\n});\n\nexport type ZeroUserPreferencesContract = typeof zeroUserPreferencesContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroOrgContract,\n zeroOrgLeaveContract,\n zeroOrgDeleteContract,\n} from \"@vm0/api-contracts/contracts/zero-org\";\nimport { cliAuthOrgContract } from \"@vm0/api-contracts/contracts/cli-auth\";\nimport { zeroOrgListContract } from \"@vm0/api-contracts/contracts/zero-org-list\";\nimport {\n zeroOrgInviteContract,\n zeroOrgMembersContract,\n} from \"@vm0/api-contracts/contracts/zero-org-members\";\nimport type { OrgMembersResponse } from \"@vm0/api-contracts/contracts/org-members\";\nimport type { OrgResponse } from \"@vm0/api-contracts/contracts/orgs\";\nimport type { OrgListResponse } from \"@vm0/api-contracts/contracts/org-list\";\nimport {\n ApiRequestError,\n getClientConfig,\n getBaseUrl,\n handleError,\n} from \"../core/client-factory\";\nimport { getToken } from \"../config\";\nimport { cliClientHeaderApi } from \"../client-headers\";\n\n/**\n * Get client config that always uses the user token,\n * not the org token. Used for org list operations.\n */\nasync function getUserTokenClientConfig(): Promise<{\n baseUrl: string;\n baseHeaders: Record<string, string>;\n jsonQuery: false;\n api: typeof cliClientHeaderApi;\n}> {\n const baseUrl = await getBaseUrl();\n const token = await getToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return {\n baseUrl,\n baseHeaders: headers,\n jsonQuery: false,\n api: cliClientHeaderApi,\n };\n}\n\n/**\n * Get current org info via zero API\n */\nexport async function getZeroOrg(): Promise<OrgResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgContract, config);\n\n const result = await client.get({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get organization\");\n}\n\n/**\n * Update org slug via zero API\n */\nexport async function updateZeroOrg(body: {\n slug: string;\n force?: boolean;\n}): Promise<OrgResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgContract, config);\n\n const result = await client.update({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update organization\");\n}\n\n/**\n * List all accessible orgs (always uses user token)\n */\nexport async function listZeroOrgs(): Promise<OrgListResponse> {\n const config = await getUserTokenClientConfig();\n const client = initClient(zeroOrgListContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list organizations\");\n}\n\n/**\n * Get org members via zero API\n */\nexport async function getZeroOrgMembers(): Promise<OrgMembersResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgMembersContract, config);\n\n const result = await client.members({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get organization members\");\n}\n\n/**\n * Invite a member to the org via zero API\n */\nexport async function inviteZeroOrgMember(\n email: string,\n role: \"member\" | \"admin\" = \"member\",\n): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgInviteContract, config);\n\n const result = await client.invite({\n body: { email, role },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to invite member\");\n}\n\n/**\n * Remove a member from the org via zero API\n */\nexport async function removeZeroOrgMember(email: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgMembersContract, config);\n\n const result = await client.removeMember({\n body: { email },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to remove member\");\n}\n\n/**\n * Leave the current org via zero API\n */\nexport async function leaveZeroOrg(): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgLeaveContract, config);\n\n const result = await client.leave({\n body: {},\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to leave organization\");\n}\n\n/**\n * Delete the current org via zero API\n */\nexport async function deleteZeroOrg(slug: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgDeleteContract, config);\n\n const result = await client.delete({\n body: { slug },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to delete organization\");\n}\n\n/**\n * Switch active organization and get a new CLI JWT token.\n * Uses the user's current token for auth (not org-scoped).\n */\nexport async function switchZeroOrg(\n slug: string,\n): Promise<{ access_token: string }> {\n const config = await getUserTokenClientConfig();\n const client = initClient(cliAuthOrgContract, config);\n\n const result = await client.switchOrg({\n headers: {},\n body: { slug },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to switch organization\");\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgResponseSchema, updateOrgRequestSchema } from \"./orgs\";\nimport { orgMessageResponseSchema } from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Zero contract for /api/zero/org\n * Proxies to /api/org\n */\nexport const zeroOrgContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/org\",\n headers: authHeadersSchema,\n responses: {\n 200: orgResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get current org (zero proxy)\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/org\",\n headers: authHeadersSchema,\n body: updateOrgRequestSchema,\n responses: {\n 200: orgResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update org slug (zero proxy)\",\n },\n});\n\nexport type ZeroOrgContract = typeof zeroOrgContract;\n\n/**\n * Zero contract for POST /api/zero/org/leave\n * Proxies to POST /api/org/leave\n */\nexport const zeroOrgLeaveContract = c.router({\n leave: {\n method: \"POST\",\n path: \"/api/zero/org/leave\",\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Leave the current org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgLeaveContract = typeof zeroOrgLeaveContract;\n\n/**\n * Zero contract for DELETE /api/zero/org/delete\n */\nexport const zeroOrgDeleteContract = c.router({\n delete: {\n method: \"POST\",\n path: \"/api/zero/org/delete\",\n headers: authHeadersSchema,\n body: z.object({ slug: z.string() }),\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete the current org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgDeleteContract = typeof zeroOrgDeleteContract;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgRoleSchema } from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Org tier values\n */\nexport const orgTierSchema = z.enum([\n \"free\",\n \"limited-free-1\",\n \"pro-suspend\",\n \"pro\",\n \"team\",\n \"custom\",\n]);\nexport type OrgTier = z.infer<typeof orgTierSchema>;\n\nconst ORG_TIER_SET: ReadonlySet<string> = new Set(orgTierSchema.options);\n\nexport function isOrgTier(value: string | null | undefined): value is OrgTier {\n return typeof value === \"string\" && ORG_TIER_SET.has(value);\n}\n\n/**\n * Org slug validation\n * - 3-64 characters (or 1-2 for single/double char slugs)\n * - lowercase letters, numbers, and hyphens only\n * - must start and end with alphanumeric\n */\nexport const orgSlugSchema = z\n .string()\n .min(3, \"Org slug must be at least 3 characters\")\n .max(64, \"Org slug must be at most 64 characters\")\n .regex(\n /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]{1,2}$/,\n \"Org slug must contain only lowercase letters, numbers, and hyphens, and must start and end with an alphanumeric character\",\n )\n .transform((s) => {\n return s.toLowerCase();\n });\n\n/**\n * Org response schema\n */\nexport const orgResponseSchema = z.object({\n id: z.string(),\n slug: z.string(),\n name: z.string(),\n tier: z.string().optional(),\n role: orgRoleSchema.optional(),\n createdBy: z.string().optional(),\n});\n\nexport type OrgResponse = z.infer<typeof orgResponseSchema>;\n\n/**\n * Update org request schema\n */\nexport const updateOrgRequestSchema = z.object({\n slug: orgSlugSchema.optional(),\n name: z.string().min(1).max(128).optional(),\n force: z.boolean().optional().default(false),\n});\n\nexport type UpdateOrgRequest = z.infer<typeof updateOrgRequestSchema>;\n\n/**\n * Org default agent contract for /api/zero/default-agent\n */\nexport const orgDefaultAgentContract = c.router({\n /**\n * PUT /api/zero/default-agent\n * Set or unset the default agent for an org.\n * Only org admins can perform this action.\n * The agent must belong to the same org.\n */\n setDefaultAgent: {\n method: \"PUT\",\n path: \"/api/zero/default-agent\",\n headers: authHeadersSchema,\n query: z.object({}),\n body: z.object({\n agentId: z.uuid().nullable(),\n }),\n responses: {\n 200: z.object({\n agentId: z.uuid().nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Set or unset the default agent for an org\",\n },\n});\n\nexport type OrgDefaultAgentContract = typeof orgDefaultAgentContract;\n","import { z } from \"zod\";\n\n/**\n * Org role enum\n */\nexport const orgRoleSchema = z.enum([\"admin\", \"member\"]);\nexport type OrgRole = z.infer<typeof orgRoleSchema>;\n\n/**\n * Org member schema\n */\nexport const orgMemberSchema = z.object({\n userId: z.string(),\n email: z.string(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n imageUrl: z.string(),\n role: orgRoleSchema,\n joinedAt: z.string(),\n});\nexport type OrgMember = z.infer<typeof orgMemberSchema>;\n\n/**\n * Pending invitation schema\n */\nexport const orgPendingInvitationSchema = z.object({\n id: z.string(),\n email: z.string(),\n role: orgRoleSchema,\n createdAt: z.string(),\n});\nexport type OrgPendingInvitation = z.infer<typeof orgPendingInvitationSchema>;\n\n/**\n * Membership request schema\n */\nexport const orgMembershipRequestSchema = z.object({\n id: z.string(),\n userId: z.string(),\n email: z.string(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n imageUrl: z.string(),\n createdAt: z.string(),\n});\nexport type OrgMembershipRequest = z.infer<typeof orgMembershipRequestSchema>;\n\n/**\n * Revoke invitation request schema\n */\nexport const revokeInvitationRequestSchema = z.object({\n invitationId: z.string(),\n});\nexport type RevokeInvitationRequest = z.infer<\n typeof revokeInvitationRequestSchema\n>;\n\n/**\n * Membership request action schema\n */\nexport const membershipRequestActionSchema = z.object({\n requestId: z.string(),\n});\nexport type MembershipRequestAction = z.infer<\n typeof membershipRequestActionSchema\n>;\n\n/**\n * Org members response schema (status + members list)\n */\nexport const orgMembersResponseSchema = z.object({\n slug: z.string(),\n role: orgRoleSchema,\n members: z.array(orgMemberSchema),\n pendingInvitations: z.array(orgPendingInvitationSchema).optional(),\n membershipRequests: z.array(orgMembershipRequestSchema).optional(),\n createdAt: z.string(),\n});\nexport type OrgMembersResponse = z.infer<typeof orgMembersResponseSchema>;\n\n/**\n * Invite member request schema\n */\nexport const inviteOrgMemberRequestSchema = z.object({\n email: z.string().email(),\n role: orgRoleSchema.optional().default(\"member\"),\n});\nexport type InviteOrgMemberRequest = z.infer<\n typeof inviteOrgMemberRequestSchema\n>;\n\n/**\n * Remove member request schema\n */\nexport const removeOrgMemberRequestSchema = z.object({\n email: z.string().email(),\n});\nexport type RemoveOrgMemberRequest = z.infer<\n typeof removeOrgMemberRequestSchema\n>;\n\n/**\n * Update member role request schema\n */\nexport const updateOrgMemberRoleRequestSchema = z.object({\n email: z.string().email(),\n role: orgRoleSchema,\n});\nexport type UpdateOrgMemberRoleRequest = z.infer<\n typeof updateOrgMemberRoleRequestSchema\n>;\n\n/**\n * Simple message response schema\n */\nexport const orgMessageResponseSchema = z.object({\n message: z.string(),\n});\nexport type OrgMessageResponse = z.infer<typeof orgMessageResponseSchema>;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\n\nconst c = initContract();\n\n/**\n * OAuth-style error response schema for device flow\n * Uses standard OAuth 2.0 error format\n */\nconst oauthErrorSchema = z.object({\n error: z.string(),\n error_description: z.string(),\n});\n\n/**\n * CLI auth device contract for /api/cli/auth/device\n */\nexport const cliAuthDeviceContract = c.router({\n /**\n * POST /api/cli/auth/device\n * Initiate device authorization flow\n */\n create: {\n method: \"POST\",\n path: \"/api/cli/auth/device\",\n body: z.object({}).optional(),\n responses: {\n 200: z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_path: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n }),\n 500: oauthErrorSchema,\n },\n summary: \"Initiate device authorization flow\",\n },\n});\n\n/**\n * CLI auth token contract for /api/cli/auth/token\n */\nexport const cliAuthTokenContract = c.router({\n /**\n * POST /api/cli/auth/token\n * Exchange device code for access token\n */\n exchange: {\n method: \"POST\",\n path: \"/api/cli/auth/token\",\n body: z.object({\n device_code: z.string().min(1, \"device_code is required\"),\n }),\n responses: {\n // Success - token issued\n 200: z.object({\n access_token: z.string(),\n token_type: z.literal(\"Bearer\"),\n expires_in: z.number(),\n }),\n // Authorization pending\n 202: oauthErrorSchema,\n // Various error states\n 400: oauthErrorSchema,\n 500: oauthErrorSchema,\n },\n summary: \"Exchange device code for access token\",\n },\n});\n\n/**\n * Error response schema for structured API errors\n */\nconst apiErrorResponseSchema = z.object({\n error: z.object({ message: z.string(), code: z.string() }),\n});\n\nconst cliAuthApproveErrorSchema = z.object({\n success: z.literal(false),\n error: z.string(),\n});\n\n/**\n * CLI auth browser approval contract for /api/cli/auth/approve\n */\nexport const cliAuthApproveContract = c.router({\n /**\n * POST /api/cli/auth/approve\n * Approve a pending CLI device code from a browser session\n */\n approve: {\n method: \"POST\",\n path: \"/api/cli/auth/approve\",\n headers: authHeadersSchema,\n body: z.object({\n device_code: z.string().min(1, \"device_code is required\"),\n timezone: z.string().min(1).optional(),\n }),\n responses: {\n 200: z.object({ success: z.literal(true) }),\n 400: cliAuthApproveErrorSchema,\n 401: apiErrorResponseSchema,\n 403: apiErrorResponseSchema,\n },\n summary: \"Approve a CLI device authorization flow\",\n },\n});\n\n/**\n * CLI auth org switch contract for /api/cli/auth/org\n */\nexport const cliAuthOrgContract = c.router({\n /**\n * POST /api/cli/auth/org\n * Switch active organization and get new CLI JWT\n */\n switchOrg: {\n method: \"POST\",\n path: \"/api/cli/auth/org\",\n headers: authHeadersSchema,\n body: z.object({ slug: z.string().min(1) }),\n responses: {\n 200: z.object({\n access_token: z.string(),\n token_type: z.literal(\"Bearer\"),\n expires_in: z.number(),\n }),\n 400: oauthErrorSchema,\n 401: apiErrorResponseSchema,\n 403: apiErrorResponseSchema,\n 404: apiErrorResponseSchema,\n },\n summary: \"Switch active organization and get new CLI JWT\",\n },\n});\n\nexport type CliAuthDeviceContract = typeof cliAuthDeviceContract;\nexport type CliAuthTokenContract = typeof cliAuthTokenContract;\nexport type CliAuthApproveContract = typeof cliAuthApproveContract;\nexport type CliAuthOrgContract = typeof cliAuthOrgContract;\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgListResponseSchema } from \"./org-list\";\n\nconst c = initContract();\n\n/**\n * Zero contract for GET /api/zero/org/list\n * Lists all accessible orgs for the authenticated user.\n */\nexport const zeroOrgListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/org/list\",\n headers: authHeadersSchema,\n responses: {\n 200: orgListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all accessible orgs for the authenticated user\",\n },\n});\n\nexport type ZeroOrgListContract = typeof zeroOrgListContract;\n","import { z } from \"zod\";\n\n/**\n * Org list item schema\n */\nexport const orgListItemSchema = z.object({\n slug: z.string(),\n role: z.string(),\n});\nexport type OrgListItem = z.infer<typeof orgListItemSchema>;\n\n/**\n * Org list response schema\n */\nexport const orgListResponseSchema = z.object({\n orgs: z.array(orgListItemSchema),\n active: z.string().optional(),\n});\nexport type OrgListResponse = z.infer<typeof orgListResponseSchema>;\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n orgMembersResponseSchema,\n inviteOrgMemberRequestSchema,\n removeOrgMemberRequestSchema,\n updateOrgMemberRoleRequestSchema,\n revokeInvitationRequestSchema,\n membershipRequestActionSchema,\n orgMessageResponseSchema,\n} from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Zero contract for /api/zero/org/members\n * Proxies to /api/org/members\n */\nexport const zeroOrgMembersContract = c.router({\n members: {\n method: \"GET\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n responses: {\n 200: orgMembersResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get org members (zero proxy)\",\n },\n updateRole: {\n method: \"PATCH\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n body: updateOrgMemberRoleRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update a member's role (zero proxy)\",\n },\n removeMember: {\n method: \"DELETE\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n body: removeOrgMemberRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Remove a member from the org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgMembersContract = typeof zeroOrgMembersContract;\n\n/**\n * Zero contract for POST /api/zero/org/invite\n * Proxies to POST /api/org/invite\n */\nexport const zeroOrgInviteContract = c.router({\n invite: {\n method: \"POST\",\n path: \"/api/zero/org/invite\",\n headers: authHeadersSchema,\n body: inviteOrgMemberRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Invite a member to the org (zero proxy)\",\n },\n revoke: {\n method: \"DELETE\",\n path: \"/api/zero/org/invite\",\n headers: authHeadersSchema,\n body: revokeInvitationRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Revoke a pending invitation (zero proxy)\",\n },\n});\n\nexport type ZeroOrgInviteContract = typeof zeroOrgInviteContract;\n\n/**\n * Zero contract for /api/zero/org/membership-requests\n */\nexport const zeroOrgMembershipRequestsContract = c.router({\n accept: {\n method: \"POST\",\n path: \"/api/zero/org/membership-requests\",\n headers: authHeadersSchema,\n body: membershipRequestActionSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Accept a membership request (zero proxy)\",\n },\n reject: {\n method: \"DELETE\",\n path: \"/api/zero/org/membership-requests\",\n headers: authHeadersSchema,\n body: membershipRequestActionSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Reject a membership request (zero proxy)\",\n },\n});\n\nexport type ZeroOrgMembershipRequestsContract =\n typeof zeroOrgMembershipRequestsContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroBillingStatusContract,\n zeroBillingCreditCheckoutContract,\n type BillingStatusResponse,\n} from \"@vm0/api-contracts/contracts/zero-billing\";\n\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function getZeroBillingStatus(): Promise<BillingStatusResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroBillingStatusContract, config);\n\n const result = await client.get({ headers: {} });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to get billing status\");\n}\n\nexport async function createZeroCreditCheckout(body: {\n readonly credits: number;\n readonly successUrl: string;\n readonly cancelUrl: string;\n readonly autoRecharge?: {\n readonly enabled: boolean;\n readonly threshold?: number;\n readonly amount?: number;\n };\n}): Promise<{ readonly url: string }> {\n const config = await getClientConfig();\n const client = initClient(zeroBillingCreditCheckoutContract, config);\n\n const result = await client.create({ body });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to create credit checkout\");\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { adAttributionMetadataSchema } from \"./zero-attribution\";\n\nconst c = initContract();\n\n// ---------------------------------------------------------------------------\n// Response schemas\n// ---------------------------------------------------------------------------\n\nconst autoRechargeSchema = z.object({\n enabled: z.boolean(),\n threshold: z.number().nullable(),\n amount: z.number().nullable(),\n});\n\nconst creditExpirySchema = z.object({\n expiringNextCycle: z.number(),\n nextExpiryDate: z.string().nullable(),\n});\n\nconst creditBreakdownSegmentSchema = z.object({\n category: z.enum([\"plan\", \"free\", \"promotional\", \"payAsYouGo\"]),\n label: z.string(),\n credits: z.number(),\n // Only set on `plan` segments. Lets the UI decide whether a segment\n // represents the current plan or leftover credits from a previous plan\n // without round-tripping through the `label` string.\n tier: z.enum([\"pro\", \"team\"]).optional(),\n});\n\nconst creditGrantSchema = z.object({\n id: z.string(),\n source: z.string(),\n label: z.string(),\n amount: z.number(),\n remaining: z.number(),\n createdAt: z.string(),\n expiresAt: z.string(),\n});\n\nconst scheduledBillingChangeSchema = z.object({\n type: z.enum([\"cancel\", \"downgrade\"]),\n targetTier: z\n .enum([\"limited-free-1\", \"pro-suspend\", \"pro\", \"team\"])\n .nullable(),\n effectiveDate: z.string().nullable(),\n});\n\nconst concurrencySubscriptionSchema = z.object({\n id: z.string(),\n quantity: z.number().int().nonnegative(),\n currentPeriodEnd: z.string().nullable(),\n cancelAtPeriodEnd: z.boolean(),\n});\n\nconst usageAllowanceWindowSchema = z.object({\n kind: z.enum([\"short\", \"weekly\"]),\n windowSeconds: z.number().int().positive(),\n unitLimit: z.number(),\n consumedUnits: z.number(),\n remainingUnits: z.number(),\n startsAt: z.string().nullable(),\n expiresAt: z.string().nullable(),\n});\n\nconst usageAllowanceSchema = z.object({\n windows: z.array(usageAllowanceWindowSchema),\n});\n\nconst billingStatusResponseSchema = z.object({\n tier: z.string(),\n credits: z.number(),\n onboardingPaymentPending: z.boolean(),\n subscriptionStatus: z.string().nullable(),\n currentPeriodEnd: z.string().nullable(),\n cancelAtPeriodEnd: z.boolean(),\n scheduledChange: scheduledBillingChangeSchema.nullable(),\n hasSubscription: z.boolean(),\n autoRecharge: autoRechargeSchema,\n creditExpiry: creditExpirySchema,\n creditBreakdown: z.array(creditBreakdownSegmentSchema),\n creditGrants: z.array(creditGrantSchema),\n concurrencyLimit: z.number().int().nonnegative(),\n concurrencySubscriptions: z.array(concurrencySubscriptionSchema),\n usageAllowance: usageAllowanceSchema.nullable().optional(),\n});\n\nconst checkoutResponseSchema = z.object({\n url: z.string(),\n});\n\nconst checkoutCompleteResponseSchema = z.object({\n completed: z.boolean(),\n});\n\nconst redeemCodeResponseSchema = z.object({\n redeemed: z.literal(true),\n});\n\nconst portalResponseSchema = z.object({\n url: z.string(),\n});\n\nconst redeemResponseSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"ready\"),\n checkoutUrl: z.string().url(),\n }),\n z.object({\n status: z.literal(\"already_granted\"),\n }),\n z.object({\n status: z.literal(\"processing\"),\n }),\n z.object({\n status: z.literal(\"error\"),\n reason: z.enum([\n \"campaign_misconfigured\",\n \"admin_required\",\n \"billing_unavailable\",\n ]),\n }),\n]);\n\n// ---------------------------------------------------------------------------\n// Request schemas\n// ---------------------------------------------------------------------------\n\nconst checkoutRequestSchema = z.object({\n tier: z.enum([\"pro\", \"team\"]),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n trialDays: z.literal(7).optional(),\n adAttribution: adAttributionMetadataSchema.optional(),\n});\n\nconst checkoutCompleteRequestSchema = z.object({\n sessionId: z.string().min(1),\n});\n\nconst concurrencyCheckoutRequestSchema = z.object({\n quantity: z.number().int().min(1).max(1000),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n});\n\nconst concurrencySubscriptionCancelResponseSchema = z.object({\n success: z.literal(true),\n currentPeriodEnd: z.string().nullable(),\n});\n\nconst concurrencySubscriptionRestoreResponseSchema = z.object({\n success: z.literal(true),\n});\n\nconst creditCheckoutRequestSchema = z\n .object({\n credits: z.number().int().min(1000).max(10_000_000),\n customAmount: z.boolean().optional(),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n autoRecharge: z\n .object({\n enabled: z.boolean(),\n threshold: z.number().int().positive().max(10_000_000).optional(),\n amount: z.number().int().min(1000).max(10_000_000).optional(),\n })\n .optional(),\n })\n .refine(\n (data) => {\n return data.customAmount !== true || data.autoRecharge === undefined;\n },\n { message: \"auto-recharge is not supported for custom amount checkout\" },\n )\n .refine(\n (data) => {\n return (\n data.autoRecharge?.enabled !== true ||\n data.autoRecharge.threshold === undefined ||\n data.autoRecharge.amount === undefined ||\n data.autoRecharge.threshold < data.autoRecharge.amount\n );\n },\n { message: \"threshold must be less than amount to avoid recharge loops\" },\n );\n\nconst portalRequestSchema = z.object({\n returnUrl: z.string().url(),\n});\n\nconst autoRechargeUpdateRequestSchema = z\n .object({\n enabled: z.boolean(),\n threshold: z.number().int().positive().max(10_000_000).optional(),\n amount: z.number().int().min(1000).max(10_000_000).optional(),\n })\n .refine(\n (data) => {\n return (\n !data.enabled ||\n data.threshold === undefined ||\n data.amount === undefined ||\n data.threshold < data.amount\n );\n },\n { message: \"threshold must be less than amount to avoid recharge loops\" },\n );\n\nconst redeemRequestSchema = z.object({\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n});\n\nconst redeemCodeRequestSchema = z.object({\n code: z.string().trim().min(1),\n});\n\n// ---------------------------------------------------------------------------\n// Contracts\n// ---------------------------------------------------------------------------\n\n/**\n * Zero contract for GET /api/zero/billing/status\n */\nexport const zeroBillingStatusContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/status\",\n headers: authHeadersSchema,\n responses: {\n 200: billingStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get billing status for current org\",\n },\n});\n\nexport type ZeroBillingStatusContract = typeof zeroBillingStatusContract;\n\n/**\n * Zero contract for POST /api/zero/billing/checkout\n */\nexport const zeroBillingCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/checkout\",\n headers: authHeadersSchema,\n body: checkoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session\",\n },\n complete: {\n method: \"POST\",\n path: \"/api/zero/billing/checkout/complete\",\n headers: authHeadersSchema,\n body: checkoutCompleteRequestSchema,\n responses: {\n 200: checkoutCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Complete Stripe checkout session\",\n },\n});\n\nexport type ZeroBillingCheckoutContract = typeof zeroBillingCheckoutContract;\n\n/**\n * Zero contract for POST /api/zero/billing/concurrency-checkout\n */\nexport const zeroBillingConcurrencyCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/concurrency-checkout\",\n headers: authHeadersSchema,\n body: concurrencyCheckoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session for concurrency add-on\",\n },\n});\n\nexport type ZeroBillingConcurrencyCheckoutContract =\n typeof zeroBillingConcurrencyCheckoutContract;\n\n/**\n * Zero contract for concurrency subscriptions.\n */\nexport const zeroBillingConcurrencySubscriptionContract = c.router({\n cancel: {\n method: \"POST\",\n path: \"/api/zero/billing/concurrency-subscriptions/:subscriptionId/cancel\",\n pathParams: z.object({\n subscriptionId: z.string().min(1),\n }),\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: concurrencySubscriptionCancelResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Cancel a concurrency add-on subscription at period end\",\n },\n restore: {\n method: \"POST\",\n path: \"/api/zero/billing/concurrency-subscriptions/:subscriptionId/restore\",\n pathParams: z.object({\n subscriptionId: z.string().min(1),\n }),\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: concurrencySubscriptionRestoreResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Restore a concurrency add-on subscription\",\n },\n});\n\nexport type ZeroBillingConcurrencySubscriptionContract =\n typeof zeroBillingConcurrencySubscriptionContract;\n\n/**\n * Zero contract for POST /api/zero/billing/credit-checkout\n */\nexport const zeroBillingCreditCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/credit-checkout\",\n headers: authHeadersSchema,\n body: creditCheckoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session for credits\",\n },\n});\n\nexport type ZeroBillingCreditCheckoutContract =\n typeof zeroBillingCreditCheckoutContract;\n\n/**\n * Zero contract for POST /api/zero/billing/portal\n */\nexport const zeroBillingPortalContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/portal\",\n headers: authHeadersSchema,\n body: portalRequestSchema,\n responses: {\n 200: portalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe billing portal session\",\n },\n});\n\nexport type ZeroBillingPortalContract = typeof zeroBillingPortalContract;\n\n/**\n * Zero contract for /api/zero/billing/auto-recharge\n */\nexport const zeroBillingAutoRechargeContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n responses: {\n 200: autoRechargeSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get auto-recharge configuration\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n body: autoRechargeUpdateRequestSchema,\n responses: {\n 200: autoRechargeSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update auto-recharge configuration\",\n },\n});\n\nexport type ZeroBillingAutoRechargeContract =\n typeof zeroBillingAutoRechargeContract;\n\n/**\n * Zero contract for GET /api/zero/billing/invoices\n */\nconst invoiceSchema = z.object({\n id: z.string(),\n number: z.string().nullable(),\n date: z.number(),\n amount: z.number(),\n status: z.string().nullable(),\n hostedInvoiceUrl: z.string().nullable(),\n});\n\nconst billingInvoicesResponseSchema = z.object({\n invoices: z.array(invoiceSchema),\n});\n\nexport const zeroBillingInvoicesContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/invoices\",\n headers: authHeadersSchema,\n responses: {\n 200: billingInvoicesResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get invoices for current org\",\n },\n});\n\nexport type ZeroBillingInvoicesContract = typeof zeroBillingInvoicesContract;\n\n// ---------------------------------------------------------------------------\n// Downgrade\n// ---------------------------------------------------------------------------\n\nconst downgradeRequestSchema = z.object({\n targetTier: z.enum([\"limited-free-1\", \"pro-suspend\", \"pro\"]),\n returnUrl: z.string().url().optional(),\n});\n\nconst downgradeResponseSchema = z.union([\n z.object({\n success: z.boolean(),\n effectiveDate: z.string().nullable(),\n }),\n z.object({\n status: z.literal(\"payment_method_required\"),\n checkoutUrl: z.string().url(),\n }),\n]);\n\nconst restoreRequestSchema = z.object({\n returnUrl: z.string().url().optional(),\n});\n\nconst restoreResponseSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"restored\"),\n }),\n z.object({\n status: z.literal(\"payment_method_required\"),\n checkoutUrl: z.string().url(),\n }),\n]);\n\n/**\n * Zero contract for POST /api/zero/billing/downgrade\n */\nexport const zeroBillingDowngradeContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/downgrade\",\n headers: authHeadersSchema,\n body: downgradeRequestSchema,\n responses: {\n 200: downgradeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Downgrade subscription to a lower tier\",\n },\n});\n\nexport type ZeroBillingDowngradeContract = typeof zeroBillingDowngradeContract;\n\n/**\n * Zero contract for POST /api/zero/billing/restore\n */\nexport const zeroBillingRestoreContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/restore\",\n headers: authHeadersSchema,\n body: restoreRequestSchema,\n responses: {\n 200: restoreResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Restore a subscription scheduled for cancellation\",\n },\n});\n\nexport type ZeroBillingRestoreContract = typeof zeroBillingRestoreContract;\n\n/**\n * Zero contract for POST /api/zero/billing/redeem/:campaign\n *\n * One-time campaign redemption. The handler validates the campaign whitelist,\n * creates (or resumes) a Stripe Checkout session, and returns a discriminated\n * union so a single landing page on the platform can render the appropriate\n * state (ready / already_granted / processing / error).\n */\nexport const zeroBillingRedeemContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/redeem/:campaign\",\n pathParams: z.object({\n campaign: z.string(),\n }),\n headers: authHeadersSchema,\n body: redeemRequestSchema,\n responses: {\n 200: redeemResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Redeem a one-time campaign\",\n },\n});\n\nexport type ZeroBillingRedeemContract = typeof zeroBillingRedeemContract;\n\n/**\n * Zero contract for POST /api/zero/billing/redeem-code\n *\n * Proxies onboarding invite codes to the Atom redeem endpoint. The platform\n * waits for billing status to update through realtime before completing\n * onboarding.\n */\nexport const zeroBillingRedeemCodeContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/redeem-code\",\n headers: authHeadersSchema,\n body: redeemCodeRequestSchema,\n responses: {\n 200: redeemCodeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Redeem an onboarding billing code\",\n },\n});\n\nexport type ZeroBillingRedeemCodeContract =\n typeof zeroBillingRedeemCodeContract;\n\n// Inferred types from Zod schemas\nexport type BillingStatusResponse = z.infer<typeof billingStatusResponseSchema>;\nexport type AutoRechargeConfig = z.infer<typeof autoRechargeSchema>;\nexport type CheckoutResponse = z.infer<typeof checkoutResponseSchema>;\nexport type RedeemCodeResponse = z.infer<typeof redeemCodeResponseSchema>;\nexport type ConcurrencyCheckoutRequest = z.infer<\n typeof concurrencyCheckoutRequestSchema\n>;\nexport type CreditCheckoutRequest = z.infer<typeof creditCheckoutRequestSchema>;\nexport type PortalResponse = z.infer<typeof portalResponseSchema>;\nexport type BillingInvoice = z.infer<typeof invoiceSchema>;\nexport type BillingInvoicesResponse = z.infer<\n typeof billingInvoicesResponseSchema\n>;\nexport type DowngradeResponse = z.infer<typeof downgradeResponseSchema>;\nexport type RestoreResponse = z.infer<typeof restoreResponseSchema>;\nexport type RedeemRequest = z.infer<typeof redeemRequestSchema>;\nexport type RedeemCodeRequest = z.infer<typeof redeemCodeRequestSchema>;\nexport type RedeemResponse = z.infer<typeof redeemResponseSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n// Canonical acquisition source-type taxonomy. Single source of truth shared by\n// the web classifier (apps/web), the app capture layer (apps/platform), and the\n// signup contract below, so the enum can't drift across the three.\nexport const SOURCE_TYPES = [\n \"paid\",\n \"organic_search\",\n \"referral\",\n \"direct\",\n \"internal\",\n \"unknown\",\n] as const;\n\nexport type SourceType = (typeof SOURCE_TYPES)[number];\n\n// First-party, root-domain (.vm0.ai) cookie carrying first-touch acquisition\n// attribution across the www.vm0.ai -> app.vm0.ai subdomain hop. Written by the\n// marketing site (consent-gated), read by the app on first load.\nexport const ACQUISITION_ATTRIBUTION_COOKIE = \"vm0_attribution\";\n\nexport const adAttributionMetadataSchema = z\n .object({\n source_type: z.enum(SOURCE_TYPES).optional(),\n referrer_domain: z.string().min(1).max(253).optional(),\n landing_host: z.string().min(1).max(253).optional(),\n landing_path: z.string().min(1).max(500).optional(),\n vm0_source: z.string().min(1).max(100).optional(),\n utm_source: z.string().min(1).max(100).optional(),\n utm_medium: z.string().min(1).max(100).optional(),\n utm_campaign: z.string().min(1).max(200).optional(),\n utm_content: z.string().min(1).max(200).optional(),\n utm_term: z.string().min(1).max(200).optional(),\n vm0_experiment: z.string().min(1).max(100).optional(),\n vm0_variant: z.string().min(1).max(100).optional(),\n lp_variant: z.string().min(1).max(100).optional(),\n gclid: z.string().min(1).max(200).optional(),\n gbraid: z.string().min(1).max(200).optional(),\n wbraid: z.string().min(1).max(200).optional(),\n gclid_present: z.literal(\"true\").optional(),\n gbraid_present: z.literal(\"true\").optional(),\n wbraid_present: z.literal(\"true\").optional(),\n })\n .strict();\n\nconst recordSignupAttributionRequestSchema = z.object({\n attribution: adAttributionMetadataSchema,\n});\n\nconst recordSignupAttributionResponseSchema = z.object({\n recorded: z.boolean(),\n});\n\nexport const zeroAttributionContract = c.router({\n recordSignup: {\n method: \"POST\",\n path: \"/api/zero/attribution/signup\",\n headers: authHeadersSchema,\n body: recordSignupAttributionRequestSchema,\n responses: {\n 200: recordSignupAttributionResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Record first-touch signup attribution on the current user\",\n },\n});\n\nexport type AdAttributionMetadata = z.infer<typeof adAttributionMetadataSchema>;\nexport type RecordSignupAttributionRequest = z.infer<\n typeof recordSignupAttributionRequestSchema\n>;\nexport type RecordSignupAttributionResponse = z.infer<\n typeof recordSignupAttributionResponseSchema\n>;\nexport type ZeroAttributionContract = typeof zeroAttributionContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport { zeroModelPoliciesMainContract } from \"@vm0/api-contracts/contracts/zero-model-policies\";\nimport type { OrgModelPoliciesResponse } from \"@vm0/api-contracts/contracts/model-providers\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List the current organization's model-first policies.\n */\nexport async function listZeroModelPolicies(): Promise<OrgModelPoliciesResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelPoliciesMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list model policies\");\n}\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n orgModelPoliciesResponseSchema,\n updateOrgModelPoliciesRequestSchema,\n} from \"./model-providers\";\n\nconst c = initContract();\n\nexport const zeroModelPoliciesMainContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/model-policies\",\n headers: authHeadersSchema,\n responses: {\n 200: orgModelPoliciesResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List org model-first policies\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/model-policies\",\n headers: authHeadersSchema,\n body: updateOrgModelPoliciesRequestSchema,\n responses: {\n 200: orgModelPoliciesResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update org model-first policies\",\n },\n});\n\nexport type ZeroModelPoliciesMainContract =\n typeof zeroModelPoliciesMainContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst ORG_SLUG_HASH_LENGTH = 8;\nconst RANDOM_SLUG_SUFFIX_LENGTH = 8;\nconst PUBLIC_SLUG_SEPARATOR_LENGTH = 2;\nconst MAX_HOSTED_SITE_PUBLIC_SLUG_LENGTH = 96;\n\nexport const hostedArtifactKindSchema = z.enum([\n \"hosted-site\",\n \"presentation-html\",\n]);\nexport type HostedArtifactKind = z.infer<typeof hostedArtifactKindSchema>;\n\nexport const hostedSiteSlugSchema = z\n .string()\n .trim()\n .min(3)\n .max(63)\n .regex(\n /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,\n \"Site slug must use lowercase letters, numbers, and hyphens, and must start and end with a letter or number\",\n );\n\nexport const hostedSiteSlugSuffixSchema = z\n .string()\n .trim()\n .min(3)\n .max(32)\n .regex(\n /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,\n \"Site slug suffix must use lowercase letters, numbers, and hyphens, and must start and end with a letter or number\",\n );\n\nexport const hostedSitePublicSlugSchema = z\n .string()\n .trim()\n .min(3)\n .max(MAX_HOSTED_SITE_PUBLIC_SLUG_LENGTH)\n .regex(\n /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,\n \"Hosted site public slug must use lowercase letters, numbers, and hyphens, and must start and end with a letter or number\",\n );\n\nexport const hostedSiteFileSchema = z.object({\n path: z.string().min(1).max(1024).regex(/^\\//, \"File path must start with /\"),\n size: z.number().int().nonnegative(),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n contentType: z.string().min(1).max(200),\n immutable: z.boolean().optional(),\n});\n\nexport const hostedSiteDownloadFileSchema = hostedSiteFileSchema.extend({\n downloadUrl: z.string().url(),\n});\n\nexport const hostedSitePrepareRequestSchema = z\n .object({\n site: hostedSiteSlugSchema,\n slugSuffix: hostedSiteSlugSuffixSchema.optional(),\n artifactKind: hostedArtifactKindSchema.default(\"hosted-site\"),\n spaFallback: z.boolean().default(false),\n files: z.array(hostedSiteFileSchema).min(1).max(5000),\n })\n .superRefine((value, ctx) => {\n const suffixLength = value.slugSuffix?.length ?? RANDOM_SLUG_SUFFIX_LENGTH;\n const publicSlugLength =\n value.site.length +\n ORG_SLUG_HASH_LENGTH +\n suffixLength +\n PUBLIC_SLUG_SEPARATOR_LENGTH;\n\n if (publicSlugLength > MAX_HOSTED_SITE_PUBLIC_SLUG_LENGTH) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: value.slugSuffix ? [\"slugSuffix\"] : [\"site\"],\n message:\n \"Hosted site public slug must be 96 characters or fewer; shorten site or slug suffix\",\n });\n }\n });\n\nexport const hostedSiteUploadSchema = z.object({\n path: z.string(),\n uploadUrl: z.string().url(),\n});\n\nexport const hostedSiteRedeployPresentationHtmlRequestSchema = z.object({\n url: z.string().url(),\n html: z.string().min(1),\n});\n\nexport const hostedSiteRedeployHtmlRequestSchema = z.object({\n url: z.string().url(),\n html: z.string().min(1),\n});\n\nexport const presentationSpeakerNotesPatchSchema = z.object({\n kind: z.literal(\"presentation-speaker-notes-patch\"),\n version: z.literal(1),\n slides: z\n .array(\n z.object({\n slideId: z.string().min(1),\n speakerNotes: z.string().min(1),\n }),\n )\n .max(500),\n});\n\nexport const htmlDomEditCommentSchema = z.object({\n id: z.string().min(1),\n targetNodeIds: z.array(z.string().min(1)).min(1).max(20),\n comment: z.string().min(1),\n});\n\nconst createHtmlEditDraftBaseRequestSchema = z.object({\n comments: z.array(htmlDomEditCommentSchema).min(1).max(100),\n});\n\nexport const createHtmlEditDraftRequestSchema = z.union([\n createHtmlEditDraftBaseRequestSchema.extend({\n html: z.string().min(1).max(500_000),\n htmlSnapshotUrl: z.never().optional(),\n }),\n createHtmlEditDraftBaseRequestSchema.extend({\n html: z.never().optional(),\n htmlSnapshotUrl: z.string().url(),\n }),\n]);\n\nexport const htmlEditDraftResponseSchema = z.object({\n kind: z.literal(\"html-edit-draft\"),\n version: z.literal(1),\n html: z.string().min(1),\n});\n\nexport const generatePresentationSpeakerNotesRequestSchema = z.object({\n html: z.string().min(1).max(500_000),\n mode: z.literal(\"fill-empty\"),\n});\n\nexport const hostedSitePrepareResponseSchema = z.object({\n siteId: z.string().uuid(),\n deploymentId: z.string().uuid(),\n publicSlug: z.string(),\n url: z.string().url(),\n uploads: z.array(hostedSiteUploadSchema),\n});\n\nexport const hostedSiteCompleteResponseSchema = z.object({\n siteId: z.string().uuid(),\n deploymentId: z.string().uuid(),\n publicSlug: z.string(),\n url: z.string().url(),\n status: z.literal(\"ready\"),\n});\n\nexport const hostedSiteFilesResponseSchema = z.object({\n siteId: z.string().uuid(),\n deploymentId: z.string().uuid(),\n publicSlug: hostedSitePublicSlugSchema,\n url: z.string().url(),\n fileCount: z.number().int().nonnegative(),\n size: z.number().int().nonnegative(),\n files: z.array(hostedSiteDownloadFileSchema),\n});\n\nexport const zeroHostContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/zero/host/deployments/prepare\",\n headers: authHeadersSchema,\n body: hostedSitePrepareRequestSchema,\n responses: {\n 200: hostedSitePrepareResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Prepare a static hosted-site deployment\",\n },\n complete: {\n method: \"POST\",\n path: \"/api/zero/host/deployments/:deploymentId/complete\",\n pathParams: z.object({\n deploymentId: z.string().uuid(),\n }),\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: hostedSiteCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Complete a static hosted-site deployment\",\n },\n files: {\n method: \"GET\",\n path: \"/api/zero/host/sites/:publicSlug/files\",\n pathParams: z.object({\n publicSlug: hostedSitePublicSlugSchema,\n }),\n headers: authHeadersSchema,\n responses: {\n 200: hostedSiteFilesResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List active hosted-site files for an owned site\",\n },\n redeployPresentationHtml: {\n method: \"POST\",\n path: \"/api/zero/host/presentation-html/redeploy\",\n headers: authHeadersSchema,\n body: hostedSiteRedeployPresentationHtmlRequestSchema,\n responses: {\n 200: hostedSiteCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Redeploy an existing presentation HTML hosted site\",\n },\n redeployHtml: {\n method: \"POST\",\n path: \"/api/zero/host/html/redeploy\",\n headers: authHeadersSchema,\n body: hostedSiteRedeployHtmlRequestSchema,\n responses: {\n 200: hostedSiteCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Redeploy an existing HTML hosted site\",\n },\n generatePresentationSpeakerNotes: {\n method: \"POST\",\n path: \"/api/zero/host/presentation-html/speaker-notes\",\n headers: authHeadersSchema,\n body: generatePresentationSpeakerNotesRequestSchema,\n responses: {\n 200: presentationSpeakerNotesPatchSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Generate speaker notes for an existing presentation HTML\",\n },\n createHtmlEditDraft: {\n method: \"POST\",\n path: \"/api/zero/host/html-edit-draft\",\n headers: authHeadersSchema,\n body: createHtmlEditDraftRequestSchema,\n responses: {\n 200: htmlEditDraftResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create an edited HTML draft from DOM comments\",\n },\n});\n\nexport type ZeroHostContract = typeof zeroHostContract;\nexport type HostedSitePrepareRequest = z.infer<\n typeof hostedSitePrepareRequestSchema\n>;\nexport type HostedSiteRedeployPresentationHtmlRequest = z.infer<\n typeof hostedSiteRedeployPresentationHtmlRequestSchema\n>;\nexport type HostedSiteRedeployHtmlRequest = z.infer<\n typeof hostedSiteRedeployHtmlRequestSchema\n>;\nexport type GeneratePresentationSpeakerNotesRequest = z.infer<\n typeof generatePresentationSpeakerNotesRequestSchema\n>;\nexport type PresentationSpeakerNotesPatch = z.infer<\n typeof presentationSpeakerNotesPatchSchema\n>;\nexport type CreateHtmlEditDraftRequest = z.infer<\n typeof createHtmlEditDraftRequestSchema\n>;\nexport type HtmlEditDraftResponse = z.infer<typeof htmlEditDraftResponseSchema>;\nexport type HostedSitePrepareResponse = z.infer<\n typeof hostedSitePrepareResponseSchema\n>;\nexport type HostedSiteCompleteResponse = z.infer<\n typeof hostedSiteCompleteResponseSchema\n>;\nexport type HostedSiteFilesResponse = z.infer<\n typeof hostedSiteFilesResponseSchema\n>;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroAgentsMainContract,\n zeroAgentsByIdContract,\n zeroAgentInstructionsContract,\n type ZeroAgentResponse,\n type ZeroAgentRequest,\n type ZeroAgentInstructionsResponse,\n} from \"@vm0/api-contracts/contracts/zero-agents\";\nimport {\n zeroUserPermissionGrantsContract,\n type UserPermissionGrantResponse,\n} from \"@vm0/api-contracts/contracts/zero-user-permission-grants\";\nimport { zeroUserConnectorsContract } from \"@vm0/api-contracts/contracts/user-connectors\";\nimport { zeroAgentCustomConnectorsContract } from \"@vm0/api-contracts/contracts/zero-agent-custom-connectors\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function createZeroAgent(\n body: ZeroAgentRequest,\n): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsMainContract, config);\n const result = await client.create({ body });\n if (result.status === 201) return result.body;\n handleError(result, \"Failed to create zero agent\");\n}\n\nexport async function listZeroAgents(): Promise<ZeroAgentResponse[]> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsMainContract, config);\n const result = await client.list({ headers: {} });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to list zero agents\");\n}\n\nexport async function getZeroAgent(id: string): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Zero agent \"${id}\" not found`);\n}\n\nexport async function updateZeroAgent(\n id: string,\n body: ZeroAgentRequest,\n): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.update({ params: { id }, body });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to update zero agent \"${id}\"`);\n}\n\nexport async function deleteZeroAgent(id: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.delete({ params: { id } });\n if (result.status === 204) return;\n handleError(result, `Zero agent \"${id}\" not found`);\n}\n\nexport async function getZeroAgentInstructions(\n id: string,\n): Promise<ZeroAgentInstructionsResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentInstructionsContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to get instructions for zero agent \"${id}\"`);\n}\n\nexport async function getZeroAgentUserConnectors(\n id: string,\n): Promise<string[]> {\n const config = await getClientConfig();\n const client = initClient(zeroUserConnectorsContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body.enabledTypes;\n handleError(\n result,\n `Failed to get connector permissions for zero agent \"${id}\"`,\n );\n}\n\nexport async function getZeroAgentCustomConnectors(\n id: string,\n): Promise<string[]> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentCustomConnectorsContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body.enabledIds;\n handleError(\n result,\n `Failed to get custom connector permissions for zero agent \"${id}\"`,\n );\n}\n\nexport async function listZeroUserPermissionGrants(\n agentId: string,\n): Promise<UserPermissionGrantResponse[]> {\n const config = await getClientConfig();\n const client = initClient(zeroUserPermissionGrantsContract, config);\n const result = await client.list({ query: { agentId } });\n if (result.status === 200) return result.body;\n handleError(\n result,\n `Failed to get permission grants for zero agent \"${agentId}\"`,\n );\n}\n\nexport async function updateZeroAgentInstructions(\n id: string,\n content: string,\n): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentInstructionsContract, config);\n const result = await client.update({\n params: { id },\n body: { content },\n });\n if (result.status === 200) return;\n handleError(result, `Failed to update instructions for zero agent \"${id}\"`);\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { persistedAttachmentSchema } from \"./chat-threads\";\n\nconst c = initContract();\n\nexport const zeroAgentVisibilitySchema = z.enum([\"public\", \"private\"]);\nexport type ZeroAgentVisibility = z.infer<typeof zeroAgentVisibilitySchema>;\n\n/**\n * Zero agent response schema\n */\nexport const zeroAgentResponseSchema = z.object({\n agentId: z.string(),\n ownerId: z.string(),\n description: z.string().nullable(),\n displayName: z.string().nullable(),\n sound: z.string().nullable(),\n avatarUrl: z.string().nullable(),\n modelProviderId: z.string().uuid().nullable().default(null),\n selectedModel: z.string().nullable().default(null),\n preferPersonalProvider: z.boolean().default(false),\n visibility: zeroAgentVisibilitySchema.optional(),\n});\n\n/**\n * Create/update zero agent request schema\n */\nexport const zeroAgentRequestSchema = z.object({\n description: z.string().optional(),\n displayName: z.string().optional(),\n sound: z.string().optional(),\n avatarUrl: z.string().optional(),\n visibility: zeroAgentVisibilitySchema.optional(),\n});\n\n/**\n * Partial metadata update request schema (for PATCH)\n */\nexport const zeroAgentMetadataRequestSchema = z.object({\n displayName: z.string().optional(),\n description: z.string().optional(),\n sound: z.string().optional(),\n avatarUrl: z.string().nullable().optional(),\n visibility: zeroAgentVisibilitySchema.optional(),\n});\n\n/**\n * Zero agent instructions response schema\n */\nexport const zeroAgentInstructionsResponseSchema = z.object({\n content: z.string().nullable(),\n filename: z.string().nullable(),\n});\n\n/**\n * Zero agent instructions update request schema\n */\nexport const zeroAgentInstructionsRequestSchema = z.object({\n content: z.string(),\n});\n\nexport const zeroAgentDraftResponseSchema = z.object({\n draftContent: z.string().nullable(),\n draftAttachments: z.array(persistedAttachmentSchema).nullable(),\n});\n\nexport const zeroAgentDraftRequestSchema = z.object({\n draftContent: z.string().nullable().optional(),\n draftAttachments: z.array(persistedAttachmentSchema).nullable().optional(),\n});\n\n/**\n * Contract for GET/POST /api/zero/agents (list/create agents)\n */\nexport const zeroAgentsMainContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/agents\",\n headers: authHeadersSchema,\n body: zeroAgentRequestSchema,\n responses: {\n 201: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Create zero agent\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/agents\",\n headers: authHeadersSchema,\n responses: {\n 200: z.array(zeroAgentResponseSchema),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List zero agents\",\n },\n});\n\n/**\n * Contract for GET/PUT/PATCH/DELETE /api/zero/agents/:id\n */\nexport const zeroAgentsByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get zero agent by id\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: zeroAgentRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Update zero agent\",\n },\n updateMetadata: {\n method: \"PATCH\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: zeroAgentMetadataRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Update zero agent metadata\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Delete zero agent by id\",\n },\n});\n\n/**\n * Contract for GET/PUT /api/zero/agents/:id/instructions\n */\nexport const zeroAgentInstructionsContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: zeroAgentInstructionsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get zero agent instructions\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: zeroAgentInstructionsRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Update zero agent instructions\",\n },\n});\n\nexport const zeroAgentDraftContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id/draft\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: zeroAgentDraftResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get zero agent draft\",\n },\n patch: {\n method: \"PATCH\",\n path: \"/api/zero/agents/:id/draft\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: zeroAgentDraftRequestSchema,\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update zero agent draft\",\n },\n});\n\n// Export types\nexport type ZeroAgentResponse = z.infer<typeof zeroAgentResponseSchema>;\nexport type ZeroAgentRequest = z.infer<typeof zeroAgentRequestSchema>;\nexport type ZeroAgentMetadataRequest = z.infer<\n typeof zeroAgentMetadataRequestSchema\n>;\nexport type ZeroAgentInstructionsResponse = z.infer<\n typeof zeroAgentInstructionsResponseSchema\n>;\nexport type ZeroAgentInstructionsRequest = z.infer<\n typeof zeroAgentInstructionsRequestSchema\n>;\nexport type ZeroAgentDraftResponse = z.infer<\n typeof zeroAgentDraftResponseSchema\n>;\nexport type ZeroAgentDraftRequest = z.infer<typeof zeroAgentDraftRequestSchema>;\n\nexport type ZeroAgentsMainContract = typeof zeroAgentsMainContract;\nexport type ZeroAgentsByIdContract = typeof zeroAgentsByIdContract;\nexport type ZeroAgentInstructionsContract =\n typeof zeroAgentInstructionsContract;\nexport type ZeroAgentDraftContract = typeof zeroAgentDraftContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { hostedArtifactKindSchema } from \"./zero-host\";\nimport { runStatusSchema } from \"./runs\";\nimport { zeroGoalEventSchema } from \"./zero-goals\";\nimport { triggerSourceSchema } from \"./logs\";\nimport { isSupportedRunModel } from \"./model-providers\";\n\nconst c = initContract();\nexport const MODEL_FIRST_SELECTION_PROVIDER_ID =\n \"00000000-0000-4000-8000-000000000000\";\n\n/**\n * File attachment metadata stored alongside user messages.\n * The `id` is the attachment id — URLs are resolved at query time.\n */\nconst attachFileSchema = z.object({\n id: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number(),\n});\n\n/**\n * Attach file returned to the frontend with a resolved URL.\n * `url` is the public artifact CDN URL; consumers may render, cache, or share\n * it freely.\n */\nconst resolvedAttachFileSchema = attachFileSchema.extend({\n url: z.string(),\n});\n\nconst chatThreadArtifactGoogleDriveSyncSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"synced\"),\n id: z.string(),\n name: z.string(),\n webViewLink: z.string().nullable(),\n }),\n z.object({ status: z.literal(\"not_synced\") }),\n z.object({ status: z.literal(\"disconnected\") }),\n z.object({ status: z.literal(\"unknown\") }),\n]);\n\nconst chatThreadArtifactFileSchema = resolvedAttachFileSchema.extend({\n createdAt: z.string(),\n artifactKind: hostedArtifactKindSchema.optional(),\n googleDriveSync: chatThreadArtifactGoogleDriveSyncSchema.optional(),\n});\n\nconst chatThreadArtifactRunSchema = z.object({\n runId: z.string(),\n files: z.array(chatThreadArtifactFileSchema),\n});\n\nconst artifactItemSchema = z.object({\n artifactItemId: z.string(),\n threadId: z.string(),\n runId: z.string(),\n fileId: z.string(),\n agentId: z.string(),\n agentName: z.string().nullable().optional(),\n agentAvatarUrl: z.string().nullable().optional(),\n threadTitle: z.string().nullable().optional(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().default(0),\n url: z.string(),\n previewImageUrl: z.string().optional(),\n createdAt: z.string(),\n artifactKind: hostedArtifactKindSchema.optional(),\n googleDriveSync: chatThreadArtifactGoogleDriveSyncSchema.optional(),\n isFavorited: z.boolean().optional(),\n});\n\n/**\n * Keyset pagination for the artifacts list. Both fields are optional so\n * un-paginated callers (older frontend bundles) still get a valid first page.\n * `cursor` is an opaque token returned as `nextCursor` from a previous page.\n */\nconst artifactsListQuerySchema = z.object({\n limit: z.coerce.number().int().positive().max(10_000).optional(),\n cursor: z.string().optional(),\n});\n\nconst artifactsListResponseSchema = z.object({\n artifacts: z.array(artifactItemSchema),\n /**\n * True when more artifacts exist beyond this page. Retained for backward\n * compatibility with older frontend bundles that read it; new clients follow\n * `nextCursor` instead.\n */\n truncated: z.boolean(),\n /**\n * Opaque cursor for the next page, or null when this is the last page.\n */\n nextCursor: z.string().nullable(),\n});\n\nconst artifactFavoriteBodySchema = z.object({\n artifactUrl: z.string().min(1),\n});\n\nconst htmlArtifactEditSnapshotQuerySchema = z.object({\n url: z.string().url(),\n});\n\nconst htmlArtifactEditSnapshotUpsertSchema = z.object({\n url: z.string().url(),\n html: z.string().min(1),\n});\n\nconst htmlArtifactEditSnapshotSchema = z.object({\n artifactUrl: z.string().url(),\n snapshotUrl: z.string().url(),\n updatedAt: z.string(),\n});\n\n/**\n * Attachment metadata persisted in chat_threads.draft_attachments.\n *\n * `url` is the public artifact CDN URL.\n * Historically this stored a 7-day presigned URL that could silently expire\n * while drafts sat in the DB; the public artifact URL removes that footgun.\n */\nconst persistedAttachmentSchema = z.object({\n id: z.string(),\n url: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number(),\n});\n\n/**\n * Per-agent unread snapshot. `unreadAt` is the creation time of the latest\n * run-finish marker — the one that made the thread unread.\n */\nconst chatThreadUnreadsSchema = z.object({\n unreads: z.array(\n z.object({\n threadId: z.string(),\n unreadAt: z.string(),\n }),\n ),\n});\n\nconst chatThreadUnreadAgentsSchema = z.object({\n agentIds: z.array(z.string()),\n});\n\nconst chatThreadEventIdSchema = z.string().uuid();\nconst codexServiceTierSchema = z.enum([\"fast\"]);\n\nconst chatThreadListItemSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n /**\n * Owning agent snapshot emitted by the server for every list row.\n */\n agent: z.object({\n id: z.string(),\n avatarUrl: z.string().nullable(),\n }),\n createdAt: z.string(),\n updatedAt: z.string(),\n /**\n * True when the thread has at least one non-terminal run\n * (queued / pending / running). Drives the sidebar running indicator,\n * which is mutually exclusive with the unread dot.\n */\n running: z.boolean(),\n /**\n * ISO timestamp at which the user pinned this thread. Null/undefined means\n * unpinned. Pinned threads sort above unpinned in the sidebar; both groups\n * keep recency order. Optional for back-compat with fixtures that predate\n * the field.\n */\n pinnedAt: z.string().nullable().optional(),\n /**\n * ISO timestamp at which the user manually renamed this thread. Null/undefined\n * means never renamed. When set, automated title generation is suppressed.\n * Optional for back-compat with fixtures that predate the field.\n */\n renamedAt: z.string().nullable().optional(),\n});\n\nconst chatThreadSnapshotProjectionSchema = z.object({\n id: z.string().uuid(),\n agentId: z.string().uuid(),\n title: z.string().nullable(),\n sortAt: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n pinnedAt: z.string().nullable(),\n renamedAt: z.string().nullable(),\n selectedModel: z.string().nullable().default(null),\n});\n\nconst chatThreadEventSchema = z.object({\n id: chatThreadEventIdSchema,\n kind: z.enum([\n \"created\",\n \"renamed\",\n \"deleted\",\n \"pinned\",\n \"unpinned\",\n \"model_selection_updated\",\n \"sort_touched\",\n ]),\n chatThreadId: z.string().uuid(),\n agentId: z.string().uuid(),\n title: z.string().nullable(),\n selectedModel: z.string().nullable().default(null),\n createdAt: z.string(),\n});\n\nconst chatMessageUsageProviderBreakdownSchema = z.object({\n provider: z.string(),\n credits: z.number().int().nonnegative(),\n});\n\nconst chatMessageUsageKindBreakdownSchema = z.object({\n kind: z.string(),\n credits: z.number().int().nonnegative(),\n providers: z.array(chatMessageUsageProviderBreakdownSchema),\n});\n\nconst chatMessageUsagePayloadSchema = z.object({\n version: z.literal(1),\n totalCredits: z.number().int().nonnegative(),\n settledAt: z.string(),\n breakdown: z.array(chatMessageUsageKindBreakdownSchema),\n});\n\nconst toolSummaryEntrySchema = z.object({\n kind: z.literal(\"tool\"),\n name: z.string(),\n input: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst textSummaryEntrySchema = z.object({\n kind: z.literal(\"text\"),\n text: z.string(),\n});\n\nconst summaryEntrySchema = z.union([\n z.string(),\n toolSummaryEntrySchema,\n textSummaryEntrySchema,\n]);\n\nconst presentationGenerationTemplateRequestSchema = z.object({\n type: z.literal(\"presentation\"),\n selection: z\n .object({\n templateId: z.string().min(1),\n colorSystemId: z.string().min(1).optional(),\n previewUrl: z.string().url().optional(),\n })\n .strict(),\n});\n\nconst videoGenerationTemplateRequestSchema = z.object({\n type: z.literal(\"video\"),\n selection: z.object({\n stylePresetId: z.string().min(1),\n }),\n});\n\nconst illustrationGenerationTemplateRequestSchema = z.object({\n type: z.literal(\"illustration\"),\n selection: z.object({\n illustrationStyleId: z.string().min(1),\n }),\n});\n\nconst workflowGenerationTemplateRequestSchema = z.object({\n type: z.literal(\"workflow\"),\n selection: z.object({\n workflowTemplateId: z.string().min(1),\n }),\n});\n\nconst websiteGenerationTemplateRequestSchema = z.object({\n type: z.literal(\"website\"),\n selection: z\n .object({\n websiteTemplateId: z.string().min(1),\n })\n .strict(),\n});\n\nconst generationTemplateRequestSchema = z.discriminatedUnion(\"type\", [\n presentationGenerationTemplateRequestSchema,\n videoGenerationTemplateRequestSchema,\n illustrationGenerationTemplateRequestSchema,\n workflowGenerationTemplateRequestSchema,\n websiteGenerationTemplateRequestSchema,\n]);\n\nconst pagedChatMessageBaseSchema = z.object({\n id: z.string(),\n content: z.string().nullable(),\n runId: z.string().optional(),\n runGroupId: z.string().optional(),\n triggerSource: triggerSourceSchema.optional(),\n isGoalRun: z.boolean().optional(),\n runEventId: z.string().optional(),\n goalEvent: zeroGoalEventSchema.optional(),\n goalSnapshot: z\n .object({\n objectiveBrief: z.string().min(1),\n })\n .optional(),\n usage: chatMessageUsagePayloadSchema.optional(),\n revokesMessageId: z.string().optional(),\n interruptsRunId: z.string().optional(),\n error: z.string().optional(),\n attachFiles: z.array(resolvedAttachFileSchema).optional(),\n generationTemplate: generationTemplateRequestSchema.optional(),\n sequenceNumber: z.number().nullable().optional(),\n // Deprecated legacy schedule automation metadata. Migration 0545 clears\n // existing values; new message writes no longer populate these fields.\n automationId: z.string().optional(),\n automationTitle: z.string().optional(),\n automationSnapshot: z\n .object({\n id: z.string(),\n title: z.string(),\n description: z.string().nullable(),\n })\n .optional(),\n workflowSnapshot: z\n .object({\n id: z.string().uuid().optional(),\n agentId: z.string().uuid().optional(),\n name: z.string(),\n displayName: z.string().nullable(),\n description: z.string().nullable(),\n triggerId: z.string().uuid().optional(),\n triggerBrief: z.string().nullable().optional(),\n })\n .optional(),\n createdAt: z.string(),\n});\n\nconst chatMessageRecommendedFollowupSchema = z.object({\n prompt: z.string(),\n kind: z.enum([\"talk\", \"generate\"]),\n generationType: z\n .enum([\"image\", \"video\", \"presentation\", \"website\"])\n .optional(),\n});\n\nconst chatMessageRecommendedFollowupsSchema = z.preprocess((value) => {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((item) => {\n const parsed = chatMessageRecommendedFollowupSchema.safeParse(item);\n return parsed.success ? [parsed.data] : [];\n });\n}, z.array(chatMessageRecommendedFollowupSchema));\n\nconst pagedChatMessageSchema = z.discriminatedUnion(\"role\", [\n pagedChatMessageBaseSchema\n .extend({\n role: z.literal(\"user\"),\n })\n .strict(),\n pagedChatMessageBaseSchema.extend({\n role: z.literal(\"assistant\"),\n thinking: z.string().optional(),\n runLifecycleEvent: z.enum([\"completed\", \"failed\", \"cancelled\"]).optional(),\n recommendedFollowups: chatMessageRecommendedFollowupsSchema.optional(),\n }),\n]);\n\nconst chatThreadDetailSchema = z.object({\n /**\n * Read-state watermark. A thread is unread when its latest run-finish marker\n * is newer than this timestamp.\n */\n lastReadAt: z.string().nullable(),\n computerUseHostId: z.string().uuid().nullable(),\n codexServiceTier: codexServiceTierSchema.nullable(),\n});\n\nconst chatThreadMetadataSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n selectedModel: z.string().nullable(),\n});\n\nconst chatThreadDraftSchema = z.object({\n draftContent: z.string().nullable(),\n draftAttachments: z.array(persistedAttachmentSchema).nullable(),\n});\n\nconst selectedModelRequestSchema = z\n .string()\n .min(1)\n .superRefine((value, ctx) => {\n if (!isSupportedRunModel(value)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Invalid model selection\",\n });\n }\n });\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction legacyModelSelectionModel(value: unknown): string | null | undefined {\n if (value === null) {\n return null;\n }\n if (!isRecord(value)) {\n return undefined;\n }\n const selectedModel = value.selectedModel;\n return typeof selectedModel === \"string\" ? selectedModel : undefined;\n}\n\nfunction normalizeLegacyModelSelectionInput(\n value: unknown,\n options: { readonly allowNull: boolean },\n): unknown {\n if (!isRecord(value) || \"model\" in value || !(\"modelSelection\" in value)) {\n return value;\n }\n const legacyModelSelection = legacyModelSelectionModel(value.modelSelection);\n if (\n legacyModelSelection === undefined ||\n (legacyModelSelection === null && !options.allowNull)\n ) {\n return value;\n }\n return { ...value, model: legacyModelSelection };\n}\n\nconst chatThreadCreateBodySchema = z.preprocess(\n (value) => {\n return normalizeLegacyModelSelectionInput(value, { allowNull: false });\n },\n z.object({\n agentId: z.string().min(1),\n clientThreadId: z.string().uuid().optional(),\n eventId: chatThreadEventIdSchema.optional(),\n /**\n * Selected model id. The API resolves the effective model provider from org\n * policy and available credentials.\n */\n model: selectedModelRequestSchema,\n title: z.string().optional(),\n }),\n);\n\nconst chatThreadModelSelectionUpdateBodySchema = z.preprocess(\n (value) => {\n return normalizeLegacyModelSelectionInput(value, { allowNull: true });\n },\n z.object({\n /**\n * Selected model id, or null to clear the thread's selected model.\n */\n model: selectedModelRequestSchema.nullable(),\n codexServiceTier: codexServiceTierSchema.nullable().optional(),\n eventId: chatThreadEventIdSchema.optional(),\n }),\n);\n\nconst chatRunOptionsRequestSchema = z.object({\n codexServiceTier: codexServiceTierSchema.optional(),\n});\n\nconst chatMessageNormalSendBodySchema = z.preprocess(\n (value) => {\n return normalizeLegacyModelSelectionInput(value, { allowNull: false });\n },\n z.object({\n agentId: z.string().min(1),\n prompt: z.string().min(1),\n threadId: z.string().optional(),\n clientThreadId: z.string().uuid().optional(),\n chatThreadEventId: chatThreadEventIdSchema.optional(),\n // Client-generated UUID for the sort touch created by direct user sends.\n // Lets event-sourced clients reconcile optimistic sidebar recency by id.\n chatThreadSortEventId: chatThreadEventIdSchema.optional(),\n /**\n * Selected model id. The API resolves the effective provider from org\n * policy and available credentials. Existing threads may omit it to\n * reuse the thread's persisted model.\n */\n model: selectedModelRequestSchema.optional(),\n runOptions: chatRunOptionsRequestSchema.optional(),\n generationTemplate: generationTemplateRequestSchema.optional(),\n computerUseHostId: z.string().uuid().nullable().optional(),\n // Optional for backward compatibility: older clients that omit this field\n // still trigger title generation (server guards with !== false, not === true).\n hasTextContent: z.boolean().optional(),\n attachFiles: z.array(attachFileSchema).optional(),\n // Client-generated UUID used as the user message's primary key.\n // Lets the client render an optimistic row and reconcile with the\n // server row by id — no temp-id swap, no React remount.\n clientMessageId: z.string().uuid().optional(),\n // Preview evaluation escape hatch: when enabled, the request asks the\n // runner to bypass preview mock CLIs and use the real agent runtime.\n realAgentInPreview: z.boolean().optional(),\n revokesMessageId: z.string().min(1).optional(),\n interruptsRunId: z.undefined().optional(),\n }),\n);\n\n/**\n * Chat thread collection route contract.\n */\nexport const chatThreadsContract = c.router({\n snapshot: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/snapshot\",\n headers: authHeadersSchema,\n responses: {\n 200: z.object({\n chatThreads: z.array(chatThreadSnapshotProjectionSchema),\n latestEventId: chatThreadEventIdSchema.nullable(),\n }),\n 401: apiErrorSchema,\n },\n summary:\n \"Get the compacted chat thread snapshot for the caller's current organization.\",\n },\n events: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/events\",\n headers: authHeadersSchema,\n query: z.object({\n sinceEventId: chatThreadEventIdSchema.optional(),\n }),\n responses: {\n 200: z.object({\n events: z.array(chatThreadEventSchema),\n hasMore: z.boolean(),\n }),\n 401: apiErrorSchema,\n 410: apiErrorSchema,\n },\n summary:\n \"List chat thread lifecycle events after an optional event id cursor.\",\n },\n activeIds: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/active-ids\",\n headers: authHeadersSchema,\n responses: {\n 200: z.object({\n threadIds: z.array(z.string().uuid()),\n }),\n 401: apiErrorSchema,\n },\n summary:\n \"List chat thread ids that currently have queued, pending, or running runs.\",\n },\n create: {\n method: \"POST\",\n path: \"/api/zero/chat-threads\",\n headers: authHeadersSchema,\n body: chatThreadCreateBodySchema,\n responses: {\n 201: z.object({\n id: z.string(),\n title: z.string().nullable(),\n createdAt: z.string(),\n }),\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Create a new chat thread\",\n },\n drafts: {\n method: \"GET\",\n // Sibling path (not nested under /chat-threads/) so it can never\n // collide with the /chat-threads/:id route pattern.\n path: \"/api/zero/chat-thread-drafts\",\n headers: authHeadersSchema,\n query: z.object({}),\n responses: {\n 200: z.object({\n /**\n * Thread ids owned by the caller that currently hold an unsent draft\n * (non-empty `draftContent` or one+ `draftAttachments`).\n */\n draftThreadIds: z.array(z.string()),\n }),\n 401: apiErrorSchema,\n },\n summary:\n \"Report which of the caller's chat threads hold an unsent composer draft. Fetched separately from the thread list so the sidebar draft dots don't gate the list query.\",\n },\n unreads: {\n method: \"GET\",\n path: \"/api/zero/chat-thread-unreads\",\n headers: authHeadersSchema,\n query: z.object({\n agentId: z.string().min(1),\n }),\n responses: {\n 200: chatThreadUnreadsSchema,\n 401: apiErrorSchema,\n },\n summary:\n \"List the caller's unread chat threads under an agent, each with the timestamp of the message that made it unread.\",\n },\n unreadAgents: {\n method: \"GET\",\n path: \"/api/zero/chat-thread-unread-agents\",\n headers: authHeadersSchema,\n responses: {\n 200: chatThreadUnreadAgentsSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary:\n \"List agent IDs with at least one unread chat thread for the caller.\",\n },\n});\n\n/**\n * Chat thread by ID route contract (/api/chat-threads/[id])\n */\nconst chatThreadIdPathParamsSchema = z.object({ id: z.string().uuid() });\nconst chatThreadThreadIdPathParamsSchema = z.object({\n threadId: z.string().uuid(),\n});\nconst chatThreadMessagePathParamsSchema =\n chatThreadThreadIdPathParamsSchema.extend({\n messageId: z.string().uuid(),\n });\n\nexport const chatThreadByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:id\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n responses: {\n 200: chatThreadDetailSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get chat thread detail\",\n },\n patch: {\n method: \"PATCH\",\n path: \"/api/zero/chat-threads/:id\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n body: z.object({\n draftContent: z.string().nullable().optional(),\n draftAttachments: z\n .array(persistedAttachmentSchema)\n .nullable()\n .optional(),\n }),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update chat thread draft content and attachments\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/chat-threads/:id\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n query: z.object({ eventId: chatThreadEventIdSchema.optional() }).optional(),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete a chat thread\",\n body: c.noBody(),\n },\n});\n\n/**\n * Thread-scoped composer draft endpoint. Kept separate from thread detail so\n * draft hydration does not require the larger current-thread detail payload.\n */\nexport const chatThreadDraftContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:id/draft\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n responses: {\n 200: chatThreadDraftSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get chat thread draft content and attachments\",\n },\n});\n\n/**\n * Mark a chat thread as read up to its current latest run-finish marker.\n * Separate contract so it can be served by its own route file.\n */\nexport const chatThreadMarkReadContract = c.router({\n markRead: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/mark-read\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n body: c.noBody(),\n responses: {\n 200: z.object({\n lastReadAt: z.string().nullable(),\n /**\n * Fresh unread snapshot for the thread's agent (same shape as the\n * unreads endpoint). Clients should treat\n * `chatThreadReadCursorUpdated` as read-state invalidation.\n */\n unreads: chatThreadUnreadsSchema.shape.unreads,\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Mark a chat thread as read up to the latest run-finish marker\",\n },\n});\n\n/**\n * Mark every unread chat thread under an agent as read.\n * Separate sibling route so it cannot collide with the `:id` thread routes.\n */\nexport const chatThreadMarkAgentReadContract = c.router({\n markAgentRead: {\n method: \"POST\",\n path: \"/api/zero/chat-thread-unreads/mark-read\",\n headers: authHeadersSchema,\n body: z.object({\n agentId: z.string().min(1),\n }),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Mark all unread chat threads under an agent as read\",\n },\n});\n\n/**\n * Pin / unpin a chat thread. Two separate POST endpoints (no body) instead\n * of widening `chatThreadByIdContract.patch`, which is intentionally narrow\n * (draft fields only). Mirrors the `mark-read` precedent.\n *\n * Split into two contracts because each lives in its own Next.js route\n * folder; `tsr.router` requires every action in a contract to be handled\n * by the same router file.\n */\nexport const chatThreadPinContract = c.router({\n pin: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/pin\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n query: z.object({ eventId: chatThreadEventIdSchema.optional() }).optional(),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Pin a chat thread to the top of the sidebar\",\n },\n});\n\nexport const chatThreadUnpinContract = c.router({\n unpin: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/unpin\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n query: z.object({ eventId: chatThreadEventIdSchema.optional() }).optional(),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Remove the pin from a chat thread\",\n },\n});\n\n/**\n * Rename a chat thread POST endpoint. Sets both the title and the\n * `renamed_at` timestamp, which suppresses future automated title\n * generation for this thread.\n *\n * Split into a dedicated contract/route so any POST body widening\n * (e.g. future `{ icon, folder }` fields) stays invisible to the\n * unrelated draft PATCH on chatThreadByIdContract.\n */\nexport const chatThreadRenameContract = c.router({\n rename: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/rename\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n body: z.object({\n title: z.string().min(1),\n eventId: chatThreadEventIdSchema.optional(),\n }),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Rename a chat thread (suppresses automated title generation)\",\n },\n});\n\n/**\n * Narrow metadata endpoint for the current chat thread. This intentionally\n * does not expose messages or detail fields needed by the web UI.\n */\nexport const chatThreadMetadataContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:id/metadata\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n responses: {\n 200: chatThreadMetadataSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get chat thread metadata\",\n },\n});\n\n/**\n * Update a chat thread's model pin. Kept separate from\n * `chatThreadByIdContract.patch`, which intentionally remains draft-only.\n */\nexport const chatThreadModelSelectionContract = c.router({\n update: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/model-selection\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n body: chatThreadModelSelectionUpdateBodySchema,\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update a chat thread model selection\",\n },\n});\n\n/**\n * Update a chat thread's Computer Use host binding. Kept separate from\n * `chatThreadByIdContract.patch`, which intentionally remains draft-only.\n */\nexport const chatThreadComputerUseHostContract = c.router({\n update: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/computer-use-host\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdPathParamsSchema,\n body: z.object({\n computerUseHostId: z.string().uuid().nullable(),\n }),\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update a chat thread Computer Use host binding\",\n },\n});\n\n/**\n * Chat messages contract (/api/zero/chat/messages)\n * Unified endpoint: create thread (if needed) + run + association in one call.\n */\nexport const chatMessagesContract = c.router({\n send: {\n method: \"POST\",\n path: \"/api/zero/chat/messages\",\n headers: authHeadersSchema,\n body: z.union([\n chatMessageNormalSendBodySchema,\n z.object({\n agentId: z.string().min(1),\n threadId: z.string().min(1),\n revokesMessageId: z.string().min(1),\n clientMessageId: z.string().uuid().optional(),\n prompt: z.undefined().optional(),\n clientThreadId: z.undefined().optional(),\n chatThreadEventId: z.undefined().optional(),\n chatThreadSortEventId: z.undefined().optional(),\n model: z.undefined().optional(),\n runOptions: z.undefined().optional(),\n generationTemplate: z.undefined().optional(),\n computerUseHostId: z.undefined().optional(),\n hasTextContent: z.undefined().optional(),\n attachFiles: z.undefined().optional(),\n realAgentInPreview: z.undefined().optional(),\n interruptsRunId: z.undefined().optional(),\n }),\n z.object({\n agentId: z.string().min(1),\n threadId: z.string().min(1),\n interruptsRunId: z.string().uuid(),\n clientMessageId: z.string().uuid().optional(),\n prompt: z.undefined().optional(),\n clientThreadId: z.undefined().optional(),\n chatThreadEventId: z.undefined().optional(),\n chatThreadSortEventId: z.undefined().optional(),\n model: z.undefined().optional(),\n runOptions: z.undefined().optional(),\n generationTemplate: z.undefined().optional(),\n computerUseHostId: z.undefined().optional(),\n hasTextContent: z.undefined().optional(),\n attachFiles: z.undefined().optional(),\n realAgentInPreview: z.undefined().optional(),\n revokesMessageId: z.undefined().optional(),\n }),\n ]),\n responses: {\n 201: z.object({\n runId: z.string().nullable(),\n threadId: z.string(),\n status: runStatusSchema.optional(),\n createdAt: z.string().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Send a chat message (create thread + run + association)\",\n },\n});\n\n/**\n * Single chat message in a search result.\n * `content` is guaranteed non-null because the search route filters out\n * placeholder rows where content is NULL.\n */\nconst chatSearchMessageSchema = z.object({\n messageId: z.string(),\n chatThreadId: z.string(),\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n createdAt: z.string(),\n sequenceNumber: z.number().nullable(),\n runId: z.string().nullable(),\n});\n\nconst chatSearchResultSchema = z.object({\n chatThreadId: z.string(),\n agentName: z.string(),\n matchedMessage: chatSearchMessageSchema,\n contextBefore: z.array(chatSearchMessageSchema),\n contextAfter: z.array(chatSearchMessageSchema),\n});\n\n/**\n * `hasMore` indicates that the server truncated the result set at `limit`.\n * There is intentionally no cursor/offset: `limit` is capped at 50 (see the\n * query schema below) and chat-message search is a lookup tool, not a bulk\n * export. Callers that hit `hasMore=true` should narrow the query (add\n * `agentId`, `since`, or a more specific `keyword`) rather than paginate. If\n * genuine pagination is ever needed, introduce `nextCursor` here — the\n * contract has no external consumers yet, so adding it later is safe.\n */\nconst chatSearchResponseSchema = z.object({\n results: z.array(chatSearchResultSchema),\n hasMore: z.boolean(),\n});\n\n/**\n * Chat search contract (GET /api/zero/chat/search)\n * Searches chat messages within the caller's own threads in the caller's org.\n * Authorization is enforced at the DB query level via userId + orgId filters.\n */\nexport const chatSearchContract = c.router({\n search: {\n method: \"GET\",\n path: \"/api/zero/chat/search\",\n headers: authHeadersSchema,\n query: z.object({\n keyword: z.string().trim().min(1),\n agentId: z.string().uuid().optional(),\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(50).default(20),\n before: z.coerce.number().min(0).max(10).default(0),\n after: z.coerce.number().min(0).max(10).default(0),\n }),\n responses: {\n 200: chatSearchResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Search chat messages within caller's org (zero proxy)\",\n },\n});\n\n/**\n * Paginated chat messages contract (/api/zero/chat-threads/:threadId/messages)\n * Cursor-based pagination using message UUID as sinceId / beforeId.\n *\n * Query params (mutually exclusive):\n * sinceId — forward pagination: messages strictly after this cursor\n * beforeId — backward pagination: messages strictly before this cursor\n * (neither) — initial load anchored at the last user message\n *\n * Response includes `hasMore` for initial load and backward pagination so the\n * UI knows whether to offer upward scroll loading.\n */\nexport const chatThreadMessagesContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:threadId/messages\",\n headers: authHeadersSchema,\n pathParams: chatThreadThreadIdPathParamsSchema,\n query: z.object({\n sinceId: z.string().uuid().optional(),\n beforeId: z.string().uuid().optional(),\n limit: z.coerce.number().min(1).max(50).default(50),\n }),\n responses: {\n 200: z.object({\n messages: z.array(pagedChatMessageSchema),\n hasHistoryBefore: z.boolean().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get paginated chat messages for a thread\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:threadId/messages/:messageId\",\n headers: authHeadersSchema,\n pathParams: chatThreadMessagePathParamsSchema,\n responses: {\n 200: pagedChatMessageSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get a chat message by id for a thread\",\n },\n});\n\nexport const chatThreadArtifactsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:threadId/artifacts\",\n headers: authHeadersSchema,\n pathParams: chatThreadThreadIdPathParamsSchema,\n responses: {\n 200: z.object({\n runs: z.array(chatThreadArtifactRunSchema),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"List uploaded files associated with every run in a chat thread\",\n },\n getHtmlEditSnapshot: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:threadId/html-artifact-edit-snapshot\",\n headers: authHeadersSchema,\n pathParams: chatThreadThreadIdPathParamsSchema,\n query: htmlArtifactEditSnapshotQuerySchema,\n responses: {\n 200: z.object({ snapshot: htmlArtifactEditSnapshotSchema.nullable() }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get a resumable HTML artifact edit snapshot for a chat thread\",\n },\n upsertHtmlEditSnapshot: {\n method: \"PUT\",\n path: \"/api/zero/chat-threads/:threadId/html-artifact-edit-snapshot\",\n headers: authHeadersSchema,\n pathParams: chatThreadThreadIdPathParamsSchema,\n body: htmlArtifactEditSnapshotUpsertSchema,\n responses: {\n 200: htmlArtifactEditSnapshotSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upsert a resumable HTML artifact edit snapshot for a chat thread\",\n },\n deleteHtmlEditSnapshot: {\n method: \"DELETE\",\n path: \"/api/zero/chat-threads/:threadId/html-artifact-edit-snapshot\",\n headers: authHeadersSchema,\n pathParams: chatThreadThreadIdPathParamsSchema,\n query: htmlArtifactEditSnapshotQuerySchema,\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete a resumable HTML artifact edit snapshot for a chat thread\",\n },\n syncGoogleDrive: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:threadId/artifacts\",\n headers: authHeadersSchema,\n pathParams: chatThreadThreadIdPathParamsSchema,\n body: z.object({\n runId: z.string(),\n fileId: z.string(),\n }),\n responses: {\n 200: z.object({\n id: z.string(),\n name: z.string(),\n webViewLink: z.string().nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Sync a chat artifact file to the user's connected Google Drive\",\n },\n uploadGoogleSlides: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:threadId/artifacts/google-slides\",\n headers: authHeadersSchema,\n pathParams: chatThreadThreadIdPathParamsSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: z.object({\n id: z.string(),\n name: z.string(),\n webViewLink: z.string().nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary:\n \"Upload a presentation artifact to the user's Google Drive as a native Google Slides deck\",\n },\n});\n\nexport const artifactsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/artifacts\",\n headers: authHeadersSchema,\n query: artifactsListQuerySchema,\n responses: {\n 200: artifactsListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary:\n \"List generated artifacts for the caller's current organization (keyset-paginated)\",\n },\n favorite: {\n method: \"POST\",\n path: \"/api/zero/artifacts/favorite\",\n headers: authHeadersSchema,\n body: artifactFavoriteBodySchema,\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Favorite a generated artifact for the caller\",\n },\n unfavorite: {\n method: \"POST\",\n path: \"/api/zero/artifacts/unfavorite\",\n headers: authHeadersSchema,\n body: artifactFavoriteBodySchema,\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Remove a generated artifact favorite for the caller\",\n },\n});\n\nexport type ChatThreadsContract = typeof chatThreadsContract;\nexport type ChatThreadByIdContract = typeof chatThreadByIdContract;\nexport type ChatThreadDraftContract = typeof chatThreadDraftContract;\nexport type ChatThreadMarkReadContract = typeof chatThreadMarkReadContract;\nexport type ChatThreadMarkAgentReadContract =\n typeof chatThreadMarkAgentReadContract;\nexport type ChatThreadPinContract = typeof chatThreadPinContract;\nexport type ChatThreadUnpinContract = typeof chatThreadUnpinContract;\nexport type ChatThreadRenameContract = typeof chatThreadRenameContract;\nexport type ChatThreadMetadataContract = typeof chatThreadMetadataContract;\nexport type ChatThreadModelSelectionContract =\n typeof chatThreadModelSelectionContract;\nexport type ChatThreadComputerUseHostContract =\n typeof chatThreadComputerUseHostContract;\nexport type ChatMessagesContract = typeof chatMessagesContract;\nexport type ChatThreadMessagesContract = typeof chatThreadMessagesContract;\nexport type ChatThreadArtifactsContract = typeof chatThreadArtifactsContract;\nexport type ArtifactsContract = typeof artifactsContract;\nexport type ChatSearchContract = typeof chatSearchContract;\nexport type ChatSearchResponse = z.infer<typeof chatSearchResponseSchema>;\nexport type ChatSearchResult = z.infer<typeof chatSearchResultSchema>;\nexport type ChatSearchMessage = z.infer<typeof chatSearchMessageSchema>;\n\nexport {\n chatThreadListItemSchema,\n chatThreadSnapshotProjectionSchema,\n chatThreadEventSchema,\n chatThreadDetailSchema,\n chatThreadMetadataSchema,\n chatThreadDraftSchema,\n chatRunOptionsRequestSchema,\n generationTemplateRequestSchema,\n presentationGenerationTemplateRequestSchema,\n videoGenerationTemplateRequestSchema,\n illustrationGenerationTemplateRequestSchema,\n websiteGenerationTemplateRequestSchema,\n pagedChatMessageSchema,\n chatMessageUsagePayloadSchema,\n summaryEntrySchema,\n persistedAttachmentSchema,\n attachFileSchema,\n resolvedAttachFileSchema,\n artifactItemSchema,\n artifactFavoriteBodySchema,\n artifactsListResponseSchema,\n chatThreadArtifactFileSchema,\n chatThreadArtifactGoogleDriveSyncSchema,\n chatThreadArtifactRunSchema,\n htmlArtifactEditSnapshotSchema,\n};\n\nexport type CodexServiceTier = z.infer<typeof codexServiceTierSchema>;\nexport type ChatRunOptionsRequest = z.infer<typeof chatRunOptionsRequestSchema>;\nexport type GenerationTemplateRequest = z.infer<\n typeof generationTemplateRequestSchema\n>;\nexport type GenerationTemplateType = GenerationTemplateRequest[\"type\"];\nexport type LegacyThreadGenerationTemplateType = Exclude<\n GenerationTemplateType,\n \"workflow\" | \"website\"\n>;\n/**\n * Legacy generation template shape retained for older thread-level storage.\n * Current prompt injection uses the generation template attached to the current\n * message only.\n */\nexport type ThreadGenerationTemplates = Partial<\n Record<\n LegacyThreadGenerationTemplateType,\n Extract<\n GenerationTemplateRequest,\n { type: LegacyThreadGenerationTemplateType }\n >\n >\n>;\nexport type PresentationGenerationTemplateRequest = z.infer<\n typeof presentationGenerationTemplateRequestSchema\n>;\nexport type VideoGenerationTemplateRequest = z.infer<\n typeof videoGenerationTemplateRequestSchema\n>;\nexport type IllustrationGenerationTemplateRequest = z.infer<\n typeof illustrationGenerationTemplateRequestSchema\n>;\nexport type WorkflowGenerationTemplateRequest = z.infer<\n typeof workflowGenerationTemplateRequestSchema\n>;\nexport type WebsiteGenerationTemplateRequest = z.infer<\n typeof websiteGenerationTemplateRequestSchema\n>;\n\nexport type SummaryEntry = z.infer<typeof summaryEntrySchema>;\nexport type ChatThreadListItem = z.infer<typeof chatThreadListItemSchema>;\nexport type ChatThreadSnapshotProjection = z.infer<\n typeof chatThreadSnapshotProjectionSchema\n>;\nexport type ChatThreadEvent = z.infer<typeof chatThreadEventSchema>;\nexport type ChatThreadDetail = z.infer<typeof chatThreadDetailSchema>;\nexport type ChatThreadMetadata = z.infer<typeof chatThreadMetadataSchema>;\nexport type ChatThreadDraft = z.infer<typeof chatThreadDraftSchema>;\nexport type PagedChatMessage = z.infer<typeof pagedChatMessageSchema>;\nexport type ChatMessageUsagePayload = z.infer<\n typeof chatMessageUsagePayloadSchema\n>;\nexport type PersistedAttachment = z.infer<typeof persistedAttachmentSchema>;\nexport type AttachFile = z.infer<typeof attachFileSchema>;\nexport type ResolvedAttachFile = z.infer<typeof resolvedAttachFileSchema>;\nexport type ChatThreadArtifactFile = z.infer<\n typeof chatThreadArtifactFileSchema\n>;\nexport type ChatThreadArtifactGoogleDriveSync = z.infer<\n typeof chatThreadArtifactGoogleDriveSyncSchema\n>;\nexport type ChatThreadArtifactRun = z.infer<typeof chatThreadArtifactRunSchema>;\nexport type ArtifactItem = z.infer<typeof artifactItemSchema>;\nexport type ArtifactsListResponse = z.infer<typeof artifactsListResponseSchema>;\nexport type HtmlArtifactEditSnapshot = z.infer<\n typeof htmlArtifactEditSnapshotSchema\n>;\n","import { z } from \"zod\";\nimport {\n authHeadersSchema,\n initContract,\n timestampQueryNumberSchema,\n} from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { firewallPoliciesSchema } from \"@vm0/connectors/firewall-types\";\nimport {\n modelProviderTypeSchema,\n type ModelProviderType,\n} from \"./model-providers\";\nimport { triggerSourceSchema } from \"./logs\";\nimport { orgTierSchema } from \"./orgs\";\n\nconst c = initContract();\nexport type DirectRunModelProviderType = Exclude<ModelProviderType, \"vm0\">;\n\nconst directRunModelProviderTypeSchema = modelProviderTypeSchema.refine(\n (type) => {\n return type !== \"vm0\";\n },\n { message: \"vm0 model provider is only supported by zero runs\" },\n);\n\nexport const claudeToolEntrySchema = z\n .string()\n .refine(\n (tool) => {\n return tool.trim().length > 0;\n },\n {\n message: \"Claude tool name must not be empty\",\n },\n )\n .refine(\n (tool) => {\n return !tool.includes(\",\");\n },\n {\n message: \"Claude tool name must not contain commas\",\n },\n )\n .refine(\n (tool) => {\n return !tool.trimStart().startsWith(\"-\");\n },\n {\n message: \"Claude tool name must not start with a hyphen\",\n },\n );\n\n// Stored in Postgres `integer` columns. Keep request validation aligned with\n// the DB range so malformed sandbox payloads fail as 400s instead of DB errors.\nexport const MAX_EVENT_SEQUENCE_NUMBER = 2_147_483_647;\nexport const eventSequenceNumberSchema = z\n .number()\n .int()\n .nonnegative()\n .max(MAX_EVENT_SEQUENCE_NUMBER);\nconst eventSequenceCursorSchema = z\n .number()\n .int()\n .min(-1)\n .max(MAX_EVENT_SEQUENCE_NUMBER);\nconst eventSequenceCursorQuerySchema = z.coerce\n .number()\n .int()\n .min(-1)\n .max(MAX_EVENT_SEQUENCE_NUMBER);\n\n/**\n * All valid run status values\n */\nexport const ALL_RUN_STATUSES = [\n \"queued\",\n \"pending\",\n \"running\",\n \"completed\",\n \"failed\",\n \"timeout\",\n \"cancelled\",\n] as const;\n\n/**\n * Run status enum\n */\nconst runStatusSchema = z.enum(ALL_RUN_STATUSES);\n\n/**\n * Unified run request schema - supports all run modes via optional parameters\n */\nconst unifiedRunRequestSchema = z\n .object({\n // High-level shortcuts (mutually exclusive with each other)\n checkpointId: z.string().optional(),\n sessionId: z.string().optional(),\n\n // Base parameters (can be used directly or overridden after shortcut expansion)\n agentComposeId: z.string().optional(),\n agentComposeVersionId: z.string().optional(),\n conversationId: z.string().optional(),\n // Multi-mount artifacts, each with its own mountPath.\n artifacts: z\n .array(\n z.object({\n name: z.string(),\n version: z.string().optional(),\n mountPath: z.string(),\n }),\n )\n .optional(),\n vars: z.record(z.string(), z.string()).optional(),\n secrets: z.record(z.string(), z.string()).optional(),\n volumeVersions: z.record(z.string(), z.string()).optional(),\n\n // Additional volumes passed directly at run time (bypass compose)\n additionalVolumes: z\n .array(\n z.object({\n name: z.string(),\n version: z.string().optional(),\n mountPath: z.string(),\n }),\n )\n .optional(),\n\n // Preview evaluation escape hatch: bypass preview mock CLIs and use the\n // real agent runtime.\n realAgentInPreview: z.boolean().optional(),\n\n // Capture HTTP header names, selected safe header values, request bodies, and response bodies\n // in network logs\n captureNetworkBodies: z.boolean().optional(),\n\n // Required\n prompt: z.string().min(1, \"Missing prompt\"),\n\n // Optional system prompt to append to the agent's system prompt\n appendSystemPrompt: z.string().optional(),\n\n // Optional list of tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(claudeToolEntrySchema).optional(),\n\n // Optional list of tools to make available in Claude CLI (passed as --tools)\n tools: z.array(claudeToolEntrySchema).optional(),\n\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n\n // How the run was triggered (defaults to \"cli\" on the server if not provided)\n triggerSource: triggerSourceSchema.optional(),\n\n // Per-permission policies (e.g., { \"github\": { \"actions:read\": \"allow\" } })\n permissionPolicies: firewallPoliciesSchema.optional(),\n\n // Internal: pin provider type for direct CLI runs used by E2E.\n // vm0 is intentionally excluded here because only zero runs enforce\n // vm0-managed-provider credits.\n modelProviderType: directRunModelProviderTypeSchema.optional(),\n })\n .strict();\n\n/**\n * Create run response schema\n */\nconst createRunResponseSchema = z.object({\n runId: z.string(),\n status: runStatusSchema,\n sandboxId: z.string().optional(),\n // Agent session id — eagerly created at run insertion, always present.\n sessionId: z.string().uuid(),\n output: z.string().optional(),\n error: z.string().optional(),\n executionTimeMs: z.number().optional(),\n createdAt: z.string().optional(),\n});\n\n/**\n * Get run response schema\n */\nconst getRunResponseSchema = z.object({\n runId: z.string(),\n agentComposeVersionId: z.string().nullable(),\n status: runStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n vars: z.record(z.string(), z.string()).optional(),\n sandboxId: z.string().optional(),\n result: z\n .object({\n output: z.string().optional(),\n executionTimeMs: z.number().optional(),\n agentSessionId: z.string().optional(),\n checkpointId: z.string().optional(),\n conversationId: z.string().optional(),\n })\n .passthrough()\n .optional(),\n error: z.string().optional(),\n createdAt: z.string(),\n startedAt: z.string().optional(),\n completedAt: z.string().optional(),\n});\n\n/**\n * Run event schema\n */\nconst runEventSchema = z.object({\n sequenceNumber: eventSequenceNumberSchema,\n eventType: z.string(),\n eventData: z.unknown(),\n createdAt: z.string(),\n});\n\n/**\n * Run result schema (present when status = 'completed')\n */\nconst runResultSchema = z.object({\n checkpointId: z.string(),\n agentSessionId: z.string(),\n conversationId: z.string(),\n artifact: z.record(z.string(), z.string()).optional(), // optional when run has no artifact\n volumes: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Run state schema (replaces vm0_start/vm0_result/vm0_error events)\n */\nconst runStateSchema = z.object({\n status: runStatusSchema,\n result: runResultSchema.optional(),\n error: z.string().optional(),\n lastEventSequence: eventSequenceNumberSchema.optional(),\n});\n\n/**\n * Events response schema\n */\nconst eventsResponseSchema = z.object({\n events: z.array(runEventSchema),\n hasMore: z.boolean(),\n nextSequence: eventSequenceCursorSchema,\n run: runStateSchema,\n framework: z.string(),\n});\n\n/**\n * Run list item schema\n */\nconst runListItemSchema = z.object({\n id: z.string(),\n agentName: z.string(),\n status: runStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n});\n\n/**\n * Runs list response schema\n */\nconst runsListResponseSchema = z.object({\n runs: z.array(runListItemSchema),\n});\n\n/**\n * Runs main route contract (/api/agent/runs)\n * Handles GET list and POST create\n */\nexport const runsMainContract = c.router({\n /**\n * GET /api/agent/runs\n * List agent runs (pending and running by default)\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/runs\",\n headers: authHeadersSchema,\n query: z.object({\n status: z.string().optional(), // comma-separated: \"pending,running\"\n agent: z.string().optional(), // agent name filter\n since: z.string().optional(), // ISO timestamp\n until: z.string().optional(), // ISO timestamp\n limit: z.coerce.number().min(1).max(100).default(50),\n }),\n responses: {\n 200: runsListResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List agent runs\",\n },\n /**\n * POST /api/agent/runs\n * Create and execute a new agent run\n */\n create: {\n method: \"POST\",\n path: \"/api/agent/runs\",\n headers: authHeadersSchema,\n body: unifiedRunRequestSchema,\n responses: {\n 201: createRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 429: apiErrorSchema,\n 422: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create and execute agent run\",\n },\n});\n\n/**\n * Runs by ID route contract (/api/agent/runs/[id])\n */\nexport const runsByIdContract = c.router({\n /**\n * GET /api/agent/runs/:id\n * Get agent run status and results\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/runs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n responses: {\n 200: getRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run by ID\",\n },\n});\n\n/**\n * Cancel run response schema\n */\nconst cancelRunResponseSchema = z.object({\n id: z.string(),\n status: z.literal(\"cancelled\"),\n message: z.string(),\n});\n\n/**\n * Runs cancel route contract (/api/agent/runs/[id]/cancel)\n */\nexport const runsCancelContract = c.router({\n /**\n * POST /api/agent/runs/:id/cancel\n * Cancel a pending or running run\n */\n cancel: {\n method: \"POST\",\n path: \"/api/agent/runs/:id/cancel\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n body: z.undefined(),\n responses: {\n 200: cancelRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Cancel a pending or running run\",\n },\n});\n\n/**\n * Run events route contract (/api/agent/runs/[id]/events)\n */\nexport const runEventsContract = c.router({\n /**\n * GET /api/agent/runs/:id/events\n * Poll for agent run events with pagination\n */\n getEvents: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/events\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n query: z.object({\n since: eventSequenceCursorQuerySchema.default(-1),\n limit: z.coerce.number().int().min(1).max(100).default(100),\n }),\n responses: {\n 200: eventsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run events\",\n },\n});\n\n/**\n * Telemetry metric schema\n */\nconst telemetryMetricSchema = z.object({\n ts: z.string(),\n cpu: z.number(),\n mem_used: z.number(),\n mem_total: z.number(),\n disk_used: z.number(),\n disk_total: z.number(),\n});\n\ntype LogPaginationCursorKind = \"sequence\" | \"time\";\ntype LogPaginationOrder = \"asc\" | \"desc\";\n\ninterface LogPaginationQueryOptions {\n readonly cursorKind: LogPaginationCursorKind;\n readonly maxLimit?: number;\n readonly defaultLimit?: number;\n readonly defaultOrder?: LogPaginationOrder;\n}\n\nconst ISO_UTC_TIMESTAMP_PATTERN =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.\\d{1,9})?Z$/;\n\nfunction rejectBlankQueryNumber(value: unknown): unknown {\n if (typeof value === \"string\" && value.trim().length === 0) {\n return Number.NaN;\n }\n\n return value;\n}\n\nconst safeIntegerQueryNumberSchema = z.preprocess(\n rejectBlankQueryNumber,\n z.coerce.number().refine(Number.isSafeInteger, {\n message: \"Value must be a safe integer\",\n }),\n);\n\nconst sequenceQueryNumberSchema = safeIntegerQueryNumberSchema\n .refine(\n (value) => {\n return value >= -1;\n },\n { message: \"Sequence cursor must be at least -1\" },\n )\n .refine(\n (value) => {\n return value <= MAX_EVENT_SEQUENCE_NUMBER;\n },\n { message: \"Sequence cursor is out of range\" },\n );\n\nfunction boundedIntegerQueryNumberSchema(min: number, max: number) {\n return z.preprocess(\n rejectBlankQueryNumber,\n z.coerce.number().int().min(min).max(max),\n );\n}\n\nfunction logSinceQuerySchema(cursorKind: LogPaginationCursorKind) {\n return cursorKind === \"time\"\n ? timestampQueryNumberSchema\n : sequenceQueryNumberSchema;\n}\n\nfunction exactUtcTimestamp(value: string): string | null {\n const match = ISO_UTC_TIMESTAMP_PATTERN.exec(value);\n if (!match) {\n return null;\n }\n\n const [, yearPart, monthPart, dayPart, hourPart, minutePart, secondPart] =\n match;\n if (\n yearPart === undefined ||\n monthPart === undefined ||\n dayPart === undefined ||\n hourPart === undefined ||\n minutePart === undefined ||\n secondPart === undefined\n ) {\n return null;\n }\n\n const year = Number(yearPart);\n const month = Number(monthPart);\n const day = Number(dayPart);\n const hour = Number(hourPart);\n const minute = Number(minutePart);\n const second = Number(secondPart);\n const date = new Date(0);\n date.setUTCFullYear(year, month - 1, day);\n date.setUTCHours(hour, minute, second, 0);\n\n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day &&\n date.getUTCHours() === hour &&\n date.getUTCMinutes() === minute &&\n date.getUTCSeconds() === second\n ? value\n : null;\n}\n\nfunction timeCursorTimestampValue(rawValue: string): string | null {\n let decoded: string;\n try {\n decoded = decodeURIComponent(rawValue);\n } catch {\n return null;\n }\n return exactUtcTimestamp(decoded);\n}\n\nfunction hasControlCharacter(value: string): boolean {\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (code <= 31 || code === 127) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction timeCursorTieBreakerValue(rawValue: string): string | null {\n let decoded: string;\n try {\n decoded = decodeURIComponent(rawValue);\n } catch {\n return null;\n }\n\n if (decoded.length === 0 || decoded.length > 2048) {\n return null;\n }\n\n return hasControlCharacter(decoded) ? null : decoded;\n}\n\ntype ParsedLogCursor =\n | {\n readonly kind: \"sequence\";\n readonly order: LogPaginationOrder;\n readonly value: number;\n }\n | {\n readonly kind: \"time\";\n readonly order: LogPaginationOrder;\n readonly timestamp: string;\n readonly tieBreaker: string;\n };\n\nfunction parseLogCursor(cursor: string): ParsedLogCursor | null {\n const timeMatch = /^time:(asc|desc):([^:]+):(.+)$/.exec(cursor);\n if (timeMatch) {\n const order = timeMatch[1];\n const rawTimestamp = timeMatch[2];\n const rawTieBreaker = timeMatch[3];\n if (\n (order !== \"asc\" && order !== \"desc\") ||\n rawTimestamp === undefined ||\n rawTieBreaker === undefined\n ) {\n return null;\n }\n\n const timestamp = timeCursorTimestampValue(rawTimestamp);\n const tieBreaker = timeCursorTieBreakerValue(rawTieBreaker);\n return timestamp === null || tieBreaker === null\n ? null\n : { kind: \"time\", order, timestamp, tieBreaker };\n }\n\n const sequenceMatch = /^sequence:(asc|desc):(-?\\d+)$/.exec(cursor);\n if (!sequenceMatch) {\n return null;\n }\n\n const order = sequenceMatch[1];\n const rawValue = sequenceMatch[2];\n if ((order !== \"asc\" && order !== \"desc\") || rawValue === undefined) {\n return null;\n }\n\n if (!/^-?\\d+$/.test(rawValue)) {\n return null;\n }\n\n const value = Number(rawValue);\n if (!Number.isSafeInteger(value)) {\n return null;\n }\n\n return { kind: \"sequence\", order, value };\n}\n\nfunction sequenceCursorOutOfRange(cursor: ParsedLogCursor): boolean {\n return (\n cursor.kind === \"sequence\" &&\n (cursor.value < -1 || cursor.value > MAX_EVENT_SEQUENCE_NUMBER)\n );\n}\n\nexport function createLogPaginationQuerySchema(\n options: LogPaginationQueryOptions,\n) {\n return z\n .object({\n since: logSinceQuerySchema(options.cursorKind).optional(),\n sinceTime: timestampQueryNumberSchema.optional(),\n cursor: z.string().min(1).optional(),\n limit: z\n .preprocess(\n rejectBlankQueryNumber,\n z.coerce\n .number()\n .int()\n .min(1)\n .max(options.maxLimit ?? 100),\n )\n .default(options.defaultLimit ?? 5),\n order: z.enum([\"asc\", \"desc\"]).default(options.defaultOrder ?? \"desc\"),\n })\n .superRefine((query, ctx) => {\n if (!query.cursor) {\n return;\n }\n\n const cursor = parseLogCursor(query.cursor);\n if (!cursor) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"cursor\"],\n message: \"Cursor is malformed\",\n });\n return;\n }\n\n if (cursor.kind !== options.cursorKind) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"cursor\"],\n message: `Cursor must be a ${options.cursorKind} cursor`,\n });\n }\n\n if (cursor.order !== query.order) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"cursor\"],\n message: \"Cursor order must match query order\",\n });\n }\n\n if (sequenceCursorOutOfRange(cursor)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"cursor\"],\n message: \"Sequence cursor is out of range\",\n });\n }\n });\n}\n\nconst sequenceLogPaginationQuerySchema = createLogPaginationQuerySchema({\n cursorKind: \"sequence\",\n});\n\nconst timeLogPaginationQuerySchema = createLogPaginationQuerySchema({\n cursorKind: \"time\",\n});\n\n/**\n * System log response schema\n */\nconst systemLogResponseSchema = z.object({\n systemLog: z.string(),\n hasMore: z.boolean(),\n nextCursor: z.string().nullable().optional(),\n});\n\n/**\n * Metrics response schema\n */\nconst metricsResponseSchema = z.object({\n metrics: z.array(telemetryMetricSchema),\n hasMore: z.boolean(),\n nextCursor: z.string().nullable().optional(),\n});\n\n/**\n * Agent events response schema (for logs command)\n */\nconst agentEventsResponseSchema = z.object({\n events: z.array(runEventSchema),\n hasMore: z.boolean(),\n nextCursor: z.string().nullable().optional(),\n framework: z.string(),\n});\n\n/**\n * Network log action semantics:\n * ALLOW means the request was allowed to continue.\n * DENY means network policy denied the request.\n * BLOCK means vm0/proxy/auth/preconditions blocked the request locally.\n */\nconst networkLogActionSchema = z.enum([\"ALLOW\", \"DENY\", \"BLOCK\"]);\n\n/**\n * Network log entry schema.\n * [NETWORK_LOG_FIELDS] — keep in sync with all network log schemas\n */\nconst networkLogEntrySchema = z.object({\n timestamp: z.string(),\n type: z.string().optional(),\n action: networkLogActionSchema.optional(),\n host: z.string().optional(),\n port: z.number().optional(),\n method: z.string().optional(),\n url: z.string().optional(),\n status: z.number().optional(),\n latency_ms: z.number().optional(),\n request_size: z.number().optional(),\n response_size: z.number().optional(),\n browser_user_agent: z.boolean().optional(),\n dns_event: z.string().optional(),\n dns_query_type: z.string().optional(),\n dns_result: z.string().optional(),\n dns_serial: z.string().optional(),\n firewall_base: z.string().optional(),\n firewall_name: z.string().optional(),\n firewall_permission: z.string().optional(),\n firewall_rule_match: z.string().optional(),\n firewall_params: z.record(z.string(), z.string()).optional(),\n firewall_billable: z.boolean().optional(),\n firewall_error: z.string().optional(),\n upstream_binding_reason: z.string().optional(),\n upstream_binding_trusted_host: z.string().optional(),\n upstream_binding_request_host: z.string().optional(),\n upstream_binding_request_port: z.number().optional(),\n upstream_binding_server_connected: z.boolean().optional(),\n upstream_binding_server_address: z.string().optional(),\n upstream_binding_server_peername: z.string().optional(),\n upstream_binding_server_sockname: z.string().optional(),\n upstream_binding_client_sockname: z.string().optional(),\n upstream_binding_server_id: z.string().optional(),\n upstream_binding_client_id: z.string().optional(),\n upstream_binding_direct_binding_present: z.boolean().optional(),\n upstream_binding_direct_binding_host: z.string().optional(),\n upstream_binding_direct_binding_port: z.number().optional(),\n upstream_binding_direct_binding_kinds: z.string().optional(),\n upstream_binding_client_binding_count: z.number().optional(),\n upstream_binding_client_binding_match: z.boolean().optional(),\n upstream_binding_client_binding_endpoint_match: z.boolean().optional(),\n upstream_binding_client_binding_hosts: z.string().optional(),\n connector_diagnostic_type: z.string().optional(),\n connector_diagnostic_reason: z.string().optional(),\n connector_diagnostic_env_names: z.array(z.string()).optional(),\n connector_diagnostic_base: z.string().optional(),\n auth_resolved_secrets: z.array(z.string()).optional(),\n auth_refreshed_connectors: z.array(z.string()).optional(),\n auth_refreshed_secrets: z.array(z.string()).optional(),\n auth_cache_hit: z.boolean().optional(),\n auth_url_rewrite: z.boolean().optional(),\n error: z.string().optional(),\n // Capture-only fields (opt-in via captureNetworkBodies)\n request_headers: z.record(z.string(), z.string()).optional(),\n request_body: z.string().optional(),\n request_body_encoding: z.enum([\"utf-8\", \"base64\", \"binary\"]).optional(),\n request_body_truncated: z.boolean().optional(),\n response_headers: z.record(z.string(), z.string()).optional(),\n response_body: z.string().optional(),\n response_body_encoding: z.enum([\"utf-8\", \"base64\", \"binary\"]).optional(),\n response_body_truncated: z.boolean().optional(),\n});\n\n/**\n * Network logs response schema\n */\nconst networkLogsResponseSchema = z.object({\n networkLogs: z.array(networkLogEntrySchema),\n hasMore: z.boolean(),\n nextCursor: z.string().nullable().optional(),\n});\n\n/**\n * System log route contract (/api/agent/runs/[id]/telemetry/system-log)\n */\nexport const runSystemLogContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/system-log\n * Get system log with pagination\n */\n getSystemLog: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/system-log\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n query: timeLogPaginationQuerySchema,\n responses: {\n 200: systemLogResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get system log with pagination\",\n },\n});\n\n/**\n * Metrics route contract (/api/agent/runs/[id]/telemetry/metrics)\n */\nexport const runMetricsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/metrics\n * Get metrics with pagination\n */\n getMetrics: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/metrics\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n query: timeLogPaginationQuerySchema,\n responses: {\n 200: metricsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get metrics with pagination\",\n },\n});\n\n/**\n * Agent events route contract (/api/agent/runs/[id]/telemetry/agent)\n */\nexport const runAgentEventsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/agent\n * Get agent events with pagination (for vm0 logs default)\n */\n getAgentEvents: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/agent\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n query: sequenceLogPaginationQuerySchema,\n responses: {\n 200: agentEventsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent events with pagination\",\n },\n});\n\n/**\n * Network logs route contract (/api/agent/runs/[id]/telemetry/network)\n */\nexport const runNetworkLogsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/network\n * Get network logs with pagination (for vm0 logs --network)\n */\n getNetworkLogs: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/network\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n query: timeLogPaginationQuerySchema,\n responses: {\n 200: networkLogsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get network logs with pagination\",\n },\n});\n\nexport type RunsMainContract = typeof runsMainContract;\nexport type RunsByIdContract = typeof runsByIdContract;\nexport type RunsCancelContract = typeof runsCancelContract;\nexport type RunEventsContract = typeof runEventsContract;\nexport type RunSystemLogContract = typeof runSystemLogContract;\nexport type RunMetricsContract = typeof runMetricsContract;\nexport type RunAgentEventsContract = typeof runAgentEventsContract;\nexport type RunNetworkLogsContract = typeof runNetworkLogsContract;\n\n/**\n * Logs search result schema\n */\nconst searchResultSchema = z.object({\n runId: z.string(),\n agentName: z.string(),\n framework: z.string().nullable().optional(),\n matchedEvent: runEventSchema,\n contextBefore: z.array(runEventSchema),\n contextAfter: z.array(runEventSchema),\n});\n\n/**\n * Logs search response schema\n */\nconst logsSearchResponseSchema = z.object({\n results: z.array(searchResultSchema),\n hasMore: z.boolean(),\n});\n\nconst logsSearchQuerySchema = z.object({\n keyword: z.string().trim().min(1),\n agentId: z.string().uuid().optional(),\n runId: z.string().uuid().optional(),\n since: timestampQueryNumberSchema.optional(),\n limit: boundedIntegerQueryNumberSchema(1, 50).default(20),\n before: boundedIntegerQueryNumberSchema(0, 10).default(0),\n after: boundedIntegerQueryNumberSchema(0, 10).default(0),\n});\n\n/**\n * Logs search route contract (/api/logs/search)\n * Search agent events across runs\n */\nexport const logsSearchContract = c.router({\n /**\n * GET /api/logs/search\n * Search agent events across runs using keyword matching\n */\n searchLogs: {\n method: \"GET\",\n path: \"/api/logs/search\",\n headers: authHeadersSchema,\n query: logsSearchQuerySchema,\n responses: {\n 200: logsSearchResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n },\n summary: \"Search agent events across runs\",\n },\n});\n\nexport type LogsSearchContract = typeof logsSearchContract;\n\n/**\n * Queue entry schema — own entries have real data, others have null for private fields\n * Ownership is detected via runId: non-null = own entry, null = other user's entry\n */\nconst queueEntrySchema = z.object({\n position: z.number(),\n agentName: z.string().nullable(),\n agentDisplayName: z.string().nullable(),\n userEmail: z.string().nullable(),\n createdAt: z.string(),\n isOwner: z.boolean(),\n runId: z.string().nullable(),\n prompt: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n sessionLink: z.string().nullable(),\n});\n\n/**\n * Running task schema — shows currently executing runs\n */\nconst runningTaskSchema = z.object({\n runId: z.string().nullable(),\n agentName: z.string(),\n agentDisplayName: z.string().nullable(),\n userEmail: z.string(),\n startedAt: z.string().nullable(),\n isOwner: z.boolean(),\n});\n\n/**\n * Concurrency info schema\n */\nconst concurrencyInfoSchema = z.object({\n tier: orgTierSchema,\n limit: z.number(),\n active: z.number(),\n available: z.number(),\n});\n\n/**\n * Queue response schema\n */\nconst queueResponseSchema = z.object({\n concurrency: concurrencyInfoSchema,\n queue: z.array(queueEntrySchema),\n runningTasks: z.array(runningTaskSchema),\n estimatedTimePerRun: z.number().nullable(),\n});\n\n/**\n * Runs queue route contract (/api/agent/runs/queue)\n * Returns org-wide queue status with concurrency context\n */\nexport const runsQueueContract = c.router({\n /**\n * GET /api/agent/runs/queue\n * Get org run queue status including concurrency context and queued entries\n */\n getQueue: {\n method: \"GET\",\n path: \"/api/agent/runs/queue\",\n headers: authHeadersSchema,\n responses: {\n 200: queueResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get org run queue status\",\n },\n});\n\nexport type RunsQueueContract = typeof runsQueueContract;\n\n// Export schemas for reuse\nexport {\n runStatusSchema,\n directRunModelProviderTypeSchema,\n unifiedRunRequestSchema,\n createRunResponseSchema,\n getRunResponseSchema,\n runListItemSchema,\n runsListResponseSchema,\n cancelRunResponseSchema,\n runEventSchema,\n runResultSchema,\n runStateSchema,\n eventsResponseSchema,\n telemetryMetricSchema,\n systemLogResponseSchema,\n metricsResponseSchema,\n agentEventsResponseSchema,\n networkLogActionSchema,\n networkLogEntrySchema,\n networkLogsResponseSchema,\n searchResultSchema,\n logsSearchQuerySchema,\n logsSearchResponseSchema,\n queueEntrySchema,\n runningTaskSchema,\n concurrencyInfoSchema,\n queueResponseSchema,\n};\n\n// Export inferred types for consumers\nexport type RunStatus = z.infer<typeof runStatusSchema>;\nexport type RunResult = z.infer<typeof runResultSchema>;\nexport type RunState = z.infer<typeof runStateSchema>;\nexport type RunEvent = z.infer<typeof runEventSchema>;\nexport type CreateRunResponse = z.infer<typeof createRunResponseSchema>;\nexport type GetRunResponse = z.infer<typeof getRunResponseSchema>;\nexport type RunListItem = z.infer<typeof runListItemSchema>;\nexport type RunsListResponse = z.infer<typeof runsListResponseSchema>;\nexport type CancelRunResponse = z.infer<typeof cancelRunResponseSchema>;\nexport type EventsResponse = z.infer<typeof eventsResponseSchema>;\nexport type TelemetryMetric = z.infer<typeof telemetryMetricSchema>;\nexport type SystemLogResponse = z.infer<typeof systemLogResponseSchema>;\nexport type MetricsResponse = z.infer<typeof metricsResponseSchema>;\nexport type AgentEventsResponse = z.infer<typeof agentEventsResponseSchema>;\nexport type NetworkLogAction = z.infer<typeof networkLogActionSchema>;\nexport type NetworkLogEntry = z.infer<typeof networkLogEntrySchema>;\nexport type NetworkLogsResponse = z.infer<typeof networkLogsResponseSchema>;\n/**\n * Axiom raw network event — the shape returned by `queryAxiom` for network logs.\n * Uses `_time` (Axiom's timestamp field) instead of `timestamp`, and includes\n * `runId`/`userId` used for Axiom filtering.\n */\nexport type AxiomNetworkEvent = Omit<NetworkLogEntry, \"timestamp\"> & {\n _time: string;\n runId: string;\n userId: string;\n};\nexport type SearchResult = z.infer<typeof searchResultSchema>;\nexport type LogsSearchResponse = z.infer<typeof logsSearchResponseSchema>;\nexport type QueueEntry = z.infer<typeof queueEntrySchema>;\nexport type RunningTask = z.infer<typeof runningTaskSchema>;\nexport type ConcurrencyInfo = z.infer<typeof concurrencyInfoSchema>;\nexport type QueueResponse = z.infer<typeof queueResponseSchema>;\n","import { z } from \"zod\";\n\nimport { hasRawWhitespace, hasUnsafeUrlCodepoint } from \"./firewall-url-utils\";\nimport { parseSegment, splitPathSegments } from \"./segment-parser\";\n\nconst HOST_DOT_EQUIVALENT_PATTERN = /[\\u3002\\uff0e\\uff61]/g;\nconst HOST_POLICY_HOST_FORBIDDEN_PATTERN = /[%*[\\]/?#@\\\\:{}]/u;\n\n/**\n * Proxy-side firewall configuration for token replacement.\n *\n * All firewall zod schemas are defined here as the single source of truth.\n * Other modules (composes.ts, runners.ts) import from here.\n */\n\n/**\n * Firewall permission schema — a named permission group with matching rules.\n * Rules use the format `METHOD /path` where path is relative to the API entry's base URL.\n */\nexport const firewallPermissionSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n rules: z.array(z.string()),\n});\n\nexport const firewallAwsSigv4AuthSchema = z\n .object({\n accessKeyId: z.string().min(1),\n secretAccessKey: z.string().min(1),\n sessionToken: z.string().min(1).optional(),\n })\n .strict();\n\nconst firewallAuthSchema = z\n .object({\n headers: z.record(z.string(), z.string()).optional(),\n base: z.string().optional(),\n query: z.record(z.string(), z.string()).optional(),\n awsSigv4: firewallAwsSigv4AuthSchema.optional(),\n })\n .superRefine((auth, ctx) => {\n if (!auth.awsSigv4) {\n return;\n }\n if (auth.headers && Object.keys(auth.headers).length > 0) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"headers\"],\n message: \"auth.headers cannot be combined with auth.awsSigv4\",\n });\n }\n if (auth.query && Object.keys(auth.query).length > 0) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"query\"],\n message: \"auth.query cannot be combined with auth.awsSigv4\",\n });\n }\n });\n\nfunction hostPolicyHostHasFixedOwnership(\n value: string,\n options: { readonly allowLeadingDot: boolean },\n): boolean {\n if (!options.allowLeadingDot && value.startsWith(\".\")) {\n return false;\n }\n const rawHost =\n options.allowLeadingDot && value.startsWith(\".\") ? value.slice(1) : value;\n const normalized = rawHost\n .replace(HOST_DOT_EQUIVALENT_PATTERN, \".\")\n .toLowerCase();\n const withoutTrailingDot = normalized.endsWith(\".\")\n ? normalized.slice(0, -1)\n : normalized;\n if (\n withoutTrailingDot === \"\" ||\n !isAscii(value) ||\n hasRawWhitespace(value) ||\n hasUnsafeUrlCodepoint(value) ||\n HOST_POLICY_HOST_FORBIDDEN_PATTERN.test(withoutTrailingDot)\n ) {\n return false;\n }\n if (\n isIpv4LiteralLike(withoutTrailingDot) ||\n parseIpv6Address(withoutTrailingDot)\n ) {\n return false;\n }\n const labels = withoutTrailingDot.split(\".\");\n return (\n labels.length >= 2 &&\n labels.every((label) => {\n return label !== \"\";\n })\n );\n}\n\nconst firewallProviderOwnedHostPolicySchema = z\n .object({\n kind: z.literal(\"providerOwned\"),\n exactHosts: z.array(z.string().min(1)).optional(),\n suffixes: z.array(z.string().min(1)).optional(),\n allowNonDefaultPort: z.boolean().optional(),\n })\n .strict()\n .superRefine((policy, ctx) => {\n if (\n (policy.exactHosts?.length ?? 0) === 0 &&\n (policy.suffixes?.length ?? 0) === 0\n ) {\n ctx.addIssue({\n code: \"custom\",\n message: \"providerOwned host policy requires exactHosts or suffixes\",\n });\n }\n for (const [index, exactHost] of (policy.exactHosts ?? []).entries()) {\n if (\n !hostPolicyHostHasFixedOwnership(exactHost, { allowLeadingDot: false })\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"exactHosts\", index],\n message:\n \"providerOwned host policy exactHosts must be fixed hostnames with at least two labels\",\n });\n }\n }\n for (const [index, suffix] of (policy.suffixes ?? []).entries()) {\n if (!hostPolicyHostHasFixedOwnership(suffix, { allowLeadingDot: true })) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"suffixes\", index],\n message:\n \"providerOwned host policy suffixes must be fixed hostnames with at least two labels\",\n });\n }\n }\n });\n\nconst firewallPublicDestinationHostPolicySchema = z\n .object({\n kind: z.literal(\"publicDestination\"),\n })\n .strict();\n\nexport const firewallBaseHostPolicySchema = z.union([\n firewallProviderOwnedHostPolicySchema,\n firewallPublicDestinationHostPolicySchema,\n]);\n\n/**\n * Firewall API entry — a base URL with optional auth headers/query/base and permissions.\n */\nexport const firewallApiSchema = z.object({\n base: z.string(),\n hostPolicy: firewallBaseHostPolicySchema.optional(),\n auth: firewallAuthSchema,\n permissions: z.array(firewallPermissionSchema).optional(),\n});\n\n/**\n * A single firewall with its name and API entries.\n * Used in the expanded (post-compose) format.\n */\nexport const firewallSchema = z.object({\n name: z.string(),\n apis: z.array(firewallApiSchema),\n});\n\n/**\n * Firewall configuration for proxy-side token replacement.\n * Flat array of firewall entries: [{ name, apis }]\n */\nexport const firewallsSchema = z.array(firewallSchema);\n\nexport const executionFirewallBuiltinEntrySchema = z.object({\n kind: z.literal(\"builtin\"),\n name: z.string().min(1),\n baseUrlVars: z.record(z.string(), z.string()).optional(),\n});\n\nexport const executionFirewallInlineEntrySchema = z.object({\n kind: z.literal(\"inline\"),\n firewall: firewallSchema,\n});\n\nexport const executionFirewallEntrySchema = z.discriminatedUnion(\"kind\", [\n executionFirewallBuiltinEntrySchema,\n executionFirewallInlineEntrySchema,\n]);\n\nexport const executionFirewallsSchema = z.array(executionFirewallEntrySchema);\n\n/**\n * Reserved permission name used by user grant storage to represent the\n * unknown-endpoint policy row for a connector firewall.\n */\nexport const UNKNOWN_PERMISSION_GRANT = \"__unknown__\";\n\n/** Zod schema for validating firewall config definitions. */\nexport const firewallConfigSchema = z.object({\n name: z.string().min(1, \"Firewall name is required\"),\n description: z.string().optional(),\n apis: z\n .array(firewallApiSchema)\n .min(1, \"Firewall must have at least one API entry\"),\n placeholders: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Firewall policy value — per-permission access control.\n * - \"allow\": always allow without prompting\n * - \"deny\": always deny\n * - \"ask\": prompt user for approval each time\n */\nexport const firewallPolicyValueSchema = z.enum([\"allow\", \"deny\", \"ask\"]);\nexport type FirewallPolicyValue = z.infer<typeof firewallPolicyValueSchema>;\n\n/**\n * Per-firewall permission policy: permission map + unknown endpoint handling.\n */\nexport const firewallPolicySchema = z.object({\n policies: z.record(z.string(), firewallPolicyValueSchema),\n unknownPolicy: firewallPolicyValueSchema.optional(),\n});\nexport type FirewallPolicy = z.infer<typeof firewallPolicySchema>;\n\n/**\n * Firewall policies — map of firewall name → firewall permission policy.\n * Example: { \"github\": { policies: { \"repo-read\": \"allow\" }, unknownPolicy: \"allow\" } }\n */\nexport const firewallPoliciesSchema = z.record(\n z.string(),\n firewallPolicySchema,\n);\nexport type FirewallPolicies = z.infer<typeof firewallPoliciesSchema>;\n\n/**\n * Per-firewall grant configuration — which permissions are granted and\n * what policy applies to unknown endpoints (not matching any permission rule).\n * Refs absent from the map are fully permissive (all granted + allow unknown).\n */\nexport const networkPolicySchema = z.object({\n allow: z.array(z.string()),\n deny: z.array(z.string()),\n ask: z.array(z.string()),\n unknownPolicy: firewallPolicyValueSchema,\n});\nexport type NetworkPolicy = z.infer<typeof networkPolicySchema>;\n\n/**\n * Network policies map — firewall name → runtime network policy config.\n * Example: { \"github\": { allow: [\"repo-read\"], deny: [\"admin\"], ask: [], unknownPolicy: \"deny\" } }\n */\nexport const networkPoliciesSchema = z.record(z.string(), networkPolicySchema);\nexport type NetworkPolicies = z.infer<typeof networkPoliciesSchema>;\n\n/** Inferred types */\nexport type FirewallApi = z.infer<typeof firewallApiSchema>;\nexport type FirewallBaseHostPolicy = z.infer<\n typeof firewallBaseHostPolicySchema\n>;\n\nexport class FirewallBaseUrlResolutionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FirewallBaseUrlResolutionError\";\n }\n}\n\nexport type FirewallConfig = z.infer<typeof firewallConfigSchema>;\n/**\n * Extract the union of permission names from a firewall config object.\n * Requires the config to be declared with `as const satisfies FirewallConfig`\n * so that permission name strings are preserved as literal types.\n */\nexport type PermissionNamesOf<T extends FirewallConfig> =\n T[\"apis\"][number] extends infer Api\n ? Api extends { readonly permissions?: infer P }\n ? P extends ReadonlyArray<{ readonly name: infer N }>\n ? N extends string\n ? N\n : never\n : never\n : never\n : never;\nexport type Firewall = z.infer<typeof firewallSchema>;\nexport type Firewalls = z.infer<typeof firewallsSchema>;\nexport type ExecutionFirewallBuiltinEntry = z.infer<\n typeof executionFirewallBuiltinEntrySchema\n>;\nexport type ExecutionFirewallInlineEntry = z.infer<\n typeof executionFirewallInlineEntrySchema\n>;\nexport type ExecutionFirewallEntry = z.infer<\n typeof executionFirewallEntrySchema\n>;\nexport type ExecutionFirewalls = z.infer<typeof executionFirewallsSchema>;\n\n/**\n * Regex pattern matching `${{ secrets.XXX }}` references in auth header templates.\n * Tolerates optional whitespace inside braces: `${{ secrets.X }}` and `${{secrets.X}}`.\n */\nconst AUTH_SECRET_PATTERN =\n /\\$\\{\\{\\s*secrets\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\nconst AUTH_REFERENCE_PATTERN =\n /\\$\\{\\{\\s*(secrets|vars)\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\nconst AUTH_REFERENCE_PATTERN_G = new RegExp(AUTH_REFERENCE_PATTERN.source, \"g\");\nconst AUTH_REFERENCE_PREFIX_PATTERN = new RegExp(\n `^${AUTH_REFERENCE_PATTERN.source}`,\n);\nconst AUTH_TEMPLATE_START = \"${{\";\nconst AUTH_TEMPLATE_URL_PLACEHOLDER = \"placeholder\";\nconst IPV4_MAX_OCTET = 255;\nconst IPV4_OCTET_BASE = IPV4_MAX_OCTET + 1;\nconst IPV4_NON_PUBLIC_RANGES: readonly (readonly [number, number])[] = [\n [0x00000000, 0x00ffffff],\n [0x0a000000, 0x0affffff],\n [0x64400000, 0x647fffff],\n [0x7f000000, 0x7fffffff],\n [0xa9fe0000, 0xa9feffff],\n [0xac100000, 0xac1fffff],\n [0xc0000000, 0xc0000008],\n [0xc000000b, 0xc00000ff],\n [0xc0000200, 0xc00002ff],\n [0xc0586300, 0xc05863ff],\n [0xc0a80000, 0xc0a8ffff],\n [0xc6120000, 0xc613ffff],\n [0xc6336400, 0xc63364ff],\n [0xcb007100, 0xcb0071ff],\n [0xe0000000, 0xffffffff],\n];\n\nexport type FirewallTemplateReferenceNamespace = \"secrets\" | \"vars\";\n\nexport interface FirewallTemplateReferences {\n readonly secrets: readonly string[];\n readonly vars: readonly string[];\n}\n\nexport interface BasicAuthTemplateArg {\n readonly namespace?: FirewallTemplateReferenceNamespace;\n readonly key?: string;\n readonly literal?: string;\n}\n\nexport interface BasicAuthTemplateMatch {\n readonly start: number;\n readonly end: number;\n readonly first: BasicAuthTemplateArg;\n readonly second: BasicAuthTemplateArg;\n}\n\ninterface ParsedBasicArg {\n readonly arg: BasicAuthTemplateArg | null;\n readonly index: number;\n}\n\ninterface ParsedBasicTemplate {\n readonly match: BasicAuthTemplateMatch | null;\n readonly index: number;\n}\n\ninterface BasicAuthTemplateParserContext {\n readonly nextQuoteIndexes: Int32Array;\n readonly nextBackslashIndexes: Int32Array;\n readonly nextTemplateIndexes: Int32Array;\n}\n\nfunction isTemplateWhitespace(char: string): boolean {\n return (\n char === \" \" ||\n char === \"\\t\" ||\n char === \"\\n\" ||\n char === \"\\r\" ||\n char === \"\\f\" ||\n char === \"\\v\"\n );\n}\n\nfunction skipTemplateWhitespace(template: string, index: number): number {\n let nextIndex = index;\n while (\n nextIndex < template.length &&\n isTemplateWhitespace(template[nextIndex]!)\n ) {\n nextIndex += 1;\n }\n return nextIndex;\n}\n\nfunction isIdentifierStart(char: string): boolean {\n const code = char.charCodeAt(0);\n return (\n char === \"_\" || (code >= 65 && code <= 90) || (code >= 97 && code <= 122)\n );\n}\n\nfunction isIdentifierPart(char: string): boolean {\n const code = char.charCodeAt(0);\n return isIdentifierStart(char) || (code >= 48 && code <= 57);\n}\n\nfunction parseTemplateIdentifier(\n template: string,\n index: number,\n): { readonly value: string; readonly index: number } | null {\n if (index >= template.length || !isIdentifierStart(template[index]!)) {\n return null;\n }\n\n let nextIndex = index + 1;\n while (\n nextIndex < template.length &&\n isIdentifierPart(template[nextIndex]!)\n ) {\n nextIndex += 1;\n }\n return {\n value: template.slice(index, nextIndex),\n index: nextIndex,\n };\n}\n\nfunction createBasicAuthTemplateParserContext(\n template: string,\n): BasicAuthTemplateParserContext {\n const nextQuoteIndexes = new Int32Array(template.length + 1);\n const nextBackslashIndexes = new Int32Array(template.length + 1);\n const nextTemplateIndexes = new Int32Array(template.length + 1);\n let nextQuoteIndex = -1;\n let nextBackslashIndex = -1;\n let nextTemplateIndex = -1;\n nextQuoteIndexes[template.length] = nextQuoteIndex;\n nextBackslashIndexes[template.length] = nextBackslashIndex;\n nextTemplateIndexes[template.length] = nextTemplateIndex;\n\n for (let index = template.length - 1; index >= 0; index -= 1) {\n if (template[index] === '\"') {\n nextQuoteIndex = index;\n }\n if (template[index] === \"\\\\\") {\n nextBackslashIndex = index;\n }\n if (template.startsWith(\"${{\", index)) {\n nextTemplateIndex = index;\n }\n nextQuoteIndexes[index] = nextQuoteIndex;\n nextBackslashIndexes[index] = nextBackslashIndex;\n nextTemplateIndexes[index] = nextTemplateIndex;\n }\n\n return { nextQuoteIndexes, nextBackslashIndexes, nextTemplateIndexes };\n}\n\nfunction parseBasicAuthTemplateArg(\n context: BasicAuthTemplateParserContext,\n template: string,\n index: number,\n): ParsedBasicArg {\n let nextIndex = skipTemplateWhitespace(template, index);\n const char = template[nextIndex];\n if (char === \",\" || char === \")\") {\n return { arg: {}, index: nextIndex };\n }\n\n if (char === '\"') {\n const literalStart = nextIndex + 1;\n const quoteIndex = context.nextQuoteIndexes[literalStart] ?? -1;\n if (quoteIndex === -1) {\n const nestedTemplateStart =\n context.nextTemplateIndexes[literalStart] ?? -1;\n return {\n arg: null,\n index:\n nestedTemplateStart === -1 ? template.length : nestedTemplateStart,\n };\n }\n const escapeIndex = context.nextBackslashIndexes[literalStart] ?? -1;\n if (escapeIndex !== -1 && escapeIndex < quoteIndex) {\n const nestedTemplateStart =\n context.nextTemplateIndexes[literalStart] ?? -1;\n return {\n arg: null,\n index:\n nestedTemplateStart !== -1 && nestedTemplateStart < escapeIndex\n ? nestedTemplateStart\n : escapeIndex + 1,\n };\n }\n return {\n arg: { literal: template.slice(literalStart, quoteIndex) },\n index: quoteIndex + 1,\n };\n }\n\n let namespace: FirewallTemplateReferenceNamespace;\n if (template.startsWith(\"secrets.\", nextIndex)) {\n namespace = \"secrets\";\n nextIndex += \"secrets.\".length;\n } else if (template.startsWith(\"vars.\", nextIndex)) {\n namespace = \"vars\";\n nextIndex += \"vars.\".length;\n } else {\n return { arg: null, index: nextIndex };\n }\n\n const key = parseTemplateIdentifier(template, nextIndex);\n if (!key) {\n return { arg: null, index: nextIndex };\n }\n return {\n arg: { namespace, key: key.value },\n index: key.index,\n };\n}\n\nfunction parseBasicAuthTemplateAt(\n context: BasicAuthTemplateParserContext,\n template: string,\n start: number,\n): ParsedBasicTemplate {\n let index = start + \"${{\".length;\n index = skipTemplateWhitespace(template, index);\n if (!template.startsWith(\"basic(\", index)) {\n return { match: null, index: start + \"${{\".length };\n }\n index += \"basic(\".length;\n\n const first = parseBasicAuthTemplateArg(context, template, index);\n if (!first.arg) {\n return { match: null, index: first.index };\n }\n index = skipTemplateWhitespace(template, first.index);\n if (template[index] !== \",\") {\n return { match: null, index: Math.max(index + 1, first.index) };\n }\n index += 1;\n\n const second = parseBasicAuthTemplateArg(context, template, index);\n if (!second.arg) {\n return { match: null, index: second.index };\n }\n index = skipTemplateWhitespace(template, second.index);\n if (template[index] !== \")\") {\n return { match: null, index: Math.max(index + 1, second.index) };\n }\n index += 1;\n index = skipTemplateWhitespace(template, index);\n if (!template.startsWith(\"}}\", index)) {\n return { match: null, index: Math.max(index + 1, second.index) };\n }\n\n const end = index + \"}}\".length;\n return {\n match: {\n start,\n end,\n first: first.arg,\n second: second.arg,\n },\n index: end,\n };\n}\n\nfunction findNextBasicAuthTemplateStart(\n template: string,\n index: number,\n): number {\n let basicIndex = template.indexOf(\"basic(\", index);\n while (basicIndex !== -1) {\n let contentStart = basicIndex;\n while (\n contentStart > index &&\n isTemplateWhitespace(template[contentStart - 1]!)\n ) {\n contentStart -= 1;\n }\n\n const start = contentStart - \"${{\".length;\n if (start >= index && template.startsWith(\"${{\", start)) {\n return start;\n }\n\n basicIndex = template.indexOf(\"basic(\", basicIndex + \"basic(\".length);\n }\n return -1;\n}\n\n/**\n * Parse `${{ basic(username, password) }}` templates in linear time.\n * Each side is secrets.X, vars.X, \"literal\", or empty; comma is required.\n * Literal strings forbid `\"` and `\\`, and are not subject to simple template\n * resolution.\n */\nexport function parseBasicAuthTemplates(\n template: string,\n): readonly BasicAuthTemplateMatch[] {\n const matches: BasicAuthTemplateMatch[] = [];\n let start = findNextBasicAuthTemplateStart(template, 0);\n if (start === -1) {\n return matches;\n }\n\n const context = createBasicAuthTemplateParserContext(template);\n\n while (start !== -1) {\n const parsed = parseBasicAuthTemplateAt(context, template, start);\n if (parsed.match) {\n matches.push(parsed.match);\n start = findNextBasicAuthTemplateStart(template, parsed.index);\n } else {\n start = findNextBasicAuthTemplateStart(\n template,\n Math.max(parsed.index, start + \"${{\".length),\n );\n }\n }\n\n return matches;\n}\n\nexport function replaceBasicAuthTemplates(\n template: string,\n replacer: (match: BasicAuthTemplateMatch) => string,\n): string {\n const matches = parseBasicAuthTemplates(template);\n if (matches.length === 0) {\n return template;\n }\n\n const parts: string[] = [];\n let lastIndex = 0;\n for (const match of matches) {\n parts.push(template.slice(lastIndex, match.start), replacer(match));\n lastIndex = match.end;\n }\n parts.push(template.slice(lastIndex));\n return parts.join(\"\");\n}\n\nfunction forEachSimpleAuthReference(\n template: string,\n basicMatches: readonly BasicAuthTemplateMatch[],\n callback: (namespace: string, name: string) => void,\n): void {\n let basicMatchIndex = 0;\n\n for (const match of template.matchAll(AUTH_REFERENCE_PATTERN)) {\n if (!match[1] || !match[2] || match.index === undefined) {\n continue;\n }\n\n while (\n basicMatchIndex < basicMatches.length &&\n basicMatches[basicMatchIndex]!.end <= match.index\n ) {\n basicMatchIndex += 1;\n }\n\n const basicMatch = basicMatches[basicMatchIndex];\n if (\n basicMatch &&\n match.index >= basicMatch.start &&\n match.index < basicMatch.end\n ) {\n continue;\n }\n\n callback(match[1], match[2]);\n }\n}\n\n/**\n * Extract all secret names referenced in firewall rule auth header templates.\n * Handles both simple `${{ secrets.X }}` and `${{ basic(...) }}` templates.\n * E.g., `Bearer ${{ secrets.GITHUB_TOKEN }}` → `[\"GITHUB_TOKEN\"]`\n */\nexport function extractSecretNamesFromApis(\n apis: FirewallConfig[\"apis\"],\n): string[] {\n const names = new Set<string>();\n for (const entry of apis) {\n for (const value of Object.values(entry.auth.headers ?? {})) {\n const basicMatches = parseBasicAuthTemplates(value);\n forEachSimpleAuthReference(value, basicMatches, (namespace, name) => {\n if (namespace === \"secrets\") {\n names.add(name);\n }\n });\n // basic() args may reference secrets, vars, or be string literals;\n // only collect secrets here (vars don't need placeholders, literals\n // are baked into the config).\n for (const match of basicMatches) {\n if (match.first.namespace === \"secrets\" && match.first.key) {\n names.add(match.first.key);\n }\n if (match.second.namespace === \"secrets\" && match.second.key) {\n names.add(match.second.key);\n }\n }\n }\n // Scan auth.base for secret references (webhook-url connectors).\n // Only simple ${{ secrets.X }} — basic() makes no sense in a URL template.\n if (entry.auth.base) {\n for (const match of entry.auth.base.matchAll(AUTH_SECRET_PATTERN)) {\n names.add(match[1]!);\n }\n }\n // Scan auth.query for secret references (query-param auth connectors).\n // Only simple ${{ secrets.X }} — basic() makes no sense in query params.\n if (entry.auth.query) {\n for (const value of Object.values(entry.auth.query)) {\n for (const match of value.matchAll(AUTH_SECRET_PATTERN)) {\n names.add(match[1]!);\n }\n }\n }\n if (entry.auth.awsSigv4) {\n for (const value of Object.values(entry.auth.awsSigv4)) {\n if (!value) continue;\n for (const match of value.matchAll(AUTH_SECRET_PATTERN)) {\n names.add(match[1]!);\n }\n }\n }\n }\n return [...names];\n}\n\nfunction collectFirewallTemplateReferencesFromValue(\n template: string,\n references: { secrets: Set<string>; vars: Set<string> },\n): void {\n const basicMatches = parseBasicAuthTemplates(template);\n const addReference = (namespace: string, name: string): void => {\n if (namespace === \"secrets\") {\n references.secrets.add(name);\n } else if (namespace === \"vars\") {\n references.vars.add(name);\n }\n };\n\n forEachSimpleAuthReference(template, basicMatches, addReference);\n for (const match of basicMatches) {\n if (match.first.namespace && match.first.key) {\n addReference(match.first.namespace, match.first.key);\n }\n if (match.second.namespace && match.second.key) {\n addReference(match.second.namespace, match.second.key);\n }\n }\n}\n\nexport function extractFirewallTemplateReferences(\n apis: FirewallConfig[\"apis\"],\n): FirewallTemplateReferences {\n const references = {\n secrets: new Set<string>(),\n vars: new Set<string>(),\n };\n\n for (const entry of apis) {\n for (const value of Object.values(entry.auth.headers ?? {})) {\n collectFirewallTemplateReferencesFromValue(value, references);\n }\n if (entry.auth.base) {\n collectFirewallTemplateReferencesFromValue(entry.auth.base, references);\n }\n for (const value of Object.values(entry.auth.query ?? {})) {\n collectFirewallTemplateReferencesFromValue(value, references);\n }\n for (const value of Object.values(entry.auth.awsSigv4 ?? {})) {\n if (value) {\n collectFirewallTemplateReferencesFromValue(value, references);\n }\n }\n }\n\n return {\n secrets: [...references.secrets],\n vars: [...references.vars],\n };\n}\n\n/**\n * Regex pattern matching `${{ vars.XXX }}` references in base URL templates.\n */\nconst BASE_URL_VARS_PATTERN = /\\$\\{\\{\\s*vars\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/;\nconst BASE_URL_VARS_PATTERN_G = new RegExp(BASE_URL_VARS_PATTERN.source, \"g\");\nconst URL_COMPONENT_DELIMITER_PATTERN = /[/?#]/;\nconst AUTHORITY_VAR_STRUCTURE_CHARS = new Set([\"/\", \"?\", \"#\", \"@\", \"\\\\\"]);\nconst AUTHORITY_FRAGMENT_VAR_STRUCTURE_CHARS = new Set([\n \"/\",\n \":\",\n \"?\",\n \"#\",\n \"@\",\n \"\\\\\",\n]);\nconst PERCENT_DECODED_BOUNDARY_CHARS = new Set([\"/\", \":\", \"?\", \"#\", \"@\", \"\\\\\"]);\nconst BASE_URL_VAR_PARAMETER_CHARS = new Set([\"{\", \"}\"]);\nconst PATH_VAR_STRUCTURE_CHARS = new Set([\"/\", \"?\", \"#\", \"\\\\\"]);\nconst PORT_VAR_PATTERN = /^[0-9]+$/;\nconst MAX_PATH_PERCENT_DECODE_PASSES = 5;\n\n/**\n * Check if a base URL contains `${{ vars.X }}` template references.\n */\nexport function hasBaseUrlVars(base: string): boolean {\n return BASE_URL_VARS_PATTERN.test(base);\n}\n\nexport function extractBaseUrlVarNames(base: string): string[] {\n const names = new Set<string>();\n for (const match of base.matchAll(BASE_URL_VARS_PATTERN_G)) {\n names.add(match[1]!);\n }\n return [...names];\n}\n\nfunction baseUrlVariableError(\n base: string,\n serviceName: string,\n name: string,\n detail: string,\n): Error {\n return new Error(\n errMsg(base, serviceName, `base URL variable \"${name}\" ${detail}`),\n );\n}\n\nfunction validateBaseUrlVariableCommonSyntax({\n base,\n serviceName,\n name,\n value,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n}): void {\n if (WHITESPACE_PATTERN.test(value)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not contain whitespace\",\n );\n }\n if (hasUnsafeUrlCodepoint(value)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not contain control characters or invalid Unicode\",\n );\n }\n for (const char of value) {\n if (BASE_URL_VAR_PARAMETER_CHARS.has(char)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not contain firewall parameter syntax\",\n );\n }\n }\n}\n\nfunction pathPartDotPrefix(part: string): string {\n return part.split(\";\", 1)[0]!;\n}\n\nfunction pathPartIsDotSegment(part: string): boolean {\n const dotPrefix = pathPartDotPrefix(part);\n return dotPrefix === \".\" || dotPrefix === \"..\";\n}\n\nfunction pathSegmentContainsDotPathPart(segment: string): boolean {\n if (pathPartIsDotSegment(segment)) return true;\n return segment.split(\"/\").some((part) => {\n return pathPartIsDotSegment(part);\n });\n}\n\nfunction pathSegmentHasUnsafeSyntaxParts(\n segment: string,\n rejectPathStructure: boolean,\n): boolean {\n if (hasUnsafeUrlCodepoint(segment)) return true;\n if (segment.includes(\"\\\\\")) return true;\n if (pathSegmentContainsDotPathPart(segment)) return true;\n if (!rejectPathStructure) return false;\n for (const char of segment) {\n if (PATH_VAR_STRUCTURE_CHARS.has(char)) return true;\n }\n return false;\n}\n\nfunction normalizedPathSegmentHasUnsafeSyntax(\n segment: string,\n rejectPathStructure: boolean,\n): boolean {\n const normalized = segment.normalize(\"NFKC\");\n if (normalized === segment) return false;\n if (normalized.includes(\"%\")) return true;\n return pathSegmentHasUnsafeSyntaxParts(normalized, rejectPathStructure);\n}\n\nfunction percentDecodePathSegment(\n segment: string,\n rejectPathStructure: boolean,\n): string | null {\n if (!segment.includes(\"%\")) return segment;\n for (let i = 0; i < segment.length; i += 1) {\n if (segment[i] !== \"%\") continue;\n if (\n i + 2 >= segment.length ||\n !isHexDigit(segment[i + 1]!) ||\n !isHexDigit(segment[i + 2]!)\n ) {\n return null;\n }\n }\n\n let decoded: string;\n try {\n decoded = decodeURIComponent(segment);\n } catch {\n return null;\n }\n if (rejectPathStructure) {\n for (const char of decoded) {\n if (\n PATH_VAR_STRUCTURE_CHARS.has(char) ||\n WHITESPACE_PATTERN.test(char) ||\n UNICODE_CONTROL_PATTERN.test(char)\n ) {\n return null;\n }\n }\n }\n return decoded;\n}\n\nfunction pathSegmentHasUnsafeSyntax(\n segment: string,\n rejectPathStructure: boolean,\n): boolean {\n let current = segment;\n for (let pass = 0; pass < MAX_PATH_PERCENT_DECODE_PASSES; pass += 1) {\n if (\n pathSegmentHasUnsafeSyntaxParts(current, rejectPathStructure) ||\n normalizedPathSegmentHasUnsafeSyntax(current, rejectPathStructure)\n ) {\n return true;\n }\n const decoded = percentDecodePathSegment(current, rejectPathStructure);\n if (decoded === null) return true;\n if (decoded === current) return false;\n current = decoded;\n }\n\n if (\n pathSegmentHasUnsafeSyntaxParts(current, rejectPathStructure) ||\n normalizedPathSegmentHasUnsafeSyntax(current, rejectPathStructure)\n ) {\n return true;\n }\n const decoded = percentDecodePathSegment(current, rejectPathStructure);\n return decoded === null || decoded !== current;\n}\n\nexport function hasUnsafeFirewallPath(path: string): boolean {\n return path.split(\"/\").some((segment) => {\n return pathSegmentHasUnsafeSyntax(segment, false);\n });\n}\n\nfunction validateBaseUrlVariablePercentEncoding({\n base,\n serviceName,\n name,\n value,\n structureChars,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n readonly structureChars: ReadonlySet<string>;\n}): string {\n for (let i = 0; i < value.length; i += 1) {\n if (value[i] !== \"%\") {\n continue;\n }\n if (\n i + 2 >= value.length ||\n !isHexDigit(value[i + 1]!) ||\n !isHexDigit(value[i + 2]!)\n ) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"has invalid percent encoding\",\n );\n }\n\n let end = i;\n while (\n end + 2 < value.length &&\n value[end] === \"%\" &&\n isHexDigit(value[end + 1]!) &&\n isHexDigit(value[end + 2]!)\n ) {\n end += 3;\n }\n\n let decoded: string;\n try {\n decoded = decodeURIComponent(value.slice(i, end));\n } catch {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"has invalid percent encoding\",\n );\n }\n for (const char of decoded) {\n if (\n structureChars.has(char) ||\n WHITESPACE_PATTERN.test(char) ||\n UNICODE_CONTROL_PATTERN.test(char)\n ) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not contain encoded URL structure\",\n );\n }\n }\n i = end - 1;\n }\n if (!value.includes(\"%\")) {\n return value;\n }\n try {\n return decodeURIComponent(value);\n } catch {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"has invalid percent encoding\",\n );\n }\n}\n\nfunction validateBaseUrlPathSegment({\n base,\n serviceName,\n name,\n segment,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly segment: string;\n}): void {\n if (pathSegmentHasUnsafeSyntax(segment, true)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not contain unsafe path segments\",\n );\n }\n}\n\nfunction rawPathFromBaseUrl(value: string): string {\n const schemeEnd = value.indexOf(\"://\");\n if (schemeEnd === -1) return \"\";\n const afterScheme = value.slice(schemeEnd + 3);\n const pathStart = afterScheme.indexOf(\"/\");\n if (pathStart === -1) return \"\";\n const pathAndAfter = afterScheme.slice(pathStart);\n const pathEnd = pathAndAfter.search(/[?#]/);\n return pathEnd === -1 ? pathAndAfter : pathAndAfter.slice(0, pathEnd);\n}\n\nfunction validateBaseUrlPrefixVariable({\n base,\n serviceName,\n name,\n value,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n}): void {\n validateBaseUrl(value, serviceName);\n const url = new URL(value);\n if (url.search || url.hash) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not contain query or fragment before a fixed path suffix\",\n );\n }\n const rawPath = rawPathFromBaseUrl(value);\n for (const segment of rawPath.split(\"/\")) {\n if (pathSegmentHasUnsafeSyntax(segment, false)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not contain unsafe path segments before a fixed path suffix\",\n );\n }\n }\n}\n\nfunction validateResolvedBaseUrlPathSafety(\n templateBase: string,\n serviceName: string,\n resolved: string,\n): void {\n const rawPath = rawPathFromBaseUrl(resolved);\n for (const segment of rawPath.split(\"/\")) {\n if (pathSegmentHasUnsafeSyntax(segment, false)) {\n throw new Error(\n errMsg(\n templateBase,\n serviceName,\n \"resolved base URL must not contain unsafe path segments\",\n ),\n );\n }\n }\n}\n\nfunction validateBaseUrlAuthorityVariable({\n base,\n serviceName,\n name,\n value,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n}): void {\n for (const char of value) {\n if (AUTHORITY_VAR_STRUCTURE_CHARS.has(char)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not introduce URL structure\",\n );\n }\n }\n validateBaseUrlVariablePercentEncoding({\n base,\n serviceName,\n name,\n value,\n structureChars: PERCENT_DECODED_BOUNDARY_CHARS,\n });\n validateBaseUrl(`https://${value}`, serviceName);\n}\n\nfunction validateBaseUrlAuthorityFragmentVariable({\n base,\n serviceName,\n name,\n value,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n}): void {\n for (const char of value) {\n if (AUTHORITY_FRAGMENT_VAR_STRUCTURE_CHARS.has(char)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not introduce URL structure\",\n );\n }\n }\n validateBaseUrlVariablePercentEncoding({\n base,\n serviceName,\n name,\n value,\n structureChars: PERCENT_DECODED_BOUNDARY_CHARS,\n });\n}\n\nfunction validateBaseUrlPortVariable({\n base,\n serviceName,\n name,\n value,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n}): void {\n if (!PORT_VAR_PATTERN.test(value)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must be a numeric URL port\",\n );\n }\n}\n\nfunction validateBaseUrlPathVariable({\n base,\n serviceName,\n name,\n value,\n prefix,\n suffix,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n readonly prefix: string;\n readonly suffix: string;\n}): void {\n for (const char of value) {\n if (PATH_VAR_STRUCTURE_CHARS.has(char)) {\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"must not introduce path structure\",\n );\n }\n }\n const decoded = validateBaseUrlVariablePercentEncoding({\n base,\n serviceName,\n name,\n value,\n structureChars: PATH_VAR_STRUCTURE_CHARS,\n });\n const prefixSegment = prefix.slice(prefix.lastIndexOf(\"/\") + 1);\n const suffixSegmentEnd = suffix.search(URL_COMPONENT_DELIMITER_PATTERN);\n const suffixSegment =\n suffixSegmentEnd === -1 ? suffix : suffix.slice(0, suffixSegmentEnd);\n validateBaseUrlPathSegment({\n base,\n serviceName,\n name,\n segment: `${prefixSegment}${decoded}${suffixSegment}`,\n });\n}\n\nfunction prefixIsInsideAuthority(prefix: string): boolean {\n const schemeEnd = prefix.indexOf(\"://\");\n if (schemeEnd === -1) return false;\n const afterScheme = prefix.slice(schemeEnd + 3);\n return !URL_COMPONENT_DELIMITER_PATTERN.test(afterScheme);\n}\n\nfunction prefixIsInsidePath(prefix: string): boolean {\n const schemeEnd = prefix.indexOf(\"://\");\n if (schemeEnd === -1) return false;\n const afterScheme = prefix.slice(schemeEnd + 3);\n if (afterScheme.includes(\"?\") || afterScheme.includes(\"#\")) return false;\n return afterScheme.includes(\"/\");\n}\n\nfunction suffixAuthorityPrefix(suffix: string): string {\n const delimiterIndex = suffix.search(URL_COMPONENT_DELIMITER_PATTERN);\n return delimiterIndex === -1 ? suffix : suffix.slice(0, delimiterIndex);\n}\n\nfunction authoritySuffixHasFixedHostOwnership(\n authoritySuffix: string,\n): boolean {\n const hostSuffix = authoritySuffix\n .replace(/^[.]+/u, \"\")\n .replace(/:\\d*$/u, \"\");\n const labels = hostSuffix.split(\".\").filter((label) => {\n return label !== \"\";\n });\n return labels.length >= 2;\n}\n\nfunction validateBaseUrlTemplateVariable({\n base,\n serviceName,\n name,\n value,\n prefix,\n suffix,\n}: {\n readonly base: string;\n readonly serviceName: string;\n readonly name: string;\n readonly value: string;\n readonly prefix: string;\n readonly suffix: string;\n}): void {\n validateBaseUrlVariableCommonSyntax({ base, serviceName, name, value });\n if (prefix === \"\" && suffix === \"\") {\n return;\n }\n if (prefix === \"\" && suffix.startsWith(\"/\")) {\n validateBaseUrlPrefixVariable({ base, serviceName, name, value });\n return;\n }\n if (prefix.endsWith(\"://\") && (suffix === \"\" || suffix.startsWith(\"/\"))) {\n validateBaseUrlAuthorityVariable({ base, serviceName, name, value });\n return;\n }\n if (\n prefixIsInsideAuthority(prefix) &&\n prefix.endsWith(\":\") &&\n (suffix === \"\" || suffix.startsWith(\"/\"))\n ) {\n validateBaseUrlPortVariable({ base, serviceName, name, value });\n return;\n }\n if (prefixIsInsideAuthority(prefix) && suffixAuthorityPrefix(suffix) !== \"\") {\n validateBaseUrlAuthorityFragmentVariable({\n base,\n serviceName,\n name,\n value,\n });\n return;\n }\n if (prefixIsInsidePath(prefix)) {\n validateBaseUrlPathVariable({\n base,\n serviceName,\n name,\n value,\n prefix,\n suffix,\n });\n return;\n }\n throw baseUrlVariableError(\n base,\n serviceName,\n name,\n \"is used in an unsupported base URL template position\",\n );\n}\n\nexport function firewallAuthInjectsCredentials(\n auth: FirewallApi[\"auth\"],\n): boolean {\n return (\n Object.keys(auth.headers ?? {}).length > 0 ||\n Object.keys(auth.query ?? {}).length > 0 ||\n Object.keys(auth.awsSigv4 ?? {}).length > 0 ||\n (typeof auth.base === \"string\" && auth.base.length > 0)\n );\n}\n\nfunction baseUrlScheme(base: string): string {\n const schemeEnd = base.indexOf(\"://\");\n if (schemeEnd === -1) return \"\";\n return base.slice(0, schemeEnd).toLowerCase();\n}\n\nexport function firewallBaseUrlTemplateNeedsHostPolicy(base: string): boolean {\n if (!hasBaseUrlVars(base)) return false;\n\n for (const match of base.matchAll(BASE_URL_VARS_PATTERN_G)) {\n const fullMatch = match[0];\n const matchIndex = match.index!;\n const prefix = base.slice(0, matchIndex);\n const suffix = base.slice(matchIndex + fullMatch.length);\n if (prefix === \"\" && (suffix === \"\" || suffix.startsWith(\"/\"))) {\n return true;\n }\n if (prefix.endsWith(\"://\")) {\n const authoritySuffix = suffixAuthorityPrefix(suffix);\n if (\n authoritySuffix === \"\" ||\n !authoritySuffixHasFixedHostOwnership(authoritySuffix)\n ) {\n return true;\n }\n }\n if (prefixIsInsideAuthority(prefix) && !prefix.endsWith(\":\")) {\n const authoritySuffix = suffixAuthorityPrefix(suffix);\n if (\n authoritySuffix === \"\" ||\n !authoritySuffixHasFixedHostOwnership(authoritySuffix)\n ) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction validateCredentialedBaseUrlTransportValue(\n base: string,\n serviceName: string,\n credentialed: boolean,\n): void {\n if (!credentialed) return;\n if (baseUrlScheme(base) === REQUIRED_AUTH_BASE_URL_SCHEME) return;\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": credentialed base URL must use https`,\n );\n}\n\nfunction normalizeHostPolicyHostname(hostname: string): string {\n let normalized = hostname\n .replace(HOST_DOT_EQUIVALENT_PATTERN, \".\")\n .toLowerCase();\n if (normalized.endsWith(\".\")) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\n\nfunction normalizeHostPolicySuffix(suffix: string): string {\n const withoutLeadingDot = suffix.startsWith(\".\") ? suffix.slice(1) : suffix;\n return normalizeHostPolicyHostname(withoutLeadingDot);\n}\n\nfunction parseCanonicalIpv4Address(value: string): readonly number[] | null {\n if (!isCanonicalIpv4Address(value)) {\n return null;\n }\n return value.split(\".\").map((part) => {\n return Number(part);\n });\n}\n\nfunction ipv4PartsToNumber(parts: readonly number[]): number | null {\n if (parts.length !== 4) {\n return null;\n }\n return parts.reduce((acc, part) => {\n return acc * IPV4_OCTET_BASE + part;\n }, 0);\n}\n\nfunction isPublicIpv4Address(parts: readonly number[]): boolean {\n const value = ipv4PartsToNumber(parts);\n if (value === null) {\n return false;\n }\n return !IPV4_NON_PUBLIC_RANGES.some(([start, end]) => {\n return value >= start && value <= end;\n });\n}\n\nfunction parseIpv6Word(value: string): number | null {\n if (\n value === \"\" ||\n value.length > 4 ||\n ![...value].every((char) => {\n return isHexDigit(char);\n })\n ) {\n return null;\n }\n return Number.parseInt(value, 16);\n}\n\nfunction parseIpv6WordList(value: string): readonly number[] | null {\n if (value === \"\") {\n return [];\n }\n const words: number[] = [];\n for (const part of value.split(\":\")) {\n const word = parseIpv6Word(part);\n if (word === null) {\n return null;\n }\n words.push(word);\n }\n return words;\n}\n\nfunction parseIpv6Address(value: string): readonly number[] | null {\n if (value.includes(\"%\")) {\n return null;\n }\n\n let normalized = value.toLowerCase();\n if (normalized.includes(\".\")) {\n const lastColon = normalized.lastIndexOf(\":\");\n if (lastColon === -1) {\n return null;\n }\n const ipv4Parts = parseCanonicalIpv4Address(\n normalized.slice(lastColon + 1),\n );\n if (!ipv4Parts) {\n return null;\n }\n const highWord = (ipv4Parts[0]! << 8) + ipv4Parts[1]!;\n const lowWord = (ipv4Parts[2]! << 8) + ipv4Parts[3]!;\n normalized = `${normalized.slice(0, lastColon)}:${highWord.toString(16)}:${lowWord.toString(16)}`;\n }\n\n const compressed = normalized.split(\"::\");\n if (compressed.length > 2) {\n return null;\n }\n\n const left = parseIpv6WordList(compressed[0]!);\n const right =\n compressed.length === 2 ? parseIpv6WordList(compressed[1]!) : [];\n if (!left || !right) {\n return null;\n }\n\n if (compressed.length === 1) {\n return left.length === 8 ? left : null;\n }\n\n const zeroCount = 8 - left.length - right.length;\n if (zeroCount < 1) {\n return null;\n }\n return [\n ...left,\n ...Array.from({ length: zeroCount }, () => {\n return 0;\n }),\n ...right,\n ];\n}\n\nfunction isPublicIpv6SpecialRegistryException(\n words: readonly number[],\n): boolean {\n const second = words[1]!;\n if (\n second === 0x0001 &&\n words[2] === 0 &&\n words[3] === 0 &&\n words[4] === 0 &&\n words[5] === 0 &&\n words[6] === 0 &&\n words[7]! >= 1 &&\n words[7]! <= 3\n ) {\n return true;\n }\n if (second === 0x0003) {\n return true;\n }\n if (second === 0x0004 && words[2] === 0x0112) {\n return true;\n }\n if (second >= 0x0020 && second <= 0x002f) {\n return true;\n }\n return second >= 0x0030 && second <= 0x003f;\n}\n\nfunction isPublicIpv6Address(words: readonly number[]): boolean {\n if (words.length !== 8) {\n return false;\n }\n const first = words[0]!;\n const second = words[1]!;\n if ((first & 0xe000) !== 0x2000) {\n return false;\n }\n if (first === 0x2001 && second <= 0x01ff) {\n return isPublicIpv6SpecialRegistryException(words);\n }\n if (first === 0x2001 && second === 0x0db8) {\n return false;\n }\n if (first === 0x3fff && second <= 0x0fff) {\n return false;\n }\n if (first === 0x2002) {\n return false;\n }\n return true;\n}\n\nfunction hostPolicyIpLiteralIsPublic(hostname: string): boolean | null {\n if (hostname.startsWith(\"[\") && hostname.endsWith(\"]\")) {\n const words = parseIpv6Address(hostname.slice(1, -1));\n return words ? isPublicIpv6Address(words) : false;\n }\n\n const ipv4Parts = parseCanonicalIpv4Address(hostname);\n if (ipv4Parts) {\n return isPublicIpv4Address(ipv4Parts);\n }\n\n const normalizedIpv4Host = normalizeHostForIpv4LiteralSyntax(hostname);\n if (isIpv4LiteralLike(normalizedIpv4Host)) {\n return false;\n }\n return null;\n}\n\nfunction providerOwnedHostMatches(\n hostname: string,\n hostPolicy: Extract<\n FirewallBaseHostPolicy,\n { readonly kind: \"providerOwned\" }\n >,\n options: { readonly allowExactHosts?: boolean } = {},\n): boolean {\n if (options.allowExactHosts !== false) {\n const exactHosts = hostPolicy.exactHosts ?? [];\n for (const exactHost of exactHosts) {\n if (hostname === normalizeHostPolicyHostname(exactHost)) {\n return true;\n }\n }\n }\n\n const suffixes = hostPolicy.suffixes ?? [];\n for (const suffix of suffixes) {\n const normalizedSuffix = normalizeHostPolicySuffix(suffix);\n if (\n normalizedSuffix !== \"\" &&\n hostname.length > normalizedSuffix.length &&\n hostname.endsWith(`.${normalizedSuffix}`)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction baseUrlAuthorityHasParams(base: string): boolean {\n const authority = rawAuthorityFromBaseUrl(base);\n return authority !== null && hasBaseUrlParams(authority);\n}\n\nfunction validateHostPolicyShape(\n base: string,\n serviceName: string,\n hostPolicy: FirewallBaseHostPolicy,\n): void {\n const result = firewallBaseHostPolicySchema.safeParse(hostPolicy);\n if (result.success) return;\n\n const message = result.error.issues\n .map((issue) => {\n return issue.message;\n })\n .join(\"; \");\n throw new Error(\n errMsg(base, serviceName, `hostPolicy is invalid: ${message}`),\n );\n}\n\nfunction urlForHostPolicyValidation(base: string, serviceName: string): URL {\n if (!baseUrlAuthorityHasParams(base)) return new URL(base);\n const schemeEnd = base.indexOf(\"://\");\n const authority = rawAuthorityFromBaseUrl(base);\n if (schemeEnd === -1 || authority === null) return new URL(base);\n const authorityParts = splitParameterizedAuthority(\n authority,\n base,\n serviceName,\n );\n const host = splitAuthorityHostSegments(authorityParts.normalizedHost)\n .map((segment) => {\n return hostSegmentForSyntaxValidation(segment, base, serviceName);\n })\n .join(\".\");\n return new URL(\n `${base.slice(0, schemeEnd)}://${host}${authorityParts.portSuffix}`,\n );\n}\n\nexport function validateBaseUrlHostPolicy({\n base,\n diagnosticBase = base,\n serviceName,\n hostPolicy,\n}: {\n readonly base: string;\n readonly diagnosticBase?: string;\n readonly serviceName: string;\n readonly hostPolicy: FirewallBaseHostPolicy | undefined;\n}): void {\n if (!hostPolicy) {\n return;\n }\n\n validateHostPolicyShape(diagnosticBase, serviceName, hostPolicy);\n if (hasBaseUrlVars(base)) {\n return;\n }\n\n const authorityHasParams = baseUrlAuthorityHasParams(base);\n const url = urlForHostPolicyValidation(base, serviceName);\n const rawAuthority = rawAuthorityFromBaseUrl(base);\n const hostname = normalizeHostPolicyHostname(url.hostname);\n if (hostPolicy.kind === \"providerOwned\") {\n if (\n !providerOwnedHostMatches(hostname, hostPolicy, {\n allowExactHosts: !authorityHasParams,\n })\n ) {\n throw new Error(\n errMsg(\n diagnosticBase,\n serviceName,\n `host policy does not allow resolved host \"${hostname}\"`,\n ),\n );\n }\n if (!hostPolicy.allowNonDefaultPort && url.port !== \"\") {\n throw new Error(\n errMsg(\n diagnosticBase,\n serviceName,\n \"host policy does not allow non-default ports\",\n ),\n );\n }\n return;\n }\n\n const publicDestinationHost =\n rawAuthority === null ? url.hostname : rawHostFromAuthority(rawAuthority);\n const publicIpLiteral = hostPolicyIpLiteralIsPublic(publicDestinationHost);\n if (publicIpLiteral === false) {\n throw new Error(\n errMsg(\n diagnosticBase,\n serviceName,\n `host policy does not allow non-public IP literal \"${hostname}\"`,\n ),\n );\n }\n}\n\nexport interface ResolveFirewallBaseUrlTemplateOptions {\n readonly serviceName: string;\n readonly base: string;\n readonly vars: Record<string, string> | undefined;\n readonly credentialed?: boolean;\n readonly hostPolicy?: FirewallBaseHostPolicy;\n}\n\nexport function resolveFirewallBaseUrlTemplate({\n serviceName,\n base,\n vars,\n credentialed = false,\n hostPolicy,\n}: ResolveFirewallBaseUrlTemplateOptions): string {\n if (!hasBaseUrlVars(base)) return base;\n\n try {\n let resolved = \"\";\n let lastIndex = 0;\n for (const match of base.matchAll(BASE_URL_VARS_PATTERN_G)) {\n const fullMatch = match[0];\n const name = match[1]!;\n const matchIndex = match.index!;\n const value = vars?.[name];\n if (!value) {\n throw new FirewallBaseUrlResolutionError(\n `Firewall \"${serviceName}\" base URL requires variable \"${name}\" but it was not provided`,\n );\n }\n validateBaseUrlTemplateVariable({\n base,\n serviceName,\n name,\n value,\n prefix: base.slice(0, matchIndex),\n suffix: base.slice(matchIndex + fullMatch.length),\n });\n resolved += base.slice(lastIndex, matchIndex) + value;\n lastIndex = matchIndex + fullMatch.length;\n }\n resolved += base.slice(lastIndex);\n validateResolvedBaseUrlPathSafety(base, serviceName, resolved);\n validateBaseUrl(resolved, serviceName);\n validateCredentialedBaseUrlTransportValue(\n resolved,\n serviceName,\n credentialed,\n );\n validateBaseUrlHostPolicy({\n base: resolved,\n diagnosticBase: base,\n serviceName,\n hostPolicy,\n });\n return resolved;\n } catch (error) {\n if (error instanceof FirewallBaseUrlResolutionError) {\n throw error;\n }\n if (error instanceof Error) {\n throw new FirewallBaseUrlResolutionError(error.message);\n }\n throw error;\n }\n}\n\n/**\n * Resolve `${{ vars.X }}` templates in firewall base URLs.\n * Returns a new array with all base URL templates replaced by actual values.\n * Throws if a referenced variable is not provided.\n */\nexport function resolveFirewallBaseUrlVars(\n firewalls: Firewalls,\n vars: Record<string, string> | undefined,\n): Firewalls {\n return firewalls.map((fw) => {\n return {\n ...fw,\n apis: fw.apis.map((api) => {\n if (!hasBaseUrlVars(api.base)) return api;\n const resolved = resolveFirewallBaseUrlTemplate({\n serviceName: fw.name,\n base: api.base,\n vars,\n credentialed: firewallAuthInjectsCredentials(api.auth),\n hostPolicy: api.hostPolicy,\n });\n return { ...api, base: resolved };\n }),\n };\n });\n}\n\n/**\n * Check if a base URL contains `{name}` style parameter placeholders\n * (as opposed to `${{ vars.X }}` template references).\n */\nexport function hasBaseUrlParams(base: string): boolean {\n // Strip ${{ ... }} template references, then check for remaining { }.\n // Uses string iteration instead of regex to avoid ReDoS risk.\n let stripped = base;\n let start = stripped.indexOf(\"${{\");\n while (start !== -1) {\n const end = stripped.indexOf(\"}}\", start + 3);\n if (end === -1) break;\n stripped = stripped.slice(0, start) + stripped.slice(end + 2);\n start = stripped.indexOf(\"${{\");\n }\n return stripped.includes(\"{\") && stripped.includes(\"}\");\n}\n\nconst HOST_WILDCARD_PARAM_PREFIX = \"hostWildcard\";\n\ninterface RawBaseUrlAuthority {\n readonly authority: string;\n readonly start: number;\n readonly end: number;\n}\n\ninterface RawWildcardAuthorityParts {\n readonly host: string;\n readonly portSuffix: string;\n}\n\nfunction rawBaseUrlAuthorityRange(base: string): RawBaseUrlAuthority | null {\n const schemeEnd = base.indexOf(\"://\");\n if (schemeEnd === -1) return null;\n const start = schemeEnd + 3;\n const rest = base.slice(start);\n const delimiterIndexes = [\n rest.indexOf(\"/\"),\n rest.indexOf(\"?\"),\n rest.indexOf(\"#\"),\n ].filter((index) => {\n return index !== -1;\n });\n const end =\n delimiterIndexes.length === 0\n ? base.length\n : start + Math.min(...delimiterIndexes);\n return {\n authority: base.slice(start, end),\n start,\n end,\n };\n}\n\nfunction splitRawWildcardAuthority(\n authority: string,\n): RawWildcardAuthorityParts | null {\n if (\n authority === \"\" ||\n authority.includes(\"@\") ||\n authorityHasEmptyPort(authority)\n ) {\n return null;\n }\n\n if (authority.startsWith(\"[\")) {\n return null;\n }\n\n const portSeparator = authority.lastIndexOf(\":\");\n if (portSeparator === -1) {\n return { host: authority, portSuffix: \"\" };\n }\n if (authority.indexOf(\":\") !== portSeparator) {\n return null;\n }\n return {\n host: authority.slice(0, portSeparator),\n portSuffix: authority.slice(portSeparator),\n };\n}\n\n/**\n * Convert user-facing `*` wildcards in a URL host into the existing\n * parameterized host grammar understood by the firewall matcher.\n *\n * Examples:\n * - https://*.example.com/ -> https://{hostWildcard1}.example.com/\n * - https://api-*.example.com/ -> https://api-{hostWildcard1}.example.com/\n * - https://*.*.example.com/ -> https://{hostWildcard1}.{hostWildcard2}.example.com/\n *\n * Each `*` is a single host-label wildcard. Only the host is transformed.\n * Path `*` characters remain literal.\n */\nexport function expandHostWildcardsInBaseUrl(base: string): string {\n if (base.includes(\"\\\\\")) {\n return base;\n }\n\n const authorityRange = rawBaseUrlAuthorityRange(base);\n if (authorityRange === null) {\n return base;\n }\n const authority = splitRawWildcardAuthority(authorityRange.authority);\n if (authority === null || !authority.host.includes(\"*\")) return base;\n\n let paramIndex = 0;\n const host = authority.host\n .split(\".\")\n .map((segment) => {\n if (!segment.includes(\"*\")) {\n return segment;\n }\n let expanded = \"\";\n for (let i = 0; i < segment.length; i++) {\n const ch = segment[i]!;\n if (ch === \"*\") {\n paramIndex += 1;\n expanded += `{${HOST_WILDCARD_PARAM_PREFIX}${paramIndex}}`;\n } else {\n expanded += ch;\n }\n }\n return expanded;\n })\n .join(\".\");\n\n return `${base.slice(0, authorityRange.start)}${host}${authority.portSuffix}${base.slice(\n authorityRange.end,\n )}`;\n}\n\nfunction errMsg(base: string, svc: string, detail: string): string {\n return `Invalid base URL \"${base}\" in firewall \"${svc}\": ${detail}`;\n}\n\nconst HOST_DOT_EQUIVALENTS = new Set([\".\", \"\\u3002\", \"\\uff0e\", \"\\uff61\"]);\nconst FORBIDDEN_NORMALIZED_LABEL_CHARS = new Set(\"#%,/:<>?@[\\\\]^|[]\".split(\"\"));\nconst ALLOWED_BASE_URL_SCHEMES = new Set([\"http\", \"https\"]);\nconst REQUIRED_AUTH_BASE_URL_SCHEME = \"https\";\nconst WHITESPACE_PATTERN = /\\s/u;\nconst UNICODE_CONTROL_PATTERN = /\\p{C}/u;\nconst UNICODE_DECIMAL_NUMBER_PATTERN = /^\\p{Decimal_Number}+$/u;\nconst UNICODE_MARK_PATTERN = /\\p{M}/u;\nconst UNICODE_LETTER_PATTERN = /\\p{L}/u;\nconst GREEK_COMBINING_YPOGEGRAMMENI = \"\\u0345\";\nconst GREEK_SMALL_IOTA = \"\\u03b9\";\n// WHATWG accepts these RTL-class label chars in places where Python's IDNA\n// bidi validation rejects mixed LTR/RTL labels at runtime.\nconst IDNA_BIDI_RTL_LABEL_RANGES = [\n [0x061d, 0x061d],\n [0x0870, 0x088e],\n [0x08b5, 0x08b5],\n [0x08c8, 0x08c9],\n [0xfbc2, 0xfbc2],\n [0x10f70, 0x10f81],\n [0x10f86, 0x10f89],\n] as const;\n// Keep creation-time host validation aligned with mitm-addon host_normalization.py.\nconst UNSAFE_UTS46_COLLISION_CHARS = new Set([\n \"\\u03f2\",\n \"\\u04c0\",\n \"\\u1e9e\",\n \"\\u1806\",\n \"\\u2132\",\n \"\\u2183\",\n \"\\u3164\",\n \"\\uffa0\",\n \"\\ufffc\",\n \"\\ufffd\",\n \"\\u{2f868}\",\n \"\\u{2f874}\",\n \"\\u{2f91f}\",\n \"\\u{2f95f}\",\n \"\\u{2f9bf}\",\n]);\nconst UNSAFE_UTS46_COLLISION_RANGES = [\n [0x10a0, 0x10c5],\n [0x115f, 0x1160],\n [0x17b4, 0x17b5],\n [0x2ff0, 0x2ffb],\n] as const;\nconst UNSAFE_UTS46_IGNORABLE_RANGES = [\n [0x034f, 0x034f],\n [0x180b, 0x180d],\n [0x180f, 0x180f],\n [0xfe00, 0xfe0f],\n [0xe0100, 0xe01ef],\n] as const;\n\ninterface ParameterizedAuthorityParts {\n readonly normalizedHost: string;\n readonly portSuffix: string;\n}\n\nfunction isHexDigit(char: string): boolean {\n return (\n (char >= \"0\" && char <= \"9\") ||\n (char >= \"a\" && char <= \"f\") ||\n (char >= \"A\" && char <= \"F\")\n );\n}\n\nfunction validateBaseUrlScheme(\n scheme: string,\n base: string,\n serviceName: string,\n): void {\n if (!ALLOWED_BASE_URL_SCHEMES.has(scheme.toLowerCase())) {\n throw new Error(errMsg(base, serviceName, \"scheme must be http or https\"));\n }\n}\n\nfunction validateUrlSchemeDelimiter(\n value: string,\n serviceName: string,\n label: \"base URL\" | \"auth.base URL\",\n displayValue = value,\n): void {\n if (value.includes(\"://\")) return;\n\n const colonIndex = value.indexOf(\":\");\n if (colonIndex !== -1) {\n const scheme = value.slice(0, colonIndex);\n const schemeDetail =\n label === \"auth.base URL\"\n ? \"scheme must be https\"\n : \"scheme must be http or https\";\n const allowedScheme =\n label === \"auth.base URL\"\n ? scheme.toLowerCase() === REQUIRED_AUTH_BASE_URL_SCHEME\n : ALLOWED_BASE_URL_SCHEMES.has(scheme.toLowerCase());\n if (!allowedScheme) {\n throw new Error(\n `Invalid ${label} \"${displayValue}\" in firewall \"${serviceName}\": ${schemeDetail}`,\n );\n }\n throw new Error(\n `Invalid ${label} \"${displayValue}\" in firewall \"${serviceName}\": URL must include \"://\" after the scheme`,\n );\n }\n\n throw new Error(\n `Invalid ${label} \"${displayValue}\" in firewall \"${serviceName}\": URL must include a scheme (e.g. \"https://${displayValue}\")`,\n );\n}\n\nfunction isAscii(value: string): boolean {\n for (let i = 0; i < value.length; i += 1) {\n if (value.charCodeAt(i) > 0x7f) return false;\n }\n return true;\n}\n\nfunction isIpv4NumberComponent(value: string): boolean {\n if (value === \"\") return false;\n if (value.toLowerCase().startsWith(\"0x\")) {\n return (\n value.length > 2 &&\n [...value.slice(2)].every((char) => {\n return isHexDigit(char);\n })\n );\n }\n return UNICODE_DECIMAL_NUMBER_PATTERN.test(value);\n}\n\nfunction isIpv4LiteralLike(value: string): boolean {\n const parts = value.split(\".\");\n return (\n parts.length >= 1 && parts.length <= 4 && parts.every(isIpv4NumberComponent)\n );\n}\n\nfunction isCanonicalIpv4Address(value: string): boolean {\n const parts = value.split(\".\");\n if (parts.length !== 4) return false;\n return parts.every((part) => {\n if (\n part === \"\" ||\n ![...part].every((char) => {\n return char >= \"0\" && char <= \"9\";\n })\n ) {\n return false;\n }\n if (part.length > 1 && part.startsWith(\"0\")) return false;\n return Number(part) <= IPV4_MAX_OCTET;\n });\n}\n\nfunction codePointInRanges(\n codePoint: number,\n ranges: readonly (readonly [number, number])[],\n): boolean {\n return ranges.some(([start, end]) => {\n return start <= codePoint && codePoint <= end;\n });\n}\n\nfunction hasUnsafeUts46MappingChar(value: string): boolean {\n for (const char of value) {\n const codePoint = char.codePointAt(0);\n if (\n UNSAFE_UTS46_COLLISION_CHARS.has(char) ||\n (codePoint !== undefined &&\n (codePointInRanges(codePoint, UNSAFE_UTS46_COLLISION_RANGES) ||\n codePointInRanges(codePoint, UNSAFE_UTS46_IGNORABLE_RANGES)))\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction normalizesToAscii(value: string): boolean {\n return isAscii(normalizeLabelTextForIdnaValidation(value));\n}\n\nfunction normalizeLabelTextForIdnaValidation(value: string): string {\n return value\n .replaceAll(GREEK_COMBINING_YPOGEGRAMMENI, GREEK_SMALL_IOTA)\n .normalize(\"NFKD\")\n .normalize(\"NFC\")\n .toLowerCase();\n}\n\nfunction hasForbiddenNormalizedLabelChar(value: string): boolean {\n for (const char of normalizeLabelTextForIdnaValidation(value)) {\n if (\n FORBIDDEN_NORMALIZED_LABEL_CHARS.has(char) ||\n HOST_DOT_EQUIVALENTS.has(char) ||\n WHITESPACE_PATTERN.test(char) ||\n UNICODE_CONTROL_PATTERN.test(char)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction normalizedLabelStartsWithMark(value: string): boolean {\n const [firstChar] = normalizeLabelTextForIdnaValidation(value);\n return firstChar !== undefined && UNICODE_MARK_PATTERN.test(firstChar);\n}\n\nfunction isIdnaBidiRtlLabelChar(char: string): boolean {\n const codePoint = char.codePointAt(0);\n return (\n codePoint !== undefined &&\n codePointInRanges(codePoint, IDNA_BIDI_RTL_LABEL_RANGES)\n );\n}\n\nfunction isLtrLetterForBidiCheck(char: string): boolean {\n return UNICODE_LETTER_PATTERN.test(char) && !isIdnaBidiRtlLabelChar(char);\n}\n\nfunction isAsciiDigit(char: string): boolean {\n return char >= \"0\" && char <= \"9\";\n}\n\nfunction isArabicNumberForBidiCheck(char: string): boolean {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined && 0x0660 <= codePoint && codePoint <= 0x0669;\n}\n\nfunction effectiveBidiEndChar(chars: readonly string[]): string | undefined {\n for (let index = chars.length - 1; index >= 0; index -= 1) {\n const char = chars[index]!;\n if (!UNICODE_MARK_PATTERN.test(char)) return char;\n }\n return chars.at(-1);\n}\n\nfunction firstEffectiveBidiChar(chars: readonly string[]): string | undefined {\n return chars.find((char) => {\n return !UNICODE_MARK_PATTERN.test(char);\n });\n}\n\nfunction isRtlEndCharForBidiCheck(char: string): boolean {\n return (\n isIdnaBidiRtlLabelChar(char) ||\n isAsciiDigit(char) ||\n isArabicNumberForBidiCheck(char)\n );\n}\n\nfunction hasInvalidMixedBidiLabelText(value: string): boolean {\n const chars = Array.from(normalizeLabelTextForIdnaValidation(value));\n const firstRtlIndex = chars.findIndex((char) => {\n return isIdnaBidiRtlLabelChar(char);\n });\n if (firstRtlIndex === -1) return false;\n\n const suffix = chars.slice(firstRtlIndex + 1);\n if (firstRtlIndex === 0) {\n const suffixHasLtrLetter = suffix.some((char) => {\n return isLtrLetterForBidiCheck(char);\n });\n if (suffixHasLtrLetter) return true;\n\n const endChar = effectiveBidiEndChar(chars);\n return endChar !== undefined && !isRtlEndCharForBidiCheck(endChar);\n }\n\n const suffixHasLtrLetter = suffix.some((char) => {\n return isLtrLetterForBidiCheck(char);\n });\n if (suffixHasLtrLetter) return true;\n\n const prefix = chars.slice(0, firstRtlIndex);\n const prefixHasLtrLetter = prefix.some((char) => {\n return isLtrLetterForBidiCheck(char);\n });\n if (prefixHasLtrLetter) {\n if (prefix.some(isArabicNumberForBidiCheck)) return true;\n const firstPrefixChar = firstEffectiveBidiChar(prefix);\n if (\n firstPrefixChar === undefined ||\n !isLtrLetterForBidiCheck(firstPrefixChar)\n ) {\n return true;\n }\n return suffix.some((char) => {\n return !UNICODE_MARK_PATTERN.test(char);\n });\n }\n\n const endChar = effectiveBidiEndChar(chars);\n return endChar !== undefined && !isRtlEndCharForBidiCheck(endChar);\n}\n\nfunction baseUrlRawSyntaxTarget(base: string): string {\n return base.replace(BASE_URL_VARS_PATTERN_G, AUTH_TEMPLATE_URL_PLACEHOLDER);\n}\n\nfunction validateHostPercentEncoding(\n host: string,\n base: string,\n serviceName: string,\n): void {\n if (host.includes(\",\")) {\n throw new Error(errMsg(base, serviceName, \"host must not contain commas\"));\n }\n for (let i = 0; i < host.length; i += 1) {\n if (host[i] !== \"%\") continue;\n if (\n i + 2 >= host.length ||\n !isHexDigit(host[i + 1]!) ||\n !isHexDigit(host[i + 2]!)\n ) {\n throw new Error(\n errMsg(base, serviceName, \"host has invalid percent encoding\"),\n );\n }\n\n let end = i;\n while (\n end + 2 < host.length &&\n host[end] === \"%\" &&\n isHexDigit(host[end + 1]!) &&\n isHexDigit(host[end + 2]!)\n ) {\n end += 3;\n }\n\n let decoded: string;\n try {\n decoded = decodeURIComponent(host.slice(i, end));\n } catch {\n throw new Error(\n errMsg(base, serviceName, \"host has invalid percent encoding\"),\n );\n }\n for (const char of decoded) {\n if (char === \"{\" || char === \"}\") {\n throw new Error(\n errMsg(\n base,\n serviceName,\n \"host must not contain percent-encoded braces\",\n ),\n );\n }\n if (HOST_DOT_EQUIVALENTS.has(char)) {\n throw new Error(\n errMsg(\n base,\n serviceName,\n \"host must not contain percent-encoded dots\",\n ),\n );\n }\n if (char === \",\") {\n throw new Error(\n errMsg(base, serviceName, \"host must not contain commas\"),\n );\n }\n if (char === \"*\") {\n throw new Error(\n errMsg(\n base,\n serviceName,\n \"host must not contain wildcard characters\",\n ),\n );\n }\n }\n i = end - 1;\n }\n if (host.includes(\"%\")) {\n let decoded: string;\n try {\n decoded = decodeURIComponent(host);\n } catch {\n throw new Error(\n errMsg(base, serviceName, \"host has invalid percent encoding\"),\n );\n }\n validateHostHasNoUnsafeIdnaMappings(decoded, base, serviceName);\n }\n}\n\nfunction rawAuthorityFromBaseUrl(base: string): string | null {\n const schemeEnd = base.indexOf(\"://\");\n if (schemeEnd === -1) return null;\n const rest = base.slice(schemeEnd + 3);\n const delimiterIndexes = [\n rest.indexOf(\"/\"),\n rest.indexOf(\"?\"),\n rest.indexOf(\"#\"),\n ].filter((index) => {\n return index !== -1;\n });\n const authorityEnd =\n delimiterIndexes.length === 0 ? -1 : Math.min(...delimiterIndexes);\n return authorityEnd === -1 ? rest : rest.slice(0, authorityEnd);\n}\n\nfunction authorityHasEmptyPort(authority: string): boolean {\n if (authority.startsWith(\"[\")) {\n const closeBracket = authority.indexOf(\"]\");\n if (closeBracket === -1) return false;\n return authority.slice(closeBracket + 1) === \":\";\n }\n\n const portSeparator = authority.lastIndexOf(\":\");\n if (portSeparator === -1) return false;\n return (\n authority.indexOf(\":\") === portSeparator &&\n portSeparator === authority.length - 1\n );\n}\n\nfunction validateNoUserinfo(\n authority: string,\n base: string,\n serviceName: string,\n): void {\n if (authority.includes(\"@\")) {\n throw new Error(errMsg(base, serviceName, \"must not contain userinfo\"));\n }\n}\n\nfunction validateHostHasNoEmptyLabels(\n host: string,\n base: string,\n serviceName: string,\n): string {\n let normalizedHost = host.replace(HOST_DOT_EQUIVALENT_PATTERN, \".\");\n if (normalizedHost.endsWith(\".\")) {\n normalizedHost = normalizedHost.slice(0, -1);\n }\n if (\n normalizedHost === \"\" ||\n normalizedHost.endsWith(\".\") ||\n normalizedHost.split(\".\").some((label) => {\n return label === \"\";\n })\n ) {\n throw new Error(\n errMsg(base, serviceName, \"host must not contain empty labels\"),\n );\n }\n return normalizedHost;\n}\n\nfunction normalizeHostForIpv4LiteralSyntax(host: string): string {\n let normalized = host.replace(HOST_DOT_EQUIVALENT_PATTERN, \".\").toLowerCase();\n if (normalized.endsWith(\".\")) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\n\nfunction rawHostForCanonicalIpv4Syntax(host: string): string {\n const normalized = host.toLowerCase();\n return normalized.endsWith(\".\") ? normalized.slice(0, -1) : normalized;\n}\n\nfunction splitAuthorityHostSegments(host: string): string[] {\n if (host.startsWith(\"[\") && host.endsWith(\"]\")) {\n return [host];\n }\n return host.split(\".\");\n}\n\nfunction rawHostFromAuthority(authority: string): string {\n const withoutUserinfo = authority.slice(authority.lastIndexOf(\"@\") + 1);\n if (withoutUserinfo.startsWith(\"[\")) {\n const closeBracket = withoutUserinfo.indexOf(\"]\");\n return closeBracket === -1\n ? withoutUserinfo\n : withoutUserinfo.slice(0, closeBracket + 1);\n }\n const portSeparator = withoutUserinfo.lastIndexOf(\":\");\n return portSeparator === -1\n ? withoutUserinfo\n : withoutUserinfo.slice(0, portSeparator);\n}\n\nfunction validateLabelHasNoUnsafeIdnaMappings(\n label: string,\n base: string,\n serviceName: string,\n): void {\n const parsed = parseSegment(label);\n const value =\n parsed.kind === \"param\" ? `${parsed.prefix}${parsed.suffix}` : label;\n if (value === \"\" || isAscii(value)) return;\n if (hasForbiddenNormalizedLabelChar(value)) {\n throw new Error(\n errMsg(\n base,\n serviceName,\n \"host must not contain characters that normalize to forbidden host syntax\",\n ),\n );\n }\n if (normalizedLabelStartsWithMark(value)) {\n throw new Error(\n errMsg(\n base,\n serviceName,\n \"host label must not start with a combining mark\",\n ),\n );\n }\n if (hasInvalidMixedBidiLabelText(value)) {\n throw new Error(\n errMsg(\n base,\n serviceName,\n \"host must not contain invalid bidirectional label text\",\n ),\n );\n }\n if (hasUnsafeUts46MappingChar(value) || normalizesToAscii(value)) {\n throw new Error(\n errMsg(\n base,\n serviceName,\n \"host must not contain unsafe IDNA compatibility mappings\",\n ),\n );\n }\n}\n\nfunction validateHostHasNoUnsafeIdnaMappings(\n authorityOrHost: string,\n base: string,\n serviceName: string,\n): void {\n const host = rawHostFromAuthority(authorityOrHost);\n if (host.startsWith(\"[\") && host.endsWith(\"]\")) return;\n for (const label of host\n .replace(HOST_DOT_EQUIVALENT_PATTERN, \".\")\n .split(\".\")) {\n validateLabelHasNoUnsafeIdnaMappings(label, base, serviceName);\n }\n}\n\nfunction validateHostHasCanonicalIpv4Syntax(\n authorityOrHost: string,\n base: string,\n serviceName: string,\n): void {\n const host = rawHostFromAuthority(authorityOrHost);\n if (host.startsWith(\"[\") && host.endsWith(\"]\")) return;\n const normalizedHost = normalizeHostForIpv4LiteralSyntax(host);\n if (\n isIpv4LiteralLike(normalizedHost) &&\n (rawHostForCanonicalIpv4Syntax(host) !== normalizedHost ||\n !isCanonicalIpv4Address(normalizedHost))\n ) {\n throw new Error(\n errMsg(base, serviceName, \"host must use canonical IPv4 address syntax\"),\n );\n }\n}\n\nfunction splitParameterizedAuthority(\n authority: string,\n base: string,\n serviceName: string,\n): ParameterizedAuthorityParts {\n let host = authority;\n let portSuffix = \"\";\n if (authority.startsWith(\"[\")) {\n const closeBracket = authority.indexOf(\"]\");\n if (closeBracket === -1) {\n throw new Error(errMsg(base, serviceName, \"not a valid URL authority\"));\n }\n host = authority.slice(0, closeBracket + 1);\n portSuffix = authority.slice(closeBracket + 1);\n if (portSuffix !== \"\" && !portSuffix.startsWith(\":\")) {\n throw new Error(errMsg(base, serviceName, \"not a valid URL authority\"));\n }\n } else {\n const portSeparator = authority.lastIndexOf(\":\");\n if (portSeparator !== -1) {\n host = authority.slice(0, portSeparator);\n portSuffix = authority.slice(portSeparator);\n }\n }\n\n const normalizedHost = validateHostHasNoEmptyLabels(host, base, serviceName);\n\n return { normalizedHost, portSuffix };\n}\n\nfunction validateStaticHostLabels(\n hostname: string,\n base: string,\n serviceName: string,\n): void {\n if (hostname.startsWith(\"[\") && hostname.endsWith(\"]\")) return;\n validateHostHasNoEmptyLabels(hostname, base, serviceName);\n validateHostHasNoRawWildcards(hostname, base, serviceName);\n}\n\nfunction hostSegmentHasRawWildcard(segment: string): boolean {\n const parsed = parseSegment(segment);\n if (parsed.kind === \"literal\") return parsed.value.includes(\"*\");\n if (parsed.kind === \"param\") {\n return parsed.prefix.includes(\"*\") || parsed.suffix.includes(\"*\");\n }\n return false;\n}\n\nfunction validateHostHasNoRawWildcards(\n host: string,\n base: string,\n serviceName: string,\n): void {\n if (host.startsWith(\"[\") && host.endsWith(\"]\")) return;\n for (const segment of host\n .replace(HOST_DOT_EQUIVALENT_PATTERN, \".\")\n .split(\".\")) {\n if (hostSegmentHasRawWildcard(segment)) {\n throw new Error(\n errMsg(base, serviceName, \"host must not contain wildcard characters\"),\n );\n }\n }\n}\n\nfunction hostSegmentForSyntaxValidation(\n seg: string,\n base: string,\n svc: string,\n): string {\n const parsed = parseSegment(seg);\n if (parsed.kind === \"literal\") return seg;\n if (parsed.kind === \"error\") {\n throw new Error(errMsg(base, svc, parsed.reason));\n }\n if (!isAscii(parsed.prefix) || !isAscii(parsed.suffix)) {\n throw new Error(\n errMsg(\n base,\n svc,\n `host parameter segment \"${seg}\" must use ASCII literal prefix and suffix`,\n ),\n );\n }\n return `${parsed.prefix}x${parsed.suffix}`;\n}\n\nfunction validateParameterizedHostUrlSyntax(\n scheme: string,\n authority: ParameterizedAuthorityParts,\n base: string,\n serviceName: string,\n): void {\n const syntaxHost = splitAuthorityHostSegments(authority.normalizedHost)\n .map((seg) => {\n return hostSegmentForSyntaxValidation(seg, base, serviceName);\n })\n .join(\".\");\n try {\n new URL(`${scheme}://${syntaxHost}${authority.portSuffix}`);\n } catch {\n throw new Error(errMsg(base, serviceName, \"not a valid URL authority\"));\n }\n}\n\n/**\n * Validate host segments (`.`-delimited) for parameterized base URLs.\n * Greedy params (`+`/`*`) must be the first (leftmost) host segment and\n * must not appear in mixed segments (prefix/suffix).\n * At least one pure-literal segment is required for security — a mixed\n * segment carrying a parameter is NOT counted as static.\n */\nfunction validateHostParams(\n segments: string[],\n paramNames: Set<string>,\n base: string,\n svc: string,\n): void {\n if (segments.length < 2) {\n throw new Error(errMsg(base, svc, \"host must have at least two segments\"));\n }\n let hasStatic = false;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]!;\n const parsed = parseSegment(seg);\n if (parsed.kind === \"error\") {\n throw new Error(errMsg(base, svc, parsed.reason));\n }\n if (parsed.kind === \"literal\") {\n hasStatic = true;\n continue;\n }\n const { name, greedy, prefix, suffix } = parsed;\n if (paramNames.has(name)) {\n throw new Error(\n errMsg(base, svc, `duplicate parameter name \"{${name}}\" in host`),\n );\n }\n paramNames.add(name);\n if (greedy && i !== 0) {\n throw new Error(\n errMsg(base, svc, `{${name}${greedy}} must be the first host segment`),\n );\n }\n if (greedy && (prefix !== \"\" || suffix !== \"\")) {\n throw new Error(\n errMsg(\n base,\n svc,\n `greedy parameter {${name}${greedy}} cannot be combined with a literal prefix or suffix in host segment \"${seg}\"`,\n ),\n );\n }\n }\n if (!hasStatic) {\n throw new Error(\n errMsg(base, svc, \"host must have at least one static segment\"),\n );\n }\n}\n\n/**\n * Validate path segments (`/`-delimited) for parameterized base URLs.\n * Greedy params (`+`/`*`) are rejected — they would consume the entire\n * remaining path, leaving nothing for permission rules to match against.\n * Mixed segments (`{param}.ext`, `prefix-{param}`) are accepted.\n */\nfunction validatePathParams(\n segments: string[],\n paramNames: Set<string>,\n base: string,\n svc: string,\n): void {\n for (const seg of segments) {\n const parsed = parseSegment(seg);\n if (parsed.kind === \"error\") {\n throw new Error(errMsg(base, svc, parsed.reason));\n }\n if (parsed.kind === \"literal\") continue;\n const { name, greedy } = parsed;\n if (greedy) {\n throw new Error(\n errMsg(\n base,\n svc,\n `greedy parameter {${name}${greedy}} is not allowed in base URL path`,\n ),\n );\n }\n if (paramNames.has(name)) {\n throw new Error(\n errMsg(base, svc, `duplicate parameter name \"{${name}}\"`),\n );\n }\n paramNames.add(name);\n }\n}\n\n/**\n * Validate parameter segments in a firewall base URL.\n *\n * Host portion: `{param}`, `{param+}`, `{param*}` allowed.\n * - Greedy (`+`/`*`) must be in the leftmost (first) host segment.\n * - At least one static host segment is required for security.\n *\n * Path portion: only `{param}` (single-segment) allowed.\n * - Greedy (`+`/`*`) is rejected — it would consume the entire remaining\n * path, leaving nothing for permission rules to match against.\n */\nfunction validateBaseUrlParams(base: string, serviceName: string): void {\n const schemeEnd = base.indexOf(\"://\");\n if (schemeEnd === -1) {\n throw new Error(errMsg(base, serviceName, \"missing scheme\"));\n }\n const scheme = base.slice(0, schemeEnd);\n if (scheme.includes(\"{\")) {\n throw new Error(\n errMsg(base, serviceName, \"scheme must not contain parameters\"),\n );\n }\n validateBaseUrlScheme(scheme, base, serviceName);\n if (base.includes(\"?\")) {\n throw new Error(errMsg(base, serviceName, \"must not contain query string\"));\n }\n if (base.includes(\"#\")) {\n throw new Error(errMsg(base, serviceName, \"must not contain fragment\"));\n }\n\n const rest = base.slice(schemeEnd + 3);\n const slashIdx = rest.indexOf(\"/\");\n const host = slashIdx === -1 ? rest : rest.slice(0, slashIdx);\n const path = slashIdx === -1 ? \"\" : rest.slice(slashIdx);\n if (authorityHasEmptyPort(host)) {\n throw new Error(errMsg(base, serviceName, \"not a valid URL authority\"));\n }\n validateNoUserinfo(host, base, serviceName);\n validateHostPercentEncoding(host, base, serviceName);\n const authority = splitParameterizedAuthority(host, base, serviceName);\n validateHostHasCanonicalIpv4Syntax(\n authority.normalizedHost,\n base,\n serviceName,\n );\n validateHostHasNoUnsafeIdnaMappings(\n authority.normalizedHost,\n base,\n serviceName,\n );\n validateHostHasNoRawWildcards(authority.normalizedHost, base, serviceName);\n validateParameterizedHostUrlSyntax(\n base.slice(0, schemeEnd),\n authority,\n base,\n serviceName,\n );\n\n const paramNames = new Set<string>();\n validateHostParams(\n splitAuthorityHostSegments(authority.normalizedHost),\n paramNames,\n base,\n serviceName,\n );\n if (path) {\n validatePathParams(splitPathSegments(path), paramNames, base, serviceName);\n }\n}\n\nexport function validateBaseUrl(base: string, serviceName: string): void {\n if (base.includes(\"\\\\\")) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain backslash`,\n );\n }\n\n const rawSyntaxTarget = baseUrlRawSyntaxTarget(base);\n if (hasRawWhitespace(rawSyntaxTarget)) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain whitespace`,\n );\n }\n if (hasUnsafeUrlCodepoint(rawSyntaxTarget)) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain control characters or invalid Unicode`,\n );\n }\n\n // Template base URLs are validated after variable resolution at compose time.\n if (hasBaseUrlVars(base)) return;\n\n validateUrlSchemeDelimiter(base, serviceName, \"base URL\");\n\n // Parameterized base URLs have their own validation path.\n if (hasBaseUrlParams(base)) {\n validateBaseUrlParams(base, serviceName);\n return;\n }\n\n let url: URL;\n try {\n url = new URL(base);\n } catch {\n if (!base.includes(\"://\")) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": URL must include a scheme (e.g. \"https://${base}\")`,\n );\n }\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": not a valid URL`,\n );\n }\n validateBaseUrlScheme(url.protocol.slice(0, -1), base, serviceName);\n if (url.search) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain query string`,\n );\n }\n if (url.hash) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain fragment`,\n );\n }\n const authority = rawAuthorityFromBaseUrl(base);\n if (authority !== null) {\n if (authority === \"\") {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": not a valid URL authority`,\n );\n }\n if (authorityHasEmptyPort(authority)) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": not a valid URL authority`,\n );\n }\n validateNoUserinfo(authority, base, serviceName);\n validateHostPercentEncoding(authority, base, serviceName);\n validateHostHasCanonicalIpv4Syntax(authority, base, serviceName);\n validateHostHasNoUnsafeIdnaMappings(authority, base, serviceName);\n }\n validateStaticHostLabels(url.hostname, base, serviceName);\n if (url.hostname.includes(\"{\") || url.hostname.includes(\"}\")) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": host must not contain braces`,\n );\n }\n}\n\ninterface AuthBaseStaticValidationTarget {\n readonly url: string | null;\n readonly dynamicPrefixSuffix: string;\n}\n\nfunction authBaseForStaticUrlValidation(\n authBase: string,\n): AuthBaseStaticValidationTarget {\n if (!authBase.includes(AUTH_TEMPLATE_START)) {\n return { url: authBase, dynamicPrefixSuffix: \"\" };\n }\n\n const replaced = authBase.replace(\n AUTH_REFERENCE_PATTERN_G,\n AUTH_TEMPLATE_URL_PLACEHOLDER,\n );\n if (replaced.includes(AUTH_TEMPLATE_START)) {\n return { url: authBase, dynamicPrefixSuffix: \"\" };\n }\n const prefixMatch = AUTH_REFERENCE_PREFIX_PATTERN.exec(authBase);\n if (prefixMatch) {\n return {\n url: null,\n dynamicPrefixSuffix: authBase\n .slice(prefixMatch[0].length)\n .replace(AUTH_REFERENCE_PATTERN_G, AUTH_TEMPLATE_URL_PLACEHOLDER),\n };\n }\n return { url: replaced, dynamicPrefixSuffix: \"\" };\n}\n\nfunction validateDynamicAuthBaseSuffix(\n authBase: string,\n suffix: string,\n serviceName: string,\n): void {\n if (suffix.includes(AUTH_TEMPLATE_START)) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": contains unsupported template reference`,\n );\n }\n if (hasRawWhitespace(suffix)) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain whitespace`,\n );\n }\n if (hasUnsafeUrlCodepoint(suffix)) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain control characters or invalid Unicode`,\n );\n }\n if (suffix.includes(\"#\")) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain fragment`,\n );\n }\n if (suffix !== \"\" && !suffix.startsWith(\"/\") && !suffix.startsWith(\"?\")) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": dynamic URL suffix must start with \"/\" or \"?\"`,\n );\n }\n}\n\nexport function validateAuthBaseUrl(\n authBase: string,\n serviceName: string,\n): void {\n if (authBase.includes(\"\\\\\")) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain backslash`,\n );\n }\n\n // Auth base URLs may be fully or partially secret/var-backed; resolved\n // values are only available in the sandbox when auth is applied.\n const target = authBaseForStaticUrlValidation(authBase);\n validateDynamicAuthBaseSuffix(\n authBase,\n target.dynamicPrefixSuffix,\n serviceName,\n );\n const validationUrl = target.url;\n if (validationUrl === null) return;\n if (validationUrl.includes(AUTH_TEMPLATE_START)) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": contains unsupported template reference`,\n );\n }\n\n if (hasRawWhitespace(validationUrl)) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain whitespace`,\n );\n }\n if (hasUnsafeUrlCodepoint(validationUrl)) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain control characters or invalid Unicode`,\n );\n }\n\n validateUrlSchemeDelimiter(\n validationUrl,\n serviceName,\n \"auth.base URL\",\n authBase,\n );\n\n let url: URL;\n try {\n url = new URL(validationUrl);\n } catch {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": not a valid URL`,\n );\n }\n if (\n url.protocol.slice(0, -1).toLowerCase() !== REQUIRED_AUTH_BASE_URL_SCHEME\n ) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": scheme must be https`,\n );\n }\n if (url.hash) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain fragment`,\n );\n }\n const authority = rawAuthorityFromBaseUrl(validationUrl);\n if (authority !== null) {\n if (authority === \"\") {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": not a valid URL authority`,\n );\n }\n if (authorityHasEmptyPort(authority)) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": not a valid URL authority`,\n );\n }\n if (authority.includes(\"@\")) {\n throw new Error(\n `Invalid auth.base URL \"${authBase}\" in firewall \"${serviceName}\": must not contain userinfo`,\n );\n }\n validateHostPercentEncoding(authority, validationUrl, serviceName);\n validateHostHasCanonicalIpv4Syntax(authority, validationUrl, serviceName);\n validateHostHasNoUnsafeIdnaMappings(authority, validationUrl, serviceName);\n }\n validateStaticHostLabels(url.hostname, validationUrl, serviceName);\n}\n\n/**\n * Expanded firewall config stored in compose content.\n * Resolved from firewall name + FirewallConfig at compose time, then frozen.\n *\n * - `name`: firewall config name (e.g., \"slack\"). Also the key used in\n * vm0.yaml to reference this firewall config, and the map key in\n * `FirewallPolicies` / `NetworkPolicies`.\n * - `description`: optional description from the firewall config\n */\nexport interface ExpandedFirewallConfig {\n name: string;\n description?: string;\n apis: FirewallApi[];\n placeholders?: Record<string, string>;\n /**\n * Optional per-firewall default permission overrides for auto-generated\n * model-provider firewalls (which otherwise default to fully permissive).\n * Permission names listed in `deny`/`ask` are routed accordingly; all\n * others remain allowed. `unknownPolicy` controls handling of base-URL\n * matches that don't match any permission rule. Ignored on the connector\n * firewall path (which uses stored per-user policies instead).\n */\n defaultPolicies?: {\n deny?: string[];\n ask?: string[];\n unknownPolicy?: FirewallPolicyValue;\n };\n}\n","const ASCII_CONTROL_MAX = 0x20;\nconst ASCII_DELETE = 0x7f;\nconst UNICODE_HIGH_SURROGATE_MIN = 0xd800;\nconst UNICODE_HIGH_SURROGATE_MAX = 0xdbff;\nconst UNICODE_LOW_SURROGATE_MIN = 0xdc00;\nconst UNICODE_LOW_SURROGATE_MAX = 0xdfff;\n\nexport function hasRawWhitespace(value: string): boolean {\n for (let i = 0; i < value.length; i += 1) {\n const char = value[i]!;\n if (\n char === \" \" ||\n char === \"\\t\" ||\n char === \"\\n\" ||\n char === \"\\r\" ||\n char === \"\\f\" ||\n char === \"\\v\"\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function hasUnsafeUrlCodepoint(value: string): boolean {\n for (let i = 0; i < value.length; i += 1) {\n const codeUnit = value.charCodeAt(i);\n if (codeUnit < ASCII_CONTROL_MAX || codeUnit === ASCII_DELETE) {\n return true;\n }\n if (\n UNICODE_HIGH_SURROGATE_MIN <= codeUnit &&\n codeUnit <= UNICODE_HIGH_SURROGATE_MAX\n ) {\n const nextCodeUnit = value.charCodeAt(i + 1);\n if (\n !(\n UNICODE_LOW_SURROGATE_MIN <= nextCodeUnit &&\n nextCodeUnit <= UNICODE_LOW_SURROGATE_MAX\n )\n ) {\n return true;\n }\n i += 1;\n continue;\n }\n if (\n UNICODE_LOW_SURROGATE_MIN <= codeUnit &&\n codeUnit <= UNICODE_LOW_SURROGATE_MAX\n ) {\n return true;\n }\n }\n return false;\n}\n","/**\n * Shared grammar for a single host/path segment used across firewall\n * base URL validation, permission rule path validation, and runtime URL\n * matching.\n *\n * Grammar mirrors crates/runner/mitm-addon/src/firewall_matching/patterns.py::parse_segment —\n * keep both implementations in lockstep. Any change to accepted or rejected\n * forms must land in both languages and the shared contract fixture at once:\n * turbo/packages/connectors/src/__tests__/firewall-semantics-contract.json.\n *\n * Accepted forms:\n * - Plain literal (no braces).\n * - `{name}` pure parameter.\n * - `{name}suffix` parameter + literal suffix.\n * - `prefix{name}` literal prefix + parameter.\n * - `prefix{name}suffix` literal prefix + parameter + literal suffix.\n * - Parameter names are opaque non-empty segment text and may carry a\n * trailing `+` or `*` for greedy matching;\n * greedy is only valid in positions the caller allows (leftmost host\n * segment, or last rule-path segment). Greedy names must NOT appear in\n * mixed segments — that combination is reserved.\n *\n * Rejected forms (error kind with a specific reason):\n * - `{}` / `prefix{}suffix` empty parameter name.\n * - `{a}{b}` adjacent parameters in one segment.\n * - `{a}.{b}` literal-separated parameters in one segment.\n * - `{name` / `name}` unbalanced brace.\n *\n * Match-time semantics for mixed segments (carried by `param` result):\n * - The runtime segment must startsWith(prefix) AND endsWith(suffix)\n * AND length > prefix.length + suffix.length (middle must be non-empty).\n * - Captured value is the middle slice.\n */\n\nconst ERROR_HINT =\n 'use \"{name}\", \"prefix{name}\", \"{name}suffix\", or \"prefix{name}suffix\"';\n\ntype SegmentParseResult =\n | { kind: \"literal\"; value: string }\n | {\n kind: \"param\";\n prefix: string;\n name: string;\n suffix: string;\n greedy: \"\" | \"+\" | \"*\";\n }\n | { kind: \"error\"; reason: string };\n\nexport function parseSegment(seg: string): SegmentParseResult {\n const openCount = countChar(seg, \"{\");\n const closeCount = countChar(seg, \"}\");\n\n if (openCount === 0 && closeCount === 0) {\n return { kind: \"literal\", value: seg };\n }\n if (openCount !== closeCount) {\n return {\n kind: \"error\",\n reason: `unbalanced brace in segment \"${seg}\" — ${ERROR_HINT}`,\n };\n }\n\n const open1 = seg.indexOf(\"{\");\n const close1 = seg.indexOf(\"}\");\n if (close1 < open1) {\n return {\n kind: \"error\",\n reason: `unbalanced brace in segment \"${seg}\" — ${ERROR_HINT}`,\n };\n }\n\n if (openCount >= 2) {\n const open2 = seg.indexOf(\"{\", close1 + 1);\n if (close1 + 1 === open2) {\n return {\n kind: \"error\",\n reason: `adjacent parameters in segment \"${seg}\" — only one parameter per segment is allowed; ${ERROR_HINT}`,\n };\n }\n return {\n kind: \"error\",\n reason: `literal-separated parameters in segment \"${seg}\" — only one parameter per segment is allowed; ${ERROR_HINT}`,\n };\n }\n\n const prefix = seg.slice(0, open1);\n const content = seg.slice(open1 + 1, close1);\n const suffix = seg.slice(close1 + 1);\n\n if (\n prefix.includes(\"{\") ||\n prefix.includes(\"}\") ||\n suffix.includes(\"{\") ||\n suffix.includes(\"}\")\n ) {\n return {\n kind: \"error\",\n reason: `unbalanced brace in segment \"${seg}\" — ${ERROR_HINT}`,\n };\n }\n\n // Strip optional trailing greedy marker BEFORE emptiness check so that\n // `{+}` / `{*}` report \"empty parameter name\", matching legacy behavior.\n let greedy: \"\" | \"+\" | \"*\" = \"\";\n let name = content;\n if (content.length > 0) {\n const last = content[content.length - 1]!;\n if (last === \"+\" || last === \"*\") {\n greedy = last;\n name = content.slice(0, -1);\n }\n }\n\n if (name.length === 0) {\n return {\n kind: \"error\",\n reason: `empty parameter name in segment \"${seg}\" — ${ERROR_HINT}`,\n };\n }\n\n return { kind: \"param\", prefix, name, suffix, greedy };\n}\n\nexport function splitPathSegments(path: string): string[] {\n if (path === \"\" || path === \"/\") return [];\n const pathWithoutLeadingSlash = path.startsWith(\"/\") ? path.slice(1) : path;\n if (pathWithoutLeadingSlash === \"\") return [];\n return pathWithoutLeadingSlash.split(\"/\");\n}\n\nfunction countChar(s: string, ch: string): number {\n let n = 0;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === ch) n++;\n }\n return n;\n}\n","import { z } from \"zod\";\nimport {\n initContract,\n authHeadersSchema,\n timestampQueryNumberSchema,\n} from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\n/**\n * Cursor-based pagination schema with total pages\n */\nexport const paginationSchema = z.object({\n hasMore: z.boolean(),\n nextCursor: z.string().nullable(),\n totalPages: z.number(),\n});\n\nexport type Pagination = z.infer<typeof paginationSchema>;\n\n/**\n * Common query parameters for list endpoints\n */\nconst listQuerySchema = z.object({\n cursor: z.string().optional(),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n});\n\nconst c = initContract();\n\n/**\n * Run status enum for logs\n */\nconst logStatusSchema = z.enum([\n \"queued\",\n \"pending\",\n \"running\",\n \"completed\",\n \"failed\",\n \"timeout\",\n \"cancelled\",\n]);\n\n/**\n * Trigger source enum — how the run was initiated\n */\nexport const triggerSourceSchema = z.enum([\n \"automation\",\n \"web\",\n \"slack\",\n \"teams\",\n \"email\",\n \"telegram\",\n \"agentphone\",\n \"github\",\n \"cli\",\n \"agent\",\n \"webhook\",\n \"workflow-schedule\",\n \"workflow-event\",\n]);\n\nexport type TriggerSource = z.infer<typeof triggerSourceSchema>;\n\n/**\n * Log entry in list response - includes basic fields for list display\n */\nconst logEntrySchema = z.object({\n id: z.uuid(),\n sessionId: z.string().nullable(),\n agentId: z.string().nullable(),\n displayName: z.string().nullable(),\n framework: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n triggerAgentName: z.string().nullable(),\n status: logStatusSchema,\n /** Prompt text the run was launched with. Used as a row description. */\n prompt: z.string(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n});\n\n/**\n * Available filter values returned by the list endpoint.\n * agents contains canonical Zero agent IDs.\n */\nconst logsFiltersSchema = z.object({\n statuses: z.array(logStatusSchema),\n sources: z.array(triggerSourceSchema),\n agents: z.array(z.string()),\n});\n\nexport type LogsFilters = z.infer<typeof logsFiltersSchema>;\n\n/**\n * Logs list response schema with pagination\n */\nconst logsListResponseSchema = z.object({\n data: z.array(logEntrySchema),\n pagination: paginationSchema,\n filters: logsFiltersSchema,\n});\n\n/**\n * Artifact information schema\n */\nconst artifactSchema = z.object({\n name: z.string().nullable(),\n version: z.string().nullable(),\n});\n\n/**\n * Log detail response schema\n */\nconst logDetailSchema = z.object({\n id: z.uuid(),\n sessionId: z.string().nullable(),\n agentId: z.string().nullable(),\n displayName: z.string().nullable(),\n framework: z.string().nullable(),\n modelProvider: z.string().nullable(),\n selectedModel: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n triggerAgentName: z.string().nullable(),\n status: logStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n error: z.string().nullable(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n artifact: artifactSchema,\n});\n\n/**\n * Logs list contract\n * GET /api/zero/logs\n */\nexport const logsListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/logs\",\n headers: authHeadersSchema,\n query: listQuerySchema.extend({\n search: z.string().optional(),\n agentId: z.string().uuid().optional(),\n name: z.string().optional(),\n since: timestampQueryNumberSchema.optional(),\n\n status: logStatusSchema.optional(),\n triggerSource: triggerSourceSchema.optional(),\n }),\n responses: {\n 200: logsListResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List agent run logs with pagination\",\n },\n});\n\n/**\n * Logs by ID contract\n * GET /api/zero/logs/:id\n */\nexport const logsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/logs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Invalid log ID\"),\n }),\n responses: {\n 200: logDetailSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run log details by ID\",\n },\n});\n\n// Contract type exports\nexport type LogsListContract = typeof logsListContract;\nexport type LogsByIdContract = typeof logsByIdContract;\n\n// Schema exports for reuse\nexport {\n logStatusSchema,\n logEntrySchema,\n logsListResponseSchema,\n artifactSchema,\n logDetailSchema,\n};\n\n// Inferred type exports\nexport type LogStatus = z.infer<typeof logStatusSchema>;\nexport type LogEntry = z.infer<typeof logEntrySchema>;\nexport type LogsListResponse = z.infer<typeof logsListResponseSchema>;\nexport type Artifact = z.infer<typeof artifactSchema>;\nexport type LogDetail = z.infer<typeof logDetailSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const zeroGoalStatusSchema = z.enum([\n \"active\",\n \"paused\",\n \"blocked\",\n \"complete\",\n]);\nexport type ZeroGoalStatus = z.infer<typeof zeroGoalStatusSchema>;\n\nexport const zeroGoalEventSchema = z.union([\n z.object({\n type: z.literal(\"state\"),\n status: z.literal(\"active\"),\n objectiveBrief: z.string().min(1),\n }),\n z.object({\n type: z.literal(\"state\"),\n status: z.enum([\"paused\", \"blocked\", \"complete\"]),\n }),\n z.object({ type: z.literal(\"cleared\") }),\n]);\nexport type ZeroGoalEvent = z.infer<typeof zeroGoalEventSchema>;\n\nexport const zeroGoalCreateRequestSchema = z.object({\n objective: z.string().min(1).max(20_000),\n});\nexport type ZeroGoalCreateRequest = z.infer<typeof zeroGoalCreateRequestSchema>;\n\nexport const zeroGoalEditRequestSchema = z.object({\n objective: z.string().min(1).max(20_000),\n});\nexport type ZeroGoalEditRequest = z.infer<typeof zeroGoalEditRequestSchema>;\n\nexport const zeroGoalResponseSchema = z.object({\n objective: z.string(),\n objectiveBrief: z.string(),\n status: zeroGoalStatusSchema,\n});\nexport type ZeroGoalResponse = z.infer<typeof zeroGoalResponseSchema>;\n\nconst chatThreadGoalParamsSchema = z.object({\n threadId: z.string().min(1),\n});\n\nexport const zeroGoalsContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n body: zeroGoalCreateRequestSchema,\n responses: {\n 201: zeroGoalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a persistent goal for the current thread\",\n },\n edit: {\n method: \"PATCH\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n body: zeroGoalEditRequestSchema,\n responses: {\n 200: zeroGoalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Edit the current thread goal objective\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Get the current thread goal\",\n },\n getForChatThread: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:threadId/goal\",\n headers: authHeadersSchema,\n pathParams: chatThreadGoalParamsSchema,\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Get a chat thread goal\",\n },\n complete: {\n method: \"POST\",\n path: \"/api/zero/goal/complete\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Mark the current thread goal complete\",\n },\n block: {\n method: \"POST\",\n path: \"/api/zero/goal/block\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Mark the current thread goal blocked\",\n },\n pause: {\n method: \"POST\",\n path: \"/api/zero/goal/pause\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Pause the current thread goal\",\n },\n pauseForChatThread: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:threadId/goal/pause\",\n headers: authHeadersSchema,\n pathParams: chatThreadGoalParamsSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Pause a chat thread goal\",\n },\n resume: {\n method: \"POST\",\n path: \"/api/zero/goal/resume\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Resume continuation for the current thread goal\",\n },\n clear: {\n method: \"DELETE\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: z.object({ cleared: z.literal(true) }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Clear the current thread goal\",\n },\n});\n\nexport type ZeroGoalsContract = typeof zeroGoalsContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { connectorRefSchema } from \"./connector-ref\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst agentIdSchema = z.string().uuid();\nconst permissionSchema = z.string().min(1).max(128);\n\nexport const userPermissionGrantActionSchema = z.enum([\"allow\", \"deny\"]);\nexport const userPermissionGrantApplyModeSchema = z.enum([\"patch\", \"replace\"]);\nexport const userPermissionGrantExpiresInSchema = z.enum([\n \"1h\",\n \"24h\",\n \"7d\",\n \"always\",\n]);\n\nconst agentPermissionGrantScopeSchema = z.object({\n agentId: agentIdSchema,\n});\n\nexport const userPermissionGrantScopeSchema = agentPermissionGrantScopeSchema;\n\nconst userPermissionGrantResponseBaseSchema = z.object({\n connectorRef: connectorRefSchema,\n permission: permissionSchema,\n action: userPermissionGrantActionSchema,\n expiresAt: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const userPermissionGrantResponseSchema =\n userPermissionGrantResponseBaseSchema.extend({\n agentId: agentIdSchema,\n });\n\nconst listUserPermissionGrantsQuerySchema = userPermissionGrantScopeSchema;\n\nconst applyUserPermissionGrantBaseSchema = z.object({\n permission: permissionSchema,\n});\n\nexport const applyUserPermissionGrantSchema = z.discriminatedUnion(\"action\", [\n applyUserPermissionGrantBaseSchema.extend({\n action: z.literal(\"allow\"),\n expiresIn: userPermissionGrantExpiresInSchema.optional(),\n }),\n applyUserPermissionGrantBaseSchema.extend({\n action: z.literal(\"deny\"),\n expiresIn: z.never().optional(),\n }),\n]);\n\nexport const applyUserPermissionGrantsRequestSchema =\n userPermissionGrantScopeSchema.and(\n z.object({\n connectorRef: connectorRefSchema,\n mode: userPermissionGrantApplyModeSchema,\n grants: z.array(applyUserPermissionGrantSchema),\n }),\n );\n\nexport const zeroUserPermissionGrantsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/user-permission-grants\",\n headers: authHeadersSchema,\n query: listUserPermissionGrantsQuerySchema,\n responses: {\n 200: z.array(userPermissionGrantResponseSchema),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"List current user's active permission grants for an agent\",\n },\n apply: {\n method: \"PUT\",\n path: \"/api/zero/user-permission-grants/apply\",\n headers: authHeadersSchema,\n body: applyUserPermissionGrantsRequestSchema,\n responses: {\n 200: z.array(userPermissionGrantResponseSchema),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary:\n \"Apply current user's explicit permission grant changes for one connector\",\n },\n});\n\nexport type UserPermissionGrantAction = z.infer<\n typeof userPermissionGrantActionSchema\n>;\nexport type UserPermissionGrantApplyMode = z.infer<\n typeof userPermissionGrantApplyModeSchema\n>;\nexport type UserPermissionGrantExpiresIn = z.infer<\n typeof userPermissionGrantExpiresInSchema\n>;\nexport type UserPermissionGrantResponse = z.infer<\n typeof userPermissionGrantResponseSchema\n>;\nexport type ListUserPermissionGrantsQuery = z.infer<\n typeof listUserPermissionGrantsQuerySchema\n>;\nexport type ApplyUserPermissionGrant = z.infer<\n typeof applyUserPermissionGrantSchema\n>;\nexport type ApplyUserPermissionGrantsRequest = z.infer<\n typeof applyUserPermissionGrantsRequestSchema\n>;\nexport type ZeroUserPermissionGrantsContract =\n typeof zeroUserPermissionGrantsContract;\n","import { z } from \"zod\";\n\nexport const CONNECTOR_REF_MAX_LENGTH = 64;\n\nexport const connectorRefSchema = z\n .string()\n .min(1)\n .max(CONNECTOR_REF_MAX_LENGTH);\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * User connector enabled types schema\n * Sparse model: only connector types explicitly enabled by the user for this\n * agent.\n */\nexport const userConnectorEnabledTypesSchema = z.object({\n enabledTypes: z.array(z.string()),\n});\nexport type UserConnectorEnabledTypes = z.infer<\n typeof userConnectorEnabledTypesSchema\n>;\n\nexport const userConnectorUpdateSchema = userConnectorEnabledTypesSchema.extend(\n {\n operation: z.enum([\"replace\", \"add\", \"remove\"]).optional(),\n },\n);\nexport type UserConnectorUpdate = z.infer<typeof userConnectorUpdateSchema>;\n\n/**\n * Contract for GET/PUT /api/zero/agents/:id/user-connectors\n */\nexport const zeroUserConnectorsContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id/user-connectors\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: userConnectorEnabledTypesSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get enabled connector types for user on agent\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id/user-connectors\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: userConnectorUpdateSchema,\n responses: {\n 200: userConnectorEnabledTypesSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update enabled connector types for user on agent\",\n },\n});\nexport type ZeroUserConnectorsContract = typeof zeroUserConnectorsContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Per-agent custom connector enablement schema.\n * Sparse model: only custom connector ids explicitly enabled by the user\n * for this agent.\n */\nexport const agentCustomConnectorEnabledIdsSchema = z.object({\n enabledIds: z.array(z.string().uuid()),\n});\nexport type AgentCustomConnectorEnabledIds = z.infer<\n typeof agentCustomConnectorEnabledIdsSchema\n>;\n\nexport const agentCustomConnectorUpdateSchema =\n agentCustomConnectorEnabledIdsSchema.extend({\n operation: z.enum([\"replace\", \"add\", \"remove\"]).optional(),\n });\nexport type AgentCustomConnectorUpdate = z.infer<\n typeof agentCustomConnectorUpdateSchema\n>;\n\n/**\n * Contract for GET/PUT /api/zero/agents/:id/custom-connectors\n *\n * Mirrors {@link import(\"./user-connectors\").zeroUserConnectorsContract} but\n * over org custom connector UUIDs (not the built-in ConnectorType enum).\n * A user's secret alone does not authorize an agent — they must also enable\n * the custom connector here for every agent that should use it.\n */\nexport const zeroAgentCustomConnectorsContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id/custom-connectors\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: agentCustomConnectorEnabledIdsSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get enabled custom connector ids for user on agent\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id/custom-connectors\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: agentCustomConnectorUpdateSchema,\n responses: {\n 200: agentCustomConnectorEnabledIdsSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update enabled custom connector ids for user on agent\",\n },\n});\nexport type ZeroAgentCustomConnectorsContract =\n typeof zeroAgentCustomConnectorsContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroGoalsContract,\n type ZeroGoalCreateRequest,\n type ZeroGoalEditRequest,\n type ZeroGoalResponse,\n} from \"@vm0/api-contracts/contracts/zero-goals\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function createGoal(\n body: ZeroGoalCreateRequest,\n): Promise<ZeroGoalResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.create({ body });\n if (result.status === 201) return result.body;\n handleError(result, \"Failed to create goal\");\n}\n\nexport async function editGoal(\n body: ZeroGoalEditRequest,\n): Promise<ZeroGoalResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.edit({ body });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to edit goal\");\n}\n\nexport async function getGoal(): Promise<ZeroGoalResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.get({ headers: {} });\n if (result.status === 200) return result.body;\n handleError(result, \"Goal not found\");\n}\n\nexport async function completeGoal(): Promise<ZeroGoalResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.complete({});\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to complete goal\");\n}\n\nexport async function blockGoal(): Promise<ZeroGoalResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.block({});\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to block goal\");\n}\n\nexport async function pauseGoal(): Promise<ZeroGoalResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.pause({});\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to pause goal\");\n}\n\nexport async function resumeGoal(): Promise<ZeroGoalResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.resume({});\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to resume goal\");\n}\n\nexport async function clearGoal(): Promise<{ readonly cleared: true }> {\n const config = await getClientConfig();\n const client = initClient(zeroGoalsContract, config);\n const result = await client.clear({});\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to clear goal\");\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n type ConnectorAuthMethodId,\n type ConnectorType,\n} from \"@vm0/connectors/connectors\";\nimport {\n zeroConnectorManualGrantContract,\n zeroConnectorsByTypeContract,\n zeroConnectorsMainContract,\n zeroConnectorsSearchContract,\n type ConnectorSearchResponse,\n} from \"@vm0/api-contracts/contracts/zero-connectors\";\nimport {\n zeroConnectorCatalogContract,\n type PublicConnectorCatalogListResponse,\n type PublicConnectorCatalogStatusResponse,\n} from \"@vm0/api-contracts/contracts/zero-connector-catalog\";\nimport {\n zeroCustomConnectorByIdContract,\n zeroCustomConnectorsContract,\n type CustomConnectorResponse,\n} from \"@vm0/api-contracts/contracts/zero-custom-connectors\";\nimport type {\n ConnectorListResponse,\n ConnectorResponse,\n} from \"@vm0/api-contracts/contracts/connector-schemas\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List all connectors for the authenticated user (zero proxy)\n */\nexport async function listZeroConnectors(): Promise<ConnectorListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list connectors\");\n}\n\n/**\n * Search available connector definitions for the authenticated user.\n * Omitting the keyword returns the server-side visible connector catalog.\n */\nexport async function searchZeroConnectors(\n keyword?: string,\n): Promise<ConnectorSearchResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsSearchContract, config);\n\n const result = await client.search({\n headers: {},\n query: keyword ? { keyword } : {},\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to search connectors\");\n}\n\nexport async function listZeroConnectorCatalog(): Promise<PublicConnectorCatalogListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorCatalogContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list connector catalog\");\n}\n\nexport async function listZeroConnectorCatalogStatus(): Promise<PublicConnectorCatalogStatusResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorCatalogContract, config);\n\n const result = await client.status({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list connector catalog status\");\n}\n\n/**\n * Get a connector by type (zero proxy)\n * Returns null if not connected (404 response)\n */\nexport async function getZeroConnector(\n type: ConnectorType,\n): Promise<ConnectorResponse | null> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsByTypeContract, config);\n\n const result = await client.get({\n params: { type },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n if (result.status === 404) {\n return null;\n }\n\n handleError(result, `Failed to get connector \"${type}\"`);\n}\n\nexport async function connectZeroConnectorManualGrant(\n type: ConnectorType,\n authMethod: ConnectorAuthMethodId,\n values: Record<string, string>,\n): Promise<ConnectorResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorManualGrantContract, config);\n\n const result = await client.connect({\n params: { type },\n body: { authMethod, values },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to connect connector \"${type}\"`);\n}\n\nexport async function listZeroCustomConnectors(): Promise<\n CustomConnectorResponse[]\n> {\n const config = await getClientConfig();\n const client = initClient(zeroCustomConnectorsContract, config);\n\n const result = await client.list({ headers: {} });\n if (result.status === 200) {\n return result.body.connectors;\n }\n\n handleError(result, \"Failed to list custom connectors\");\n}\n\nexport async function getZeroCustomConnector(\n id: string,\n): Promise<CustomConnectorResponse | null> {\n const config = await getClientConfig();\n const client = initClient(zeroCustomConnectorByIdContract, config);\n\n const result = await client.get({ params: { id }, headers: {} });\n if (result.status === 200) {\n return result.body;\n }\n if (result.status === 404) {\n return null;\n }\n\n handleError(result, `Failed to get custom connector \"${id}\"`);\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n connectorAuthMethodIdSchema,\n connectorTypeSchema,\n} from \"@vm0/connectors/connectors\";\nimport {\n connectorOauthDeviceAuthSessionPollRequestSchema,\n connectorOauthDeviceAuthSessionPollResponseSchema,\n connectorOauthDeviceAuthSessionStartResponseSchema,\n connectorExternalCodeSessionCompleteRequestSchema,\n connectorExternalCodeSessionCompleteResponseSchema,\n connectorExternalCodeSessionStartResponseSchema,\n connectorOauthStartResponseSchema,\n connectorListResponseSchema,\n connectorResponseSchema,\n scopeDiffResponseSchema,\n} from \"./connector-schemas\";\n\nconst c = initContract();\n\n/**\n * Zero contract for GET /api/zero/connectors\n * Proxies to GET /api/connectors\n */\nexport const zeroConnectorsMainContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/connectors\",\n headers: authHeadersSchema,\n responses: {\n 200: connectorListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all connectors (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET/DELETE /api/zero/connectors/:type\n * Proxies to GET/DELETE /api/connectors/:type\n */\nexport const zeroConnectorsByTypeContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 200: connectorResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get connector by type (zero proxy)\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/connectors/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Disconnect a connector (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET /api/zero/connectors/:type/scope-diff\n * App-layer endpoint (direct service call, no proxy)\n */\nexport const zeroConnectorScopeDiffContract = c.router({\n getScopeDiff: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type/scope-diff\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 200: scopeDiffResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get scope diff for a connector\",\n },\n});\n\nexport const zeroConnectorOauthStartContract = c.router({\n start: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/oauth/start\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({ authMethod: connectorAuthMethodIdSchema }),\n responses: {\n 200: connectorOauthStartResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create connector OAuth handoff and authorization URL\",\n },\n});\n\nexport const zeroConnectorOpenIdStartContract = c.router({\n start: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/openid/start\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({ authMethod: connectorAuthMethodIdSchema }),\n responses: {\n 200: connectorOauthStartResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create connector OpenID handoff and authorization URL\",\n },\n});\n\nexport const zeroConnectorManualGrantContract = c.router({\n connect: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/manual-grant\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({\n authMethod: connectorAuthMethodIdSchema,\n values: z.record(z.string(), z.string()),\n }),\n responses: {\n 200: connectorResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Connect a connector with a manual grant\",\n },\n});\n\nexport const zeroConnectorNoAuthGrantContract = c.router({\n connect: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/no-auth\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({\n authMethod: connectorAuthMethodIdSchema,\n }),\n responses: {\n 200: connectorResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Enable a connector with a no-auth grant\",\n },\n});\n\nexport const zeroConnectorOauthDeviceAuthSessionContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/oauth/device/sessions\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({\n authMethod: connectorAuthMethodIdSchema,\n options: z.record(z.string(), z.string()).optional(),\n }),\n responses: {\n 200: connectorOauthDeviceAuthSessionStartResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create connector OAuth device authorization session\",\n },\n poll: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/oauth/device/sessions/:sessionId/poll\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: connectorTypeSchema,\n sessionId: z.uuid(),\n }),\n body: connectorOauthDeviceAuthSessionPollRequestSchema,\n responses: {\n 200: connectorOauthDeviceAuthSessionPollResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Poll connector OAuth device authorization session\",\n },\n});\n\nexport const zeroConnectorExternalCodeSessionContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/external-code/sessions\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({\n authMethod: connectorAuthMethodIdSchema,\n }),\n responses: {\n 200: connectorExternalCodeSessionStartResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create connector external-code authorization session\",\n },\n complete: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/external-code/sessions/:sessionId/complete\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: connectorTypeSchema,\n sessionId: z.uuid(),\n }),\n body: connectorExternalCodeSessionCompleteRequestSchema,\n responses: {\n 200: connectorExternalCodeSessionCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Complete connector external-code authorization session\",\n },\n});\n\nexport type ConnectorSearchAuthMethod = z.infer<\n typeof connectorAuthMethodIdSchema\n>;\n\nconst connectorSearchItemSchema = z.object({\n id: z.string(),\n label: z.string(),\n description: z.string(),\n authMethods: z.array(connectorAuthMethodIdSchema),\n});\n\nconst connectorSearchResponseSchema = z.object({\n connectors: z.array(connectorSearchItemSchema),\n});\n\nexport type ConnectorSearchItem = z.infer<typeof connectorSearchItemSchema>;\nexport type ConnectorSearchResponse = z.infer<\n typeof connectorSearchResponseSchema\n>;\n\n/**\n * Zero contract for GET /api/zero/connectors/search\n * Returns all available connector type definitions with optional keyword search\n */\nexport const zeroConnectorsSearchContract = c.router({\n search: {\n method: \"GET\",\n path: \"/api/zero/connectors/search\",\n headers: authHeadersSchema,\n query: z.object({ keyword: z.string().optional() }),\n responses: {\n 200: connectorSearchResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Search available connector types\",\n },\n});\n\nexport type ZeroConnectorsMainContract = typeof zeroConnectorsMainContract;\nexport type ZeroConnectorsByTypeContract = typeof zeroConnectorsByTypeContract;\nexport type ZeroConnectorScopeDiffContract =\n typeof zeroConnectorScopeDiffContract;\nexport type ZeroConnectorManualGrantContract =\n typeof zeroConnectorManualGrantContract;\nexport type ZeroConnectorNoAuthGrantContract =\n typeof zeroConnectorNoAuthGrantContract;\nexport type ZeroConnectorOauthDeviceAuthSessionContract =\n typeof zeroConnectorOauthDeviceAuthSessionContract;\nexport type ZeroConnectorExternalCodeSessionContract =\n typeof zeroConnectorExternalCodeSessionContract;\nexport type ZeroConnectorsSearchContract = typeof zeroConnectorsSearchContract;\n","import { z } from \"zod\";\nimport type {\n ConnectorAccessKind,\n ConnectorAuthClientConfig,\n ConnectorAuthMethodConfig,\n ConnectorAuthMethodId,\n ConnectorConfig,\n ConnectorGrantKind,\n ConnectorRevokeKind,\n StaticConfidentialConnectorAuthClientConfig,\n} from \"./connector-config\";\nimport { github } from \"./connectors/github\";\nimport { gmail } from \"./connectors/gmail\";\nimport { notion } from \"./connectors/notion\";\nimport { x } from \"./connectors/x\";\nimport { googleDrive } from \"./connectors/google-drive\";\nimport { slack } from \"./connectors/slack\";\nimport { slock } from \"./connectors/slock\";\nimport { googleSheets } from \"./connectors/google-sheets\";\nimport { googleCalendar } from \"./connectors/google-calendar\";\nimport { googleDocs } from \"./connectors/google-docs\";\nimport { googleCloud } from \"./connectors/google-cloud\";\nimport { linear } from \"./connectors/linear\";\nimport { intervalsIcu } from \"./connectors/intervals-icu\";\nimport { vercel } from \"./connectors/vercel\";\nimport { strava } from \"./connectors/strava\";\nimport { googleMeet } from \"./connectors/google-meet\";\nimport { googleSearchConsole } from \"./connectors/google-search-console\";\nimport { googleAnalytics } from \"./connectors/google-analytics\";\nimport { hubspot } from \"./connectors/hubspot\";\nimport { sentry } from \"./connectors/sentry\";\nimport { todoist } from \"./connectors/todoist\";\nimport { xero } from \"./connectors/xero\";\nimport { airtable } from \"./connectors/airtable\";\nimport { docusign } from \"./connectors/docusign\";\nimport { googleAds } from \"./connectors/google-ads\";\nimport { googleMaps } from \"./connectors/google-maps\";\nimport { gumroad } from \"./connectors/gumroad\";\nimport { nintendoStore } from \"./connectors/nintendo-store\";\nimport { playstation } from \"./connectors/playstation\";\nimport { spotify } from \"./connectors/spotify\";\nimport { steam } from \"./connectors/steam\";\nimport { agentmail } from \"./connectors/agentmail\";\nimport { archer } from \"./connectors/archer\";\nimport { ardent } from \"./connectors/ardent\";\nimport { argaLabs } from \"./connectors/arga-labs\";\nimport { armature } from \"./connectors/armature\";\nimport { bentolabsAi } from \"./connectors/bentolabs-ai\";\nimport { bloom } from \"./connectors/bloom\";\nimport { chert } from \"./connectors/chert\";\nimport { inth } from \"./connectors/inth\";\nimport { insforge } from \"./connectors/insforge\";\nimport { interfaze } from \"./connectors/interfaze\";\nimport { keyframeLabs } from \"./connectors/keyframe-labs\";\nimport { kugelAudio } from \"./connectors/kugelaudio\";\nimport { limrun } from \"./connectors/limrun\";\nimport { minicor } from \"./connectors/minicor\";\nimport { netter } from \"./connectors/netter\";\nimport { oddpool } from \"./connectors/oddpool\";\nimport { primitive } from \"./connectors/primitive\";\nimport { qomplement } from \"./connectors/qomplement\";\nimport { rentahuman } from \"./connectors/rentahuman\";\nimport { replicas } from \"./connectors/replicas\";\nimport { riverMarkets } from \"./connectors/river-markets\";\nimport { runtime } from \"./connectors/runtime\";\nimport { salesgraph } from \"./connectors/salesgraph\";\nimport { silmaril } from \"./connectors/silmaril\";\nimport { smolMachines } from \"./connectors/smol-machines\";\nimport { stablebrowse } from \"./connectors/stablebrowse\";\nimport { testerarmy } from \"./connectors/testerarmy\";\nimport { totalis } from \"./connectors/totalis\";\nimport { trellis } from \"./connectors/trellis\";\nimport { voquill } from \"./connectors/voquill\";\nimport { agora } from \"./connectors/agora\";\nimport { ahrefs } from \"./connectors/ahrefs\";\nimport { adzuna } from \"./connectors/adzuna\";\nimport { altium365 } from \"./connectors/altium-365\";\nimport { alchemy } from \"./connectors/alchemy\";\nimport { amplitude } from \"./connectors/amplitude\";\nimport { amadeus } from \"./connectors/amadeus\";\nimport { anthropicManagedAgents } from \"./connectors/anthropic-managed-agents\";\nimport { apify } from \"./connectors/apify\";\nimport { apollo } from \"./connectors/apollo\";\nimport { asana } from \"./connectors/asana\";\nimport { ashby } from \"./connectors/ashby\";\nimport { atlassian } from \"./connectors/atlassian\";\nimport { attio } from \"./connectors/attio\";\nimport { atlascloud } from \"./connectors/atlascloud\";\nimport { aviationstack } from \"./connectors/aviationstack\";\nimport { aws } from \"./connectors/aws\";\nimport { axiom } from \"./connectors/axiom\";\nimport { base44 } from \"./connectors/base44\";\nimport { bentoml } from \"./connectors/bentoml\";\nimport { bfl } from \"./connectors/bfl\";\nimport { bitrefill } from \"./connectors/bitrefill\";\nimport { bitrix } from \"./connectors/bitrix\";\nimport { bland } from \"./connectors/bland\";\nimport { box } from \"./connectors/box\";\nimport { braveSearch } from \"./connectors/brave-search\";\nimport { brex } from \"./connectors/brex\";\nimport { brevo } from \"./connectors/brevo\";\nimport { brightData } from \"./connectors/bright-data\";\nimport { browserbase } from \"./connectors/browserbase\";\nimport { browserless } from \"./connectors/browserless\";\nimport { browserstack } from \"./connectors/browserstack\";\nimport { browserUse } from \"./connectors/browser-use\";\nimport { bubblemaps } from \"./connectors/bubblemaps\";\nimport { buffer } from \"./connectors/buffer\";\nimport { builtwith } from \"./connectors/builtwith\";\nimport { calCom } from \"./connectors/cal-com\";\nimport { calendly } from \"./connectors/calendly\";\nimport { canva } from \"./connectors/canva\";\nimport { chatwoot } from \"./connectors/chatwoot\";\nimport { checkr } from \"./connectors/checkr\";\nimport { clado } from \"./connectors/clado\";\nimport { clerk } from \"./connectors/clerk\";\nimport { clearbit } from \"./connectors/clearbit\";\nimport { clickup } from \"./connectors/clickup\";\nimport { close } from \"./connectors/close\";\nimport { cloudflare } from \"./connectors/cloudflare\";\nimport { cloudinary } from \"./connectors/cloudinary\";\nimport { coda } from \"./connectors/coda\";\nimport { coingecko } from \"./connectors/coingecko\";\nimport { coresignal } from \"./connectors/coresignal\";\nimport { cronlytic } from \"./connectors/cronlytic\";\nimport { crustdata } from \"./connectors/crustdata\";\nimport { cursor } from \"./connectors/cursor\";\nimport { customerIo } from \"./connectors/customer-io\";\nimport { daytona } from \"./connectors/daytona\";\nimport { db9 } from \"./connectors/db9\";\nimport { deel } from \"./connectors/deel\";\nimport { defillama } from \"./connectors/defillama\";\nimport { deepseek } from \"./connectors/deepseek\";\nimport { devto } from \"./connectors/devto\";\nimport { diffbot } from \"./connectors/diffbot\";\nimport { dify } from \"./connectors/dify\";\nimport { discord } from \"./connectors/discord\";\nimport { discordWebhook } from \"./connectors/discord-webhook\";\nimport { doppler } from \"./connectors/doppler\";\nimport { doubao } from \"./connectors/doubao\";\nimport { drive9 } from \"./connectors/drive9\";\nimport { dropbox } from \"./connectors/dropbox\";\nimport { dropboxSign } from \"./connectors/dropbox-sign\";\nimport { duffel } from \"./connectors/duffel\";\nimport { e2b } from \"./connectors/e2b\";\nimport { elevenlabs } from \"./connectors/elevenlabs\";\nimport { etsy } from \"./connectors/etsy\";\nimport { etherscan } from \"./connectors/etherscan\";\nimport { exa } from \"./connectors/exa\";\nimport { explorium } from \"./connectors/explorium\";\nimport { faire } from \"./connectors/faire\";\nimport { fal } from \"./connectors/fal\";\nimport { figma } from \"./connectors/figma\";\nimport { firecrawl } from \"./connectors/firecrawl\";\nimport { fireflies } from \"./connectors/fireflies\";\nimport { flightaware } from \"./connectors/flightaware\";\nimport { freshdesk } from \"./connectors/freshdesk\";\nimport { gamma } from \"./connectors/gamma\";\nimport { garminConnect } from \"./connectors/garmin-connect\";\nimport { gemini } from \"./connectors/gemini\";\nimport { gitlab } from \"./connectors/gitlab\";\nimport { gong } from \"./connectors/gong\";\nimport { granola } from \"./connectors/granola\";\nimport { greenhouse } from \"./connectors/greenhouse\";\nimport { groq } from \"./connectors/groq\";\nimport { helicone } from \"./connectors/helicone\";\nimport { heygen } from \"./connectors/heygen\";\nimport { hitem3d } from \"./connectors/hitem3d\";\nimport { htmlcsstoimage } from \"./connectors/htmlcsstoimage\";\nimport { honcho } from \"./connectors/honcho\";\nimport { huggingFace } from \"./connectors/hugging-face\";\nimport { hume } from \"./connectors/hume\";\nimport { hunter } from \"./connectors/hunter\";\nimport { imgur } from \"./connectors/imgur\";\nimport { infisical } from \"./connectors/infisical\";\nimport { instagram } from \"./connectors/instagram\";\nimport { instantly } from \"./connectors/instantly\";\nimport { intercom } from \"./connectors/intercom\";\nimport { ironclad } from \"./connectors/ironclad\";\nimport { jam } from \"./connectors/jam\";\nimport { jira } from \"./connectors/jira\";\nimport { jotform } from \"./connectors/jotform\";\nimport { klaviyo } from \"./connectors/klaviyo\";\nimport { kommo } from \"./connectors/kommo\";\nimport { langfuse } from \"./connectors/langfuse\";\nimport { langsmith } from \"./connectors/langsmith\";\nimport { lark } from \"./connectors/lark\";\nimport { line } from \"./connectors/line\";\nimport { loops } from \"./connectors/loops\";\nimport { luma } from \"./connectors/luma\";\nimport { lumaAi } from \"./connectors/luma-ai\";\nimport { mailchimp } from \"./connectors/mailchimp\";\nimport { mailsac } from \"./connectors/mailsac\";\nimport { make } from \"./connectors/make\";\nimport { manus } from \"./connectors/manus\";\nimport { mapbox } from \"./connectors/mapbox\";\nimport { massive } from \"./connectors/massive\";\nimport { maskdb } from \"./connectors/maskdb\";\nimport { mathpix } from \"./connectors/mathpix\";\nimport { mem0 } from \"./connectors/mem0\";\nimport { mercury } from \"./connectors/mercury\";\nimport { meshy } from \"./connectors/meshy\";\nimport { metaAds } from \"./connectors/meta-ads\";\nimport { metabase } from \"./connectors/metabase\";\nimport { microsoft365 } from \"./connectors/microsoft-365\";\nimport { tiktokAds } from \"./connectors/tiktok-ads\";\nimport { minimax } from \"./connectors/minimax\";\nimport { minio } from \"./connectors/minio\";\nimport { miro } from \"./connectors/miro\";\nimport { mixpanel } from \"./connectors/mixpanel\";\nimport { monday } from \"./connectors/monday\";\nimport { modal } from \"./connectors/modal\";\nimport { moss } from \"./connectors/moss\";\nimport { msg9 } from \"./connectors/msg9\";\nimport { n8n } from \"./connectors/n8n\";\nimport { neon } from \"./connectors/neon\";\nimport { netdata } from \"./connectors/netdata\";\nimport { novita } from \"./connectors/novita\";\nimport { nyne } from \"./connectors/nyne\";\nimport { onyx } from \"./connectors/onyx\";\nimport { openai } from \"./connectors/openai\";\nimport { openrouter } from \"./connectors/openrouter\";\nimport { openweather } from \"./connectors/openweather\";\nimport { outlookCalendar } from \"./connectors/outlook-calendar\";\nimport { outlookMail } from \"./connectors/outlook-mail\";\nimport { pandadoc } from \"./connectors/pandadoc\";\nimport { parallel } from \"./connectors/parallel\";\nimport { pdf4me } from \"./connectors/pdf4me\";\nimport { pdfco } from \"./connectors/pdfco\";\nimport { pdforge } from \"./connectors/pdforge\";\nimport { peopleDataLabs } from \"./connectors/people-data-labs\";\nimport { perplexity } from \"./connectors/perplexity\";\nimport { pexels } from \"./connectors/pexels\";\nimport { pika } from \"./connectors/pika\";\nimport { pinecone } from \"./connectors/pinecone\";\nimport { pipedream } from \"./connectors/pipedream\";\nimport { pipedrive } from \"./connectors/pipedrive\";\nimport { plain } from \"./connectors/plain\";\nimport { plausible } from \"./connectors/plausible\";\nimport { podchaser } from \"./connectors/podchaser\";\nimport { posthog } from \"./connectors/posthog\";\nimport { porkbun } from \"./connectors/porkbun\";\nimport { printful } from \"./connectors/printful\";\nimport { prismaPostgres } from \"./connectors/prisma-postgres\";\nimport { profound } from \"./connectors/profound\";\nimport { productlane } from \"./connectors/productlane\";\nimport { pushinator } from \"./connectors/pushinator\";\nimport { qdrant } from \"./connectors/qdrant\";\nimport { quickbooks } from \"./connectors/quickbooks\";\nimport { qiita } from \"./connectors/qiita\";\nimport { railway } from \"./connectors/railway\";\nimport { railwayProject } from \"./connectors/railway-project\";\nimport { reap } from \"./connectors/reap\";\nimport { reddit } from \"./connectors/reddit\";\nimport { reducto } from \"./connectors/reducto\";\nimport { recraft } from \"./connectors/recraft\";\nimport { render } from \"./connectors/render\";\nimport { replicate } from \"./connectors/replicate\";\nimport { reportei } from \"./connectors/reportei\";\nimport { resend } from \"./connectors/resend\";\nimport { rentcast } from \"./connectors/rentcast\";\nimport { revenuecat } from \"./connectors/revenuecat\";\nimport { runway } from \"./connectors/runway\";\nimport { salesforce } from \"./connectors/salesforce\";\nimport { scrapeninja } from \"./connectors/scrapeninja\";\nimport { segment } from \"./connectors/segment\";\nimport { semrush } from \"./connectors/semrush\";\nimport { sendgrid } from \"./connectors/sendgrid\";\nimport { serpapi } from \"./connectors/serpapi\";\nimport { servicenow } from \"./connectors/servicenow\";\nimport { shopify } from \"./connectors/shopify\";\nimport { shortio } from \"./connectors/shortio\";\nimport { similarweb } from \"./connectors/similarweb\";\nimport { slackWebhook } from \"./connectors/slack-webhook\";\nimport { snowflake } from \"./connectors/snowflake\";\nimport { sociavault } from \"./connectors/sociavault\";\nimport { sponge } from \"./connectors/sponge\";\nimport { sproutgigs } from \"./connectors/sproutgigs\";\nimport { square } from \"./connectors/square\";\nimport { stabilityAi } from \"./connectors/stability-ai\";\nimport { strapi } from \"./connectors/strapi\";\nimport { streak } from \"./connectors/streak\";\nimport { stripe } from \"./connectors/stripe\";\nimport { supabase } from \"./connectors/supabase\";\nimport { supadata } from \"./connectors/supadata\";\nimport { supermemory } from \"./connectors/supermemory\";\nimport { tavily } from \"./connectors/tavily\";\nimport { testOauth } from \"./connectors/test-oauth\";\nimport { testOauthDevice } from \"./connectors/test-oauth-device\";\nimport { testrail } from \"./connectors/testrail\";\nimport { ticketmaster } from \"./connectors/ticketmaster\";\nimport { tldv } from \"./connectors/tldv\";\nimport { together } from \"./connectors/together\";\nimport { tripo } from \"./connectors/tripo\";\nimport { twenty } from \"./connectors/twenty\";\nimport { twilio } from \"./connectors/twilio\";\nimport { typeform } from \"./connectors/typeform\";\nimport { v0 } from \"./connectors/v0\";\nimport { wandb } from \"./connectors/wandb\";\nimport { webflow } from \"./connectors/webflow\";\nimport { weread } from \"./connectors/weread\";\nimport { whaleAlert } from \"./connectors/whale-alert\";\nimport { wix } from \"./connectors/wix\";\nimport { workos } from \"./connectors/workos\";\nimport { wrike } from \"./connectors/wrike\";\nimport { youtube } from \"./connectors/youtube\";\nimport { zapier } from \"./connectors/zapier\";\nimport { zapsign } from \"./connectors/zapsign\";\nimport { zendesk } from \"./connectors/zendesk\";\nimport { zep } from \"./connectors/zep\";\nimport { zeptomail } from \"./connectors/zeptomail\";\nimport { zoom } from \"./connectors/zoom\";\n\nexport {\n CONNECTOR_AUTH_METHOD_IDS,\n CONNECTOR_DISPLAY_CATEGORY_GROUPS,\n CONNECTOR_DISPLAY_CATEGORY_META,\n CONNECTOR_DISPLAY_CATEGORY_ORDER,\n CONNECTOR_PLATFORM_SECRET_NAMES,\n connectorDisplayCategoryMetadataForItems,\n connectorAuthMethodIdSchema,\n} from \"./connector-config\";\nexport type {\n ConnectorAccessConfig,\n ConnectorAccessKind,\n ConnectorAuthClientConfig,\n ConnectorBrowserAuthCallbackOrigin,\n ConnectorAuthCodeCallbackOrigin,\n ConnectorAuthCodeGrantConfig,\n ConnectorAuthMethodConfig,\n ConnectorAuthMethodId,\n ConnectorConfig,\n ConnectorDeviceAuthGrantConfig,\n ConnectorDeviceAuthStartOptionConfig,\n ConnectorDeviceAuthStartOptions,\n ConnectorDeviceAuthStartOptionsConfig,\n ConnectorDeviceAuthStartSelectOptionChoiceConfig,\n ConnectorDeviceAuthStartSelectOptionConfig,\n ConnectorDisplayCategorizedItem,\n ConnectorDisplayCategory,\n ConnectorDisplayCategoryMetadata,\n ConnectorDisplayCategoryMetadataCategory,\n ConnectorDisplayCategoryMetadataGroup,\n ConnectorDisplayCategoryGroup,\n ConnectorEnvBindingValue,\n ConnectorEnvBindings,\n ConnectorExternalCodeGrantConfig,\n ConnectorGenerationType,\n ConnectorGrantConfig,\n ConnectorGrantKind,\n ConnectorGrantOutputBindings,\n ConnectorManagedGrantConfig,\n ConnectorManualGrantConfig,\n ConnectorManualGrantFieldConfig,\n ConnectorNoAuthGrantConfig,\n ConnectorNoAccessConfig,\n ConnectorOutputValueRef,\n ConnectorOpenIdAuthGrantConfig,\n ConnectorPlatformSecretName,\n ConnectorRefreshTokenAccessConfig,\n ConnectorRefreshTokenInputBindings,\n ConnectorRefreshTokenInputValueRef,\n ConnectorRefreshTokenOutputBindings,\n ConnectorRevokeConfig,\n ConnectorRevokeInputBindings,\n ConnectorRevokeKind,\n ConnectorSecretValueRef,\n ConnectorStaticAccessConfig,\n ConnectorStorageConfig,\n ConnectorVariableValueRef,\n DynamicPublicConnectorAuthClientConfig,\n PublicConnectorAuthClientConfig,\n StaticConfidentialConnectorAuthClientConfig,\n StaticPublicConnectorAuthClientConfig,\n} from \"./connector-config\";\n\ntype AssertNever<T extends never> = T;\n\ntype ConnectorRefreshableSecretName<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> =\n ConnectorRefreshMappingFor<Type, Method> extends {\n readonly refreshableSecrets: readonly (infer SecretName)[];\n }\n ? Extract<SecretName, string>\n : never;\n\ntype ConnectorRequiredRefreshOutputNameFromRef<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n OutputName,\n Ref,\n> = Ref extends `$secrets.${infer Name}`\n ? Name extends ConnectorRefreshableSecretName<Type, Method>\n ? OutputName\n : never\n : never;\n\ntype ConnectorRequiredRefreshOutputName<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = {\n readonly [OutputName in keyof ConnectorRefreshOutputsFor<\n Type,\n Method\n >]: ConnectorRequiredRefreshOutputNameFromRef<\n Type,\n Method,\n OutputName,\n ConnectorRefreshOutputsFor<Type, Method>[OutputName]\n >;\n}[keyof ConnectorRefreshOutputsFor<Type, Method>];\n\nfunction defineConnectors<\n const Configs extends Record<string, ConnectorConfig>,\n>(configs: Configs): Configs {\n return configs;\n}\n\n/**\n * Connector type configuration\n * Maps type to display info, auth methods, and runtime env bindings.\n *\n * Each connector's definition lives in its own file under ./connectors/.\n * Spreading here keeps the ConnectorType union literal-keyed so the\n * schema, utility getters, and autocomplete all continue to work.\n */\nconst CONNECTOR_TYPES_DEF = defineConnectors({\n ...github,\n ...gmail,\n ...notion,\n ...x,\n ...googleDrive,\n ...slack,\n ...slock,\n ...googleSheets,\n ...googleCalendar,\n ...googleDocs,\n ...linear,\n ...intervalsIcu,\n ...vercel,\n ...strava,\n ...googleMeet,\n ...googleSearchConsole,\n ...googleAnalytics,\n ...hubspot,\n ...sentry,\n ...todoist,\n ...xero,\n ...airtable,\n ...docusign,\n ...googleAds,\n ...googleCloud,\n ...googleMaps,\n ...gumroad,\n ...nintendoStore,\n ...playstation,\n ...spotify,\n ...steam,\n ...agentmail,\n ...archer,\n ...ardent,\n ...argaLabs,\n ...armature,\n ...bentolabsAi,\n ...bloom,\n ...chert,\n ...inth,\n ...insforge,\n ...interfaze,\n ...keyframeLabs,\n ...kugelAudio,\n ...limrun,\n ...minicor,\n ...netter,\n ...oddpool,\n ...primitive,\n ...qomplement,\n ...rentahuman,\n ...replicas,\n ...riverMarkets,\n ...runtime,\n ...salesgraph,\n ...silmaril,\n ...smolMachines,\n ...stablebrowse,\n ...testerarmy,\n ...totalis,\n ...trellis,\n ...voquill,\n ...agora,\n ...ahrefs,\n ...adzuna,\n ...altium365,\n ...alchemy,\n ...amplitude,\n ...amadeus,\n ...anthropicManagedAgents,\n ...apify,\n ...apollo,\n ...asana,\n ...ashby,\n ...atlassian,\n ...attio,\n ...atlascloud,\n ...aviationstack,\n ...aws,\n ...axiom,\n ...base44,\n ...bentoml,\n ...bfl,\n ...bitrefill,\n ...bitrix,\n ...bland,\n ...box,\n ...braveSearch,\n ...brex,\n ...brevo,\n ...brightData,\n ...browserbase,\n ...browserless,\n ...browserstack,\n ...browserUse,\n ...bubblemaps,\n ...buffer,\n ...builtwith,\n ...calCom,\n ...calendly,\n ...canva,\n ...chatwoot,\n ...checkr,\n ...clado,\n ...clerk,\n ...clearbit,\n ...clickup,\n ...close,\n ...cloudflare,\n ...cloudinary,\n ...coda,\n ...coingecko,\n ...coresignal,\n ...cronlytic,\n ...crustdata,\n ...cursor,\n ...customerIo,\n ...daytona,\n ...db9,\n ...deel,\n ...defillama,\n ...deepseek,\n ...devto,\n ...diffbot,\n ...dify,\n ...discord,\n ...discordWebhook,\n ...doppler,\n ...doubao,\n ...drive9,\n ...dropbox,\n ...dropboxSign,\n ...duffel,\n ...e2b,\n ...elevenlabs,\n ...etsy,\n ...etherscan,\n ...exa,\n ...explorium,\n ...faire,\n ...fal,\n ...figma,\n ...firecrawl,\n ...fireflies,\n ...flightaware,\n ...freshdesk,\n ...gamma,\n ...garminConnect,\n ...gemini,\n ...gitlab,\n ...gong,\n ...granola,\n ...greenhouse,\n ...groq,\n ...helicone,\n ...heygen,\n ...hitem3d,\n ...htmlcsstoimage,\n ...honcho,\n ...huggingFace,\n ...hume,\n ...hunter,\n ...imgur,\n ...infisical,\n ...instagram,\n ...instantly,\n ...intercom,\n ...ironclad,\n ...jam,\n ...jira,\n ...jotform,\n ...klaviyo,\n ...kommo,\n ...langfuse,\n ...langsmith,\n ...lark,\n ...line,\n ...loops,\n ...luma,\n ...lumaAi,\n ...mailchimp,\n ...mailsac,\n ...make,\n ...manus,\n ...mapbox,\n ...massive,\n ...maskdb,\n ...mathpix,\n ...mem0,\n ...mercury,\n ...meshy,\n ...metaAds,\n ...metabase,\n ...microsoft365,\n ...tiktokAds,\n ...minimax,\n ...minio,\n ...miro,\n ...mixpanel,\n ...monday,\n ...modal,\n ...moss,\n ...msg9,\n ...n8n,\n ...neon,\n ...netdata,\n ...novita,\n ...nyne,\n ...onyx,\n ...openai,\n ...openrouter,\n ...openweather,\n ...outlookCalendar,\n ...outlookMail,\n ...pandadoc,\n ...parallel,\n ...pdf4me,\n ...pdfco,\n ...pdforge,\n ...peopleDataLabs,\n ...perplexity,\n ...pexels,\n ...pika,\n ...pinecone,\n ...pipedream,\n ...pipedrive,\n ...plain,\n ...plausible,\n ...podchaser,\n ...posthog,\n ...porkbun,\n ...printful,\n ...prismaPostgres,\n ...profound,\n ...productlane,\n ...pushinator,\n ...qdrant,\n ...quickbooks,\n ...qiita,\n ...railway,\n ...railwayProject,\n ...reap,\n ...reddit,\n ...reducto,\n ...recraft,\n ...render,\n ...replicate,\n ...reportei,\n ...resend,\n ...rentcast,\n ...revenuecat,\n ...runway,\n ...salesforce,\n ...scrapeninja,\n ...segment,\n ...semrush,\n ...sendgrid,\n ...serpapi,\n ...servicenow,\n ...shopify,\n ...shortio,\n ...similarweb,\n ...slackWebhook,\n ...snowflake,\n ...sociavault,\n ...sponge,\n ...sproutgigs,\n ...square,\n ...stabilityAi,\n ...strapi,\n ...streak,\n ...stripe,\n ...supabase,\n ...supadata,\n ...supermemory,\n ...tavily,\n ...testOauth,\n ...testOauthDevice,\n ...testrail,\n ...ticketmaster,\n ...tldv,\n ...together,\n ...tripo,\n ...twenty,\n ...twilio,\n ...typeform,\n ...v0,\n ...wandb,\n ...webflow,\n ...weread,\n ...whaleAlert,\n ...wix,\n ...workos,\n ...wrike,\n ...youtube,\n ...zapier,\n ...zapsign,\n ...zendesk,\n ...zep,\n ...zeptomail,\n ...zoom,\n} as const);\n\nexport type ConnectorType = Extract<keyof typeof CONNECTOR_TYPES_DEF, string>;\ntype ConnectorAuthMethodsOf<Type extends ConnectorType> =\n (typeof CONNECTOR_TYPES_DEF)[Type][\"authMethods\"];\n\nexport type ConnectorAuthMethodIds<Type extends ConnectorType> = Extract<\n keyof ConnectorAuthMethodsOf<Type>,\n ConnectorAuthMethodId\n>;\nexport type ConnectorAuthMethodConfigFor<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = ConnectorAuthMethodsOf<Type>[Method] & ConnectorAuthMethodConfig;\n\ntype ConnectorRefreshMappingFor<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly access: {\n readonly kind: \"refresh-token\";\n readonly inputs: infer Inputs;\n readonly outputs: infer Outputs;\n readonly refreshableSecrets: infer RefreshableSecrets;\n };\n}\n ? {\n readonly inputs: Inputs;\n readonly outputs: Outputs;\n readonly refreshableSecrets: RefreshableSecrets;\n }\n : never;\n\ntype ConnectorGrantOutputsFor<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly grant: {\n readonly kind:\n | \"auth-code\"\n | \"openid-auth\"\n | \"external-code\"\n | \"device-auth\";\n readonly outputs: infer Outputs;\n };\n}\n ? Outputs\n : never;\n\ntype ConnectorRefreshInputsFor<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> =\n ConnectorRefreshMappingFor<Type, Method> extends {\n readonly inputs: infer Inputs;\n }\n ? Inputs\n : never;\n\ntype ConnectorRefreshOutputsFor<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> =\n ConnectorRefreshMappingFor<Type, Method> extends {\n readonly outputs: infer Outputs;\n }\n ? Outputs\n : never;\n\ntype ConnectorRevokeInputsFor<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly revoke: {\n readonly kind: \"token-revoke\";\n readonly inputs: infer Inputs;\n };\n}\n ? Inputs\n : never;\n\nexport type ConnectorRefreshInputValues<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = {\n readonly [InputName in keyof ConnectorRefreshInputsFor<Type, Method>]: string;\n};\n\nexport type ConnectorGrantOutputValues<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = {\n readonly [OutputName in keyof ConnectorGrantOutputsFor<Type, Method>]:\n | string\n | null\n | undefined;\n};\n\nexport type ConnectorRefreshOutputValues<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = Readonly<\n Record<\n Extract<ConnectorRequiredRefreshOutputName<Type, Method>, string>,\n string\n >\n> & {\n readonly [OutputName in Exclude<\n keyof ConnectorRefreshOutputsFor<Type, Method>,\n ConnectorRequiredRefreshOutputName<Type, Method>\n >]?: string;\n};\n\nexport type ConnectorRevokeInputValues<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = Readonly<\n Record<Extract<keyof ConnectorRevokeInputsFor<Type, Method>, string>, string>\n>;\n\nexport type ConnectorAuthClientConfigForMethod<\n Type extends ConnectorType,\n Method extends ConnectorAuthMethodIds<Type>,\n> = \"client\" extends keyof ConnectorAuthMethodsOf<Type>[Method]\n ? ConnectorAuthMethodsOf<Type>[Method][\"client\"] extends ConnectorAuthClientConfig\n ? ConnectorAuthMethodsOf<Type>[Method][\"client\"]\n : never\n : never;\n\nexport type ConnectorAuthMethodIdsByGrantKind<\n Type extends ConnectorType,\n Kind extends ConnectorGrantKind,\n> = Type extends ConnectorType\n ? {\n [Method in ConnectorAuthMethodIds<Type>]: ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly grant: { readonly kind: Kind };\n }\n ? Method\n : never;\n }[ConnectorAuthMethodIds<Type>]\n : never;\n\nexport type ConnectorAuthMethodIdsByAccessKind<\n Type extends ConnectorType,\n Kind extends ConnectorAccessKind,\n> = Type extends ConnectorType\n ? {\n [Method in ConnectorAuthMethodIds<Type>]: ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly access: { readonly kind: Kind };\n }\n ? Method\n : never;\n }[ConnectorAuthMethodIds<Type>]\n : never;\n\nexport type ConnectorAuthMethodIdsByRevokeKind<\n Type extends ConnectorType,\n Kind extends ConnectorRevokeKind,\n> = Type extends ConnectorType\n ? {\n [Method in ConnectorAuthMethodIds<Type>]: ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly revoke: { readonly kind: Kind };\n }\n ? Method\n : never;\n }[ConnectorAuthMethodIds<Type>]\n : never;\n\nexport type ConnectorTypesByGrantKind<Kind extends ConnectorGrantKind> = {\n [Type in ConnectorType]: {\n [Method in keyof ConnectorAuthMethodsOf<Type>]: ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly grant: { readonly kind: Kind };\n }\n ? Type\n : never;\n }[keyof ConnectorAuthMethodsOf<Type>];\n}[ConnectorType];\n\nexport type ConnectorTypesByAccessKind<Kind extends ConnectorAccessKind> = {\n [Type in ConnectorType]: {\n [Method in keyof ConnectorAuthMethodsOf<Type>]: ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly access: { readonly kind: Kind };\n }\n ? Type\n : never;\n }[keyof ConnectorAuthMethodsOf<Type>];\n}[ConnectorType];\n\nexport type ConnectorTypesByRevokeKind<Kind extends ConnectorRevokeKind> = {\n [Type in ConnectorType]: {\n [Method in keyof ConnectorAuthMethodsOf<Type>]: ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly revoke: { readonly kind: Kind };\n }\n ? Type\n : never;\n }[keyof ConnectorAuthMethodsOf<Type>];\n}[ConnectorType];\n\nexport type AuthGrantConnectorType = ConnectorTypesByGrantKind<\n \"auth-code\" | \"openid-auth\" | \"external-code\" | \"device-auth\"\n>;\nexport type AuthCodeGrantConnectorType = ConnectorTypesByGrantKind<\"auth-code\">;\nexport type OpenIdAuthGrantConnectorType =\n ConnectorTypesByGrantKind<\"openid-auth\">;\nexport type ExternalCodeGrantConnectorType =\n ConnectorTypesByGrantKind<\"external-code\">;\nexport type DeviceAuthGrantConnectorType =\n ConnectorTypesByGrantKind<\"device-auth\">;\nexport type ConnectorAuthCodeGrantAuthMethodId<\n Type extends AuthCodeGrantConnectorType = AuthCodeGrantConnectorType,\n> = ConnectorAuthMethodIdsByGrantKind<Type, \"auth-code\">;\nexport type ConnectorOpenIdAuthGrantAuthMethodId<\n Type extends OpenIdAuthGrantConnectorType = OpenIdAuthGrantConnectorType,\n> = ConnectorAuthMethodIdsByGrantKind<Type, \"openid-auth\">;\nexport type ConnectorExternalCodeGrantAuthMethodId<\n Type extends ExternalCodeGrantConnectorType = ExternalCodeGrantConnectorType,\n> = ConnectorAuthMethodIdsByGrantKind<Type, \"external-code\">;\nexport type ConnectorDeviceAuthGrantAuthMethodId<\n Type extends DeviceAuthGrantConnectorType = DeviceAuthGrantConnectorType,\n> = ConnectorAuthMethodIdsByGrantKind<Type, \"device-auth\">;\nexport type RefreshTokenAccessConnectorType =\n ConnectorTypesByAccessKind<\"refresh-token\">;\nexport type TokenRevokeConnectorType =\n ConnectorTypesByRevokeKind<\"token-revoke\">;\ntype TokenRevokeConnectorTypeWithNonConfidentialClient = {\n [Type in TokenRevokeConnectorType]: {\n [Method in ConnectorAuthMethodIds<Type>]: ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly revoke: { readonly kind: \"token-revoke\" };\n readonly client: StaticConfidentialConnectorAuthClientConfig;\n }\n ? never\n : ConnectorAuthMethodsOf<Type>[Method] extends {\n readonly revoke: { readonly kind: \"token-revoke\" };\n }\n ? Type\n : never;\n }[ConnectorAuthMethodIds<Type>];\n}[TokenRevokeConnectorType];\nexport type TokenRevokeConnectorAuthMethodsUseConfidentialClients =\n AssertNever<TokenRevokeConnectorTypeWithNonConfidentialClient>;\n\nexport const CONNECTOR_TYPES = CONNECTOR_TYPES_DEF;\nexport const CONNECTOR_TYPE_KEYS = Object.freeze(\n Object.keys(CONNECTOR_TYPES_DEF),\n) as readonly [ConnectorType, ...ConnectorType[]];\nexport const connectorTypeSchema = z.enum(CONNECTOR_TYPE_KEYS);\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const github = {\n github: {\n label: \"GitHub\",\n category: \"engineering-team-execution\",\n tags: [\"gh\", \"gh_api_key\", \"git\", \"vcs\", \"scm\", \"repos\"],\n helpText:\n \"Connect your GitHub account to access repositories and GitHub features\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with GitHub to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GH_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GH_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GITHUB_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"repo\", \"project\", \"workflow\"],\n outputs: {\n accessToken: \"$secrets.GITHUB_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GH_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n GITHUB_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n },\n },\n revoke: {\n kind: \"token-revoke\",\n inputs: {\n accessToken: \"$secrets.GITHUB_ACCESS_TOKEN\",\n },\n },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const gmail = {\n gmail: {\n label: \"Gmail\",\n category: \"communication-collaboration\",\n tags: [\"email\", \"mail\"],\n helpText: \"Connect your Gmail account to send and read emails\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Gmail access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GMAIL_ACCESS_TOKEN\", \"GMAIL_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"https://www.googleapis.com/auth/gmail.modify\"],\n outputs: {\n accessToken: \"$secrets.GMAIL_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GMAIL_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GMAIL_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GMAIL_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GMAIL_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GMAIL_ACCESS_TOKEN\"],\n envBindings: {\n GMAIL_TOKEN: \"$secrets.GMAIL_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const notion = {\n notion: {\n label: \"Notion\",\n category: \"docs-files-knowledge\",\n tags: [\"docs\", \"wiki\", \"workspace\"],\n helpText: \"Connect your Notion workspace to access pages and databases\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Notion to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"NOTION_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"NOTION_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"NOTION_ACCESS_TOKEN\", \"NOTION_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [],\n outputs: {\n accessToken: \"$secrets.NOTION_ACCESS_TOKEN\",\n refreshToken: \"$secrets.NOTION_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.NOTION_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.NOTION_ACCESS_TOKEN\",\n refreshToken: \"$secrets.NOTION_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"NOTION_ACCESS_TOKEN\"],\n envBindings: {\n NOTION_TOKEN: \"$secrets.NOTION_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const x = {\n x: {\n label: \"X\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your X (Twitter) account to read tweets, timelines, and search\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with X to grant read access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"X_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"X_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"X_ACCESS_TOKEN\", \"X_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"tweet.read\", // All the Tweets you can view, including Tweets from protected accounts.\n \"tweet.write\", // Tweet and Retweet for you.\n \"tweet.moderate.write\", // Hide and unhide replies to your Tweets.\n \"users.email\", // Email from an authenticated user.\n \"users.read\", // Any account you can view, including protected accounts.\n \"follows.read\", // People who follow you and people who you follow.\n \"follows.write\", // Follow and unfollow people for you.\n \"offline.access\", // Stay connected to your account until you revoke access.\n \"space.read\", // All the Spaces you can view.\n \"mute.read\", // Accounts you've muted.\n \"mute.write\", // Mute and unmute accounts for you.\n \"like.read\", // Tweets you've liked and likes you can view.\n \"like.write\", // Like and un-like Tweets for you.\n \"list.read\", // Lists, list members, and list followers of lists you've created or are a member of, including private lists.\n \"list.write\", // Create and manage Lists for you.\n \"block.read\", // Accounts you've blocked.\n \"block.write\", // Block and unblock accounts for you.\n \"bookmark.read\", // Get Bookmarked Tweets from an authenticated user.\n \"bookmark.write\", // Bookmark and remove Bookmarks from Tweets.\n \"dm.read\", // All the Direct Messages you can view, including Direct Messages from protected accounts.\n \"dm.write\", // Send and manage Direct Messages for you.\n \"media.write\", // Upload media.\n ],\n outputs: {\n accessToken: \"$secrets.X_ACCESS_TOKEN\",\n refreshToken: \"$secrets.X_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.X_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.X_ACCESS_TOKEN\",\n refreshToken: \"$secrets.X_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"X_ACCESS_TOKEN\"],\n envBindings: {\n X_TOKEN: \"$secrets.X_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleDrive = {\n \"google-drive\": {\n label: \"Google Drive\",\n category: \"docs-files-knowledge\",\n helpText: \"Connect your Google account to access and manage files in Drive\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Drive access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GOOGLE_DRIVE_ACCESS_TOKEN\", \"GOOGLE_DRIVE_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/drive\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_DRIVE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_DRIVE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_DRIVE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_DRIVE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_DRIVE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_DRIVE_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_DRIVE_TOKEN: \"$secrets.GOOGLE_DRIVE_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const slack = {\n slack: {\n label: \"Slack\",\n category: \"communication-collaboration\",\n tags: [\"chat\", \"messaging\", \"im\"],\n helpText: \"Connect your Slack account to send messages and read channels\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Slack to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"SLACK_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"SLACK_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"SLACK_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n // Channels\n \"channels:read\",\n // Messaging\n \"chat:write\",\n // Users\n \"users:read\",\n \"users:read.email\",\n // Files\n \"files:read\",\n \"files:write\",\n // Direct messages (high priority)\n \"im:write\",\n // Reactions (high priority)\n \"reactions:read\",\n \"reactions:write\",\n // Private channels (high priority)\n \"groups:read\",\n // Reminders (medium priority)\n \"reminders:read\",\n \"reminders:write\",\n // Pins (medium priority)\n \"pins:read\",\n \"pins:write\",\n // User groups (medium priority)\n \"usergroups:read\",\n // Do Not Disturb (low priority)\n \"dnd:read\",\n // Bookmarks (low priority)\n \"bookmarks:read\",\n // Team info (low priority)\n \"team:read\",\n // Custom emoji (low priority)\n \"emoji:read\",\n ],\n outputs: {\n accessToken: \"$secrets.SLACK_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SLACK_TOKEN: \"$secrets.SLACK_ACCESS_TOKEN\",\n },\n },\n revoke: {\n kind: \"token-revoke\",\n inputs: {\n accessToken: \"$secrets.SLACK_ACCESS_TOKEN\",\n },\n },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const slock = {\n slock: {\n label: \"Slock\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect your Slock account to let agents access Slock agents, machines, channels, and messages.\",\n authMethods: {\n oauth: {\n label: \"OAuth Device Authorization\",\n helpText: \"Sign in with Slock using a device code.\",\n client: {\n clientRegistration: \"dynamic\",\n clientType: \"public\",\n },\n storage: {\n secrets: [\n \"SLOCK_ACCESS_TOKEN\",\n \"SLOCK_SERVER_ID\",\n \"SLOCK_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"device-auth\",\n scopes: [],\n outputs: {\n accessToken: \"$secrets.SLOCK_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SLOCK_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.SLOCK_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.SLOCK_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SLOCK_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"SLOCK_ACCESS_TOKEN\"],\n envBindings: {\n SLOCK_TOKEN: \"$secrets.SLOCK_ACCESS_TOKEN\",\n SLOCK_SERVER_ID: \"$secrets.SLOCK_SERVER_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleSheets = {\n \"google-sheets\": {\n label: \"Google Sheets\",\n category: \"docs-files-knowledge\",\n helpText: \"Connect your Google account to access and manage spreadsheets\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Sheets access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\n \"GOOGLE_SHEETS_ACCESS_TOKEN\",\n \"GOOGLE_SHEETS_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/spreadsheets\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_SHEETS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_SHEETS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_SHEETS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_SHEETS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_SHEETS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_SHEETS_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_SHEETS_TOKEN: \"$secrets.GOOGLE_SHEETS_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleCalendar = {\n \"google-calendar\": {\n label: \"Google Calendar\",\n category: \"meetings-scheduling\",\n tags: [\"calendar\", \"scheduling\", \"gcal\"],\n helpText:\n \"Connect your Google account to access and manage calendar events\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Calendar access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\n \"GOOGLE_CALENDAR_ACCESS_TOKEN\",\n \"GOOGLE_CALENDAR_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/calendar\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_CALENDAR_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_CALENDAR_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_CALENDAR_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_CALENDAR_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_CALENDAR_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_CALENDAR_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_CALENDAR_TOKEN: \"$secrets.GOOGLE_CALENDAR_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleDocs = {\n \"google-docs\": {\n label: \"Google Docs\",\n category: \"docs-files-knowledge\",\n helpText: \"Connect your Google account to access and manage documents\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Docs access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GOOGLE_DOCS_ACCESS_TOKEN\", \"GOOGLE_DOCS_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/documents\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_DOCS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_DOCS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_DOCS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_DOCS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_DOCS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_DOCS_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_DOCS_TOKEN: \"$secrets.GOOGLE_DOCS_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleCloud = {\n \"google-cloud\": {\n label: \"Google Cloud\",\n category: \"data-automation-infrastructure\",\n tags: [\n \"google cloud\",\n \"gcp\",\n \"cloud\",\n \"bigquery\",\n \"cloud storage\",\n \"cloud run\",\n ],\n helpText:\n \"Connect your Google account to access Google Cloud resources through Google Cloud APIs. Google IAM and enabled APIs determine which projects, resources, and actions are available.\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText:\n \"Sign in with Google to grant Google Cloud access. The connector is not bound to one project; Google IAM controls accessible resources.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GOOGLE_CLOUD_ACCESS_TOKEN\", \"GOOGLE_CLOUD_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"openid\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/appengine.admin\",\n \"https://www.googleapis.com/auth/sqlservice.login\",\n \"https://www.googleapis.com/auth/compute\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_CLOUD_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_CLOUD_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_CLOUD_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_CLOUD_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_CLOUD_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_CLOUD_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_CLOUD_TOKEN: \"$secrets.GOOGLE_CLOUD_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const linear = {\n linear: {\n label: \"Linear\",\n category: \"engineering-team-execution\",\n tags: [\"issues\", \"tickets\", \"project-management\"],\n helpText: \"Connect your Linear account to manage issues and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Linear to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"LINEAR_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"LINEAR_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"LINEAR_ACCESS_TOKEN\", \"LINEAR_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"read\",\n \"write\",\n \"issues:create\",\n \"comments:create\",\n \"timeSchedule:write\",\n ],\n outputs: {\n accessToken: \"$secrets.LINEAR_ACCESS_TOKEN\",\n refreshToken: \"$secrets.LINEAR_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.LINEAR_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.LINEAR_ACCESS_TOKEN\",\n refreshToken: \"$secrets.LINEAR_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"LINEAR_ACCESS_TOKEN\"],\n envBindings: {\n LINEAR_TOKEN: \"$secrets.LINEAR_ACCESS_TOKEN\",\n },\n },\n revoke: {\n kind: \"token-revoke\",\n inputs: {\n accessToken: \"$secrets.LINEAR_ACCESS_TOKEN\",\n },\n },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const intervalsIcu = {\n \"intervals-icu\": {\n label: \"Intervals.icu\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Intervals.icu account to access training, activity, wellness, and calendar data\",\n authMethods: {\n oauth: {\n label: \"OAuth\",\n helpText: \"Sign in with Intervals.icu to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"INTERVALS_ICU_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"INTERVALS_ICU_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"INTERVALS_ICU_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"ACTIVITY\", \"WELLNESS\", \"CALENDAR\", \"SETTINGS\", \"LIBRARY\"],\n outputs: {\n accessToken: \"$secrets.INTERVALS_ICU_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INTERVALS_ICU_TOKEN: \"$secrets.INTERVALS_ICU_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const vercel = {\n vercel: {\n label: \"Vercel\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Vercel account to manage deployments, projects, and domains\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Vercel to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"VERCEL_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"VERCEL_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"VERCEL_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [],\n outputs: {\n accessToken: \"$secrets.VERCEL_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n VERCEL_TOKEN: \"$secrets.VERCEL_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const strava = {\n strava: {\n label: \"Strava\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Strava account to access activities and athlete data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Strava to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"STRAVA_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"STRAVA_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"STRAVA_ACCESS_TOKEN\", \"STRAVA_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"read\",\n \"profile:read_all\",\n \"activity:read_all\",\n \"activity:write\",\n ],\n outputs: {\n accessToken: \"$secrets.STRAVA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.STRAVA_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.STRAVA_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.STRAVA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.STRAVA_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"STRAVA_ACCESS_TOKEN\"],\n envBindings: {\n STRAVA_TOKEN: \"$secrets.STRAVA_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleMeet = {\n \"google-meet\": {\n label: \"Google Meet\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Google account to manage Meet spaces, view conference records, participants, recordings, and transcripts\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Meet access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GOOGLE_MEET_ACCESS_TOKEN\", \"GOOGLE_MEET_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/meetings.space.created\",\n // Use meetings.space.readonly (not meetings.conferencerecords.readonly) — confirmed\n // correct per Google Discovery API. meetings.space.readonly grants read access to\n // spaces and conference records; meetings.conferencerecords.readonly is not a valid\n // OAuth scope in the Google Meet REST API v2 discovery document.\n \"https://www.googleapis.com/auth/meetings.space.readonly\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_MEET_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_MEET_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_MEET_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_MEET_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_MEET_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_MEET_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_MEET_TOKEN: \"$secrets.GOOGLE_MEET_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleSearchConsole = {\n \"google-search-console\": {\n label: \"Google Search Console\",\n category: \"marketing-content-growth\",\n tags: [\n \"seo\",\n \"search console\",\n \"webmasters\",\n \"search analytics\",\n \"indexing\",\n \"sitemaps\",\n ],\n helpText:\n \"Connect your Google account to access Search Console performance, indexing, sitemap, and site data\",\n authMethods: {\n oauth: {\n showExperimentalLabel: false,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Search Console access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\n \"GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN\",\n \"GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/webmasters\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_SEARCH_CONSOLE_TOKEN:\n \"$secrets.GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleAnalytics = {\n \"google-analytics\": {\n label: \"Google Analytics\",\n category: \"marketing-content-growth\",\n tags: [\n \"analytics\",\n \"ga4\",\n \"reports\",\n \"traffic\",\n \"properties\",\n \"admin api\",\n \"data api\",\n ],\n helpText:\n \"Connect your Google account to access GA4 reports, properties, accounts, and audience data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Analytics access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\n \"GOOGLE_ANALYTICS_ACCESS_TOKEN\",\n \"GOOGLE_ANALYTICS_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/analytics.readonly\",\n \"https://www.googleapis.com/auth/analytics.edit\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_ANALYTICS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_ANALYTICS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_ANALYTICS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_ANALYTICS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_ANALYTICS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_ANALYTICS_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_ANALYTICS_TOKEN: \"$secrets.GOOGLE_ANALYTICS_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const hubspot = {\n hubspot: {\n label: \"HubSpot\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your HubSpot account to manage contacts, companies, deals, and tickets\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with HubSpot to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"HUBSPOT_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"HUBSPOT_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"HUBSPOT_ACCESS_TOKEN\", \"HUBSPOT_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"crm.objects.contacts.read\",\n \"crm.objects.contacts.write\",\n \"crm.objects.companies.read\",\n \"crm.objects.companies.write\",\n \"crm.objects.deals.read\",\n \"crm.objects.deals.write\",\n \"tickets\",\n \"crm.objects.line_items.read\",\n \"crm.objects.quotes.read\",\n \"crm.lists.read\",\n \"crm.schemas.contacts.read\",\n \"settings.users.read\",\n ],\n outputs: {\n accessToken: \"$secrets.HUBSPOT_ACCESS_TOKEN\",\n refreshToken: \"$secrets.HUBSPOT_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.HUBSPOT_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.HUBSPOT_ACCESS_TOKEN\",\n refreshToken: \"$secrets.HUBSPOT_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"HUBSPOT_ACCESS_TOKEN\"],\n envBindings: {\n HUBSPOT_TOKEN: \"$secrets.HUBSPOT_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const sentry = {\n sentry: {\n label: \"Sentry\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Sentry account to access error tracking and project data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Sentry to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"SENTRY_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"SENTRY_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"SENTRY_ACCESS_TOKEN\", \"SENTRY_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"org:read\",\n \"project:read\",\n \"team:read\",\n \"member:read\",\n \"event:read\",\n \"event:write\",\n ],\n outputs: {\n accessToken: \"$secrets.SENTRY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SENTRY_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.SENTRY_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.SENTRY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SENTRY_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"SENTRY_ACCESS_TOKEN\"],\n envBindings: {\n SENTRY_TOKEN: \"$secrets.SENTRY_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const todoist = {\n todoist: {\n label: \"Todoist\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Todoist account to manage tasks, projects, labels, and comments\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Todoist to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"TODOIST_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"TODOIST_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"TODOIST_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"data:read_write\", \"data:delete\", \"project:delete\"],\n outputs: {\n accessToken: \"$secrets.TODOIST_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TODOIST_TOKEN: \"$secrets.TODOIST_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const xero = {\n xero: {\n label: \"Xero\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Xero account to access accounting data, invoices, and contacts\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Xero to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"XERO_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"XERO_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"XERO_ACCESS_TOKEN\", \"XERO_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"openid\",\n \"profile\",\n \"email\",\n \"offline_access\",\n \"accounting.contacts\",\n \"accounting.settings\",\n \"accounting.invoices\",\n \"accounting.payments\",\n \"accounting.banktransactions\",\n \"accounting.manualjournals\",\n \"accounting.attachments\",\n \"accounting.budgets.read\",\n \"accounting.reports.profitandloss.read\",\n \"accounting.reports.balancesheet.read\",\n \"accounting.reports.trialbalance.read\",\n \"accounting.reports.aged.read\",\n \"accounting.reports.executivesummary.read\",\n \"accounting.reports.banksummary.read\",\n \"accounting.reports.budgetsummary.read\",\n \"files\",\n \"assets\",\n \"projects\",\n ],\n outputs: {\n accessToken: \"$secrets.XERO_ACCESS_TOKEN\",\n refreshToken: \"$secrets.XERO_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.XERO_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.XERO_ACCESS_TOKEN\",\n refreshToken: \"$secrets.XERO_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"XERO_ACCESS_TOKEN\"],\n envBindings: {\n XERO_TOKEN: \"$secrets.XERO_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const airtable = {\n airtable: {\n label: \"Airtable\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your Airtable account to access bases, tables, and records\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Airtable to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"AIRTABLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"AIRTABLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"AIRTABLE_ACCESS_TOKEN\", \"AIRTABLE_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"data.records:read\",\n \"data.records:write\",\n \"data.recordComments:read\",\n \"data.recordComments:write\",\n \"schema.bases:read\",\n \"schema.bases:write\",\n \"user.email:read\",\n ],\n outputs: {\n accessToken: \"$secrets.AIRTABLE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.AIRTABLE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.AIRTABLE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.AIRTABLE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.AIRTABLE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"AIRTABLE_ACCESS_TOKEN\"],\n envBindings: {\n AIRTABLE_TOKEN: \"$secrets.AIRTABLE_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const docusign = {\n docusign: {\n label: \"DocuSign\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your DocuSign account to send and manage electronic signatures\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.DocuSignConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with DocuSign to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"DOCUSIGN_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"DOCUSIGN_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"DOCUSIGN_ACCESS_TOKEN\", \"DOCUSIGN_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"signature\", \"extended\", \"openid\"],\n outputs: {\n accessToken: \"$secrets.DOCUSIGN_ACCESS_TOKEN\",\n refreshToken: \"$secrets.DOCUSIGN_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.DOCUSIGN_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.DOCUSIGN_ACCESS_TOKEN\",\n refreshToken: \"$secrets.DOCUSIGN_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"DOCUSIGN_ACCESS_TOKEN\"],\n envBindings: {\n DOCUSIGN_TOKEN: \"$secrets.DOCUSIGN_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleAds = {\n \"google-ads\": {\n label: \"Google Ads\",\n category: \"marketing-content-growth\",\n tags: [\"ads\", \"advertising\", \"google ads\", \"campaigns\", \"gaql\"],\n helpText:\n \"Connect your Google Ads account to manage campaigns, ad groups, and performance reports\",\n authMethods: {\n oauth: {\n showExperimentalLabel: false,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Ads access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GOOGLE_ADS_ACCESS_TOKEN\", \"GOOGLE_ADS_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/adwords\",\n \"https://www.googleapis.com/auth/datamanager\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_ADS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_ADS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_ADS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_ADS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_ADS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_ADS_ACCESS_TOKEN\"],\n platformSecrets: [\"GOOGLE_ADS_DEVELOPER_TOKEN\"],\n envBindings: {\n GOOGLE_ADS_TOKEN: \"$secrets.GOOGLE_ADS_ACCESS_TOKEN\",\n GOOGLE_ADS_DEVELOPER_TOKEN: \"$secrets.GOOGLE_ADS_DEVELOPER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const googleMaps = {\n \"google-maps\": {\n label: \"Google Maps\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Google Maps Platform to access geocoding, places, directions, and route matrices\",\n authMethods: {\n oauth: {\n showExperimentalLabel: false,\n label: \"OAuth (Recommended)\",\n helpText:\n \"Sign in with Google to grant Google Maps Platform access. Google Cloud IAM and enabled Maps APIs determine which resources and actions are available.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GOOGLE_MAPS_ACCESS_TOKEN\", \"GOOGLE_MAPS_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.GOOGLE_MAPS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_MAPS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GOOGLE_MAPS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GOOGLE_MAPS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GOOGLE_MAPS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GOOGLE_MAPS_ACCESS_TOKEN\"],\n envBindings: {\n GOOGLE_MAPS_TOKEN: \"$secrets.GOOGLE_MAPS_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const gumroad = {\n gumroad: {\n label: \"Gumroad\",\n category: \"data-automation-infrastructure\",\n tags: [\"ecommerce\", \"store\", \"products\", \"sales\", \"creator\"],\n helpText:\n \"Connect your Gumroad account to manage products, retrieve sales data, handle customers, and verify license keys\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Gumroad to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GUMROAD_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GUMROAD_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"GUMROAD_ACCESS_TOKEN\", \"GUMROAD_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"view_profile\",\n \"edit_products\",\n \"view_sales\",\n \"mark_sales_as_shipped\",\n \"edit_sales\",\n ],\n outputs: {\n accessToken: \"$secrets.GUMROAD_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GUMROAD_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GUMROAD_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GUMROAD_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GUMROAD_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GUMROAD_ACCESS_TOKEN\"],\n envBindings: {\n GUMROAD_TOKEN: \"$secrets.GUMROAD_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Log in to [Gumroad](https://app.gumroad.com/settings/advanced)\\n2. Scroll to the **Applications** section\\n3. Click **Generate access token**\\n4. Copy the token and paste it here\",\n storage: {\n secrets: [\"GUMROAD_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GUMROAD_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"your-gumroad-access-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GUMROAD_TOKEN: \"$secrets.GUMROAD_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const nintendoStore = {\n \"nintendo-store\": {\n label: \"Nintendo Store\",\n category: \"data-automation-infrastructure\",\n tags: [\"gaming\", \"player\", \"nintendo\", \"store\", \"catalog\", \"playtime\"],\n helpText:\n \"Connect your Nintendo Account to access Nintendo Store catalog, wishlist, points, and play activity data.\",\n authMethods: {\n api: {\n featureFlag: FeatureSwitchKey.NintendoStoreConnector,\n label: \"Nintendo sign-in\",\n helpText:\n \"Sign in with Nintendo. After signing in, right-click the redirect button and copy its link address, then paste the full `npf...://auth` redirect URL or the `session_token_code` value.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"public\",\n clientId: \"5c38e31cd085304b\",\n },\n storage: {\n secrets: [\n \"NINTENDO_STORE_SESSION_TOKEN\",\n \"NINTENDO_STORE_ACCESS_TOKEN\",\n \"NINTENDO_STORE_ID_TOKEN\",\n ],\n variables: [\"NINTENDO_STORE_ACCOUNT_ID\", \"NINTENDO_STORE_LOCALE\"],\n },\n grant: {\n kind: \"external-code\",\n scopes: [\n \"openid\",\n \"user\",\n \"user.mii\",\n \"user.email\",\n \"user.links[].id\",\n ],\n outputs: {\n sessionToken: \"$secrets.NINTENDO_STORE_SESSION_TOKEN\",\n accessToken: \"$secrets.NINTENDO_STORE_ACCESS_TOKEN\",\n idToken: \"$secrets.NINTENDO_STORE_ID_TOKEN\",\n accountId: \"$vars.NINTENDO_STORE_ACCOUNT_ID\",\n locale: \"$vars.NINTENDO_STORE_LOCALE\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n sessionToken: \"$secrets.NINTENDO_STORE_SESSION_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.NINTENDO_STORE_ACCESS_TOKEN\",\n idToken: \"$secrets.NINTENDO_STORE_ID_TOKEN\",\n locale: \"$vars.NINTENDO_STORE_LOCALE\",\n },\n refreshableSecrets: [\"NINTENDO_STORE_ACCESS_TOKEN\"],\n envBindings: {\n NINTENDO_STORE_TOKEN: \"$secrets.NINTENDO_STORE_ACCESS_TOKEN\",\n NINTENDO_STORE_LOCALE: \"$vars.NINTENDO_STORE_LOCALE\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const playstation = {\n playstation: {\n label: \"PlayStation\",\n category: \"data-automation-infrastructure\",\n tags: [\"gaming\", \"player\", \"playstation\", \"psn\"],\n helpText:\n \"Connect your PlayStation Network account to access player profile, game, friends, presence, and trophy data.\",\n authMethods: {\n api: {\n label: \"PlayStation sign-in\",\n helpText:\n \"First make sure you are signed in to PlayStation at [https://www.playstation.com/](https://www.playstation.com/).\\nClick the button below, then copy the `npsso` value.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"public\",\n clientId: \"09515159-7237-4370-9b40-3806e67c0891\",\n },\n storage: {\n secrets: [\n \"PLAYSTATION_ACCESS_TOKEN\",\n \"PLAYSTATION_REFRESH_TOKEN\",\n \"PLAYSTATION_ID_TOKEN\",\n ],\n variables: [\"PLAYSTATION_ACCOUNT_ID\", \"PLAYSTATION_ONLINE_ID\"],\n },\n grant: {\n kind: \"external-code\",\n scopes: [\"psn:mobile.v2.core\", \"psn:clientapp\"],\n outputs: {\n accessToken: \"$secrets.PLAYSTATION_ACCESS_TOKEN\",\n refreshToken: \"$secrets.PLAYSTATION_REFRESH_TOKEN\",\n idToken: \"$secrets.PLAYSTATION_ID_TOKEN\",\n accountId: \"$vars.PLAYSTATION_ACCOUNT_ID\",\n onlineId: \"$vars.PLAYSTATION_ONLINE_ID\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.PLAYSTATION_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.PLAYSTATION_ACCESS_TOKEN\",\n refreshToken: \"$secrets.PLAYSTATION_REFRESH_TOKEN\",\n idToken: \"$secrets.PLAYSTATION_ID_TOKEN\",\n },\n refreshableSecrets: [\"PLAYSTATION_ACCESS_TOKEN\"],\n envBindings: {\n PLAYSTATION_TOKEN: \"$secrets.PLAYSTATION_ACCESS_TOKEN\",\n PLAYSTATION_ACCOUNT_ID: {\n valueRef: \"$vars.PLAYSTATION_ACCOUNT_ID\",\n optional: true,\n },\n PLAYSTATION_ONLINE_ID: {\n valueRef: \"$vars.PLAYSTATION_ONLINE_ID\",\n optional: true,\n },\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const spotify = {\n spotify: {\n label: \"Spotify\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Spotify account to manage playlists, control playback, and access music data\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.SpotifyConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Spotify to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"SPOTIFY_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"SPOTIFY_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"SPOTIFY_ACCESS_TOKEN\", \"SPOTIFY_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"ugc-image-upload\",\n \"user-read-playback-state\",\n \"user-modify-playback-state\",\n \"user-read-currently-playing\",\n \"app-remote-control\",\n \"streaming\",\n \"playlist-read-private\",\n \"playlist-read-collaborative\",\n \"playlist-modify-private\",\n \"playlist-modify-public\",\n \"user-follow-modify\",\n \"user-follow-read\",\n \"user-read-playback-position\",\n \"user-top-read\",\n \"user-read-recently-played\",\n \"user-library-modify\",\n \"user-library-read\",\n \"user-read-email\",\n \"user-read-private\",\n ],\n outputs: {\n accessToken: \"$secrets.SPOTIFY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SPOTIFY_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.SPOTIFY_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.SPOTIFY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SPOTIFY_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"SPOTIFY_ACCESS_TOKEN\"],\n envBindings: {\n SPOTIFY_TOKEN: \"$secrets.SPOTIFY_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const steam = {\n steam: {\n label: \"Steam\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Steam account to access player profile, library, playtime, social, wishlist, and game stats data.\",\n authMethods: {\n openid: {\n label: \"Steam sign-in\",\n helpText: \"Sign in with Steam to connect your player account.\",\n storage: {\n secrets: [],\n variables: [\"STEAM_ID\"],\n },\n grant: {\n kind: \"openid-auth\",\n callbackOrigin: \"api\",\n outputs: {\n steamId: \"$vars.STEAM_ID\",\n },\n },\n access: {\n kind: \"static\",\n platformSecrets: [\"STEAM_WEB_API_KEY\"],\n envBindings: {\n STEAM_ID: \"$vars.STEAM_ID\",\n STEAM_WEB_API_KEY: \"$secrets.STEAM_WEB_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const agentmail = {\n agentmail: {\n label: \"AgentMail\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your AgentMail account to create email inboxes for AI agents, send and receive emails, manage threads, drafts, and webhooks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [AgentMail Console](https://console.agentmail.to)\\n2. Go to **API Keys**\\n3. Create a new API key\\n4. Copy the key\",\n storage: {\n secrets: [\"AGENTMAIL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n AGENTMAIL_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-agentmail-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n AGENTMAIL_TOKEN: \"$secrets.AGENTMAIL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const archer = {\n archer: {\n label: \"Archer\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Archer account to access gifting, rewards, and payout APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Archer account\\n2. Follow the [Archer API docs](https://docs.archermoney.com) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"ARCHER_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ARCHER_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-archer-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ARCHER_API_KEY: \"$secrets.ARCHER_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const ardent = {\n ardent: {\n label: \"Ardent\",\n category: \"data-automation-infrastructure\",\n helpText: \"Connect your Ardent account to access Postgres branching APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Ardent account\\n2. Follow the [Ardent API docs](https://docs.tryardent.com/) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"ARDENT_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ARDENT_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-ardent-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ARDENT_API_KEY: \"$secrets.ARDENT_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const argaLabs = {\n \"arga-labs\": {\n label: \"Arga Labs\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Arga Labs account to access API twin and sandbox APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Arga Labs account\\n2. Follow the [Arga Labs API docs](https://argalabs.com/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"ARGA_LABS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ARGA_LABS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-arga-labs-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ARGA_LABS_API_KEY: \"$secrets.ARGA_LABS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const armature = {\n armature: {\n label: \"Armature\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect your Armature account to access agent session analytics and evaluation APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Armature account\\n2. Follow the [Armature API docs](https://armature.tech/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"ARMATURE_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ARMATURE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-armature-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ARMATURE_API_KEY: \"$secrets.ARMATURE_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const bentolabsAi = {\n \"bentolabs-ai\": {\n label: \"BentoLabs AI\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect your BentoLabs AI account to access agent observability APIs and SDKs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your BentoLabs AI account\\n2. Follow the [BentoLabs AI API docs](https://docs.bentolabs.ai/llms.txt) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"BENTOLABS_AI_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BENTOLABS_AI_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-bentolabs-ai-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BENTOLABS_AI_API_KEY: \"$secrets.BENTOLABS_AI_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const bloom = {\n bloom: {\n label: \"Bloom\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Bloom account to access brand generation APIs and MCP workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Bloom account\\n2. Follow the [Bloom API docs](https://www.trybloom.ai/docs/api) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"BLOOM_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BLOOM_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-bloom-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BLOOM_API_KEY: \"$secrets.BLOOM_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const chert = {\n chert: {\n label: \"Chert\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Chert account to access iMessage infrastructure APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Chert account\\n2. Follow the [Chert API docs](https://docs.trychert.com/introduction) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"CHERT_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CHERT_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-chert-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CHERT_API_KEY: \"$secrets.CHERT_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const inth = {\n inth: {\n label: \"Inth\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Inth account to access privacy-compliance infrastructure APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Inth account\\n2. Follow the [Inth API docs](https://inth.com/docs/getting-started) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"INTH_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n INTH_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-inth-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INTH_API_KEY: \"$secrets.INTH_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const insforge = {\n insforge: {\n label: \"InsForge\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your InsForge project to access its backend and cloud infrastructure APIs for agent-native apps\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Open your project in the [InsForge dashboard](https://insforge.dev/)\\n2. Copy the project's **backend URL** (e.g. `your-project.us-west.insforge.app`) into **Backend URL**\\n3. Create or copy the project's **API key** (admin) and paste it into **API Key**\\n\\nThe anon key is not needed — the API key is the admin credential the agent uses as the backend.\",\n storage: {\n secrets: [\"INSFORGE_API_KEY\"],\n variables: [\"INSFORGE_DOMAIN\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n INSFORGE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-insforge-api-key\",\n },\n INSFORGE_DOMAIN: {\n label: \"Backend URL\",\n publicId: \"domain\",\n required: true,\n storage: \"variable\",\n normalize: \"host\",\n placeholder: \"your-project.us-west.insforge.app\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INSFORGE_API_KEY: \"$secrets.INSFORGE_API_KEY\",\n INSFORGE_DOMAIN: \"$vars.INSFORGE_DOMAIN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const interfaze = {\n interfaze: {\n label: \"Interfaze\",\n category: \"ai-general-models\",\n helpText:\n \"Connect your Interfaze account to access deterministic AI model APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Interfaze account\\n2. Follow the [Interfaze API docs](https://interfaze.ai/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"INTERFAZE_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n INTERFAZE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-interfaze-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INTERFAZE_API_KEY: \"$secrets.INTERFAZE_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const keyframeLabs = {\n \"keyframe-labs\": {\n label: \"Keyframe Labs\",\n category: \"ai-image-video\",\n helpText:\n \"Connect your Keyframe Labs account to access realtime AI video persona APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Keyframe Labs account\\n2. Follow the [Keyframe Labs API docs](https://docs.keyframelabs.com) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"KEYFRAME_LABS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n KEYFRAME_LABS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-keyframe-labs-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n KEYFRAME_LABS_API_KEY: \"$secrets.KEYFRAME_LABS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const kugelAudio = {\n kugelaudio: {\n label: \"KugelAudio\",\n category: \"ai-voice-audio\",\n helpText:\n \"Connect your KugelAudio account to access text-to-speech and voice AI APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your KugelAudio account\\n2. Follow the [KugelAudio API docs](https://docs.kugelaudio.com/) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"KUGELAUDIO_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n KUGELAUDIO_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-kugelaudio-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n KUGELAUDIO_API_KEY: \"$secrets.KUGELAUDIO_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const limrun = {\n limrun: {\n label: \"Limrun\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Limrun account to access remote mobile build and simulator APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Limrun account\\n2. Follow the [Limrun API docs](https://docs.limrun.com/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"LIMRUN_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LIMRUN_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-limrun-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n LIMRUN_API_KEY: \"$secrets.LIMRUN_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const minicor = {\n minicor: {\n label: \"Minicor\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Minicor account to access computer-use and RPA automation APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Minicor account\\n2. Follow the [Minicor API docs](https://www.minicor.com/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"MINICOR_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MINICOR_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-minicor-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MINICOR_API_KEY: \"$secrets.MINICOR_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const netter = {\n netter: {\n label: \"Netter\",\n category: \"data-automation-infrastructure\",\n helpText: \"Connect your Netter account to access AI data platform APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Netter account\\n2. Follow the [Netter API docs](https://netter.ai/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"NETTER_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n NETTER_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-netter-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n NETTER_API_KEY: \"$secrets.NETTER_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const oddpool = {\n oddpool: {\n label: \"Oddpool\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Oddpool account to access prediction-market data APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Oddpool account\\n2. Follow the [Oddpool API docs](https://docs.oddpool.com/llms.txt) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"ODDPOOL_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ODDPOOL_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-oddpool-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ODDPOOL_API_KEY: \"$secrets.ODDPOOL_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const primitive = {\n primitive: {\n label: \"primitive\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your primitive account to access email infrastructure APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your primitive account\\n2. Follow the [primitive OpenAPI spec](https://www.primitive.dev/openapi.json) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"PRIMITIVE_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PRIMITIVE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-primitive-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PRIMITIVE_API_KEY: \"$secrets.PRIMITIVE_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const qomplement = {\n qomplement: {\n label: \"qomplement\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your qomplement account to access AI ERP and supply-chain APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your qomplement account\\n2. Follow the [qomplement API docs](https://docs.qomplement.com/) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"QOMPLEMENT_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n QOMPLEMENT_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-qomplement-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n QOMPLEMENT_API_KEY: \"$secrets.QOMPLEMENT_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const rentahuman = {\n rentahuman: {\n label: \"RentAHuman\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect your RentAHuman account to access human-task APIs and MCP workflows for agents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your RentAHuman account\\n2. Follow the [RentAHuman API docs](https://rentahuman.ai/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"RENTAHUMAN_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RENTAHUMAN_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-rentahuman-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RENTAHUMAN_API_KEY: \"$secrets.RENTAHUMAN_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const replicas = {\n replicas: {\n label: \"Replicas\",\n category: \"engineering-team-execution\",\n helpText: \"Connect your Replicas account to access cloud coding-agent APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Replicas account\\n2. Follow the [Replicas API docs](https://docs.tryreplicas.com) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"REPLICAS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n REPLICAS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-replicas-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n REPLICAS_API_KEY: \"$secrets.REPLICAS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const riverMarkets = {\n \"river-markets\": {\n label: \"River Markets\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your River Markets account to access prediction-market execution and data APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your River Markets account\\n2. Follow the [River Markets API docs](https://docs.rivermarkets.com/introduction) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"RIVER_MARKETS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RIVER_MARKETS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-river-markets-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RIVER_MARKETS_API_KEY: \"$secrets.RIVER_MARKETS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const runtime = {\n runtime: {\n label: \"Runtime\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect your Runtime account to access agent runtime and sandbox APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Runtime account\\n2. Follow the [Runtime API docs](https://docs.runtm.com/introduction) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"RUNTIME_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RUNTIME_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-runtime-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RUNTIME_API_KEY: \"$secrets.RUNTIME_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const salesgraph = {\n salesgraph: {\n label: \"Salesgraph\",\n category: \"sales-crm-business-operations\",\n helpText: \"Connect your Salesgraph account to access revenue agent APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Salesgraph account\\n2. Follow the [Salesgraph API docs](https://docs.salesgraph.com) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"SALESGRAPH_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SALESGRAPH_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-salesgraph-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SALESGRAPH_API_KEY: \"$secrets.SALESGRAPH_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const silmaril = {\n silmaril: {\n label: \"Silmaril\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Silmaril account to access AI application firewall APIs and SDKs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Silmaril account\\n2. Follow the [Silmaril API docs](https://www.silmaril.dev/docs) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"SILMARIL_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SILMARIL_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-silmaril-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SILMARIL_API_KEY: \"$secrets.SILMARIL_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const smolMachines = {\n \"smol-machines\": {\n label: \"smol machines\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your smol machines account to access microVM and sandbox infrastructure APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your smol machines account\\n2. Follow the [smol machines API docs](https://smolmachines.com/docs/cloud-api) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"SMOL_MACHINES_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SMOL_MACHINES_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-smol-machines-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SMOL_MACHINES_API_KEY: \"$secrets.SMOL_MACHINES_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const stablebrowse = {\n stablebrowse: {\n label: \"StableBrowse\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your StableBrowse account to access browser automation APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your StableBrowse account\\n2. Follow the [StableBrowse API docs](https://docs.stablebrowse.com/introduction) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"STABLEBROWSE_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n STABLEBROWSE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-stablebrowse-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n STABLEBROWSE_API_KEY: \"$secrets.STABLEBROWSE_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const testerarmy = {\n testerarmy: {\n label: \"TesterArmy\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your TesterArmy account to access AI web and mobile app testing APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your TesterArmy account\\n2. Follow the [TesterArmy API docs](https://docs.tester.army/api-reference/) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"TESTERARMY_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TESTERARMY_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-testerarmy-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TESTERARMY_API_KEY: \"$secrets.TESTERARMY_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const totalis = {\n totalis: {\n label: \"Totalis\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Totalis account to access prediction-market derivatives and trading APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Totalis account\\n2. Follow the [Totalis API docs](https://docs.totalis.trade/api-reference/introduction) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"TOTALIS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TOTALIS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-totalis-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TOTALIS_API_KEY: \"$secrets.TOTALIS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const trellis = {\n trellis: {\n label: \"Trellis\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Trellis account to access short-rental operations APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Trellis account\\n2. Follow the [Trellis API docs](https://docs.trellistech.com) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"TRELLIS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TRELLIS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-trellis-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TRELLIS_API_KEY: \"$secrets.TRELLIS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const voquill = {\n voquill: {\n label: \"Voquill\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Voquill account to access medical lab workflow APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Voquill account\\n2. Follow the [Voquill API docs](https://docs.voquill.com/) to create or copy an API key\\n3. Paste the key here.\",\n storage: {\n secrets: [\"VOQUILL_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n VOQUILL_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-voquill-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n VOQUILL_API_KEY: \"$secrets.VOQUILL_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const agora = {\n agora: {\n label: \"Agora\",\n category: \"communication-collaboration\",\n tags: [\"rtc\", \"rtm\", \"video\", \"voice\", \"live-streaming\", \"recording\"],\n helpText:\n \"Connect your Agora project to manage real-time voice and video channels, cloud recording, messaging, and REST API operations\",\n authMethods: {\n \"api-token\": {\n label: \"REST credentials\",\n helpText:\n \"1. In [Agora Console](https://console.agora.io), open **Developer Toolkit > RESTful API**\\n2. Click **Add a secret** to create a Customer ID and Customer Secret, then download and store the secret securely\\n3. Copy your project **App ID** from Agora Console\\n4. Optionally copy your **App Certificate** if you need to generate RTC or RTM tokens\",\n storage: {\n secrets: [\n \"AGORA_CUSTOMER_ID\",\n \"AGORA_CUSTOMER_SECRET\",\n \"AGORA_APP_CERTIFICATE\",\n ],\n variables: [\"AGORA_APP_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n AGORA_CUSTOMER_ID: {\n label: \"Customer ID\",\n publicId: \"customerId\",\n required: true,\n placeholder: \"your-agora-customer-id\",\n },\n AGORA_CUSTOMER_SECRET: {\n label: \"Customer Secret\",\n publicId: \"customerSecret\",\n required: true,\n placeholder: \"your-agora-customer-secret\",\n },\n AGORA_APP_ID: {\n label: \"App ID\",\n publicId: \"appId\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-agora-app-id\",\n },\n AGORA_APP_CERTIFICATE: {\n label: \"App Certificate\",\n publicId: \"appCertificate\",\n required: false,\n placeholder: \"optional-agora-app-certificate\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n AGORA_CUSTOMER_ID: \"$secrets.AGORA_CUSTOMER_ID\",\n AGORA_CUSTOMER_SECRET: \"$secrets.AGORA_CUSTOMER_SECRET\",\n AGORA_APP_ID: \"$vars.AGORA_APP_ID\",\n AGORA_APP_CERTIFICATE: {\n valueRef: \"$secrets.AGORA_APP_CERTIFICATE\",\n optional: true,\n },\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const ahrefs = {\n ahrefs: {\n label: \"Ahrefs\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Ahrefs account to access SEO data, backlink analysis, and keyword research\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.AhrefsConnector,\n label: \"OAuth\",\n helpText: \"Sign in with Ahrefs to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"AHREFS_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"AHREFS_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"AHREFS_ACCESS_TOKEN\", \"AHREFS_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"api\"],\n outputs: {\n accessToken: \"$secrets.AHREFS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.AHREFS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.AHREFS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.AHREFS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.AHREFS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"AHREFS_ACCESS_TOKEN\"],\n envBindings: {\n AHREFS_TOKEN: \"$secrets.AHREFS_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Ahrefs](https://ahrefs.com) as a workspace owner or admin\\n2. Go to **Account settings > API keys**\\n3. Create a new API key\\n4. Copy the API key and use it in the `Authorization: Bearer <YOUR_API_KEY>` header\",\n storage: {\n secrets: [\"AHREFS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n AHREFS_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-ahrefs-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n AHREFS_TOKEN: \"$secrets.AHREFS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const adzuna = {\n adzuna: {\n label: \"Adzuna\",\n category: \"data-automation-infrastructure\",\n tags: [\"jobs\", \"employment\", \"salary\", \"vacancies\"],\n helpText:\n \"Connect Adzuna to search job ads and retrieve employment, salary, vacancy, category, and API version data\",\n authMethods: {\n \"api-token\": {\n label: \"App ID and App Key\",\n helpText:\n \"1. Register at the [Adzuna Developer Portal](https://developer.adzuna.com)\\n2. Copy your **app_id** and **app_key**\\n3. Pass them as the `app_id` and `app_key` query parameters on Adzuna API requests\",\n storage: {\n secrets: [\"ADZUNA_APP_KEY\"],\n variables: [\"ADZUNA_APP_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ADZUNA_APP_ID: {\n label: \"App ID\",\n publicId: \"appId\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-adzuna-app-id\",\n },\n ADZUNA_APP_KEY: {\n label: \"App Key\",\n publicId: \"appKey\",\n required: true,\n placeholder: \"your-adzuna-app-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ADZUNA_APP_ID: \"$vars.ADZUNA_APP_ID\",\n ADZUNA_APP_KEY: \"$secrets.ADZUNA_APP_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const altium365 = {\n \"altium-365\": {\n label: \"Altium 365\",\n category: \"engineering-team-execution\",\n tags: [\"pcb\", \"eda\", \"requirements\", \"altium\", \"systems-portal\"],\n helpText:\n \"Connect your Altium 365 Requirements & Systems Portal workspace to manage projects, requirements, components, traces, and verification tests\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to your Altium 365 workspace (e.g. `https://<workspace>.365.altium.com`)\\n2. Open **Settings → User Tokens** and click **Generate**\\n3. Copy the generated token — it is shown only once and expires three months from creation\\n4. Paste the token and your full workspace URL (including `https://`) below\",\n storage: {\n secrets: [\"ALTIUM365_TOKEN\"],\n variables: [\"ALTIUM365_WORKSPACE_URL\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ALTIUM365_TOKEN: {\n label: \"User Token\",\n publicId: \"token\",\n required: true,\n placeholder: \"your-altium-365-user-token\",\n },\n ALTIUM365_WORKSPACE_URL: {\n label: \"Workspace URL\",\n publicId: \"workspaceUrl\",\n required: true,\n storage: \"variable\",\n placeholder: \"https://your-workspace.365.altium.com\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ALTIUM365_TOKEN: \"$secrets.ALTIUM365_TOKEN\",\n ALTIUM365_WORKSPACE_URL: \"$vars.ALTIUM365_WORKSPACE_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const alchemy = {\n alchemy: {\n label: \"Alchemy\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Alchemy to use its blockchain RPC, NFT, data, and wallet APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key or Access Key\",\n helpText:\n \"1. Log in to the [Alchemy Dashboard](https://dashboard.alchemy.com)\\n2. Open **Team Overview** and go to the **Apps** tab\\n3. Create or open an app and copy its **API Key**\\n4. Use this key in the `Authorization: Bearer` header for supported Alchemy API requests\",\n storage: {\n secrets: [\"ALCHEMY_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ALCHEMY_API_KEY: {\n label: \"API Key or Access Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ALCHEMY_API_KEY: \"$secrets.ALCHEMY_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const amplitude = {\n amplitude: {\n label: \"Amplitude\",\n category: \"data-automation-infrastructure\",\n tags: [\"analytics\", \"product-analytics\", \"events\", \"funnels\"],\n helpText:\n \"Connect your Amplitude project to query events, funnels, retention, cohorts, and ingest new events\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In Amplitude, open **Organization Settings** (top right nav) → **Projects** and click the project you want to connect\\n2. Copy the **API Key** from the project table (Manager role required)\\n3. Click **Generate Secret Key**, name it, and copy it immediately (the secret is only shown once)\\n4. Paste both values into the fields below\",\n storage: {\n secrets: [\"AMPLITUDE_API_KEY\", \"AMPLITUDE_SECRET_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n AMPLITUDE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"32-char hex key\",\n },\n AMPLITUDE_SECRET_KEY: {\n label: \"Secret Key\",\n publicId: \"secretKey\",\n required: true,\n placeholder: \"32-char hex secret\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n AMPLITUDE_API_KEY: \"$secrets.AMPLITUDE_API_KEY\",\n AMPLITUDE_SECRET_KEY: \"$secrets.AMPLITUDE_SECRET_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const amadeus = {\n amadeus: {\n label: \"Amadeus\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Amadeus for Developers to search flights, hotels, destinations, and travel data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key and Secret\",\n helpText:\n \"1. Sign in to the [Amadeus for Developers portal](https://developers.amadeus.com/)\\n2. Create or open an app in **My Self-Service Workspace**\\n3. Copy the app's **API Key** and **API Secret**\\n4. Use them with the client credentials grant to request an access token\",\n storage: {\n secrets: [\"AMADEUS_API_KEY\", \"AMADEUS_API_SECRET\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n AMADEUS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n AMADEUS_API_SECRET: {\n label: \"API Secret\",\n publicId: \"apiSecret\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n AMADEUS_API_KEY: \"$secrets.AMADEUS_API_KEY\",\n AMADEUS_API_SECRET: \"$secrets.AMADEUS_API_SECRET\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const anthropicManagedAgents = {\n \"anthropic-managed-agents\": {\n label: \"Anthropic Managed Agents\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect to Anthropic Managed Agents API to programmatically create and run AI agents in cloud environments\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up at [Anthropic Console](https://console.anthropic.com)\\n2. Go to **API Keys** and create a new key\\n3. Ensure your account has Managed Agents (beta) access\\n4. Copy the API key (starts with `sk-ant-`)\",\n storage: {\n secrets: [\"ANTHROPIC_MANAGED_AGENTS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ANTHROPIC_MANAGED_AGENTS_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-ant-api03-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ANTHROPIC_MANAGED_AGENTS_TOKEN:\n \"$secrets.ANTHROPIC_MANAGED_AGENTS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const apify = {\n apify: {\n label: \"Apify\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Apify account to run web scraping actors, manage datasets, and automate browser tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Apify Console](https://console.apify.com)\\n2. Go to **Settings > Integrations**\\n3. Copy your **Personal API token**\",\n storage: {\n secrets: [\"APIFY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n APIFY_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"apify_api_xxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n APIFY_TOKEN: \"$secrets.APIFY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const apollo = {\n apollo: {\n label: \"Apollo\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Apollo account to search prospects, enrich contacts, manage accounts, deals, sequences, and more\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Apollo](https://app.apollo.io)\\n2. Go to **Settings > Integrations**\\n3. Click **Connect** beside Apollo API\\n4. Select **API Keys > Create new key**\\n5. Enter a name, select endpoint access (or toggle **Set as master key**)\\n6. Copy the API key\",\n storage: {\n secrets: [\"APOLLO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n APOLLO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-apollo-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n APOLLO_TOKEN: \"$secrets.APOLLO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const asana = {\n asana: {\n label: \"Asana\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Asana account to manage tasks, projects, portfolios, goals, and team workflows\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Asana to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"ASANA_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"ASANA_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"ASANA_ACCESS_TOKEN\", \"ASANA_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [],\n outputs: {\n accessToken: \"$secrets.ASANA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.ASANA_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.ASANA_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.ASANA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.ASANA_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"ASANA_ACCESS_TOKEN\"],\n envBindings: {\n ASANA_TOKEN: \"$secrets.ASANA_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const ashby = {\n ashby: {\n label: \"Ashby\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Ashby account to read candidates, applications, jobs, openings, job postings, and recruiting projects via the Ashby API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In Ashby, open **Admin** → **Integrations** → **API Keys**\\n2. Create or select an API key with the candidate and job access your workflow needs\\n3. Copy the raw API key and paste it here.\",\n storage: {\n secrets: [\"ASHBY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ASHBY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-ashby-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ASHBY_TOKEN: \"$secrets.ASHBY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const atlassian = {\n atlassian: {\n label: \"Atlassian (Jira/Confluence)\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Atlassian account to manage Jira issues, Confluence pages, and other Atlassian products\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens)\\n2. Click **Create API token**\\n3. Give it a label and click **Create**\\n4. Copy the generated token\",\n storage: {\n secrets: [\"ATLASSIAN_TOKEN\"],\n variables: [\"ATLASSIAN_EMAIL\", \"ATLASSIAN_DOMAIN\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ATLASSIAN_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-api-token\",\n },\n ATLASSIAN_EMAIL: {\n label: \"Email\",\n publicId: \"email\",\n required: true,\n placeholder: \"you@example.com\",\n storage: \"variable\",\n },\n ATLASSIAN_DOMAIN: {\n label: \"Domain\",\n publicId: \"domain\",\n required: true,\n placeholder: \"mycompany\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ATLASSIAN_TOKEN: \"$secrets.ATLASSIAN_TOKEN\",\n ATLASSIAN_EMAIL: \"$vars.ATLASSIAN_EMAIL\",\n ATLASSIAN_DOMAIN: \"$vars.ATLASSIAN_DOMAIN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const attio = {\n attio: {\n label: \"Attio\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Attio workspace to manage CRM records — companies, people, deals, custom objects — plus notes, tasks, lists, and comments\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Open [Attio](https://app.attio.com) and sign in\\n2. Open **Workspace settings** from the dropdown beside your workspace name\\n3. Click the **Developers** tab\\n4. Click **+ New access token**, give it a name, and select the scopes you need\\n5. Click **Create**, then copy the token (shown once)\",\n storage: {\n secrets: [\"ATTIO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ATTIO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-attio-access-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ATTIO_TOKEN: \"$secrets.ATTIO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const atlascloud = {\n atlascloud: {\n label: \"Atlas Cloud\",\n category: \"ai-general-models\",\n generation: [\"audio\", \"image\", \"text\", \"video\"],\n tags: [\"llm\", \"multimodal\", \"openai-compatible\"],\n helpText:\n \"Connect Atlas Cloud to access multimodal AI models for chat, image generation, video generation, and audio through one API key\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [Atlas Cloud](https://console.atlascloud.ai)\\n2. Go to **API Keys**\\n3. Click **Create API Key**\\n4. Copy the key and use it with `https://api.atlascloud.ai/v1` for OpenAI-compatible chat or `https://api.atlascloud.ai/api/v1` for image, video, and media APIs\",\n storage: {\n secrets: [\"ATLASCLOUD_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ATLASCLOUD_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-atlascloud-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ATLASCLOUD_API_KEY: \"$secrets.ATLASCLOUD_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const aviationstack = {\n aviationstack: {\n label: \"AviationStack\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect AviationStack to access real-time flight status, schedules, airline, airport, and route data\",\n authMethods: {\n \"api-token\": {\n label: \"Access Key\",\n helpText:\n \"1. Sign in to the [AviationStack dashboard](https://aviationstack.com/dashboard)\\n2. Copy the **API Access Key** shown on the main dashboard\\n3. Pass it as the `access_key` query parameter on every request\",\n storage: {\n secrets: [\"AVIATIONSTACK_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n AVIATIONSTACK_TOKEN: {\n label: \"Access Key\",\n publicId: \"accessKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n AVIATIONSTACK_TOKEN: \"$secrets.AVIATIONSTACK_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const aws = {\n aws: {\n label: \"AWS\",\n category: \"data-automation-infrastructure\",\n tags: [\"cloud\", \"infrastructure\", \"storage\", \"compute\"],\n helpText:\n \"Connect a temporary AWS session to call AWS APIs with the selected AWS identity.\",\n authMethods: {\n cli: {\n featureFlag: FeatureSwitchKey.AwsConnector,\n showExperimentalLabel: false,\n label: \"Sign in with AWS\",\n helpText:\n \"Sign in with AWS and paste the authorization code that AWS displays.\\n**This temporary AWS connector expires after up to 12 hours.**\",\n client: {\n clientRegistration: \"static\",\n clientType: \"public\",\n clientId: \"arn:aws:signin:::devtools/cross-device\",\n },\n storage: {\n secrets: [\n \"AWS_LOGIN_REFRESH_TOKEN\",\n \"AWS_LOGIN_DPOP_KEY\",\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_SESSION_TOKEN\",\n ],\n variables: [\"AWS_SIGNIN_REGION\", \"AWS_REGION\"],\n },\n grant: {\n kind: \"external-code\",\n scopes: [\"openid\"],\n outputs: {\n refreshToken: \"$secrets.AWS_LOGIN_REFRESH_TOKEN\",\n dpopKey: \"$secrets.AWS_LOGIN_DPOP_KEY\",\n accessKeyId: \"$secrets.AWS_ACCESS_KEY_ID\",\n secretAccessKey: \"$secrets.AWS_SECRET_ACCESS_KEY\",\n sessionToken: \"$secrets.AWS_SESSION_TOKEN\",\n signinRegion: \"$vars.AWS_SIGNIN_REGION\",\n runtimeRegion: \"$vars.AWS_REGION\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.AWS_LOGIN_REFRESH_TOKEN\",\n dpopKey: \"$secrets.AWS_LOGIN_DPOP_KEY\",\n signinRegion: \"$vars.AWS_SIGNIN_REGION\",\n },\n outputs: {\n refreshToken: \"$secrets.AWS_LOGIN_REFRESH_TOKEN\",\n accessKeyId: \"$secrets.AWS_ACCESS_KEY_ID\",\n secretAccessKey: \"$secrets.AWS_SECRET_ACCESS_KEY\",\n sessionToken: \"$secrets.AWS_SESSION_TOKEN\",\n },\n refreshableSecrets: [\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_SESSION_TOKEN\",\n ],\n envBindings: {\n AWS_ACCESS_KEY_ID: \"$secrets.AWS_ACCESS_KEY_ID\",\n AWS_SECRET_ACCESS_KEY: \"$secrets.AWS_SECRET_ACCESS_KEY\",\n AWS_SESSION_TOKEN: \"$secrets.AWS_SESSION_TOKEN\",\n AWS_REGION: \"$vars.AWS_REGION\",\n AWS_DEFAULT_REGION: \"$vars.AWS_REGION\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const axiom = {\n axiom: {\n label: \"Axiom\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Axiom account to query logs, manage datasets, and access observability data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Axiom](https://app.axiom.co)\\n2. Go to **Settings > API Tokens**\\n3. Create a new API token with the required permissions\\n4. Copy the token\",\n storage: {\n secrets: [\"AXIOM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n AXIOM_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"xaat-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n AXIOM_TOKEN: \"$secrets.AXIOM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const base44 = {\n base44: {\n label: \"Base44\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect your Base44 account to let agents access and manage your Base44 apps\",\n authMethods: {\n oauth: {\n label: \"OAuth\",\n helpText: \"Sign in with Base44 to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"public\",\n clientId: \"base44_cli\",\n },\n storage: {\n secrets: [\"BASE44_ACCESS_TOKEN\", \"BASE44_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"device-auth\",\n scopes: [\"apps:read\", \"apps:write\", \"offline\"],\n outputs: {\n accessToken: \"$secrets.BASE44_ACCESS_TOKEN\",\n refreshToken: \"$secrets.BASE44_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.BASE44_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.BASE44_ACCESS_TOKEN\",\n refreshToken: \"$secrets.BASE44_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"BASE44_ACCESS_TOKEN\"],\n envBindings: {\n BASE44_TOKEN: \"$secrets.BASE44_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const bentoml = {\n bentoml: {\n label: \"BentoML\",\n category: \"data-automation-infrastructure\",\n generation: [\"text\"],\n tags: [\"bentocloud\", \"model-serving\", \"mlops\", \"inference\"],\n helpText:\n \"Connect your BentoCloud account to manage BentoML deployments and call protected deployment endpoints\",\n authMethods: {\n \"api-token\": {\n featureFlag: FeatureSwitchKey.BentomlConnector,\n label: \"BentoCloud API Token\",\n helpText:\n \"1. Log in to [BentoCloud](https://cloud.bentoml.com)\\n2. Open your profile menu, then go to **API Tokens**\\n3. Create a Personal or Organization API token with the access your workflow needs\\n4. Copy the token and enter your organization endpoint, for example `https://your-org.cloud.bentoml.com`\",\n storage: {\n secrets: [\"BENTO_CLOUD_API_KEY\"],\n variables: [\"BENTO_CLOUD_API_ENDPOINT\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BENTO_CLOUD_API_KEY: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"cur7h...\",\n },\n BENTO_CLOUD_API_ENDPOINT: {\n label: \"BentoCloud Endpoint\",\n publicId: \"endpoint\",\n required: true,\n placeholder: \"https://your-org.cloud.bentoml.com\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BENTO_CLOUD_API_KEY: \"$secrets.BENTO_CLOUD_API_KEY\",\n BENTO_CLOUD_API_ENDPOINT: \"$vars.BENTO_CLOUD_API_ENDPOINT\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const bfl = {\n bfl: {\n label: \"Black Forest Labs\",\n category: \"ai-image-video\",\n generation: [\"image\"],\n helpText:\n \"Connect your Black Forest Labs account to generate images with FLUX models\",\n tags: [\"flux\"],\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to the [Black Forest Labs dashboard](https://dashboard.bfl.ai)\\n2. Navigate to **API → Keys** in your project sidebar\\n3. Click **Add Key** and give the key a descriptive name\\n4. Copy the API key immediately — you will not be able to see the full key again\",\n storage: {\n secrets: [\"BFL_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BFL_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"bfl_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BFL_API_KEY: \"$secrets.BFL_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const bitrefill = {\n bitrefill: {\n label: \"Bitrefill\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Bitrefill account to browse products, create invoices, track orders, and manage purchases programmatically\",\n authMethods: {\n \"api-token\": {\n label: \"Personal API Token\",\n helpText:\n \"1. Sign in to [Bitrefill](https://www.bitrefill.com)\\n\" +\n \"2. Go to **Account > Developers**\\n\" +\n \"3. Generate an API key\\n\" +\n \"4. Copy the Personal API token\\n\\n\" +\n \"This connector currently supports Bitrefill Personal API Bearer tokens. Business and Affiliate Basic auth credentials are not supported yet.\",\n storage: {\n secrets: [\"BITREFILL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BITREFILL_TOKEN: {\n label: \"Personal API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BITREFILL_TOKEN: \"$secrets.BITREFILL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const bitrix = {\n bitrix: {\n label: \"Bitrix24\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Bitrix24 account to manage CRM, tasks, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n helpText:\n \"1. Log in to your [Bitrix24](https://www.bitrix24.com) account\\n2. Go to **Applications > Developer resources**\\n3. Select the **Ready-made scenarios** tab\\n4. Choose **Other > Incoming webhook**\\n5. Configure the webhook name and set access permissions\\n6. Click **Execute** to test the webhook\\n7. Copy the generated webhook URL, which contains your secret code in the format `https://<domain>/rest/1/<secret-code>/<method>.json`\",\n storage: {\n secrets: [\"BITRIX_WEBHOOK_URL\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BITRIX_WEBHOOK_URL: {\n label: \"Webhook URL\",\n publicId: \"url\",\n required: true,\n placeholder: \"https://your-domain.bitrix24.com/rest/1/xxx/\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BITRIX_WEBHOOK_URL: \"$secrets.BITRIX_WEBHOOK_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const bland = {\n bland: {\n label: \"Bland\",\n category: \"ai-voice-audio\",\n generation: [\"audio\"],\n helpText:\n \"Connect your Bland account to make AI phone calls and manage voice agents\",\n tags: [\"phone\", \"calls\", \"voice-agents\"],\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to the [Bland dashboard](https://app.bland.ai)\\n2. Copy your API key from your account or API settings\\n3. Paste the key here. You can also use the key with the Bland CLI as `BLAND_API_KEY`\",\n storage: {\n secrets: [\"BLAND_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BLAND_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BLAND_API_KEY: \"$secrets.BLAND_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const box = {\n box: {\n label: \"Box\",\n category: \"docs-files-knowledge\",\n helpText: \"Connect your Box account to access and manage files and folders\",\n tags: [\"files\", \"storage\", \"documents\"],\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.BoxConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Box to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"BOX_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"BOX_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"BOX_ACCESS_TOKEN\", \"BOX_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"root_readwrite\"],\n outputs: {\n accessToken: \"$secrets.BOX_ACCESS_TOKEN\",\n refreshToken: \"$secrets.BOX_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.BOX_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.BOX_ACCESS_TOKEN\",\n refreshToken: \"$secrets.BOX_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"BOX_ACCESS_TOKEN\"],\n envBindings: {\n BOX_TOKEN: \"$secrets.BOX_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const braveSearch = {\n \"brave-search\": {\n label: \"Brave Search\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Brave Search account to perform privacy-focused web, image, video, and news searches\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to the [Brave Search API dashboard](https://api-dashboard.search.brave.com/register) and sign up for an account\\n2. Provide a credit card for identity verification (free plans will not be charged)\\n3. After registration, your API key will be available in the dashboard\\n4. Copy the API key and use it in the `X-Subscription-Token` request header\",\n storage: {\n secrets: [\"BRAVE_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BRAVE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"BSAxxxxxxxxxxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BRAVE_API_KEY: \"$secrets.BRAVE_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const brex = {\n brex: {\n label: \"Brex\",\n category: \"sales-crm-business-operations\",\n tags: [\"corporate-card\", \"expenses\", \"payments\", \"transactions\", \"finance\"],\n helpText:\n \"Connect your Brex account to access corporate card, expense, payment, transaction, and team data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. In Brex, create or obtain an API user token with the permissions required for your workflow\\n2. Confirm the token is intended for the production API at `https://api.brex.com`\\n3. Copy the token\",\n storage: {\n secrets: [\"BREX_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BREX_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-brex-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BREX_TOKEN: \"$secrets.BREX_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const brevo = {\n brevo: {\n label: \"Brevo\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Brevo account to manage email campaigns, transactional emails, and CRM contacts\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Brevo](https://app.brevo.com)\\n2. Go to **Settings** → **SMTP & API** → **API Keys**\\n3. Copy your API key\",\n storage: {\n secrets: [\"BREVO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BREVO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"xkeysib-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BREVO_TOKEN: \"$secrets.BREVO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const brightData = {\n \"bright-data\": {\n label: \"Bright Data\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Bright Data account to scrape websites, manage proxies, and access web data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Bright Data](https://brightdata.com/cp)\\n2. Go to **Account settings**\\n3. Click **Add API key** and configure permissions\\n4. Copy the token (shown only once)\",\n storage: {\n secrets: [\"BRIGHTDATA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BRIGHTDATA_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BRIGHTDATA_TOKEN: \"$secrets.BRIGHTDATA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const browserbase = {\n browserbase: {\n label: \"Browserbase\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Browserbase account to create browser sessions, persist contexts, and automate cloud browsers\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Sign up for a [Browserbase](https://www.browserbase.com/sign-up) account\\n2. Log in and navigate to the **Overview** dashboard\\n3. Your **Project ID** and **API key** are displayed on the right side of the Overview page\\n4. Copy the API key\",\n storage: {\n secrets: [\"BROWSERBASE_TOKEN\"],\n variables: [\"BROWSERBASE_PROJECT_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BROWSERBASE_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n BROWSERBASE_PROJECT_ID: {\n label: \"Project ID\",\n publicId: \"projectId\",\n required: true,\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BROWSERBASE_TOKEN: \"$secrets.BROWSERBASE_TOKEN\",\n BROWSERBASE_PROJECT_ID: \"$vars.BROWSERBASE_PROJECT_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const browserless = {\n browserless: {\n label: \"Browserless\",\n category: \"data-automation-infrastructure\",\n generation: [\"document\", \"image\"],\n helpText:\n \"Connect your Browserless account to take screenshots, generate PDFs, scrape pages, and automate headless browsers\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Sign up or log in at [Browserless](https://browserless.io/account/)\\n2. Navigate to the account dashboard\\n3. Copy your API token from the dashboard\",\n storage: {\n secrets: [\"BROWSERLESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BROWSERLESS_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BROWSERLESS_TOKEN: \"$secrets.BROWSERLESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const browserstack = {\n browserstack: {\n label: \"BrowserStack\",\n category: \"engineering-team-execution\",\n tags: [\"testing\", \"selenium\", \"appium\", \"cross-browser\", \"qa\", \"automate\"],\n helpText:\n \"Connect your BrowserStack account to run Selenium / Appium tests, query builds and sessions, capture cross-browser screenshots, and upload mobile apps\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [BrowserStack](https://www.browserstack.com) and open **Account Settings**\\n2. Copy your **Username** and **Access Key** from the **Authentication & Security** section\\n3. Paste both values below — these credentials work across Live, Automate, App Live, and App Automate\",\n storage: {\n secrets: [\"BROWSERSTACK_USERNAME\", \"BROWSERSTACK_ACCESS_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BROWSERSTACK_USERNAME: {\n label: \"Username\",\n publicId: \"username\",\n required: true,\n placeholder: \"your-bstack-username\",\n },\n BROWSERSTACK_ACCESS_KEY: {\n label: \"Access Key\",\n publicId: \"accessKey\",\n required: true,\n placeholder: \"your-bstack-access-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BROWSERSTACK_USERNAME: \"$secrets.BROWSERSTACK_USERNAME\",\n BROWSERSTACK_ACCESS_KEY: \"$secrets.BROWSERSTACK_ACCESS_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const browserUse = {\n \"browser-use\": {\n label: \"Browser Use\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Browser Use to run AI-powered browser automation tasks — submit natural-language prompts and let agents complete web tasks in hosted browsers\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in at [cloud.browser-use.com](https://cloud.browser-use.com)\\n2. Go to **Settings → API Keys**\\n3. Click **Create new key**\\n4. Copy the generated API key\",\n storage: {\n secrets: [\"BROWSER_USE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BROWSER_USE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"bu_CoffeeSafeLocalCoffeeSafeLocalCoffee\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BROWSER_USE_TOKEN: \"$secrets.BROWSER_USE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const bubblemaps = {\n bubblemaps: {\n label: \"Bubblemaps\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Bubblemaps account to access token maps, holders, wallet labels, clusters, and scores through the Data API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Bubblemaps Pro platform](https://pro.bubblemaps.io)\\n2. Get your Data API key\\n3. Use this key in the `X-ApiKey` request header\",\n storage: {\n secrets: [\"BUBBLEMAPS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BUBBLEMAPS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"Coffee5afe10ca1Coffee5afe10ca1Co\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BUBBLEMAPS_API_KEY: \"$secrets.BUBBLEMAPS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const buffer = {\n buffer: {\n label: \"Buffer\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Buffer account to schedule, draft, and publish social media posts across your connected channels (Twitter/X, LinkedIn, Instagram, Facebook, TikTok, Threads, Bluesky, Mastodon, Pinterest, YouTube). **Note: Buffer's API is currently in beta.**\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Buffer](https://publish.buffer.com) and go to **Settings > Developer Dashboard** (you must be an **Org Owner** — paid accounts can create up to 5 keys; free accounts get 1).\\n2. Click **Create API Key**, give it a name, and set an expiration if desired.\\n3. Copy the key immediately — it's only shown once.\\n4. Paste it here.\\n\\n**Note:** Buffer's API is currently in beta.\",\n storage: {\n secrets: [\"BUFFER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BUFFER_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"Buffer personal API key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BUFFER_TOKEN: \"$secrets.BUFFER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const builtwith = {\n builtwith: {\n label: \"BuiltWith\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect BuiltWith to look up the technology stack, traffic, and contact data for any website\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [BuiltWith](https://api.builtwith.com)\\n2. Open the **API access** page in your account\\n3. Copy your **API key**\\n4. Pass it as the `KEY` query parameter on every request\",\n storage: {\n secrets: [\"BUILTWITH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n BUILTWITH_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n BUILTWITH_TOKEN: \"$secrets.BUILTWITH_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const calCom = {\n \"cal-com\": {\n label: \"Cal.com\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Cal.com account to manage scheduling, bookings, and calendar events\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Cal.com](https://app.cal.com)\\n2. Go to **Settings** → **Developer** → **API Keys**\\n3. Click **Create API Key**\\n4. Copy the generated key\",\n storage: {\n secrets: [\"CALCOM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CALCOM_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"cal_live_xxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CALCOM_TOKEN: \"$secrets.CALCOM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const calendly = {\n calendly: {\n label: \"Calendly\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Calendly account to access scheduling data, event types, and invitee information\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n helpText:\n \"1. Log in to [Calendly](https://calendly.com)\\n2. Go to **Integrations > API & Webhooks**\\n3. Generate a Personal Access Token\\n4. Copy the token\",\n storage: {\n secrets: [\"CALENDLY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CALENDLY_TOKEN: {\n label: \"Personal Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"your-calendly-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CALENDLY_TOKEN: \"$secrets.CALENDLY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const canva = {\n canva: {\n label: \"Canva\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your Canva account to access designs, assets, and projects\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.CanvaConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Canva to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"CANVA_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"CANVA_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"CANVA_ACCESS_TOKEN\", \"CANVA_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"asset:read\",\n \"asset:write\",\n \"brandtemplate:content:read\",\n \"brandtemplate:meta:read\",\n \"comment:read\",\n \"comment:write\",\n \"design:content:read\",\n \"design:content:write\",\n \"design:meta:read\",\n \"folder:read\",\n \"folder:write\",\n \"profile:read\",\n ],\n outputs: {\n accessToken: \"$secrets.CANVA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.CANVA_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.CANVA_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.CANVA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.CANVA_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"CANVA_ACCESS_TOKEN\"],\n envBindings: {\n CANVA_TOKEN: \"$secrets.CANVA_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const chatwoot = {\n chatwoot: {\n label: \"Chatwoot\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Chatwoot account to manage conversations, contacts, and customer support workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Access Token\",\n helpText:\n \"1. Log in to [Chatwoot](https://app.chatwoot.com) with an administrator account\\n2. Click on your **avatar image** in the bottom left corner of the screen\\n3. Select **Profile Settings** from the menu\\n4. Scroll to the bottom of the Profile Settings page\\n5. Copy the **Personal Access Token** displayed there\",\n storage: {\n secrets: [\"CHATWOOT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CHATWOOT_TOKEN: {\n label: \"API Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"your-chatwoot-access-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CHATWOOT_TOKEN: \"$secrets.CHATWOOT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const checkr = {\n checkr: {\n label: \"Checkr\",\n category: \"sales-crm-business-operations\",\n tags: [\n \"background-checks\",\n \"screening\",\n \"candidates\",\n \"reports\",\n \"compliance\",\n ],\n helpText:\n \"Connect your Checkr account to manage candidates, invitations, reports, packages, and background check workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Checkr Dashboard](https://dashboard.checkr.com)\\n2. Go to **Account Settings > Developer Settings**\\n3. Copy a live or test API key for the account you want to connect\\n4. Use only keys and actions that comply with your background check authorization and compliance process\",\n storage: {\n secrets: [\"CHECKR_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CHECKR_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-checkr-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CHECKR_TOKEN: \"$secrets.CHECKR_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const clado = {\n clado: {\n label: \"Clado\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect Clado to search and enrich a B2B people graph for prospecting and recruiting\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [Clado](https://clado.ai)\\n2. Open the **API keys** page in your account\\n3. Click **Create Key**, name it, and copy the value\\n4. Use it as a Bearer token on requests to `https://search.clado.ai`\",\n storage: {\n secrets: [\"CLADO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CLADO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CLADO_TOKEN: \"$secrets.CLADO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const clerk = {\n clerk: {\n label: \"Clerk\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect to Clerk to look up users, manage organizations and memberships, send invitations, and audit sessions across your application's identity store.\",\n authMethods: {\n \"api-token\": {\n label: \"Secret Key\",\n helpText:\n \"Go to Clerk Dashboard → API Keys → copy the **Secret key** (starts with `sk_test_` for development or `sk_live_` for production). The key grants full administrative access to the matching instance — vm0's firewall ships with write operations denied by default; enable `*:write` permissions per agent only when needed.\",\n storage: {\n secrets: [\"CLERK_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CLERK_TOKEN: {\n label: \"Secret Key\",\n publicId: \"secretKey\",\n required: true,\n placeholder: \"sk_live_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CLERK_TOKEN: \"$secrets.CLERK_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const clearbit = {\n clearbit: {\n label: \"Clearbit\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect Clearbit to enrich people and companies using an existing Clearbit API key\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Clearbit](https://dashboard.clearbit.com)\\n2. Go to **Settings > Keys & Settings**\\n3. Reveal and copy your **Secret API Key**\\n\\nClearbit API keys are available only for accounts created in 2023 or earlier; new 2024+ accounts may require HubSpot/Breeze Intelligence access instead.\",\n storage: {\n secrets: [\"CLEARBIT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CLEARBIT_TOKEN: {\n label: \"Secret API Key\",\n publicId: \"secretApiKey\",\n required: true,\n placeholder: \"sk_your_secret_api_key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CLEARBIT_TOKEN: \"$secrets.CLEARBIT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const clickup = {\n clickup: {\n label: \"ClickUp\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your ClickUp account to manage tasks, projects, and team workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [ClickUp](https://app.clickup.com)\\n2. Click your avatar in the upper-right corner and select **Settings**\\n3. In the sidebar, click **Apps** (or visit [app.clickup.com/settings/apps](https://app.clickup.com/settings/apps))\\n4. Under the **API Token** section, click **Generate** (or **Regenerate** if you already have one)\\n5. Click **Copy** to copy the personal token (tokens start with `pk_` and never expire)\",\n storage: {\n secrets: [\"CLICKUP_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CLICKUP_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"pk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CLICKUP_TOKEN: \"$secrets.CLICKUP_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const close = {\n close: {\n label: \"Close\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Close account to manage leads, contacts, and opportunities\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.CloseConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Close to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"CLOSE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"CLOSE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"CLOSE_ACCESS_TOKEN\", \"CLOSE_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"all.full_access\", \"offline_access\"],\n outputs: {\n accessToken: \"$secrets.CLOSE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.CLOSE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.CLOSE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.CLOSE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.CLOSE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"CLOSE_ACCESS_TOKEN\"],\n envBindings: {\n CLOSE_TOKEN: \"$secrets.CLOSE_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nconst CLOUDFLARE_OAUTH_SCOPES = [\n \"agent-memory.write\",\n \"browser-rendering.write\",\n \"cf-agents.write\",\n \"cloud-connector.write\",\n \"cloudchamber.write\",\n \"constellation.write\",\n \"d1.write\",\n \"flagship.write\",\n \"flagship.evaluate\",\n \"flagship.read\",\n \"d1.read\",\n \"constellation.read\",\n \"cloudchamber.read\",\n \"cloud-connector.read\",\n \"cf-agents.read\",\n \"browser-rendering.read\",\n \"query-cache.write\",\n \"query-cache.read\",\n \"mcp-portals.read\",\n \"mcp-portals.write\",\n \"page.write\",\n \"page.read\",\n \"pipelines.read\",\n \"pipelines.send\",\n \"pipelines.write\",\n \"pubsub.write\",\n \"pubsub.read\",\n \"queues.read\",\n \"queues.write\",\n \"realtime.admin\",\n \"realtime.realtime\",\n \"secrets-store.read\",\n \"secrets-store.write\",\n \"vectorize.write\",\n \"vectorize.read\",\n \"workers-ci.read\",\n \"workers-ci.write\",\n \"containers.write\",\n \"containers.read\",\n \"workers-kv-storage.read\",\n \"workers-kv-storage.write\",\n \"workers-observability.write\",\n \"workers-observability.read\",\n \"workers-observability-telemetry.write\",\n \"r2-catalog.read\",\n \"r2-catalog.write\",\n \"r2-catalog-sql.read\",\n \"workers-r2.write\",\n \"workers-r2.read\",\n \"workers-r2-bucket-item.read\",\n \"workers-r2-bucket-item.write\",\n \"workers-routes.write\",\n \"workers-routes.read\",\n \"workers-scripts.read\",\n \"workers-scripts.write\",\n \"workers-tail.read\",\n \"agw.write\",\n \"agw.run\",\n \"agw.read\",\n \"aiaudit.read\",\n \"aiaudit.write\",\n \"aig.write\",\n \"aig.run\",\n \"aig.read\",\n \"ai-search.index\",\n \"ai-search.read\",\n \"ai-search.run\",\n \"ai-search.write\",\n \"rag.write\",\n \"rag.run\",\n \"rag.read\",\n \"firewall-for-ai.read\",\n \"firewall-for-ai.write\",\n \"websearch.run\",\n \"ai.read\",\n \"ai.write\",\n \"account-dns-settings.read\",\n \"account-dns-settings.write\",\n \"dns.write\",\n \"dns.read\",\n \"dns-firewall.write\",\n \"dns-firewall.read\",\n \"dns-view.read\",\n \"dns-view.write\",\n \"registrar-domains.admin\",\n \"registrar-domains.read\",\n \"zone.read\",\n \"zone.write\",\n \"zone-custom-asset.write\",\n \"zone-custom-asset.read\",\n \"zone-dns-settings.read\",\n \"zone-dns-settings.write\",\n \"zone-settings.write\",\n \"zone-settings.read\",\n \"zone-versioning.read\",\n \"zone-versioning.write\",\n \"fraud-detection-pii.read\",\n \"account-firewall-access-rules.read\",\n \"account-firewall-access-rules.write\",\n \"account-security-center-insights.write\",\n \"account-security-center-insights.read\",\n \"account-waf.read\",\n \"account-waf.write\",\n \"request-tracer.read\",\n \"reports-application-security-report.read\",\n \"bot-management.read\",\n \"bot-management.write\",\n \"bot-management-feedback.write\",\n \"bot-management-feedback.read\",\n \"cloudforce-one.read\",\n \"cloudforce-one.write\",\n \"ddos-botnet-feed.write\",\n \"ddos-botnet-feed.read\",\n \"ddos-protection.read\",\n \"ddos-protection.write\",\n \"api-gateway.write\",\n \"api-gateway.read\",\n \"domain-page.shield\",\n \"domain-page-shield.read\",\n \"firewall-services.read\",\n \"firewall-services.write\",\n \"fraud-detection.write\",\n \"fraud-detection.read\",\n \"fraud-events.write\",\n \"http-applications.read\",\n \"http-applications.write\",\n \"http-ddos-managed-ruleset.read\",\n \"http-ddos-managed-ruleset.write\",\n \"iot.write\",\n \"iot.read\",\n \"l4-ddos-managed-ruleset.read\",\n \"l4-ddos-managed-ruleset.write\",\n \"page-rules.write\",\n \"page-rules.read\",\n \"page.shield\",\n \"page-shield.read\",\n \"sanitize.write\",\n \"sanitize.read\",\n \"tag.read\",\n \"tag.write\",\n \"trust-and-safety.write\",\n \"trust-and-safety.read\",\n \"challenge-widgets.read\",\n \"challenge-widgets.write\",\n \"url-scanner.write\",\n \"url-scanner.read\",\n \"zaraz.edit\",\n \"zaraz.read\",\n \"zaraz.write\",\n \"zone-security-center-insights.write\",\n \"zone-security-center-insights.read\",\n \"zone-waf.read\",\n \"zone-waf.write\",\n \"account-custom-error-rules.write\",\n \"account-custom-error-rules.read\",\n \"account-custom-pages.read\",\n \"account-custom-pages.write\",\n \"account-rule-lists.write\",\n \"account-rule-lists.read\",\n \"account-rulesets.write\",\n \"account-rulesets.read\",\n \"config-settings.read\",\n \"config-settings.write\",\n \"custom-errors.write\",\n \"custom-errors.read\",\n \"custom-pages.read\",\n \"custom-pages.write\",\n \"dynamic-redirect.write\",\n \"dynamic-redirect.read\",\n \"managed-headers.read\",\n \"managed-headers.write\",\n \"mass-url-redirects.write\",\n \"mass-url-redirects.read\",\n \"origin.read\",\n \"origin.write\",\n \"response-compression.write\",\n \"response-compression.read\",\n \"select-configuration.read\",\n \"select-configuration.write\",\n \"snippets.read\",\n \"snippets.write\",\n \"transform-rules.write\",\n \"transform-rules.read\",\n \"zone-transform-rules.read\",\n \"zone-transform-rules.write\",\n \"intel.read\",\n \"intel.write\",\n \"account-analytics.read\",\n \"account-logs.write\",\n \"account-logs.read\",\n \"radar.read\",\n \"analytics.read\",\n \"logs.read\",\n \"logs.write\",\n \"access.revoke\",\n \"access.write\",\n \"access.read\",\n \"access-app.read\",\n \"access-app.revoke\",\n \"access-app.write\",\n \"zone-access.write\",\n \"zone-access.revoke\",\n \"zone-access.read\",\n \"access-audit-log.read\",\n \"access-custom-page.write\",\n \"access-custom-page.read\",\n \"access-device-posture.write\",\n \"access-device-posture.read\",\n \"access-group.read\",\n \"access-group.write\",\n \"access-idp.write\",\n \"access-idp.read\",\n \"access-key.read\",\n \"access-key.write\",\n \"access-certificate.write\",\n \"access-certificate.read\",\n \"access-org.read\",\n \"access-org.revoke\",\n \"access-org.write\",\n \"access-acct.write\",\n \"access-acct.revoke\",\n \"access-acct.read\",\n \"access-policy.read\",\n \"access-policy.write\",\n \"access-policy-test.write\",\n \"access-policy-test.read\",\n \"access-population.read\",\n \"access-population.write\",\n \"access-saml-certificate.write\",\n \"access-saml-certificate.read\",\n \"access-scim-log.read\",\n \"access-service-token.read\",\n \"access-service-token.write\",\n \"access-ssh-auditing.write\",\n \"access-ssh-auditing.read\",\n \"access-tag.read\",\n \"access-tag.write\",\n \"access-users.read\",\n \"access-users.write\",\n \"argotunnel.write\",\n \"argotunnel.read\",\n \"casb.read\",\n \"casb.write\",\n \"teams-cds-compute-account.write\",\n \"teams-cds-compute-account.read\",\n \"teams-dex.read\",\n \"teams-dex.write\",\n \"teams-connector-cloudflared.monitoring\",\n \"teams-connector-cloudflared.read\",\n \"teams-connector-cloudflared.write\",\n \"teams-connector-warp.write\",\n \"teams-connector-warp.read\",\n \"teams-connectors.read\",\n \"teams-connectors.write\",\n \"teams-networks.write\",\n \"teams-networks.read\",\n \"teams-secure.location\",\n \"dls.read\",\n \"dls.write\",\n \"teams.read\",\n \"teams.report\",\n \"teams.write\",\n \"teams-resilience.write\",\n \"teams-resilience.read\",\n \"teams-pii.read\",\n \"access-seats.write\",\n \"account-waiting-rooms.read\",\n \"address-maps.read\",\n \"address-maps.write\",\n \"chinanetwork-steering.write\",\n \"chinanetwork-steering.read\",\n \"connectivity-directory.read\",\n \"connectivity-directory.bind\",\n \"connectivity-directory.admin\",\n \"healthcheck.write\",\n \"healthcheck.read\",\n \"ip-prefix.read\",\n \"ip-prefix.write\",\n \"ip-prefix-bgp-on-demand.write\",\n \"ip-prefix-bgp-on-demand.read\",\n \"load-balancers.read\",\n \"load-balancers.write\",\n \"load-balancers-account.write\",\n \"load-balancers-account.read\",\n \"load-balancing-monitors-and-pools.read\",\n \"load-balancing-monitors-and-pools.write\",\n \"magic-firewall.write\",\n \"magic-firewall.read\",\n \"pcaps-api.write\",\n \"pcaps-api.read\",\n \"fbm.read\",\n \"fbm.write\",\n \"fbm.admin\",\n \"magic-transit.write\",\n \"magic-transit.read\",\n \"magic-wan.read\",\n \"magic-wan.write\",\n \"waiting-rooms.write\",\n \"waiting-rooms.read\",\n \"web3-hostnames.read\",\n \"web3-hostnames.write\",\n \"calls.read\",\n \"calls.write\",\n \"images.read\",\n \"images.write\",\n \"moq.write\",\n \"moq.read\",\n \"stream.read\",\n \"stream.write\",\n \"cloud-email-security.read\",\n \"cloud-email-security.write\",\n \"email-routing-address.write\",\n \"email-routing-address.read\",\n \"email-routing-rule.read\",\n \"email-routing-rule.write\",\n \"email-routing-suppression.write\",\n \"email-routing-suppression.read\",\n \"email-security-dmarcreports.write\",\n \"email-security-dmarcreports.read\",\n \"email-sending.read\",\n \"email-sending.write\",\n \"account-ssl-and-certificates.write\",\n \"account-ssl-and-certificates.read\",\n \"cache.purge\",\n \"cache-settings.read\",\n \"cache-settings.write\",\n \"account-disable-esc.write\",\n \"account-disable-esc.read\",\n \"zone-disable-esc.read\",\n \"zone-disable-esc.write\",\n \"ssl-and-certificates.write\",\n \"ssl-and-certificates.read\",\n \"account-api-gateway.read\",\n \"account-api-gateway.write\",\n \"account-custom-asset.write\",\n \"account-custom-asset.read\",\n \"account-settings.read\",\n \"account-settings.write\",\n \"apps.write\",\n \"integration.write\",\n \"memberships.read\",\n \"memberships.write\",\n \"notifications.write\",\n \"notifications.read\",\n \"scim-provisioning.write\",\n \"user-details.read\",\n \"user-details.write\",\n \"artifacts.read\",\n \"artifacts.write\",\n \"resource-library.write\",\n \"resource-library.read\",\n \"resource-sharing.read\",\n \"offline_access\",\n];\n\nexport const cloudflare = {\n cloudflare: {\n label: \"Cloudflare\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Cloudflare account to manage DNS, zones, workers, and other Cloudflare services\",\n authMethods: {\n oauth: {\n label: \"OAuth\",\n helpText: \"Sign in with Cloudflare to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"CLOUDFLARE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"CLOUDFLARE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"CLOUDFLARE_ACCESS_TOKEN\", \"CLOUDFLARE_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: CLOUDFLARE_OAUTH_SCOPES,\n callbackOrigin: \"api\",\n outputs: {\n accessToken: \"$secrets.CLOUDFLARE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.CLOUDFLARE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.CLOUDFLARE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.CLOUDFLARE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.CLOUDFLARE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"CLOUDFLARE_ACCESS_TOKEN\"],\n envBindings: {\n CLOUDFLARE_TOKEN: \"$secrets.CLOUDFLARE_ACCESS_TOKEN\",\n },\n },\n revoke: {\n kind: \"token-revoke\",\n inputs: {\n refreshToken: \"$secrets.CLOUDFLARE_REFRESH_TOKEN\",\n },\n },\n },\n \"api-token\": {\n label: \"API Token\",\n visible: false,\n helpText:\n \"1. Log in to the [Cloudflare Dashboard](https://dash.cloudflare.com)\\n2. Go to **My Profile** → **API Tokens**\\n3. Click **Create Token** and configure the required permissions\\n4. Copy the generated token\",\n storage: {\n secrets: [\"CLOUDFLARE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CLOUDFLARE_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CLOUDFLARE_TOKEN: \"$secrets.CLOUDFLARE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const cloudinary = {\n cloudinary: {\n label: \"Cloudinary\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Cloudinary account to manage images, videos, and media assets with CDN delivery and transformations\",\n authMethods: {\n \"api-token\": {\n label: \"API Credentials\",\n helpText:\n \"1. Log in to the [Cloudinary Console](https://console.cloudinary.com/settings/api-keys)\\n2. Go to **Settings** → **API Keys**\\n3. Copy your **Cloud Name**, **API Key**, and **API Secret**\",\n storage: {\n secrets: [\"CLOUDINARY_TOKEN\", \"CLOUDINARY_API_SECRET\"],\n variables: [\"CLOUDINARY_CLOUD_NAME\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CLOUDINARY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n CLOUDINARY_API_SECRET: {\n label: \"API Secret\",\n publicId: \"apiSecret\",\n required: true,\n },\n CLOUDINARY_CLOUD_NAME: {\n label: \"Cloud Name\",\n publicId: \"cloudName\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-cloud-name\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CLOUDINARY_TOKEN: \"$secrets.CLOUDINARY_TOKEN\",\n CLOUDINARY_API_SECRET: \"$secrets.CLOUDINARY_API_SECRET\",\n CLOUDINARY_CLOUD_NAME: \"$vars.CLOUDINARY_CLOUD_NAME\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const coda = {\n coda: {\n label: \"Coda\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your Coda account to read and write docs, tables, rows, and pages\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Open Coda and click your avatar (bottom left) then **Account Settings**\\n2. Scroll to **API Settings**\\n3. Click **Generate API Token**, give it a name, optionally restrict scope\\n4. Copy the token and paste it here\",\n storage: {\n secrets: [\"CODA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CODA_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-coda-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CODA_TOKEN: \"$secrets.CODA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const coingecko = {\n coingecko: {\n label: \"CoinGecko\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your CoinGecko account to access crypto market data, prices, coins, exchanges, NFTs, and onchain data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up or log in to [CoinGecko](https://www.coingecko.com/en/api)\\n2. Open the **Developer Dashboard**\\n3. Click **Add New Key** to create a Demo or Pro API key\\n4. Copy the API key\",\n storage: {\n secrets: [\"COINGECKO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n COINGECKO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-coingecko-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n COINGECKO_TOKEN: \"$secrets.COINGECKO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const coresignal = {\n coresignal: {\n label: \"Coresignal\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect Coresignal to search, enrich, and collect company, employee, and jobs data through Coresignal APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Coresignal self-service dashboard](https://dashboard.coresignal.com)\\n2. Open **API Keys** from your account settings or homepage\\n3. Copy an API key\\n4. Use it in requests with the `apikey` header\",\n storage: {\n secrets: [\"CORESIGNAL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CORESIGNAL_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-coresignal-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CORESIGNAL_TOKEN: \"$secrets.CORESIGNAL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const cronlytic = {\n cronlytic: {\n label: \"Cronlytic\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Cronlytic account to monitor cron jobs and scheduled tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Cronlytic dashboard](https://www.cronlytic.com/dashboard)\\n2. Go to the **API Keys** section\\n3. Click **Generate New API Key**\\n4. Copy your **API Key** and **User ID** (both are required for authentication via `X-API-Key` and `X-User-ID` headers)\",\n storage: {\n secrets: [\"CRONLYTIC_API_KEY\"],\n variables: [\"CRONLYTIC_USER_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CRONLYTIC_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n CRONLYTIC_USER_ID: {\n label: \"User ID\",\n publicId: \"userId\",\n required: true,\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CRONLYTIC_API_KEY: \"$secrets.CRONLYTIC_API_KEY\",\n CRONLYTIC_USER_ID: \"$vars.CRONLYTIC_USER_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const crustdata = {\n crustdata: {\n label: \"Crustdata\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect Crustdata to search and enrich company, person, job, web, and social post data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Request or open your Crustdata API key from the [Crustdata dashboard](https://crustdata.com)\\n2. Copy your API key\\n3. Crustdata authenticates requests with `Authorization: Bearer <key>` and requires the `x-api-version` header\",\n storage: {\n secrets: [\"CRUSTDATA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CRUSTDATA_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CRUSTDATA_TOKEN: \"$secrets.CRUSTDATA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const cursor = {\n cursor: {\n label: \"Cursor\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect your Cursor account to launch and manage cloud coding agents via the Cursor Cloud Agents API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in at [cursor.com](https://cursor.com)\\n2. Open **Dashboard → API Keys** ([cursor.com/dashboard/api](https://cursor.com/dashboard/api))\\n3. Click **Create API Key**\\n4. Copy the key (it begins with `key_`). Paste it here.\",\n storage: {\n secrets: [\"CURSOR_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CURSOR_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder:\n \"key_c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ff\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CURSOR_TOKEN: \"$secrets.CURSOR_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const customerIo = {\n \"customer-io\": {\n label: \"Customer.io\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Customer.io account to send behavioral emails, SMS, and push notifications triggered by user events\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to your [Customer.io](https://fly.customer.io) account\\n2. Go to **Account Settings > [API Credentials](https://fly.customer.io/settings/api_credentials)**\\n3. Locate your **Site ID** and **API Key** on the Track API Keys page\\n4. Copy both values (they are used together as basic authentication credentials in the format `site_id:api_key`, Base64-encoded)\",\n storage: {\n secrets: [\"CUSTOMERIO_APP_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n CUSTOMERIO_APP_TOKEN: {\n label: \"App API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n CUSTOMERIO_APP_TOKEN: \"$secrets.CUSTOMERIO_APP_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const daytona = {\n daytona: {\n label: \"Daytona\",\n category: \"data-automation-infrastructure\",\n tags: [\"sandbox\", \"sandboxes\", \"code-execution\", \"managed-agents\"],\n helpText:\n \"Connect your Daytona account to create, run, and manage cloud sandboxes for code execution and agent workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in at [app.daytona.io](https://app.daytona.io)\\n2. Open **API Keys**\\n3. Click **Create API Key**\\n4. Copy the generated key and paste it here.\",\n storage: {\n secrets: [\"DAYTONA_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DAYTONA_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-daytona-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DAYTONA_API_KEY: \"$secrets.DAYTONA_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const db9 = {\n db9: {\n label: \"db9\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your db9 account to manage serverless Postgres databases with pgvector, FTS, and embeddings\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [db9](https://db9.ai)\\n2. Go to **Settings > API Keys**\\n3. Create a new API key\\n4. Copy the 128-character hex token\",\n storage: {\n secrets: [\"DB9_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DB9_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"128-char hex token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DB9_API_KEY: \"$secrets.DB9_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const deel = {\n deel: {\n label: \"Deel\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Deel account to access HR, payroll, and contractor data\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.DeelConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Deel to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"DEEL_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"DEEL_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"DEEL_ACCESS_TOKEN\", \"DEEL_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"contracts:read\",\n \"people:read\",\n \"organizations:read\",\n \"payslips:read\",\n \"time-off:read\",\n \"time-off:write\",\n \"invoice-adjustments:read\",\n \"invoice-adjustments:write\",\n ],\n outputs: {\n accessToken: \"$secrets.DEEL_ACCESS_TOKEN\",\n refreshToken: \"$secrets.DEEL_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.DEEL_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.DEEL_ACCESS_TOKEN\",\n refreshToken: \"$secrets.DEEL_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"DEEL_ACCESS_TOKEN\"],\n envBindings: {\n DEEL_TOKEN: \"$secrets.DEEL_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Create a [Deel](https://app.deel.com) account and verify your email\\n2. Navigate to the **Developer Center**\\n3. Select the **API Sandbox** tab (or **Production** for live credentials)\\n4. Click **Create Sandbox** and enter a unique email and password\\n5. Click **Confirm** to finalize sandbox creation\\n6. Locate your **API Key / Access Token** in the Developer Center\\n7. Copy and store the token securely\",\n storage: {\n secrets: [\"DEEL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DEEL_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DEEL_TOKEN: \"$secrets.DEEL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const defillama = {\n defillama: {\n label: \"DefiLlama\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your DefiLlama Pro account to access authenticated DeFi analytics data and higher-rate-limit Pro API endpoints\",\n authMethods: {\n \"api-token\": {\n label: \"Pro API Key\",\n helpText:\n \"1. Subscribe to [DefiLlama Pro API](https://defillama.com/subscription)\\n2. Open the [Pro API docs](https://defillama.com/pro-api/docs)\\n3. Copy your Pro API key\\n\\nThis connector is for the DefiLlama Pro API key. Most free DefiLlama API endpoints do not require authentication.\",\n storage: {\n secrets: [\"DEFILLAMA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DEFILLAMA_TOKEN: {\n label: \"Pro API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-defillama-pro-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DEFILLAMA_TOKEN: \"$secrets.DEFILLAMA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const deepseek = {\n deepseek: {\n label: \"DeepSeek\",\n category: \"ai-general-models\",\n generation: [\"code\", \"text\"],\n helpText:\n \"Connect your DeepSeek account to use DeepSeek AI models for chat completions, code generation, and reasoning tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to the [DeepSeek Platform](https://platform.deepseek.com/api_keys)\\n2. Sign up for an account or log in\\n3. Navigate to the **API Keys** page\\n4. Create a new API key and copy it\",\n storage: {\n secrets: [\"DEEPSEEK_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DEEPSEEK_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DEEPSEEK_TOKEN: \"$secrets.DEEPSEEK_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const devto = {\n devto: {\n label: \"Dev.to\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Dev.to account to publish articles, manage posts, and interact with the developer community\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [DEV.to](https://dev.to)\\n2. Go to **Settings > Extensions** (or visit [dev.to/settings/extensions](https://dev.to/settings/extensions))\\n3. Generate a new API key from the settings page\\n4. Copy the API key and use it in the `api-key` request header\",\n storage: {\n secrets: [\"DEVTO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DEVTO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-devto-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DEVTO_TOKEN: \"$secrets.DEVTO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const diffbot = {\n diffbot: {\n label: \"Diffbot\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Diffbot to extract structured article, product, and entity data from any web page or knowledge graph\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Diffbot](https://app.diffbot.com/get-started/)\\n2. Open your account dashboard\\n3. Copy the **API token** shown on the dashboard\\n4. Pass it as the `token` query parameter on every request\",\n storage: {\n secrets: [\"DIFFBOT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DIFFBOT_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DIFFBOT_TOKEN: \"$secrets.DIFFBOT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const dify = {\n dify: {\n label: \"Dify\",\n category: \"ai-agent-apps\",\n generation: [\"text\"],\n helpText:\n \"Connect your Dify account to build and manage AI-powered workflows, chatbots, and agentic applications\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Dify](https://cloud.dify.ai)\\n2. Open your app and navigate to **API Access** in the left sidebar\\n3. Click to generate new API credentials\\n4. Copy the API key\",\n storage: {\n secrets: [\"DIFY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DIFY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"app-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DIFY_TOKEN: \"$secrets.DIFY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const discord = {\n discord: {\n label: \"Discord\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Discord bot to manage servers, channels, messages, and automate interactions\",\n authMethods: {\n \"api-token\": {\n label: \"Bot Token\",\n helpText:\n \"1. Go to the [Discord Developer Portal](https://discord.com/developers/applications)\\n2. Select your application (or create a new one)\\n3. Navigate to the **Bot** page in your app's settings\\n4. In the **Token** section, click **Reset Token** to generate a new bot token\\n5. Copy and securely store the token — you won't be able to view it again unless you regenerate it\",\n storage: {\n secrets: [\"DISCORD_BOT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DISCORD_BOT_TOKEN: {\n label: \"Bot Token\",\n publicId: \"botToken\",\n required: true,\n placeholder: \"your-discord-bot-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DISCORD_BOT_TOKEN: \"$secrets.DISCORD_BOT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const discordWebhook = {\n \"discord-webhook\": {\n label: \"Discord Webhook\",\n category: \"communication-collaboration\",\n helpText: \"Connect a Discord webhook to send messages to channels\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n helpText:\n \"1. Open your Discord server and navigate to **Server Settings**\\n2. Select the **Integrations** tab\\n3. Click the **Create Webhook** button\\n4. Configure the webhook name and select the target text channel from the dropdown menu\\n5. Click the **Copy Webhook URL** button to copy the webhook URL\",\n storage: {\n secrets: [\"DISCORD_WEBHOOK_URL\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DISCORD_WEBHOOK_URL: {\n label: \"Webhook URL\",\n publicId: \"url\",\n required: true,\n placeholder: \"https://discord.com/api/webhooks/xxx/xxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DISCORD_WEBHOOK_URL: \"$secrets.DISCORD_WEBHOOK_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const doppler = {\n doppler: {\n label: \"Doppler\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Doppler account to fetch secrets and environment variables from your projects and configs\",\n authMethods: {\n \"api-token\": {\n label: \"Service Token\",\n helpText:\n \"1. Log in to [Doppler](https://dashboard.doppler.com)\\n2. Go to your project, then select a config (environment)\\n3. Click the **Access** tab\\n4. Click **+ Generate Service Token**\\n5. Set permissions to **Read** and copy the token\",\n storage: {\n secrets: [\"DOPPLER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DOPPLER_TOKEN: {\n label: \"Service Token\",\n publicId: \"token\",\n required: true,\n placeholder: \"dp.st.dev.xxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DOPPLER_TOKEN: \"$secrets.DOPPLER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const doubao = {\n doubao: {\n label: \"Doubao\",\n category: \"ai-voice-audio\",\n generation: [\"audio\"],\n tags: [\"volcengine\", \"tts\", \"asr\", \"speech\", \"voice-clone\", \"mandarin\"],\n helpText:\n \"Connect Volcengine Doubao (豆包语音) for Mandarin-first text-to-speech, speech recognition, and voice cloning\",\n authMethods: {\n \"api-token\": {\n label: \"Doubao API Key\",\n helpText:\n \"1. Sign in to the [Volcengine new speech console](https://console.volcengine.com/speech/new)\\n2. Open **设置 → API Key 管理** ([direct link](https://console.volcengine.com/speech/new/setting/apikeys))\\n3. Click **创建 API Key**, name it, and copy the UUID value\\n4. The key authorises every endpoint under `openspeech.bytedance.com` — TTS, ASR file recognition, voice cloning\",\n storage: {\n secrets: [\"DOUBAO_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DOUBAO_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"00000000-0000-0000-0000-000000000000\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DOUBAO_API_KEY: \"$secrets.DOUBAO_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const drive9 = {\n drive9: {\n label: \"drive9\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your drive9 account for agent-friendly file storage with unified path-based operations\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [drive9](https://drive9.ai)\\n2. Go to **Settings > API Keys**\\n3. Create a new API key\\n4. Copy the key (format: `drive9_sk_...`)\",\n storage: {\n secrets: [\"DRIVE9_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DRIVE9_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"drive9_sk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DRIVE9_TOKEN: \"$secrets.DRIVE9_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const dropbox = {\n dropbox: {\n label: \"Dropbox\",\n category: \"docs-files-knowledge\",\n helpText: \"Connect your Dropbox account to access and manage files\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.DropboxConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Dropbox to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"DROPBOX_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"DROPBOX_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"DROPBOX_ACCESS_TOKEN\", \"DROPBOX_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"account_info.read\",\n \"files.metadata.read\",\n \"files.content.read\",\n ],\n outputs: {\n accessToken: \"$secrets.DROPBOX_ACCESS_TOKEN\",\n refreshToken: \"$secrets.DROPBOX_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.DROPBOX_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.DROPBOX_ACCESS_TOKEN\",\n refreshToken: \"$secrets.DROPBOX_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"DROPBOX_ACCESS_TOKEN\"],\n envBindings: {\n DROPBOX_TOKEN: \"$secrets.DROPBOX_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Go to the [Dropbox App Console](https://www.dropbox.com/developers/apps)\\n2. Select your app (or create a new one)\\n3. Click the button to generate an access token for your own account\\n4. Copy the generated OAuth 2 access token\",\n storage: {\n secrets: [\"DROPBOX_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DROPBOX_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"sl.xxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DROPBOX_TOKEN: \"$secrets.DROPBOX_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const dropboxSign = {\n \"dropbox-sign\": {\n label: \"Dropbox Sign\",\n category: \"data-automation-infrastructure\",\n tags: [\"hellosign\", \"e-signature\", \"signature\", \"sign\", \"document\"],\n helpText:\n \"Connect your Dropbox Sign (formerly HelloSign) account to send, track, and download e-signature requests\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Dropbox Sign](https://sign.dropbox.com)\\n2. Click **API** in the left sidebar and open the **API Dashboard**\\n3. Click **Reveal key** for an existing key, or **Generate key** to create a new one\\n4. Copy the 40-character hex key and paste it here\\n\\nTip: While developing, add `test_mode=1` to signature-request calls to avoid billing and real emails.\",\n storage: {\n secrets: [\"DROPBOX_SIGN_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DROPBOX_SIGN_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"40-character hex key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DROPBOX_SIGN_TOKEN: \"$secrets.DROPBOX_SIGN_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const duffel = {\n duffel: {\n label: \"Duffel\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Duffel account to search and book flights and stays (hotels) through the Duffel API\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Log in to the [Duffel dashboard](https://app.duffel.com)\\n2. Click your organisation name, then **Developers > Access tokens**\\n3. Click **New token**, give it a name, leave scope as **Read write**\\n4. Click **Create token** and copy the value (format: `duffel_test_...` for test mode, `duffel_live_...` for live mode)\",\n storage: {\n secrets: [\"DUFFEL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n DUFFEL_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"duffel_test_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n DUFFEL_TOKEN: \"$secrets.DUFFEL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const e2b = {\n e2b: {\n label: \"E2B\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your E2B account to create and manage secure cloud sandboxes for AI code execution\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up at [e2b.dev](https://e2b.dev)\\n2. Go to Dashboard → **API Keys**\\n3. Click **Create API Key**\\n4. Copy the key (starts with `e2b_`). Paste it here.\",\n storage: {\n secrets: [\"E2B_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n E2B_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"e2b_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n E2B_TOKEN: \"$secrets.E2B_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const elevenlabs = {\n elevenlabs: {\n label: \"ElevenLabs\",\n category: \"ai-voice-audio\",\n generation: [\"audio\"],\n helpText:\n \"Connect your ElevenLabs account to generate speech, clone voices, manage audio projects, and access sound effects\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [ElevenLabs](https://elevenlabs.io)\\n2. Go to [Settings > API Keys](https://elevenlabs.io/app/settings/api-keys)\\n3. Click to create a new API key\\n4. Copy the key and store it securely\",\n storage: {\n secrets: [\"ELEVENLABS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ELEVENLABS_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-elevenlabs-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ELEVENLABS_TOKEN: \"$secrets.ELEVENLABS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const etsy = {\n etsy: {\n label: \"Etsy\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Etsy developer account to search listings, manage shop data, and access product information\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Etsy](https://www.etsy.com/developers/your-apps)\\n\" +\n \"2. Click **Create a New App** (or select an existing app)\\n\" +\n \"3. Copy the **Keystring** and **Shared Secret**\\n\" +\n \"4. Paste both values joined with a colon: `keystring:shared_secret`\",\n storage: {\n secrets: [\"ETSY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ETSY_TOKEN: {\n label: \"API Key (keystring:shared_secret)\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"c0ffee5afe10ca1c0ffee5af:e10ca15afe\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ETSY_TOKEN: \"$secrets.ETSY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const etherscan = {\n etherscan: {\n label: \"Etherscan\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Etherscan API V2 to query Ethereum and supported EVM-compatible chains with one API key\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [Etherscan](https://etherscan.io)\\n2. Open your [API Dashboard](https://etherscan.io/myapikey)\\n3. Click **Add +** to create a new API key\\n4. Use the key with Etherscan API V2 requests; one key works across supported chains via the `chainid` parameter\",\n storage: {\n secrets: [\"ETHERSCAN_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ETHERSCAN_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ETHERSCAN_API_KEY: \"$secrets.ETHERSCAN_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const exa = {\n exa: {\n label: \"Exa\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Exa account to perform AI-native semantic web search, retrieve page contents, and find similar pages\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up at [dashboard.exa.ai](https://dashboard.exa.ai)\\n2. Click your account \\u2192 **API Keys** \\u2192 **Create API Key**\\n3. Copy the key (starts with `exa_`). Free tier: 1,000 requests/month.\",\n storage: {\n secrets: [\"EXA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n EXA_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"exa_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n EXA_TOKEN: \"$secrets.EXA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const explorium = {\n explorium: {\n label: \"Explorium\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Explorium account to access business data enrichment, prospect discovery, and AI-powered data insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Explorium Admin Portal](https://admin.explorium.ai)\\n2. Navigate to **Access & Authentication > Getting Your API Key**\\n3. Click the **Show Key** button to reveal the masked API key\\n4. Click the **Copy Key** button to copy it\",\n storage: {\n secrets: [\"EXPLORIUM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n EXPLORIUM_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-explorium-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n EXPLORIUM_TOKEN: \"$secrets.EXPLORIUM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const faire = {\n faire: {\n label: \"Faire\",\n category: \"sales-crm-business-operations\",\n tags: [\n \"wholesale\",\n \"marketplace\",\n \"brands\",\n \"orders\",\n \"inventory\",\n \"products\",\n ],\n helpText:\n \"Connect your Faire brand account to manage wholesale products, orders, inventory, shipments, and brand profile data\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. In the Faire portal, go to **Settings > Integrations**\\n2. Generate an API key for a direct integration, or request one from Faire for a custom integration\\n3. Copy the access token for the brand account you want to connect\",\n storage: {\n secrets: [\"FAIRE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n FAIRE_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"your-faire-access-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n FAIRE_TOKEN: \"$secrets.FAIRE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const fal = {\n fal: {\n label: \"fal.ai\",\n category: \"ai-image-video\",\n generation: [\"image\", \"video\"],\n helpText:\n \"Connect your fal.ai account to run AI models for image generation, video generation, and other AI tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to the [fal Dashboard Keys page](https://fal.ai/dashboard/keys)\\n2. Click the **Create Key** button\\n3. Provide a name for your key and select the appropriate scope (**API** for calling models, or **ADMIN** for full access)\\n4. Copy the key immediately — you will not be able to see it again\",\n storage: {\n secrets: [\"FAL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n FAL_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"fal_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n FAL_TOKEN: \"$secrets.FAL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const figma = {\n figma: {\n label: \"Figma\",\n category: \"docs-files-knowledge\",\n helpText: \"Connect your Figma account to access design files and projects\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.FigmaConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Figma to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"FIGMA_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"FIGMA_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"FIGMA_ACCESS_TOKEN\", \"FIGMA_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"current_user:read\",\n \"file_content:read\",\n \"file_metadata:read\",\n \"file_versions:read\",\n \"projects:read\",\n \"file_comments:read\",\n \"file_comments:write\",\n \"library_assets:read\",\n \"library_content:read\",\n ],\n outputs: {\n accessToken: \"$secrets.FIGMA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.FIGMA_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.FIGMA_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.FIGMA_ACCESS_TOKEN\",\n refreshToken: \"$secrets.FIGMA_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"FIGMA_ACCESS_TOKEN\"],\n envBindings: {\n FIGMA_TOKEN: \"$secrets.FIGMA_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"Personal Access Token\",\n helpText:\n \"1. Log in to [Figma](https://www.figma.com) and open the file browser\\n2. Click the account menu in the top-left corner and select **Settings**\\n3. Select the **Security** tab\\n4. Scroll to the **Personal access tokens** section and click **Generate new token**\\n5. Enter a name for the token, assign the desired scopes, and press Return/Enter\\n6. Copy the generated token immediately — it will not be shown again\",\n storage: {\n secrets: [\"FIGMA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n FIGMA_TOKEN: {\n label: \"Personal Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"figd_xxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n FIGMA_TOKEN: \"$secrets.FIGMA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const firecrawl = {\n firecrawl: {\n label: \"Firecrawl\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Firecrawl account to scrape webpages, crawl websites, and extract structured data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Firecrawl](https://www.firecrawl.dev)\\n2. Go to your **Dashboard**\\n3. Copy your **API Key**\",\n storage: {\n secrets: [\"FIRECRAWL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n FIRECRAWL_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"fc-xxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n FIRECRAWL_TOKEN: \"$secrets.FIRECRAWL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const fireflies = {\n fireflies: {\n label: \"Fireflies\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Fireflies.ai account to transcribe and analyze meetings\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Fireflies](https://fireflies.ai)\\n2. Navigate to the **Integrations** section\\n3. Click on **Fireflies API**\\n4. Copy your API key and store it securely\",\n storage: {\n secrets: [\"FIREFLIES_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n FIREFLIES_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n FIREFLIES_TOKEN: \"$secrets.FIREFLIES_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const flightaware = {\n flightaware: {\n label: \"FlightAware\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect FlightAware AeroAPI to access flight status, airport, airline, and aviation data\",\n authMethods: {\n \"api-token\": {\n label: \"AeroAPI Key\",\n helpText:\n \"1. Sign in to the [FlightAware AeroAPI portal](https://flightaware.com/aeroapi/portal/)\\n2. Open your API key settings\\n3. Copy your AeroAPI key\\n4. Send it in the `x-apikey` header for AeroAPI requests\",\n storage: {\n secrets: [\"FLIGHTAWARE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n FLIGHTAWARE_TOKEN: {\n label: \"AeroAPI Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n FLIGHTAWARE_TOKEN: \"$secrets.FLIGHTAWARE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const freshdesk = {\n freshdesk: {\n label: \"Freshdesk\",\n category: \"communication-collaboration\",\n tags: [\"helpdesk\", \"tickets\", \"customer-support\"],\n helpText:\n \"Connect your Freshdesk account to manage support tickets, contacts, companies, agents, and knowledge base articles\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to Freshdesk and click your profile picture (top right), then **Profile Settings**\\n2. On the right pane, click **View API Key** and complete the captcha\\n3. Copy the API key\\n4. Enter your Freshdesk subdomain — the prefix of `https://<subdomain>.freshdesk.com`\",\n storage: {\n secrets: [\"FRESHDESK_TOKEN\"],\n variables: [\"FRESHDESK_DOMAIN\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n FRESHDESK_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n FRESHDESK_DOMAIN: {\n label: \"Subdomain\",\n publicId: \"subdomain\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-subdomain\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n FRESHDESK_TOKEN: \"$secrets.FRESHDESK_TOKEN\",\n FRESHDESK_DOMAIN: \"$vars.FRESHDESK_DOMAIN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const gamma = {\n gamma: {\n label: \"Gamma\",\n category: \"marketing-content-growth\",\n generation: [\"document\", \"presentation\", \"website\"],\n helpText:\n \"Connect your Gamma account to generate presentations, documents, and websites with AI\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Gamma](https://gamma.app)\\n2. Go to [API Keys](https://gamma.app/settings/api-keys) (Settings > API Keys)\\n3. Click **Create API key**\\n4. Copy the key (it is only shown once)\",\n storage: {\n secrets: [\"GAMMA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GAMMA_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-gamma-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GAMMA_TOKEN: \"$secrets.GAMMA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const garminConnect = {\n \"garmin-connect\": {\n label: \"Garmin Connect\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Garmin Connect account to access wellness and activity data\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.GarminConnectConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Garmin Connect to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GARMIN_CONNECT_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GARMIN_CONNECT_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\n \"GARMIN_CONNECT_ACCESS_TOKEN\",\n \"GARMIN_CONNECT_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [],\n outputs: {\n accessToken: \"$secrets.GARMIN_CONNECT_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GARMIN_CONNECT_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.GARMIN_CONNECT_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.GARMIN_CONNECT_ACCESS_TOKEN\",\n refreshToken: \"$secrets.GARMIN_CONNECT_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"GARMIN_CONNECT_ACCESS_TOKEN\"],\n envBindings: {\n GARMIN_CONNECT_TOKEN: \"$secrets.GARMIN_CONNECT_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const gemini = {\n gemini: {\n label: \"Gemini\",\n category: \"ai-general-models\",\n generation: [\"image\", \"text\"],\n tags: [\"llm\", \"ai\", \"google\", \"gemini\", \"multimodal\"],\n helpText:\n \"Connect your Google AI Studio account to access Gemini models for text generation, multimodal reasoning, embeddings, and function calling\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to [Google AI Studio](https://aistudio.google.com/apikey)\\n2. Sign in with your Google account\\n3. Click **Create API key**\\n4. Copy the key (starts with `AIza`) and store it in a safe location\",\n storage: {\n secrets: [\"GEMINI_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GEMINI_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"AIza...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GEMINI_TOKEN: \"$secrets.GEMINI_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const gitlab = {\n gitlab: {\n label: \"GitLab\",\n category: \"engineering-team-execution\",\n tags: [\"git\", \"vcs\", \"scm\", \"repos\"],\n helpText:\n \"Connect your GitLab account to manage repositories, issues, merge requests, and CI/CD pipelines\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n helpText:\n \"1. Log in to [GitLab](https://gitlab.com)\\n2. Click your avatar in the upper-right corner and select **Edit profile**\\n3. In the left sidebar, navigate to **Access > Personal access tokens**\\n4. From the **Generate token** dropdown, select **Legacy token**\\n5. Enter a name in the **Token name** field\\n6. Optionally set an expiration date (defaults to 365 days)\\n7. Select the required scopes for your token\\n8. Click **Generate token**\\n9. Copy and save the token — you cannot view it again after leaving the page\",\n storage: {\n secrets: [\"GITLAB_TOKEN\"],\n variables: [\"GITLAB_HOST\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GITLAB_TOKEN: {\n label: \"Personal Access Token\",\n publicId: \"accessToken\",\n required: true,\n },\n GITLAB_HOST: {\n label: \"GitLab Host\",\n publicId: \"host\",\n required: false,\n placeholder: \"gitlab.com\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GITLAB_TOKEN: \"$secrets.GITLAB_TOKEN\",\n GITLAB_HOST: {\n valueRef: \"$vars.GITLAB_HOST\",\n optional: true,\n },\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const gong = {\n gong: {\n label: \"Gong\",\n category: \"sales-crm-business-operations\",\n tags: [\"sales\", \"calls\", \"transcripts\", \"revenue-intelligence\"],\n helpText:\n \"Connect your Gong account to access calls, transcripts, users, and revenue intelligence data\",\n authMethods: {\n \"api-token\": {\n label: \"Access Key\",\n helpText:\n \"1. In Gong, go to **Company Settings → Ecosystem → API** (requires the Technical Administrator permission profile)\\n2. Click **Create** to generate an Access Key and Access Key Secret\\n3. Copy both values — the secret is shown only once\\n4. Copy the **API Base URL** shown on the same screen (e.g. `api.gong.io`, or your region-specific host)\",\n storage: {\n secrets: [\"GONG_ACCESS_KEY\", \"GONG_ACCESS_KEY_SECRET\"],\n variables: [\"GONG_API_BASE\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GONG_ACCESS_KEY: {\n label: \"Access Key\",\n publicId: \"accessKey\",\n required: true,\n },\n GONG_ACCESS_KEY_SECRET: {\n label: \"Access Key Secret\",\n publicId: \"accessKeySecret\",\n required: true,\n },\n GONG_API_BASE: {\n label: \"API Base URL\",\n publicId: \"apiBaseUrl\",\n required: true,\n storage: \"variable\",\n placeholder: \"api.gong.io\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GONG_ACCESS_KEY: \"$secrets.GONG_ACCESS_KEY\",\n GONG_ACCESS_KEY_SECRET: \"$secrets.GONG_ACCESS_KEY_SECRET\",\n GONG_API_BASE: \"$vars.GONG_API_BASE\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const granola = {\n granola: {\n label: \"Granola\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Granola account to access meeting notes, transcripts, summaries, and calendar event details\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Open the [Granola](https://granola.ai) desktop app\\n2. Go to **Settings > API**\\n3. Click the **Create new key** button\\n4. Choose a key type (if prompted) and click **Generate API Key**\\n5. Copy and save the API key securely\",\n storage: {\n secrets: [\"GRANOLA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GRANOLA_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-granola-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GRANOLA_TOKEN: \"$secrets.GRANOLA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const greenhouse = {\n greenhouse: {\n label: \"Greenhouse\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Greenhouse account to read candidates, applications, jobs, offers, and scheduled interviews, and to create candidates and activity-feed notes via the Harvest API. Note: Harvest v1/v2 will be deprecated on August 31, 2026 — migrate to OAuth v3 before that date.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In Greenhouse, click **Configure** (gear icon) → **Dev Center** (left sidebar)\\n2. Click **API Credential Management** → **Create new API credentials**\\n3. For **API type**, select **Harvest API** (v1/v2). For **Partner**, choose **Custom** (or **Unlisted vendor**). Description: **vm0**\\n4. Select the endpoints you want this key to access (permission scoping)\\n5. Click **View and store credentials** and copy the API key — it is only shown once\\n6. Paste it here\\n\\n**Note:** Harvest v1/v2 will be deprecated on August 31, 2026; migrate to OAuth v3 before that date.\",\n storage: {\n secrets: [\"GREENHOUSE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GREENHOUSE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-greenhouse-harvest-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GREENHOUSE_TOKEN: \"$secrets.GREENHOUSE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const groq = {\n groq: {\n label: \"Groq\",\n category: \"ai-general-models\",\n generation: [\"text\"],\n tags: [\"llm\", \"ai\", \"llama\", \"inference\"],\n helpText:\n \"Connect your Groq account to run ultra-fast LLM inference on open-weight models (Llama, Mixtral, Gemma) and Whisper audio transcription using Groq's LPU hardware\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up at [console.groq.com](https://console.groq.com)\\n2. Click **API Keys** in the left sidebar\\n3. Click **Create API Key**, name it, and copy it immediately — it is shown only once\\n4. Paste it here. Free tier available; the key is org-bound.\",\n storage: {\n secrets: [\"GROQ_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n GROQ_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"gsk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n GROQ_TOKEN: \"$secrets.GROQ_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const helicone = {\n helicone: {\n label: \"Helicone\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect to Helicone for LLM cost tracking, request logging, and performance analytics.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText: \"Go to helicone.ai → Settings → API Keys → create a new key.\",\n storage: {\n secrets: [\"HELICONE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HELICONE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-helicone-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HELICONE_TOKEN: \"$secrets.HELICONE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const heygen = {\n heygen: {\n label: \"HeyGen\",\n category: \"marketing-content-growth\",\n generation: [\"video\"],\n helpText:\n \"Connect your HeyGen account to create AI-generated videos, manage avatars, and automate video production\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [HeyGen](https://app.heygen.com)\\n2. Navigate to **Settings > API > API token**\\n3. Click to generate your API key\\n4. Copy and save the key immediately — you cannot retrieve it after leaving the page, and regenerating a new key will invalidate the previous one\",\n storage: {\n secrets: [\"HEYGEN_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HEYGEN_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-heygen-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HEYGEN_TOKEN: \"$secrets.HEYGEN_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const hitem3d = {\n hitem3d: {\n label: \"Hitem3D\",\n category: \"ai-image-video\",\n generation: [\"image\"],\n tags: [\"hi3d\", \"sparc3d\", \"ultra3d\", \"image-to-3d\", \"3d\"],\n helpText:\n \"Connect your Hitem3D account to generate 3D models from images through the Hitem3D API\",\n authMethods: {\n \"api-token\": {\n label: \"API Credentials\",\n helpText:\n \"1. Sign in to the [Hitem3D Developer Platform](https://platform.hitem3d.ai)\\n2. Purchase or enable a resource package\\n3. Open the API Key page and create an enabled API key\\n4. Copy the client ID and client secret. Paste them here.\",\n storage: {\n secrets: [\"HITEM3D_CLIENT_ID\", \"HITEM3D_CLIENT_SECRET\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HITEM3D_CLIENT_ID: {\n label: \"Client ID\",\n publicId: \"clientId\",\n required: true,\n placeholder: \"hitem3d_client_id\",\n },\n HITEM3D_CLIENT_SECRET: {\n label: \"Client Secret\",\n publicId: \"clientSecret\",\n required: true,\n placeholder: \"hitem3d_client_secret\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HITEM3D_CLIENT_ID: \"$secrets.HITEM3D_CLIENT_ID\",\n HITEM3D_CLIENT_SECRET: \"$secrets.HITEM3D_CLIENT_SECRET\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const htmlcsstoimage = {\n htmlcsstoimage: {\n label: \"HTML/CSS to Image\",\n category: \"marketing-content-growth\",\n generation: [\"image\"],\n helpText:\n \"Connect your HTML/CSS to Image account to generate images from HTML and CSS\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [HTML/CSS to Image](https://htmlcsstoimage.com/dashboard)\\n2. Go to your **Dashboard**\\n3. Locate your **User ID** and **API Key** displayed on the dashboard\\n4. Copy the **API Key** (used as the password in HTTP Basic authentication)\",\n storage: {\n secrets: [\"HCTI_API_KEY\"],\n variables: [\"HCTI_USER_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HCTI_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n HCTI_USER_ID: {\n label: \"User ID\",\n publicId: \"userId\",\n required: true,\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HCTI_API_KEY: \"$secrets.HCTI_API_KEY\",\n HCTI_USER_ID: \"$vars.HCTI_USER_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const honcho = {\n honcho: {\n label: \"Honcho\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect Honcho to add persistent memory, context, and stateful reasoning to agents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Honcho](https://app.honcho.dev)\\n2. Open **API KEYS**\\n3. Create or copy an API key\\n4. Honcho sends this key as `Authorization: Bearer <token>`\",\n storage: {\n secrets: [\"HONCHO_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HONCHO_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"hch-v3-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HONCHO_API_KEY: \"$secrets.HONCHO_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const huggingFace = {\n \"hugging-face\": {\n label: \"Hugging Face\",\n category: \"ai-general-models\",\n generation: [\"image\", \"text\"],\n helpText:\n \"Connect your Hugging Face account to access models, datasets, and inference APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Hugging Face](https://huggingface.co)\\n2. Go to **Settings → Access Tokens**\\n3. Create a new token with the required permissions\\n4. Copy the token\",\n storage: {\n secrets: [\"HUGGING_FACE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HUGGING_FACE_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"hf_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HUGGING_FACE_TOKEN: \"$secrets.HUGGING_FACE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const hume = {\n hume: {\n label: \"Hume\",\n category: \"ai-voice-audio\",\n generation: [\"audio\"],\n helpText:\n \"Connect your Hume account to access emotion AI, speech-to-speech, and expressive text-to-speech APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Hume Portal](https://app.hume.ai)\\n2. Navigate to the **API Keys** page\\n3. Copy your API key\",\n storage: {\n secrets: [\"HUME_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HUME_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HUME_TOKEN: \"$secrets.HUME_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const hunter = {\n hunter: {\n label: \"Hunter\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect Hunter to find and verify professional email addresses for outbound and prospecting\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Hunter](https://hunter.io/api-keys)\\n2. Open the **API keys** page under your account\\n3. Copy your existing key or click **Generate a new key**\\n4. Pass it as the `api_key` query parameter on every request\",\n storage: {\n secrets: [\"HUNTER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n HUNTER_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n HUNTER_TOKEN: \"$secrets.HUNTER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const imgur = {\n imgur: {\n label: \"Imgur\",\n category: \"marketing-content-growth\",\n helpText: \"Connect your Imgur account to upload, manage, and share images\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Imgur](https://imgur.com)\\n2. Go to [Register an Application](https://api.imgur.com/oauth2/addclient)\\n3. Fill in the application registration form\\n4. After registration, you will receive a **Client ID** and **Client Secret**\\n5. Copy and save both credentials\",\n storage: {\n secrets: [\"IMGUR_CLIENT_ID\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n IMGUR_CLIENT_ID: {\n label: \"Client ID\",\n publicId: \"clientId\",\n required: true,\n placeholder: \"your-imgur-client-id\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n IMGUR_CLIENT_ID: \"$secrets.IMGUR_CLIENT_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const infisical = {\n infisical: {\n label: \"Infisical\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Infisical account to fetch secrets from your projects and environments using a Token Auth identity\",\n authMethods: {\n \"api-token\": {\n label: \"Token Auth\",\n helpText:\n \"1. Log in to [Infisical](https://app.infisical.com)\\n2. Go to **Access Control > Machine Identities**\\n3. Create a new Machine Identity with **Token Auth**\\n4. Copy the **Token**\\n5. Assign the identity to your project with the desired role\",\n storage: {\n secrets: [\"INFISICAL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n INFISICAL_TOKEN: {\n label: \"Token\",\n publicId: \"token\",\n required: true,\n placeholder: \"your-infisical-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INFISICAL_TOKEN: \"$secrets.INFISICAL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const instagram = {\n instagram: {\n label: \"Instagram\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Instagram Business account to manage posts, stories, and insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Create a Meta app of type **Business** at [Meta for Developers](https://developers.facebook.com/apps)\\n2. In your app dashboard, click **Instagram > API setup with Instagram business login** in the left side menu\\n3. Click **Generate token** next to the Instagram account you want to access\\n4. Log into Instagram when prompted\\n5. Copy the access token\",\n storage: {\n secrets: [\"INSTAGRAM_TOKEN\"],\n variables: [\"INSTAGRAM_BUSINESS_ACCOUNT_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n INSTAGRAM_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n },\n INSTAGRAM_BUSINESS_ACCOUNT_ID: {\n label: \"Business Account ID\",\n publicId: \"accountId\",\n required: true,\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INSTAGRAM_TOKEN: \"$secrets.INSTAGRAM_TOKEN\",\n INSTAGRAM_BUSINESS_ACCOUNT_ID:\n \"$vars.INSTAGRAM_BUSINESS_ACCOUNT_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const instantly = {\n instantly: {\n label: \"Instantly\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Instantly account to manage email campaigns, leads, and outreach sequences\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Instantly](https://app.instantly.ai)\\n2. Navigate to **Settings > Integrations** at https://app.instantly.ai/app/settings/integrations\\n3. Click the **API Keys** section in the left sidebar\\n4. Click the **Create API Key** button\\n5. Enter a name for the API key\\n6. Select the scopes (permissions) you want the API key to have\\n7. Click **Create**\\n8. Copy the key and store it in a secure place (it will only be displayed once)\",\n storage: {\n secrets: [\"INSTANTLY_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n INSTANTLY_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-instantly-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INSTANTLY_API_KEY: \"$secrets.INSTANTLY_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const intercom = {\n intercom: {\n label: \"Intercom\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Intercom account to manage customer conversations, contacts, messages, and support tickets\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Sign up at the [Intercom Developer Hub](https://app.intercom.com/admins/sign_up/developer) on your Intercom workspace\\n2. Create a new app in the Developer Hub\\n3. Navigate to **Configure > Authentication** within your app in the [Developer Hub](https://app.intercom.io/a/apps/_/developer-hub/app-packages)\\n4. Copy your access token\",\n storage: {\n secrets: [\"INTERCOM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n INTERCOM_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n INTERCOM_TOKEN: \"$secrets.INTERCOM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const ironclad = {\n ironclad: {\n label: \"Ironclad\",\n category: \"sales-crm-business-operations\",\n tags: [\"contracts\", \"clm\", \"workflows\", \"legal\"],\n helpText:\n \"Connect your Ironclad account to manage contract workflows, records, and documents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In Ironclad, go to **Company Settings → API**\\n2. Generate an API key and copy it\\n3. Set the API host to match your instance's data region: `ironcladapp.com` (North America), `eu1.ironcladapp.com` (Europe), or `demo.ironcladapp.com` (demo)\",\n storage: {\n secrets: [\"IRONCLAD_API_KEY\"],\n variables: [\"IRONCLAD_HOST\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n IRONCLAD_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n IRONCLAD_HOST: {\n label: \"API Host\",\n publicId: \"host\",\n required: true,\n storage: \"variable\",\n placeholder: \"ironcladapp.com\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n IRONCLAD_API_KEY: \"$secrets.IRONCLAD_API_KEY\",\n IRONCLAD_HOST: \"$vars.IRONCLAD_HOST\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const jam = {\n jam: {\n label: \"Jam\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Jam account to capture bugs, manage reports, and access debugging telemetry\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n helpText:\n '1. Log in to [Jam](https://jam.dev)\\n2. Go to **Settings > Integrations > AI Agents**\\n3. Scroll down to the **Personal Access Tokens** section\\n4. Click **Create token**\\n5. Enter a name for the token (e.g., \"Cursor\" or \"Claude Code\")\\n6. Choose an expiration period (7 days, 30 days, 90 days, or 1 year)\\n7. Select at least one scope (`mcp:read` for viewing or `mcp:write` for editing)\\n8. Click **Create**\\n9. Copy the token immediately (it will not be displayed again)',\n storage: {\n secrets: [\"JAM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n JAM_TOKEN: {\n label: \"Personal Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"jam_pat_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n JAM_TOKEN: \"$secrets.JAM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const jira = {\n jira: {\n label: \"Jira\",\n category: \"engineering-team-execution\",\n tags: [\"issues\", \"tickets\", \"project-management\"],\n helpText:\n \"Connect your Jira account to manage projects, issues, sprints, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Go to [Atlassian API token management](https://id.atlassian.com/manage-profile/security/api-tokens)\\n2. Log in to your Atlassian account\\n3. Click **Create API token**\\n4. Enter a name that describes what the token is for\\n5. Choose an expiration date (between 1 and 365 days)\\n6. Click **Create**\\n7. Click **Copy to clipboard** and save the token in a secure place (you cannot recover it later)\",\n storage: {\n secrets: [\"JIRA_API_TOKEN\"],\n variables: [\"JIRA_DOMAIN\", \"JIRA_EMAIL\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n JIRA_API_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n JIRA_DOMAIN: {\n label: \"Jira Domain\",\n publicId: \"domain\",\n required: true,\n storage: \"variable\",\n normalize: \"host\",\n placeholder: \"your-domain.atlassian.net\",\n },\n JIRA_EMAIL: {\n label: \"Jira Email\",\n publicId: \"email\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-email@example.com\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n JIRA_API_TOKEN: \"$secrets.JIRA_API_TOKEN\",\n JIRA_DOMAIN: \"$vars.JIRA_DOMAIN\",\n JIRA_EMAIL: \"$vars.JIRA_EMAIL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const jotform = {\n jotform: {\n label: \"Jotform\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Jotform account to manage forms, submissions, and automate form workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your [Jotform account](https://www.jotform.com/myaccount/api)\\n2. Navigate to **Settings** → **API**\\n3. Click **Create New Key**\\n4. Copy your **API Key**\",\n storage: {\n secrets: [\"JOTFORM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n JOTFORM_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n JOTFORM_TOKEN: \"$secrets.JOTFORM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const klaviyo = {\n klaviyo: {\n label: \"Klaviyo\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Klaviyo account to manage profiles, lists, events, subscriptions, and campaigns\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Klaviyo](https://www.klaviyo.com/)\\n2. Go to **Account > Settings > API keys**\\n3. Click **Create Private API Key**\\n4. Grant the scopes your workflow needs (e.g. `profiles:write`, `lists:write`, `events:write`, `subscriptions:write`)\\n5. Copy the key (format: `pk_...`)\",\n storage: {\n secrets: [\"KLAVIYO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n KLAVIYO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"pk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n KLAVIYO_TOKEN: \"$secrets.KLAVIYO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const kommo = {\n kommo: {\n label: \"Kommo\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Kommo account to manage leads, contacts, and sales pipelines\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Kommo](https://www.kommo.com) and create a **private integration**\\n2. Go to the **Keys and Scopes** tab in your private integration settings\\n3. Click **Generate long-lived token**\\n4. Set the token expiration date (from 1 day to 5 years)\\n5. Copy and save the token immediately (it will only be displayed once)\",\n storage: {\n secrets: [\"KOMMO_API_KEY\"],\n variables: [\"KOMMO_SUBDOMAIN\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n KOMMO_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n KOMMO_SUBDOMAIN: {\n label: \"Subdomain\",\n publicId: \"subdomain\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-subdomain\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n KOMMO_API_KEY: \"$secrets.KOMMO_API_KEY\",\n KOMMO_SUBDOMAIN: \"$vars.KOMMO_SUBDOMAIN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const langfuse = {\n langfuse: {\n label: \"Langfuse\",\n category: \"ai-memory-tracing-eval\",\n tags: [\"observability\", \"tracing\", \"llm\", \"analytics\"],\n helpText:\n \"Connect your Langfuse project to ingest LLM traces, attach evaluate scores, and manage prompt templates\",\n authMethods: {\n \"api-token\": {\n label: \"API Keys\",\n helpText:\n \"1. Sign up at [cloud.langfuse.com](https://cloud.langfuse.com)\\n2. Create an organization and a project\\n3. In project **Settings → API Keys**, click **Create new API keys**\\n4. Copy both the **Public Key** (`pk-lf-...`) and the **Secret Key** (`sk-lf-...`) — the secret is shown only once\\n5. Paste both values into the fields below\",\n storage: {\n secrets: [\"LANGFUSE_PUBLIC_KEY\", \"LANGFUSE_SECRET_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LANGFUSE_PUBLIC_KEY: {\n label: \"Public Key\",\n publicId: \"publicKey\",\n required: true,\n placeholder: \"pk-lf-...\",\n },\n LANGFUSE_SECRET_KEY: {\n label: \"Secret Key\",\n publicId: \"secretKey\",\n required: true,\n placeholder: \"sk-lf-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n LANGFUSE_PUBLIC_KEY: \"$secrets.LANGFUSE_PUBLIC_KEY\",\n LANGFUSE_SECRET_KEY: \"$secrets.LANGFUSE_SECRET_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const langsmith = {\n langsmith: {\n label: \"LangSmith\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect to LangSmith for LLM tracing, evaluation, and dataset management.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"Go to [smith.langchain.com](https://smith.langchain.com) → Settings → API Keys → Create API Key.\",\n storage: {\n secrets: [\"LANGSMITH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LANGSMITH_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"lsv2_pt_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n LANGSMITH_TOKEN: \"$secrets.LANGSMITH_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const lark = {\n lark: {\n label: \"Lark\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Lark app to manage messages, documents, calendars, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"App Credentials\",\n helpText:\n \"1. Log in to the [Lark Developer Console](https://open.larksuite.com/app/)\\n2. Select your app from the list (or create a new one)\\n3. Go to the **Credentials & Basic Info** page\\n4. Copy your **App ID** and **App Secret**\",\n storage: {\n secrets: [\"LARK_APP_SECRET\", \"LARK_ACCESS_TOKEN\"],\n variables: [\"LARK_APP_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LARK_APP_ID: {\n label: \"App ID\",\n publicId: \"appId\",\n required: true,\n storage: \"variable\",\n },\n LARK_APP_SECRET: {\n label: \"App Secret\",\n publicId: \"appSecret\",\n required: true,\n storage: \"secret\",\n },\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n appId: \"$vars.LARK_APP_ID\",\n appSecret: \"$secrets.LARK_APP_SECRET\",\n },\n outputs: {\n accessToken: \"$secrets.LARK_ACCESS_TOKEN\",\n },\n refreshableSecrets: [\"LARK_ACCESS_TOKEN\"],\n envBindings: {\n LARK_TOKEN: \"$secrets.LARK_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const line = {\n line: {\n label: \"LINE\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your LINE account to send messages, manage channels, and access the LINE Messaging API\",\n authMethods: {\n \"api-token\": {\n label: \"Channel Access Token\",\n helpText:\n \"1. Log in to the [LINE Developers Console](https://developers.line.biz/console)\\n2. Select your provider and channel\\n3. Go to the **Messaging API** tab\\n4. Issue or copy the **Channel access token (long-lived)**\",\n storage: {\n secrets: [\"LINE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LINE_TOKEN: {\n label: \"Channel Access Token\",\n publicId: \"accessToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n LINE_TOKEN: \"$secrets.LINE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const loops = {\n loops: {\n label: \"Loops\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Loops account to send behavioral and transactional emails for your SaaS product\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Loops](https://app.loops.so)\\n2. Go to **Settings** → **API**\\n3. Click **Generate key**\\n4. Copy the generated API key\",\n storage: {\n secrets: [\"LOOPS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LOOPS_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"d2d561f5ff80136f69b4b5a31b9fb3c9\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n LOOPS_TOKEN: \"$secrets.LOOPS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const luma = {\n luma: {\n label: \"Luma\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Luma account to manage events, guests, tickets, and calendar data via the Luma API\",\n tags: [\"events\", \"calendar\", \"tickets\", \"guests\", \"rsvp\"],\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in at [lu.ma](https://lu.ma)\\n2. Go to Calendars Home → select your calendar → Settings → Developer\\n3. Generate or copy your API key\\n4. Paste the key here\",\n storage: {\n secrets: [\"LUMA_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LUMA_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-luma-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n LUMA_API_KEY: \"$secrets.LUMA_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const lumaAi = {\n \"luma-ai\": {\n label: \"Luma AI\",\n category: \"ai-image-video\",\n generation: [\"image\", \"video\"],\n helpText:\n \"Connect your Luma AI account to generate videos and images using the Dream Machine API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up at [lumalabs.ai](https://lumalabs.ai)\\n2. Go to [lumalabs.ai/dream-machine/api](https://lumalabs.ai/dream-machine/api) or account settings → API Keys\\n3. Create a new API key and copy it\\n4. Paste the key here\",\n storage: {\n secrets: [\"LUMA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n LUMA_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-luma-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n LUMA_TOKEN: \"$secrets.LUMA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const mailchimp = {\n mailchimp: {\n label: \"Mailchimp\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Mailchimp account to manage audiences, campaigns, templates, and automations\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.MailchimpConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Mailchimp to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"MAILCHIMP_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"MAILCHIMP_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"MAILCHIMP_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [],\n outputs: {\n accessToken: \"$secrets.MAILCHIMP_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MAILCHIMP_TOKEN: \"$secrets.MAILCHIMP_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Mailchimp](https://mailchimp.com)\\n2. Click your **profile icon** and select **Profile**\\n3. Click the **Extras** dropdown menu, then choose **API keys**\\n4. In the **Your API Keys** section, click **Create A Key**\\n5. Enter a descriptive name for the key\\n6. Click **Generate Key**\\n7. Click **Copy Key to Clipboard** and store it in a secure place (you will not be able to see or copy it again)\\n8. Click **Done**\",\n storage: {\n secrets: [\"MAILCHIMP_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MAILCHIMP_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us00\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MAILCHIMP_TOKEN: \"$secrets.MAILCHIMP_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const mailsac = {\n mailsac: {\n label: \"Mailsac\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Mailsac account to manage disposable email inboxes for testing\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to [Mailsac](https://mailsac.com) and sign up for an account\\n2. Log in to your Mailsac dashboard\\n3. Navigate to [API Keys](https://mailsac.com/api-keys)\\n4. Copy your API key from the dashboard\",\n storage: {\n secrets: [\"MAILSAC_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MAILSAC_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-mailsac-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MAILSAC_TOKEN: \"$secrets.MAILSAC_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const make = {\n make: {\n label: \"Make\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Make account to manage scenarios, organizations, and automation workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Make](https://www.make.com)\\n2. Click your **avatar** at the bottom-left corner\\n3. Select **Profile**, then open the **API** tab\\n4. Click **Add token**\\n5. Enter a **Label** (custom name to identify the token)\\n6. Select the required **Scopes** (permissions)\\n7. Click **Save**\\n8. Copy the token and store it in a safe place (it will be hidden once you leave the page)\",\n storage: {\n secrets: [\"MAKE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MAKE_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MAKE_TOKEN: \"$secrets.MAKE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const manus = {\n manus: {\n label: \"Manus\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect your Manus account to run AI agent tasks, manage projects, upload files, and automate multi-step workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [Manus](https://manus.im)\\n2. Navigate to **Settings → Integration → Build with Manus API**\\n3. Click **Create New**, give it a name, and confirm\\n4. Copy the generated API key\",\n storage: {\n secrets: [\"MANUS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MANUS_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-manus-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MANUS_TOKEN: \"$secrets.MANUS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const mapbox = {\n mapbox: {\n label: \"Mapbox\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Mapbox to access geocoding, directions, isochrones, and other location APIs\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Log in to [Mapbox](https://account.mapbox.com)\\n2. Open the **Access tokens** page\\n3. Click **Create a token**, give it a name, and pick the scopes you need\\n4. Copy the token (format: `pk.…`) — pass it as the `access_token` query parameter\",\n storage: {\n secrets: [\"MAPBOX_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MAPBOX_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"pk....\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MAPBOX_TOKEN: \"$secrets.MAPBOX_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const massive = {\n massive: {\n label: \"Massive (Polygon.io)\",\n category: \"data-automation-infrastructure\",\n tags: [\"polygon\", \"polygon.io\", \"market data\", \"stocks\", \"forex\", \"crypto\"],\n helpText:\n \"Connect your Massive account to access stock, options, forex, crypto, indices, and market reference data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Massive](https://massive.com)\\n2. Open your dashboard and navigate to API keys\\n3. Create or copy an API key for REST API access\\n4. Copy the API key\",\n storage: {\n secrets: [\"MASSIVE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MASSIVE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-massive-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MASSIVE_TOKEN: \"$secrets.MASSIVE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const maskdb = {\n maskdb: {\n label: \"maskdb\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect maskdb to run read-only, structured queries against a masked Postgres database. Sensitive columns are returned masked and can never be used to filter, sort, group, or aggregate.\",\n authMethods: {\n \"api-token\": {\n label: \"Token\",\n helpText:\n \"1. Open your [maskdb dashboard](https://github.com/e7h4n/maskdb)\\n2. Mint a maskdb token with the `db:query` and `db:metadata` scopes (read-only). It starts with `mk_`\\n3. Paste the token here\",\n storage: {\n secrets: [\"MASKDB_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MASKDB_TOKEN: {\n label: \"Token\",\n publicId: \"token\",\n required: true,\n placeholder: \"mk_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoc\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MASKDB_TOKEN: \"$secrets.MASKDB_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const mathpix = {\n mathpix: {\n label: \"Mathpix\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Mathpix to convert images, PDFs, and handwriting into LaTeX, Markdown, DOCX, or structured JSON\",\n authMethods: {\n \"api-token\": {\n label: \"App ID + App Key\",\n helpText:\n \"1. Sign in to the [Mathpix Console](https://console.mathpix.com)\\n2. Open **API Keys** under your account\\n3. Copy your **app_id** and create / copy an **app_key**\\n4. Mathpix authenticates with both values sent as the `app_id` and `app_key` request headers\",\n storage: {\n secrets: [\"MATHPIX_APP_KEY\"],\n variables: [\"MATHPIX_APP_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MATHPIX_APP_KEY: {\n label: \"App Key\",\n publicId: \"appKey\",\n required: true,\n },\n MATHPIX_APP_ID: {\n label: \"App ID\",\n publicId: \"appId\",\n required: true,\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MATHPIX_APP_KEY: \"$secrets.MATHPIX_APP_KEY\",\n MATHPIX_APP_ID: \"$vars.MATHPIX_APP_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const mem0 = {\n mem0: {\n label: \"Mem0\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect to Mem0 for persistent AI memory across conversations and sessions.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"Go to [app.mem0.ai](https://app.mem0.ai) → **API Keys** → create or copy your key.\",\n storage: {\n secrets: [\"MEM0_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MEM0_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"m0-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MEM0_TOKEN: \"$secrets.MEM0_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const mercury = {\n mercury: {\n label: \"Mercury\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Mercury account to access banking and financial data\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.MercuryConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Mercury to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"MERCURY_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"MERCURY_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"MERCURY_ACCESS_TOKEN\", \"MERCURY_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"offline_access\"],\n outputs: {\n accessToken: \"$secrets.MERCURY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.MERCURY_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.MERCURY_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.MERCURY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.MERCURY_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"MERCURY_ACCESS_TOKEN\"],\n envBindings: {\n MERCURY_TOKEN: \"$secrets.MERCURY_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to your [Mercury Dashboard](https://mercury.com)\\n2. Go to **Settings → Tokens**\\n3. Generate a new API token\\n4. Copy the token\",\n storage: {\n secrets: [\"MERCURY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MERCURY_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"secret-token:mercury_production_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MERCURY_TOKEN: \"$secrets.MERCURY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const meshy = {\n meshy: {\n label: \"Meshy\",\n category: \"ai-image-video\",\n generation: [\"image\"],\n helpText:\n \"Connect your Meshy account to generate 3D assets and images with the Meshy API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [Meshy](https://www.meshy.ai)\\n2. Open the [API settings page](https://www.meshy.ai/settings/api)\\n3. Click **Create API Key**\\n4. Copy the API key. You will not be able to see it again.\",\n storage: {\n secrets: [\"MESHY_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MESHY_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"msy_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MESHY_API_KEY: \"$secrets.MESHY_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const metaAds = {\n \"meta-ads\": {\n label: \"Meta Ads\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Meta Ads Manager account to manage ad campaigns, audiences, and insights\",\n authMethods: {\n oauth: {\n showExperimentalLabel: false,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Facebook to grant access to Ads Manager.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"META_ADS_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"META_ADS_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"META_ADS_ACCESS_TOKEN\", \"META_ADS_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"ads_management\",\n \"ads_read\",\n \"business_management\",\n \"pages_manage_ads\",\n \"pages_read_engagement\",\n \"pages_show_list\",\n \"public_profile\",\n ],\n outputs: {\n accessToken: \"$secrets.META_ADS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.META_ADS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.META_ADS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.META_ADS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.META_ADS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"META_ADS_ACCESS_TOKEN\"],\n envBindings: {\n META_ADS_TOKEN: \"$secrets.META_ADS_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const metabase = {\n metabase: {\n label: \"Metabase\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Metabase instance to query data, manage dashboards, and automate analytics workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your Metabase instance as an admin\\n2. Go to **Admin** → **Settings** → **Authentication** → **API Keys**\\n3. Click **Create API Key**\\n4. Enter a name and select a group for the key\\n5. Copy the generated API key\",\n storage: {\n secrets: [\"METABASE_TOKEN\"],\n variables: [\"METABASE_BASE_URL\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n METABASE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n METABASE_BASE_URL: {\n label: \"Base URL\",\n publicId: \"baseUrl\",\n required: true,\n placeholder: \"https://mycompany.metabaseapp.com\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n METABASE_TOKEN: \"$secrets.METABASE_TOKEN\",\n METABASE_BASE_URL: \"$vars.METABASE_BASE_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const microsoft365 = {\n \"microsoft-365\": {\n label: \"Microsoft 365\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect Microsoft 365 to access OneDrive, SharePoint, Teams, and chat data through Microsoft Graph\",\n tags: [\n \"onedrive\",\n \"sharepoint\",\n \"teams\",\n \"microsoft graph\",\n \"files\",\n \"chat\",\n ],\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.Microsoft365Connector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Microsoft to grant Microsoft Graph access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"MICROSOFT_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"MICROSOFT_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\n \"MICROSOFT_365_ACCESS_TOKEN\",\n \"MICROSOFT_365_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"User.Read\",\n \"offline_access\",\n \"Files.ReadWrite.All\",\n \"Sites.ReadWrite.All\",\n \"Team.ReadBasic.All\",\n \"Channel.ReadBasic.All\",\n \"ChannelMessage.Read.All\",\n \"ChannelMessage.Send\",\n \"Chat.ReadWrite\",\n \"ChatMessage.Send\",\n ],\n outputs: {\n accessToken: \"$secrets.MICROSOFT_365_ACCESS_TOKEN\",\n refreshToken: \"$secrets.MICROSOFT_365_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.MICROSOFT_365_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.MICROSOFT_365_ACCESS_TOKEN\",\n refreshToken: \"$secrets.MICROSOFT_365_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"MICROSOFT_365_ACCESS_TOKEN\"],\n envBindings: {\n MICROSOFT_365_TOKEN: \"$secrets.MICROSOFT_365_ACCESS_TOKEN\",\n MICROSOFT_GRAPH_TOKEN: \"$secrets.MICROSOFT_365_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const tiktokAds = {\n \"tiktok-ads\": {\n label: \"TikTok Ads\",\n category: \"marketing-content-growth\",\n tags: [\"ads\", \"advertising\", \"tiktok ads\", \"campaigns\", \"reporting\"],\n helpText:\n \"Connect your TikTok Ads Manager account to manage ad campaigns, ad groups, ads, and performance reports\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.TikTokAdsConnector,\n showExperimentalLabel: false,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with TikTok for Business to grant Ads access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"TIKTOK_ADS_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"TIKTOK_ADS_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"TIKTOK_ADS_ACCESS_TOKEN\", \"TIKTOK_ADS_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [],\n outputs: {\n accessToken: \"$secrets.TIKTOK_ADS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.TIKTOK_ADS_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.TIKTOK_ADS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.TIKTOK_ADS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.TIKTOK_ADS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"TIKTOK_ADS_ACCESS_TOKEN\"],\n envBindings: {\n TIKTOK_ADS_TOKEN: \"$secrets.TIKTOK_ADS_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const minimax = {\n minimax: {\n label: \"MiniMax\",\n category: \"ai-general-models\",\n generation: [\"audio\", \"text\", \"video\"],\n helpText:\n \"Connect your MiniMax account to access AI model APIs for text, voice, and video generation\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [MiniMax Platform](https://platform.minimax.io)\\n2. Go to **User Center > Basic Information > Interface Key**\\n3. Create a new API key\\n4. Copy the key\",\n storage: {\n secrets: [\"MINIMAX_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MINIMAX_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-minimax-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MINIMAX_TOKEN: \"$secrets.MINIMAX_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const minio = {\n minio: {\n label: \"MinIO\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your MinIO instance to manage S3-compatible object storage buckets and objects\",\n authMethods: {\n \"api-token\": {\n label: \"Access Credentials\",\n helpText:\n \"1. Log in to the MinIO Console\\n2. Navigate to the **Access Keys** section under Security and Access\\n3. Click **Create Access Key**\\n4. The system automatically generates an access key and secret key\\n5. Optionally override the auto-generated values or toggle **Restrict beyond user policy** to limit permissions\\n6. Save the secret key in a secure location (you cannot retrieve or reset it after creation)\\n7. Click **Create** to finalize\",\n storage: {\n secrets: [\"MINIO_TOKEN\", \"MINIO_SECRET_TOKEN\"],\n variables: [\"MINIO_ENDPOINT\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MINIO_TOKEN: {\n label: \"Access Key\",\n publicId: \"accessKey\",\n required: true,\n storage: \"secret\",\n },\n MINIO_SECRET_TOKEN: {\n label: \"Secret Key\",\n publicId: \"secretKey\",\n required: true,\n storage: \"secret\",\n },\n MINIO_ENDPOINT: {\n label: \"Endpoint URL\",\n publicId: \"endpoint\",\n required: true,\n placeholder: \"https://minio.example.com\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MINIO_TOKEN: \"$secrets.MINIO_TOKEN\",\n MINIO_SECRET_TOKEN: \"$secrets.MINIO_SECRET_TOKEN\",\n MINIO_ENDPOINT: \"$vars.MINIO_ENDPOINT\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const miro = {\n miro: {\n label: \"Miro\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your Miro account to create and manage boards, sticky notes, shapes, text, and other items on the visual collaboration whiteboard\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Go to [Miro App Settings](https://miro.com/app/settings/user-profile/apps) and click **Create new app**\\n2. Fill in the app name and description\\n3. **Important:** when asked about token expiration, select **Non-expiring access token** — this choice is permanent for the app\\n4. On the app's page, open **Permissions** and check the scopes you need (e.g. `boards:read`, `boards:write`)\\n5. Click **Install app and get OAuth token**, select your team, and copy the token\\n6. Paste the token here\",\n storage: {\n secrets: [\"MIRO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MIRO_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"non-expiring access token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MIRO_TOKEN: \"$secrets.MIRO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const mixpanel = {\n mixpanel: {\n label: \"Mixpanel\",\n category: \"data-automation-infrastructure\",\n tags: [\"analytics\", \"product-analytics\", \"events\"],\n helpText:\n \"Connect your Mixpanel project to query Insights, Funnels, JQL, raw event export, and ingest events via /import\",\n authMethods: {\n \"api-token\": {\n label: \"Service Account\",\n helpText:\n \"1. In Mixpanel, open **Organization Settings → Service Accounts** (or **Project Settings → Service Accounts**)\\n2. Click **Add Service Account**, give it a name, and choose a role (minimum **Member**); optionally set an expiration\\n3. Copy the **Username** and **Secret** immediately — the secret is only shown once\\n4. Open **Project Settings → Overview → Access Keys** and copy your **Project ID**\\n5. Paste all three values below\",\n storage: {\n secrets: [\n \"MIXPANEL_SERVICE_ACCOUNT_USERNAME\",\n \"MIXPANEL_SERVICE_ACCOUNT_SECRET\",\n ],\n variables: [\"MIXPANEL_PROJECT_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MIXPANEL_SERVICE_ACCOUNT_USERNAME: {\n label: \"Service Account Username\",\n publicId: \"serviceAccountUsername\",\n required: true,\n placeholder: \"my-sa.12ab34\",\n },\n MIXPANEL_SERVICE_ACCOUNT_SECRET: {\n label: \"Service Account Secret\",\n publicId: \"serviceAccountSecret\",\n required: true,\n },\n MIXPANEL_PROJECT_ID: {\n label: \"Project ID\",\n publicId: \"projectId\",\n required: true,\n storage: \"variable\",\n placeholder: \"1234567\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MIXPANEL_SERVICE_ACCOUNT_USERNAME:\n \"$secrets.MIXPANEL_SERVICE_ACCOUNT_USERNAME\",\n MIXPANEL_SERVICE_ACCOUNT_SECRET:\n \"$secrets.MIXPANEL_SERVICE_ACCOUNT_SECRET\",\n MIXPANEL_PROJECT_ID: \"$vars.MIXPANEL_PROJECT_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const monday = {\n monday: {\n label: \"Monday.com\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Monday.com account to manage boards, items, and workflows\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Monday.com to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"MONDAY_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"MONDAY_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"MONDAY_ACCESS_TOKEN\", \"MONDAY_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"me:read\",\n \"boards:read\",\n \"boards:write\",\n \"docs:read\",\n \"docs:write\",\n \"workspaces:read\",\n \"users:read\",\n \"account:read\",\n \"updates:read\",\n \"updates:write\",\n \"notifications:write\",\n \"assets:read\",\n \"tags:read\",\n \"teams:read\",\n ],\n outputs: {\n accessToken: \"$secrets.MONDAY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.MONDAY_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.MONDAY_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.MONDAY_ACCESS_TOKEN\",\n refreshToken: \"$secrets.MONDAY_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"MONDAY_ACCESS_TOKEN\"],\n envBindings: {\n MONDAY_TOKEN: \"$secrets.MONDAY_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const modal = {\n modal: {\n label: \"Modal\",\n category: \"data-automation-infrastructure\",\n tags: [\"sandbox\", \"sandboxes\", \"serverless\", \"gpu\", \"code-execution\"],\n helpText:\n \"Connect your Modal workspace to run serverless compute, Modal Sandboxes, functions, and volumes through the Modal SDK and CLI\",\n authMethods: {\n \"api-token\": {\n label: \"Service User Token\",\n helpText:\n \"1. Open [Modal workspace token settings](https://modal.com/settings/tokens)\\n2. Click **New Service User** or create a token for automation\\n3. Copy the `MODAL_TOKEN_ID` and `MODAL_TOKEN_SECRET` values\\n4. Optionally enter a Modal environment name.\",\n storage: {\n secrets: [\"MODAL_TOKEN_ID\", \"MODAL_TOKEN_SECRET\"],\n variables: [\"MODAL_ENVIRONMENT\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MODAL_TOKEN_ID: {\n label: \"Token ID\",\n publicId: \"tokenId\",\n required: true,\n placeholder: \"ak-CoffeeSafeLocalCoffeeSafeLocalCoffee\",\n },\n MODAL_TOKEN_SECRET: {\n label: \"Token Secret\",\n publicId: \"tokenSecret\",\n required: true,\n placeholder: \"as-CoffeeSafeLocalCoffeeSafeLocalCoffee\",\n },\n MODAL_ENVIRONMENT: {\n label: \"Environment\",\n publicId: \"environment\",\n required: false,\n placeholder: \"main\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MODAL_TOKEN_ID: \"$secrets.MODAL_TOKEN_ID\",\n MODAL_TOKEN_SECRET: \"$secrets.MODAL_TOKEN_SECRET\",\n MODAL_ENVIRONMENT: {\n valueRef: \"$vars.MODAL_ENVIRONMENT\",\n optional: true,\n },\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const moss = {\n moss: {\n label: \"Moss\",\n category: \"ai-memory-tracing-eval\",\n tags: [\"semantic-search\", \"voice\", \"rag\", \"retrieval\", \"vector\"],\n helpText:\n \"Connect Moss for real-time semantic search inside voice and conversational agents\",\n authMethods: {\n \"api-token\": {\n label: \"Project Credentials\",\n helpText:\n \"1. Sign in to [Moss](https://www.moss.dev) and open the project portal\\n2. Open **Project Settings → API Keys**\\n3. Copy the **Project ID** and **Project Key** for your project (both are required and paired)\",\n storage: {\n secrets: [\"MOSS_PROJECT_ID\", \"MOSS_PROJECT_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MOSS_PROJECT_ID: {\n label: \"Project ID\",\n publicId: \"projectId\",\n required: true,\n placeholder: \"prj_...\",\n },\n MOSS_PROJECT_KEY: {\n label: \"Project Key\",\n publicId: \"projectKey\",\n required: true,\n placeholder: \"msk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MOSS_PROJECT_ID: \"$secrets.MOSS_PROJECT_ID\",\n MOSS_PROJECT_KEY: \"$secrets.MOSS_PROJECT_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const msg9 = {\n msg9: {\n label: \"msg9\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your msg9 account to send messages, manage inboxes, contacts, lists, channels, and skills\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [msg9](https://www.msg9.io)\\n2. Go to **Settings > API Keys**\\n3. Create a new API key\\n4. Copy the key (format: `msg9_sk_...`)\",\n storage: {\n secrets: [\"MSG9_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n MSG9_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"msg9_sk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n MSG9_TOKEN: \"$secrets.MSG9_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const n8n = {\n n8n: {\n label: \"n8n\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your n8n instance to manage workflows, trigger executions, and automate processes\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Open your n8n instance\\n2. Go to **Settings** → **n8n API**\\n3. Click **Create an API key**\\n4. Copy the key and paste it below\\n5. Set your instance URL (e.g. `https://your-instance.app.n8n.cloud`)\",\n storage: {\n secrets: [\"N8N_TOKEN\"],\n variables: [\"N8N_BASE_URL\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n N8N_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"n8n_api_CoffeeSafeLocalCoffeeSafeLocalCo\",\n },\n N8N_BASE_URL: {\n label: \"Instance URL\",\n publicId: \"instanceUrl\",\n required: true,\n storage: \"variable\",\n placeholder: \"https://your-instance.app.n8n.cloud\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n N8N_TOKEN: \"$secrets.N8N_TOKEN\",\n N8N_BASE_URL: \"$vars.N8N_BASE_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const neon = {\n neon: {\n label: \"Neon\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Neon account to manage serverless Postgres databases and projects\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.NeonConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Neon to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"NEON_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"NEON_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"NEON_ACCESS_TOKEN\", \"NEON_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"openid\",\n \"offline_access\",\n \"urn:neoncloud:projects:read\",\n \"urn:neoncloud:projects:create\",\n \"urn:neoncloud:projects:update\",\n \"urn:neoncloud:projects:delete\",\n ],\n outputs: {\n accessToken: \"$secrets.NEON_ACCESS_TOKEN\",\n refreshToken: \"$secrets.NEON_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.NEON_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.NEON_ACCESS_TOKEN\",\n refreshToken: \"$secrets.NEON_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"NEON_ACCESS_TOKEN\"],\n envBindings: {\n NEON_TOKEN: \"$secrets.NEON_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Neon Console](https://console.neon.tech)\\n2. Navigate to **Account settings > API keys**\\n3. Click the button to create a new API key\\n4. Copy and store the secret token immediately (it is only displayed once)\",\n storage: {\n secrets: [\"NEON_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n NEON_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"napi_xxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n NEON_TOKEN: \"$secrets.NEON_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const netdata = {\n netdata: {\n label: \"Netdata\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Netdata Cloud account to query spaces, nodes, metric contexts, and observability data\",\n tags: [\"observability\", \"metrics\", \"monitoring\", \"alerts\"],\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Netdata Cloud](https://app.netdata.cloud)\\n2. Click your profile picture in the bottom-left corner\\n3. Select **User Settings**\\n4. Navigate to **API Tokens**\\n5. Create a token with the scopes required for your use case and copy it\",\n storage: {\n secrets: [\"NETDATA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n NETDATA_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"eyJhbGciOi...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n NETDATA_TOKEN: \"$secrets.NETDATA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const novita = {\n novita: {\n label: \"Novita AI\",\n category: \"ai-general-models\",\n generation: [\"audio\", \"image\", \"text\", \"video\"],\n helpText:\n \"Connect your Novita AI account to run LLM, image, video, and audio models through an OpenAI-compatible API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in at [novita.ai](https://novita.ai)\\n2. Open **Settings → Key Management**\\n3. Click **+ Add New Key**\\n4. Copy the key (it begins with `sk_`). Paste it here.\",\n storage: {\n secrets: [\"NOVITA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n NOVITA_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoc\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n NOVITA_TOKEN: \"$secrets.NOVITA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const nyne = {\n nyne: {\n label: \"Nyne\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect Nyne to orchestrate AI sales agents that prospect, qualify, and book meetings\",\n authMethods: {\n \"api-token\": {\n label: \"API Credentials\",\n helpText:\n \"1. Sign in at [nyne.ai](https://nyne.ai)\\n2. Open your dashboard → **API Keys**\\n3. Copy your **API Key** and **API Secret**\\n4. Nyne authenticates each request with both `X-API-Key` and `X-API-Secret` headers on `https://api.nyne.ai`\",\n storage: {\n secrets: [\"NYNE_API_KEY\", \"NYNE_API_SECRET\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n NYNE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n NYNE_API_SECRET: {\n label: \"API Secret\",\n publicId: \"apiSecret\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n NYNE_API_KEY: \"$secrets.NYNE_API_KEY\",\n NYNE_API_SECRET: \"$secrets.NYNE_API_SECRET\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const onyx = {\n onyx: {\n label: \"Onyx\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your Onyx account to search internal knowledge bases, chat with AI agents, and index documents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key / PAT\",\n helpText:\n \"1. Log in to [Onyx Cloud](https://cloud.onyx.app)\\n2. Go to **Settings → Accounts & Access**\\n3. Click **Create New Token**\\n4. Give it a name and choose an expiration\\n5. Copy the token immediately — it is shown only once\",\n storage: {\n secrets: [\"ONYX_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ONYX_TOKEN: {\n label: \"API Key or Personal Access Token\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"onyx_pat_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ONYX_TOKEN: \"$secrets.ONYX_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const openai = {\n openai: {\n label: \"OpenAI\",\n category: \"ai-general-models\",\n generation: [\"audio\", \"image\", \"text\"],\n tags: [\"llm\", \"ai\", \"gpt\", \"chatgpt\"],\n helpText:\n \"Connect your OpenAI account to access GPT models, embeddings, image generation, and other AI capabilities\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [OpenAI Platform](https://platform.openai.com)\\n2. Navigate to the [API Keys](https://platform.openai.com/api-keys) page in the dashboard\\n3. Create a new API key\\n4. Copy and store the key in a safe location\",\n storage: {\n secrets: [\"OPENAI_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n OPENAI_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n OPENAI_TOKEN: \"$secrets.OPENAI_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const openrouter = {\n openrouter: {\n label: \"OpenRouter\",\n category: \"ai-general-models\",\n generation: [\"text\"],\n helpText:\n \"Connect OpenRouter to call hundreds of LLMs through a single OpenAI-compatible API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [OpenRouter](https://openrouter.ai/keys)\\n2. Click **Create Key**, name it, and set the credit limit you want\\n3. Copy the key (format: `sk-or-v1-…`)\\n4. Use it as a Bearer token on requests to `https://openrouter.ai/api/v1/...`\",\n storage: {\n secrets: [\"OPENROUTER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n OPENROUTER_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-or-v1-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n OPENROUTER_TOKEN: \"$secrets.OPENROUTER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const openweather = {\n openweather: {\n label: \"OpenWeather\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect OpenWeather to access current weather, forecasts, and climate data via the One Call API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to [OpenWeather](https://home.openweathermap.org)\\n2. Go to **My API keys**\\n3. Copy your default key or click **Generate** to create a new one\\n4. Pass it as the `appid` query parameter on every request\",\n storage: {\n secrets: [\"OPENWEATHER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n OPENWEATHER_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n OPENWEATHER_TOKEN: \"$secrets.OPENWEATHER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const outlookCalendar = {\n \"outlook-calendar\": {\n label: \"Outlook Calendar\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Microsoft account to access and manage Outlook calendar events\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.OutlookCalendarConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Microsoft to grant Outlook Calendar access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"MICROSOFT_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"MICROSOFT_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\n \"OUTLOOK_CALENDAR_ACCESS_TOKEN\",\n \"OUTLOOK_CALENDAR_REFRESH_TOKEN\",\n ],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"Calendars.ReadWrite\", \"User.Read\", \"offline_access\"],\n outputs: {\n accessToken: \"$secrets.OUTLOOK_CALENDAR_ACCESS_TOKEN\",\n refreshToken: \"$secrets.OUTLOOK_CALENDAR_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.OUTLOOK_CALENDAR_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.OUTLOOK_CALENDAR_ACCESS_TOKEN\",\n refreshToken: \"$secrets.OUTLOOK_CALENDAR_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"OUTLOOK_CALENDAR_ACCESS_TOKEN\"],\n envBindings: {\n OUTLOOK_CALENDAR_TOKEN: \"$secrets.OUTLOOK_CALENDAR_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const outlookMail = {\n \"outlook-mail\": {\n label: \"Outlook Mail\",\n category: \"communication-collaboration\",\n helpText: \"Connect your Microsoft Outlook account to send and read emails\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.OutlookMailConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Microsoft to grant Outlook Mail access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"MICROSOFT_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"MICROSOFT_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"OUTLOOK_MAIL_ACCESS_TOKEN\", \"OUTLOOK_MAIL_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"Mail.ReadWrite\",\n \"Mail.Send\",\n \"User.Read\",\n \"offline_access\",\n ],\n outputs: {\n accessToken: \"$secrets.OUTLOOK_MAIL_ACCESS_TOKEN\",\n refreshToken: \"$secrets.OUTLOOK_MAIL_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.OUTLOOK_MAIL_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.OUTLOOK_MAIL_ACCESS_TOKEN\",\n refreshToken: \"$secrets.OUTLOOK_MAIL_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"OUTLOOK_MAIL_ACCESS_TOKEN\"],\n envBindings: {\n OUTLOOK_MAIL_TOKEN: \"$secrets.OUTLOOK_MAIL_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pandadoc = {\n pandadoc: {\n label: \"PandaDoc\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your PandaDoc account to create, send, and manage contracts, proposals, quotes, and e-signature documents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In PandaDoc, go to **Settings > Integrations > API**\\n2. Click **Generate Production Key** (requires an API-enabled plan) or **Generate Sandbox Key** for testing\\n3. Copy the key and paste it here\\n\\nNote: Only Org Admins can generate keys. Sandbox keys work for free but signed documents have no legal validity.\",\n storage: {\n secrets: [\"PANDADOC_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PANDADOC_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your PandaDoc API key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PANDADOC_TOKEN: \"$secrets.PANDADOC_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const parallel = {\n parallel: {\n label: \"Parallel\",\n category: \"ai-agent-apps\",\n helpText:\n \"Connect Parallel to use its web search, extraction, task, FindAll, and monitor APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to [Parallel Platform](https://platform.parallel.ai)\\n2. Create or copy your API key\\n3. Use it as `PARALLEL_API_KEY`\",\n storage: {\n secrets: [\"PARALLEL_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PARALLEL_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-parallel-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PARALLEL_API_KEY: \"$secrets.PARALLEL_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pdf4me = {\n pdf4me: {\n label: \"PDF4me\",\n category: \"data-automation-infrastructure\",\n generation: [\"document\"],\n helpText:\n \"Connect your PDF4me account to convert, merge, split, compress, and manipulate PDF documents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Register for an account at [PDF4me](https://portal.pdf4me.com) using email/password or via Google, Microsoft, Apple, or Facebook\\n2. Go to the **Billing Info** section and select **Start Free Trial**\\n3. After activation, you will be redirected to the **Dashboard**\\n4. Find and copy your API Key from the Dashboard\",\n storage: {\n secrets: [\"PDF4ME_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PDF4ME_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-pdf4me-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PDF4ME_TOKEN: \"$secrets.PDF4ME_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pdfco = {\n pdfco: {\n label: \"PDF.co\",\n category: \"data-automation-infrastructure\",\n generation: [\"document\"],\n helpText:\n \"Connect your PDF.co account to convert, merge, split, and extract data from PDF documents via API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n storage: {\n secrets: [\"PDFCO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PDFCO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-pdfco-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PDFCO_TOKEN: \"$secrets.PDFCO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pdforge = {\n pdforge: {\n label: \"PDForge\",\n category: \"data-automation-infrastructure\",\n generation: [\"document\"],\n helpText:\n \"Connect your PDForge account to generate PDF documents from templates\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Create an account on [pdforge](https://pdforge.com)\\n2. Two API keys are automatically generated when you create your account\\n3. Go to the **API Keys** menu in the sidebar to view your keys\\n4. Copy your API key and use it in the `Authorization: Bearer pdfnoodle_api_[your_key]` header\",\n storage: {\n secrets: [\"PDFORGE_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PDFORGE_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-pdforge-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PDFORGE_API_KEY: \"$secrets.PDFORGE_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const peopleDataLabs = {\n \"people-data-labs\": {\n label: \"People Data Labs\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect People Data Labs to enrich, search, identify, and clean person and company data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your [People Data Labs dashboard](https://dashboard.peopledatalabs.com)\\n2. Open your API dashboard\\n3. Copy your API key\\n4. People Data Labs accepts it in the `X-Api-Key` header\",\n storage: {\n secrets: [\"PEOPLE_DATA_LABS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PEOPLE_DATA_LABS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-people-data-labs-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PEOPLE_DATA_LABS_API_KEY: \"$secrets.PEOPLE_DATA_LABS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const perplexity = {\n perplexity: {\n label: \"Perplexity\",\n category: \"data-automation-infrastructure\",\n generation: [\"text\"],\n helpText:\n \"Connect your Perplexity account to access AI-powered search and research capabilities via the Sonar API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n '1. Log in to the [Perplexity Console](https://console.perplexity.ai)\\n2. Navigate to the **API Groups** page and create an API group (e.g., \"Production\" or \"Development\")\\n3. Go to the **API Keys** page\\n4. Generate a new API key\\n5. Store the key immediately and securely (you will only see the full token value once)',\n storage: {\n secrets: [\"PERPLEXITY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PERPLEXITY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"pplx-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PERPLEXITY_TOKEN: \"$secrets.PERPLEXITY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connectors\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const pexels = {\n pexels: {\n label: \"Pexels\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect Pexels to search, download, and insert stock photos and videos into artifacts. Responses and artifacts should include photographer attribution and the original Pexels URL. Avoid bulk downloading or rebuilding a stock photo or wallpaper library.\",\n tags: [\"stock-photos\", \"stock-videos\", \"images\", \"media\"],\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n featureFlag: FeatureSwitchKey.PexelsConnector,\n helpText:\n \"1. Sign in to [Pexels](https://www.pexels.com)\\n2. Open the [Pexels API page](https://www.pexels.com/api/) and request or copy your API key\\n3. Paste the key here\\n\\nvm0 stores the key as a secret and automatically attaches it when calling the Pexels API. Pexels asks API users to include a prominent Pexels link and, where possible, photographer credit when displaying content. Responses and artifacts should include photographer attribution and the original Pexels URL.\",\n storage: {\n secrets: [\"PEXELS_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PEXELS_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-pexels-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PEXELS_API_KEY: \"$secrets.PEXELS_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pika = {\n pika: {\n label: \"Pika\",\n category: \"ai-image-video\",\n helpText:\n \"Connect your Pika Developer account to join video meetings (Google Meet, Zoom) as a real-time AI avatar with voice cloning\",\n authMethods: {\n \"api-token\": {\n label: \"Developer Key\",\n helpText:\n \"1. Go to [pika.me/dev](https://www.pika.me/dev/)\\n2. Sign in or create an account\\n3. Create a new Developer Key\\n4. Copy the key (format: `dk_...`)\",\n storage: {\n secrets: [\"PIKA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PIKA_TOKEN: {\n label: \"Developer Key\",\n publicId: \"developerKey\",\n required: true,\n placeholder: \"dk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PIKA_TOKEN: \"$secrets.PIKA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pinecone = {\n pinecone: {\n label: \"Pinecone\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Pinecone account for vector database operations, semantic search, and managing embeddings\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Pinecone](https://app.pinecone.io)\\n2. Go to **API Keys** in the left sidebar\\n3. Copy your default API key or create a new one\",\n storage: {\n secrets: [\"PINECONE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PINECONE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"pcsk_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PINECONE_TOKEN: \"$secrets.PINECONE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pipedream = {\n pipedream: {\n label: \"Pipedream\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Pipedream account to create workflows, manage event sources, and call the Pipedream REST API\",\n authMethods: {\n \"api-token\": {\n label: \"User API Key\",\n helpText:\n \"1. Log in to [Pipedream](https://pipedream.com)\\n2. Open **My Account → API Key** in your user settings\\n3. Copy your user API key\\n4. Pipedream sends this key as `Authorization: Bearer <api key>`\",\n storage: {\n secrets: [\"PIPEDREAM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PIPEDREAM_TOKEN: {\n label: \"User API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"pd_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocal\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PIPEDREAM_TOKEN: \"$secrets.PIPEDREAM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pipedrive = {\n pipedrive: {\n label: \"Pipedrive\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Pipedrive account to manage your sales pipeline — deals, contacts, organizations, activities, and notes\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In Pipedrive, click your avatar (top right) → **Personal Preferences** → **API**\\n2. Copy your personal API token\\n3. Paste it here\",\n storage: {\n secrets: [\"PIPEDRIVE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PIPEDRIVE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-pipedrive-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PIPEDRIVE_TOKEN: \"$secrets.PIPEDRIVE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const plain = {\n plain: {\n label: \"Plain\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Plain account to manage customer support threads, customers, and labels via Plain's GraphQL API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Plain](https://app.plain.com)\\n2. Go to **Settings → Machine Users**\\n3. Click **New machine user** and generate an API key\\n4. Copy the API key\",\n storage: {\n secrets: [\"PLAIN_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PLAIN_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"plainApiKey__...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PLAIN_TOKEN: \"$secrets.PLAIN_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const plausible = {\n plausible: {\n label: \"Plausible\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Plausible Analytics account to access website traffic analytics, visitor stats, and site management\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Plausible Analytics](https://plausible.io)\\n2. Go to **Account Settings** → **API Keys**\\n3. Click **New API Key** and choose **Stats API**\\n4. Copy the key (it is only shown once)\",\n storage: {\n secrets: [\"PLAUSIBLE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PLAUSIBLE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-plausible-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PLAUSIBLE_TOKEN: \"$secrets.PLAUSIBLE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const podchaser = {\n podchaser: {\n label: \"Podchaser\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Podchaser account to search podcasts, episodes, creators, and access podcast industry data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Podchaser](https://www.podchaser.com)\\n2. Go to [Profile > Settings > API](https://www.podchaser.com/profile/settings/api) to retrieve your **API Key** and **API Secret**\\n3. Request an access token by sending a POST request to `https://api.podchaser.com/graphql` using the `requestAccessToken` mutation with `grant_type` set to `CLIENT_CREDENTIALS`, your API Key as `client_id`, and your API Secret as `client_secret`\\n4. Store the returned access token (it lasts 1 year)\",\n storage: {\n secrets: [\"PODCHASER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PODCHASER_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-podchaser-access-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PODCHASER_TOKEN: \"$secrets.PODCHASER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const posthog = {\n posthog: {\n label: \"PostHog\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your PostHog account to access product analytics, feature flags, and experiments\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.PosthogConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with PostHog to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"POSTHOG_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"POSTHOG_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"POSTHOG_ACCESS_TOKEN\", \"POSTHOG_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"openid\",\n \"profile\",\n \"email\",\n \"user:read\",\n \"project:read\",\n \"feature_flag:read\",\n \"feature_flag:write\",\n \"experiment:read\",\n \"experiment:write\",\n \"insight:read\",\n \"insight:write\",\n \"dashboard:read\",\n \"dashboard:write\",\n \"action:read\",\n \"action:write\",\n \"annotation:read\",\n \"annotation:write\",\n \"cohort:read\",\n \"cohort:write\",\n \"event_definition:read\",\n \"query:read\",\n \"survey:read\",\n \"survey:write\",\n \"error_tracking:read\",\n ],\n outputs: {\n accessToken: \"$secrets.POSTHOG_ACCESS_TOKEN\",\n refreshToken: \"$secrets.POSTHOG_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.POSTHOG_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.POSTHOG_ACCESS_TOKEN\",\n refreshToken: \"$secrets.POSTHOG_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"POSTHOG_ACCESS_TOKEN\"],\n envBindings: {\n POSTHOG_TOKEN: \"$secrets.POSTHOG_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"Personal API Key\",\n helpText:\n \"1. Log in to [PostHog](https://app.posthog.com)\\n2. Navigate to **Personal API keys** in your account settings\\n3. Click **+ Create a personal API Key**\\n4. Enter a descriptive label for the key\\n5. Choose the scopes (permissions) required for your use case\\n6. Copy the key immediately (it will not be shown again after refreshing the page)\",\n storage: {\n secrets: [\"POSTHOG_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n POSTHOG_TOKEN: {\n label: \"Personal API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"phx_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n POSTHOG_TOKEN: \"$secrets.POSTHOG_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const porkbun = {\n porkbun: {\n label: \"Porkbun\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Porkbun account to manage domains, DNS records, SSL bundles, and domain pricing through the Porkbun API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Porkbun](https://porkbun.com)\\n2. Open **Account > API Access**\\n3. Create an API key and save both the **API Key** and **Secret Key**\\n4. Enable API access for each domain you want to manage\",\n storage: {\n secrets: [\"PORKBUN_API_KEY\", \"PORKBUN_SECRET_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PORKBUN_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"pk1_...\",\n },\n PORKBUN_SECRET_API_KEY: {\n label: \"Secret Key\",\n publicId: \"secretKey\",\n required: true,\n placeholder: \"sk1_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PORKBUN_API_KEY: \"$secrets.PORKBUN_API_KEY\",\n PORKBUN_SECRET_API_KEY: \"$secrets.PORKBUN_SECRET_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const printful = {\n printful: {\n label: \"Printful\",\n category: \"data-automation-infrastructure\",\n tags: [\"ecommerce\", \"fulfillment\", \"products\", \"orders\"],\n helpText:\n \"Connect your Printful account to manage catalog data, products, orders, stores, and fulfillment workflows through the Printful API\",\n authMethods: {\n \"api-token\": {\n label: \"Private Token\",\n helpText:\n \"1. Log in to the [Printful Developer Portal](https://developers.printful.com/)\\n\" +\n \"2. Generate a **Private Token** with the scopes your workflow needs\\n\" +\n \"3. Copy the token and use it as a Bearer token\\n\\n\" +\n \"For account-level Private Tokens, Printful requires an `X-PF-Store-Id` header on store-scoped requests.\",\n storage: {\n secrets: [\"PRINTFUL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PRINTFUL_TOKEN: {\n label: \"Private Token\",\n publicId: \"token\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PRINTFUL_TOKEN: \"$secrets.PRINTFUL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const prismaPostgres = {\n \"prisma-postgres\": {\n label: \"Prisma Postgres\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Prisma Postgres database to manage schemas, run queries, and access data through Prisma's serverless database platform\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Prisma Console](https://console.prisma.io)\\n2. Go to your workspace **Settings** page\\n3. Select **Service Tokens**\\n4. Click **New Service Token**\\n5. Copy and save the generated service token securely\",\n storage: {\n secrets: [\"PRISMA_POSTGRES_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PRISMA_POSTGRES_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"eyJhbGci...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PRISMA_POSTGRES_TOKEN: \"$secrets.PRISMA_POSTGRES_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const profound = {\n profound: {\n label: \"Profound\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Profound account to access AI search visibility, citations, sentiment, fanout, prompt, agent, and Agent Analytics data\",\n tags: [\n \"aeo\",\n \"geo\",\n \"ai search\",\n \"answer engine optimization\",\n \"citations\",\n \"sentiment\",\n \"visibility\",\n ],\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Profound](https://platform.tryprofound.com)\\n2. Open **Settings** from the user menu\\n3. Select **API Keys** in the sidebar\\n4. Enter a key name and expiration date\\n5. Click **Create API Key**\\n6. Copy the generated key immediately (it will not be shown again)\",\n storage: {\n secrets: [\"PROFOUND_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PROFOUND_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-profound-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PROFOUND_API_KEY: \"$secrets.PROFOUND_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const productlane = {\n productlane: {\n label: \"Productlane\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Productlane account to manage feedback, insights, changelogs, and customer data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n storage: {\n secrets: [\"PRODUCTLANE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PRODUCTLANE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-productlane-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PRODUCTLANE_TOKEN: \"$secrets.PRODUCTLANE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const pushinator = {\n pushinator: {\n label: \"Pushinator\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Pushinator account to send push notifications to mobile devices\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n storage: {\n secrets: [\"PUSHINATOR_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n PUSHINATOR_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-pushinator-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n PUSHINATOR_TOKEN: \"$secrets.PUSHINATOR_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const qdrant = {\n qdrant: {\n label: \"Qdrant\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Qdrant account to store, search, and manage vector embeddings\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Qdrant Cloud](https://cloud.qdrant.io)\\n2. Open your cluster's detail page and go to **API Keys**\\n3. Click **Create** and configure your key\\n4. Copy the key (shown only once)\",\n storage: {\n secrets: [\"QDRANT_TOKEN\"],\n variables: [\"QDRANT_BASE_URL\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n QDRANT_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-qdrant-api-key\",\n },\n QDRANT_BASE_URL: {\n label: \"Cluster URL\",\n publicId: \"clusterUrl\",\n required: true,\n placeholder: \"https://your-cluster.region.cloud.qdrant.io:6333\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n QDRANT_TOKEN: \"$secrets.QDRANT_TOKEN\",\n QDRANT_BASE_URL: \"$vars.QDRANT_BASE_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const quickbooks = {\n quickbooks: {\n label: \"QuickBooks\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect QuickBooks Online to access accounting data, customers, invoices, bills, and reports\",\n tags: [\"accounting\", \"finance\", \"invoices\", \"intuit\", \"qbo\"],\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.QuickBooksConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Intuit to grant QuickBooks Online access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"QUICKBOOKS_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"QUICKBOOKS_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"QUICKBOOKS_ACCESS_TOKEN\", \"QUICKBOOKS_REFRESH_TOKEN\"],\n variables: [\"QUICKBOOKS_REALM_ID\"],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"com.intuit.quickbooks.accounting\",\n \"openid\",\n \"profile\",\n \"email\",\n ],\n outputs: {\n accessToken: \"$secrets.QUICKBOOKS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.QUICKBOOKS_REFRESH_TOKEN\",\n realmId: \"$vars.QUICKBOOKS_REALM_ID\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.QUICKBOOKS_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.QUICKBOOKS_ACCESS_TOKEN\",\n refreshToken: \"$secrets.QUICKBOOKS_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"QUICKBOOKS_ACCESS_TOKEN\"],\n envBindings: {\n QUICKBOOKS_TOKEN: \"$secrets.QUICKBOOKS_ACCESS_TOKEN\",\n QUICKBOOKS_REALM_ID: \"$vars.QUICKBOOKS_REALM_ID\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const qiita = {\n qiita: {\n label: \"Qiita\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Qiita account to search, read, and publish technical articles\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Log in to [Qiita](https://qiita.com)\\n2. Go to **Settings > Applications**\\n3. Create a new access token with the desired scopes (e.g., `read_qiita`, `write_qiita`)\\n4. Copy the generated token\\n5. Use it in API requests with the header `Authorization: Bearer [your_token]`\",\n storage: {\n secrets: [\"QIITA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n QIITA_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"your-qiita-access-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n QIITA_TOKEN: \"$secrets.QIITA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const railway = {\n railway: {\n label: \"Railway\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Railway account to manage projects, services, deployments, environments, and variables across every workspace your token can see\",\n authMethods: {\n \"api-token\": {\n label: \"Account or Workspace Token\",\n helpText:\n \"1. Log in to [Railway](https://railway.com)\\n2. Open your account or workspace **Settings → Tokens**\\n3. Click **Create New Token**, name it, and (for workspace tokens) pick the workspace\\n4. Copy the token (UUID v4 format)\\n\\nUse this connector for cross-project automation. For a single project, use the **Railway Project** connector instead.\",\n storage: {\n secrets: [\"RAILWAY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RAILWAY_TOKEN: {\n label: \"Account/Workspace Token\",\n publicId: \"workspaceToken\",\n required: true,\n placeholder: \"00000000-0000-0000-0000-000000000000\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RAILWAY_TOKEN: \"$secrets.RAILWAY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const railwayProject = {\n \"railway-project\": {\n label: \"Railway Project\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect a single Railway project with a project-scoped token for tighter blast radius (redeploys, variable management, deployment status inside one project/environment)\",\n authMethods: {\n \"api-token\": {\n label: \"Project Token\",\n helpText:\n \"1. Log in to [Railway](https://railway.com) and open the target project\\n2. Go to **Project Settings → Tokens**\\n3. Click **Create Token**, pick the environment, and name it\\n4. Copy the token (UUID v4 format)\\n\\nThis token is sent via the `Project-Access-Token` header and is bound to one environment in one project. For cross-project automation use the **Railway** connector instead.\",\n storage: {\n secrets: [\"RAILWAY_PROJECT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RAILWAY_PROJECT_TOKEN: {\n label: \"Project Token\",\n publicId: \"projectToken\",\n required: true,\n placeholder: \"00000000-0000-0000-0000-000000000000\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RAILWAY_PROJECT_TOKEN: \"$secrets.RAILWAY_PROJECT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const reap = {\n reap: {\n label: \"Reap\",\n category: \"sales-crm-business-operations\",\n tags: [\n \"fintech\",\n \"embedded-finance\",\n \"cards\",\n \"wallets\",\n \"payments\",\n \"compliance\",\n ],\n helpText:\n \"Connect your Reap project to manage users, companies, accounts, cards, virtual assets, activities, and reconciliations\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Contact the Reap team to obtain an API key for your project\\n2. Choose the matching API base URL for the key environment: `https://sandbox.api.reap.global/v1` or `https://prod.api.reap.global/v1`\\n3. Copy the API key\",\n storage: {\n secrets: [\"REAP_API_KEY\"],\n variables: [\"REAP_API_BASE_URL\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n REAP_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"YOUR_REAP_API_KEY\",\n },\n REAP_API_BASE_URL: {\n label: \"API Base URL\",\n publicId: \"apiBaseUrl\",\n required: true,\n placeholder: \"https://sandbox.api.reap.global/v1\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n REAP_API_KEY: \"$secrets.REAP_API_KEY\",\n REAP_API_BASE_URL: \"$vars.REAP_API_BASE_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const reddit = {\n reddit: {\n label: \"Reddit\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Reddit account to access Reddit discussions and content\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.RedditConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Reddit to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"REDDIT_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"REDDIT_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"REDDIT_ACCESS_TOKEN\", \"REDDIT_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"identity\", \"read\"],\n outputs: {\n accessToken: \"$secrets.REDDIT_ACCESS_TOKEN\",\n refreshToken: \"$secrets.REDDIT_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.REDDIT_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.REDDIT_ACCESS_TOKEN\",\n refreshToken: \"$secrets.REDDIT_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"REDDIT_ACCESS_TOKEN\"],\n envBindings: {\n REDDIT_TOKEN: \"$secrets.REDDIT_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const reducto = {\n reducto: {\n label: \"Reducto\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Reducto to parse, OCR, and chunk PDFs, scans, and complex documents into structured JSON\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in to the [Reducto Platform](https://platform.reducto.ai)\\n2. Open **Settings → API Keys**\\n3. Click **Create Key**, name it, and copy the value\\n4. Use it as a Bearer token on requests to `https://platform.reducto.ai`\",\n storage: {\n secrets: [\"REDUCTO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n REDUCTO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n REDUCTO_TOKEN: \"$secrets.REDUCTO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const recraft = {\n recraft: {\n label: \"Recraft\",\n category: \"ai-image-video\",\n generation: [\"image\"],\n helpText:\n \"Connect your Recraft account to generate, edit, and vectorize images with the Recraft API\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Sign in to [Recraft](https://app.recraft.ai)\\n2. Open your profile\\n3. Copy your API token\\n4. Paste it here.\",\n storage: {\n secrets: [\"RECRAFT_API_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RECRAFT_API_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RECRAFT_API_TOKEN: \"$secrets.RECRAFT_API_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const render = {\n render: {\n label: \"Render\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Render account to manage services, deploys, environment groups, projects, custom domains, logs, metrics, and account settings\",\n tags: [\"paas\", \"deployments\", \"hosting\", \"services\"],\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Render](https://dashboard.render.com)\\n2. Open **Account Settings > API Keys**\\n3. Create a new API key\\n4. Copy the API key immediately; Render only displays it in full when it is created\\n\\nRender API keys can access every workspace and service available to your Render account.\",\n storage: {\n secrets: [\"RENDER_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RENDER_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RENDER_API_KEY: \"$secrets.RENDER_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const replicate = {\n replicate: {\n label: \"Replicate\",\n category: \"ai-image-video\",\n generation: [\"image\", \"text\"],\n helpText:\n \"Connect your Replicate account to run open-source ML models for image generation, text generation, and more\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Sign up at [replicate.com](https://replicate.com)\\n2. Click your avatar → **API Tokens**\\n3. Click **Create token**, give it a name\\n4. Copy the token (starts with `r8_`)\\n5. Paste it here\",\n storage: {\n secrets: [\"REPLICATE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n REPLICATE_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"r8_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n REPLICATE_TOKEN: \"$secrets.REPLICATE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const reportei = {\n reportei: {\n label: \"Reportei\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Reportei account to generate and manage marketing reports with automated analytics\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Reportei](https://app.reportei.com)\\n2. Go to **Company Settings** (Configurações da Empresa)\\n3. Navigate to the **API Reportei** section\\n4. Click **Generate new token** or copy your existing token\",\n storage: {\n secrets: [\"REPORTEI_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n REPORTEI_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-reportei-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n REPORTEI_TOKEN: \"$secrets.REPORTEI_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const resend = {\n resend: {\n label: \"Resend\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Resend account to send transactional emails, manage domains, audiences, and contacts\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Resend](https://resend.com)\\n2. Navigate to the [API Keys](https://resend.com/api-keys) page\\n3. Click **Create API Key**\\n4. Enter a name for your key (up to 50 characters)\\n5. Select the permission level: **Full access** or **Sending access**\\n6. If choosing sending access, select which domain the key can access\\n7. Copy the generated API key\",\n storage: {\n secrets: [\"RESEND_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RESEND_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"re_xxxxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RESEND_TOKEN: \"$secrets.RESEND_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const rentcast = {\n rentcast: {\n label: \"RentCast\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your RentCast account to retrieve US property records, listings, valuations, rent estimates, and market data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [RentCast API dashboard](https://app.rentcast.io/app/api)\\n2. Click **Create API Key**\\n3. Copy the generated API key\",\n storage: {\n secrets: [\"RENTCAST_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RENTCAST_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-rentcast-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RENTCAST_API_KEY: \"$secrets.RENTCAST_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const revenuecat = {\n revenuecat: {\n label: \"RevenueCat\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your RevenueCat account to manage in-app subscriptions, purchases, and customer data\",\n authMethods: {\n \"api-token\": {\n label: \"Secret API Key\",\n helpText:\n \"1. Log in to [RevenueCat](https://app.revenuecat.com)\\n2. Navigate to the **API keys** section in your project dashboard\\n3. Public API keys are automatically created when you add an app to your project\\n4. To create a secret API key, click **+ New secret API key** in the API keys section\\n5. Copy and store the key securely (never embed secret keys in client-side code)\",\n storage: {\n secrets: [\"REVENUECAT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n REVENUECAT_TOKEN: {\n label: \"Secret API Key\",\n publicId: \"secretApiKey\",\n required: true,\n placeholder: \"sk_xxxxxxxxxxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n REVENUECAT_TOKEN: \"$secrets.REVENUECAT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const runway = {\n runway: {\n label: \"Runway\",\n category: \"ai-image-video\",\n generation: [\"video\"],\n helpText:\n \"Connect your Runway account to generate AI videos from images, text, or video inputs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up for an account in the [Runway Developer Portal](https://dev.runwayml.com/)\\n2. After signing up, create a new organization\\n3. Click to the **API Keys** tab\\n4. Create a new key, giving it a descriptive name\\n5. Copy the key immediately and store it in a safe place — it will only be shown once\",\n storage: {\n secrets: [\"RUNWAY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n RUNWAY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-runway-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n RUNWAY_TOKEN: \"$secrets.RUNWAY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const salesforce = {\n salesforce: {\n label: \"Salesforce\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Salesforce account to manage CRM data, contacts, leads, and sales workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n storage: {\n secrets: [\"SALESFORCE_TOKEN\"],\n variables: [\"SALESFORCE_INSTANCE\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SALESFORCE_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"00D...\",\n },\n SALESFORCE_INSTANCE: {\n label: \"Instance\",\n publicId: \"instance\",\n required: true,\n placeholder: \"mycompany\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SALESFORCE_TOKEN: \"$secrets.SALESFORCE_TOKEN\",\n SALESFORCE_INSTANCE: \"$vars.SALESFORCE_INSTANCE\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const scrapeninja = {\n scrapeninja: {\n label: \"ScrapeNinja\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your ScrapeNinja account to scrape web pages with Chrome TLS fingerprint and JS rendering\",\n authMethods: {\n \"api-token\": {\n label: \"RapidAPI Key\",\n storage: {\n secrets: [\"SCRAPENINJA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SCRAPENINJA_TOKEN: {\n label: \"RapidAPI Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SCRAPENINJA_TOKEN: \"$secrets.SCRAPENINJA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const segment = {\n segment: {\n label: \"Segment\",\n category: \"data-automation-infrastructure\",\n tags: [\"cdp\", \"analytics\", \"events\", \"tracking\", \"sources\", \"destinations\"],\n helpText:\n \"Connect your Segment workspace to manage sources, destinations, tracking plans, and data pipeline configuration through the Public API\",\n authMethods: {\n \"api-token\": {\n label: \"Public API Token\",\n helpText:\n \"1. Log in to [Segment](https://app.segment.com)\\n2. Open the workspace you want to manage\\n3. Create a Public API token with the permissions required for your workflow\\n4. Copy the token\",\n storage: {\n secrets: [\"SEGMENT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SEGMENT_TOKEN: {\n label: \"Public API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-segment-public-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SEGMENT_TOKEN: \"$secrets.SEGMENT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const semrush = {\n semrush: {\n label: \"Semrush\",\n category: \"marketing-content-growth\",\n tags: [\n \"seo\",\n \"search marketing\",\n \"keyword research\",\n \"traffic analytics\",\n \"competitive intelligence\",\n ],\n helpText:\n \"Connect your Semrush account to access SEO, keyword, domain, traffic, and competitive research data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Semrush](https://www.semrush.com)\\n2. Click your profile icon in the top-right corner\\n3. Select **Subscription info**, then open the **API Units** tab\\n4. Copy your API key\",\n storage: {\n secrets: [\"SEMRUSH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SEMRUSH_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-semrush-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SEMRUSH_TOKEN: \"$secrets.SEMRUSH_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const sendgrid = {\n sendgrid: {\n label: \"SendGrid\",\n category: \"marketing-content-growth\",\n tags: [\"email\", \"transactional\", \"marketing\", \"twilio\"],\n helpText:\n \"Connect your Twilio SendGrid account to send transactional and marketing email, manage templates, contacts, and suppressions\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [SendGrid](https://app.sendgrid.com) and open **Settings > API Keys**\\n2. Click **Create API Key**, name it (e.g. `vm0`), and pick **Full Access** or a scoped permission set covering Mail Send, Templates, and Suppressions\\n3. Click **Create & View** and copy the API key — it is shown only once\\n4. Paste the key below (starts with `SG.`)\",\n storage: {\n secrets: [\"SENDGRID_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SENDGRID_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"SG.xxxxxxxxxxxxxxxxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SENDGRID_TOKEN: \"$secrets.SENDGRID_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const serpapi = {\n serpapi: {\n label: \"SerpApi\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your SerpApi account to search Google, Bing, YouTube and other search engines programmatically\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to [SerpApi](https://serpapi.com) and sign up for an account (free plan available with 250 searches/month)\\n2. Log in and go to your [Dashboard](https://serpapi.com/dashboard)\\n3. Your API key is displayed on the dashboard\\n4. Copy the API key\",\n storage: {\n secrets: [\"SERPAPI_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SERPAPI_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-serpapi-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SERPAPI_TOKEN: \"$secrets.SERPAPI_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const servicenow = {\n servicenow: {\n label: \"ServiceNow\",\n category: \"engineering-team-execution\",\n tags: [\"itsm\", \"incident\", \"change-request\", \"cmdb\", \"now-platform\"],\n helpText:\n \"Connect your ServiceNow instance to query and update incidents, change requests, the CMDB, and any other table via the Table API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In ServiceNow, create (or pick) a dedicated service user with the roles the integration needs — `itil` for incident/change, `cmdb_read` for CMDB, etc.\\n2. Set a password on that user under **User Administration → Users**\\n3. Enter the username, password, and your ServiceNow instance subdomain — the prefix of `https://<subdomain>.service-now.com`\",\n storage: {\n secrets: [\"SERVICENOW_USERNAME\", \"SERVICENOW_PASSWORD\"],\n variables: [\"SERVICENOW_INSTANCE\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SERVICENOW_USERNAME: {\n label: \"Username\",\n publicId: \"username\",\n required: true,\n placeholder: \"service-account-user\",\n },\n SERVICENOW_PASSWORD: {\n label: \"Password\",\n publicId: \"password\",\n required: true,\n placeholder: \"service-account-password\",\n },\n SERVICENOW_INSTANCE: {\n label: \"Instance\",\n publicId: \"instance\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-subdomain\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SERVICENOW_USERNAME: \"$secrets.SERVICENOW_USERNAME\",\n SERVICENOW_PASSWORD: \"$secrets.SERVICENOW_PASSWORD\",\n SERVICENOW_INSTANCE: \"$vars.SERVICENOW_INSTANCE\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const shopify = {\n shopify: {\n label: \"Shopify\",\n category: \"data-automation-infrastructure\",\n tags: [\"ecommerce\", \"store\", \"products\", \"orders\"],\n helpText:\n \"Connect your Shopify store to manage products, orders, customers, and inventory through the Admin API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In your Shopify admin, go to **Settings → Apps and sales channels → Develop apps**\\n2. Click **Create an app**, name it (e.g. `vm0`), and open it\\n3. Under **Configuration → Admin API integration**, grant the scopes you need (e.g. `read_products`, `read_orders`)\\n4. Click **Install app** and then **Reveal token once** — copy the Admin API access token (starts with `shpat_`)\\n5. For the **Store subdomain** below, enter only the subdomain of your `.myshopify.com` URL (for `acme.myshopify.com` enter `acme`)\",\n storage: {\n secrets: [\"SHOPIFY_TOKEN\"],\n variables: [\"SHOPIFY_SHOP\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SHOPIFY_TOKEN: {\n label: \"Admin API Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"shpat_...\",\n },\n SHOPIFY_SHOP: {\n label: \"Store Subdomain\",\n publicId: \"subdomain\",\n required: true,\n storage: \"variable\",\n placeholder: \"acme\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SHOPIFY_TOKEN: \"$secrets.SHOPIFY_TOKEN\",\n SHOPIFY_SHOP: \"$vars.SHOPIFY_SHOP\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const shortio = {\n shortio: {\n label: \"Short.io\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Short.io account to create and manage short links and track click analytics\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Short.io](https://short.io) Dashboard\\n2. Navigate to **Integrations and API**\\n3. Click on **Create API key**\\n4. Leave the **Public key** option disabled to create a private (secret) key\\n5. Restrict the scope of the key to a specific team or domain\\n6. Click **Create**\\n7. Copy the key and store it in a safe place — secret keys cannot be recovered\",\n storage: {\n secrets: [\"SHORTIO_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SHORTIO_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-shortio-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SHORTIO_TOKEN: \"$secrets.SHORTIO_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const similarweb = {\n similarweb: {\n label: \"SimilarWeb\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your SimilarWeb account to access website traffic analytics, competitive intelligence, and market insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Similarweb platform](https://pro.similarweb.com/) (admin access required)\\n2. From the main menu on the left, select **Settings & Help**, then select **Account**\\n3. Under **Data Tools**, select either **REST API** or **Batch API**\\n4. Click **Generate a New API Key** on the right\\n5. Type the name of the API key, then select whether this is for yourself or another user\\n6. Click **Create** — your key will be displayed in the Generated Keys table\\n7. In the Generated Keys table, ensure the **Activation** toggle is on for the relevant API key\",\n storage: {\n secrets: [\"SIMILARWEB_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SIMILARWEB_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-similarweb-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SIMILARWEB_TOKEN: \"$secrets.SIMILARWEB_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const slackWebhook = {\n \"slack-webhook\": {\n label: \"Slack Webhook\",\n category: \"communication-collaboration\",\n helpText: \"Connect a Slack incoming webhook to send messages to channels\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n helpText:\n \"1. Create a [Slack app](https://api.slack.com/apps) (or use an existing one), choosing a workspace to associate it with\\n2. From the app settings page, select **Incoming Webhooks**\\n3. Toggle **Activate Incoming Webhooks** to on\\n4. Click **Add New Webhook to Workspace**\\n5. Pick a channel for the app to post to, then click **Authorize**\\n6. Copy the webhook URL from the **Webhook URLs for Your Workspace** section (it will look like `https://hooks.slack.com/services/T.../B.../XXXX...`)\",\n storage: {\n secrets: [\"SLACK_WEBHOOK_URL\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SLACK_WEBHOOK_URL: {\n label: \"Webhook URL\",\n publicId: \"url\",\n required: true,\n placeholder: \"https://hooks.slack.com/services/xxx/xxx/xxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SLACK_WEBHOOK_URL: \"$secrets.SLACK_WEBHOOK_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const snowflake = {\n snowflake: {\n label: \"Snowflake\",\n category: \"data-automation-infrastructure\",\n tags: [\"data-warehouse\", \"warehouse\", \"sql\", \"analytics\", \"database\"],\n helpText:\n \"Connect your Snowflake account to run SQL statements and call Snowflake REST APIs for databases, schemas, tables, warehouses, and account metadata\",\n authMethods: {\n \"api-token\": {\n label: \"Programmatic Access Token\",\n helpText:\n \"1. In Snowflake, generate a programmatic access token for the user or service user that should own the connection\\n2. Copy the generated token secret when Snowflake displays it\\n3. Enter your Snowflake account identifier, for example `myorganization-myaccount` from `https://myorganization-myaccount.snowflakecomputing.com`\",\n storage: {\n secrets: [\"SNOWFLAKE_PAT\"],\n variables: [\"SNOWFLAKE_ACCOUNT\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SNOWFLAKE_PAT: {\n label: \"Programmatic Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"your-snowflake-pat\",\n },\n SNOWFLAKE_ACCOUNT: {\n label: \"Account Identifier\",\n publicId: \"accountId\",\n required: true,\n placeholder: \"myorganization-myaccount\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SNOWFLAKE_PAT: \"$secrets.SNOWFLAKE_PAT\",\n SNOWFLAKE_ACCOUNT: \"$vars.SNOWFLAKE_ACCOUNT\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const sociavault = {\n sociavault: {\n label: \"SociaVault\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect SociaVault to extract public social media, ad library, and Google Search data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up or log in to the [SociaVault Dashboard](https://sociavault.com)\\n2. Copy your API key\\n3. SociaVault authenticates requests with the `X-API-Key` header\",\n storage: {\n secrets: [\"SOCIAVAULT_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SOCIAVAULT_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SOCIAVAULT_TOKEN: \"$secrets.SOCIAVAULT_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const sponge = {\n sponge: {\n label: \"Sponge\",\n category: \"sales-crm-business-operations\",\n tags: [\"wallet\", \"payments\", \"agent-economy\", \"x402\", \"mpp\", \"crypto\"],\n helpText:\n \"Connect Sponge to give agents wallets, cards, bank accounts, and pay x402 / MPP endpoints\",\n authMethods: {\n \"api-token\": {\n label: \"Master API Key\",\n helpText:\n \"1. Sign in to the [Sponge Wallet dashboard](https://wallet.paysponge.com)\\n2. Open **Settings → Master API Keys**\\n3. Click **Create master key**, name it, and copy the value (prefix `sponge_master_...`)\\n\\nThe master key is the platform credential. Sponge agent runtime keys are minted on demand through it — store the master key once and never embed it in agent traffic.\",\n storage: {\n secrets: [\"SPONGE_MASTER_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SPONGE_MASTER_KEY: {\n label: \"Master API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sponge_master_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SPONGE_MASTER_KEY: \"$secrets.SPONGE_MASTER_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const sproutgigs = {\n sproutgigs: {\n label: \"SproutGigs\",\n category: \"marketing-content-growth\",\n tags: [\n \"microtasks\",\n \"jobs\",\n \"gigs\",\n \"freelancers\",\n \"crowdsourcing\",\n \"picoworkers\",\n ],\n helpText:\n \"Connect SproutGigs to manage buyer jobs, gigs, freelancer lists, profiles, balances, and task reviews through the SproutGigs API\",\n authMethods: {\n \"api-token\": {\n label: \"API Secret\",\n helpText:\n \"1. Log in to [SproutGigs](https://sproutgigs.com)\\n2. Open **Account Settings** and go to the **Settings** tab\\n3. Create or reset your API secret\\n4. Enter your SproutGigs user ID and API secret. SproutGigs signs requests with HTTP Basic Auth using `USER_ID:API_SECRET`.\",\n storage: {\n secrets: [\"SPROUTGIGS_API_SECRET\"],\n variables: [\"SPROUTGIGS_USER_ID\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SPROUTGIGS_USER_ID: {\n label: \"User ID\",\n publicId: \"userId\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-user-id\",\n },\n SPROUTGIGS_API_SECRET: {\n label: \"API Secret\",\n publicId: \"apiSecret\",\n required: true,\n placeholder: \"your-sproutgigs-api-secret\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SPROUTGIGS_USER_ID: \"$vars.SPROUTGIGS_USER_ID\",\n SPROUTGIGS_API_SECRET: \"$secrets.SPROUTGIGS_API_SECRET\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const square = {\n square: {\n label: \"Square\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Square account to manage payments, refunds, orders, customers, catalog, invoices, and inventory\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n helpText:\n \"1. Sign in to the [Square Developer Console](https://developer.squareup.com/apps)\\n2. Open (or create) an application\\n3. In the left pane, choose **Credentials**\\n4. At the top of the page, select **Production**\\n5. Copy the **Production Access token** (format: `EAAA...`)\",\n storage: {\n secrets: [\"SQUARE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SQUARE_TOKEN: {\n label: \"Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"EAAA...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SQUARE_TOKEN: \"$secrets.SQUARE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const stabilityAi = {\n \"stability-ai\": {\n label: \"Stability AI\",\n category: \"ai-image-video\",\n generation: [\"image\"],\n helpText:\n \"Connect your Stability AI account to generate images using Stable Diffusion models\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up at [platform.stability.ai](https://platform.stability.ai)\\n2. Go to **Account → API Keys → Create API Key**\\n3. Copy the key (starts with `sk-`). Paste here. Free credits on signup.\",\n storage: {\n secrets: [\"STABILITY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n STABILITY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n STABILITY_TOKEN: \"$secrets.STABILITY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const strapi = {\n strapi: {\n label: \"Strapi\",\n category: \"docs-files-knowledge\",\n helpText:\n \"Connect your Strapi CMS to manage content types, entries, and media via Strapi's REST API\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to your Strapi admin panel\\n2. Go to **Settings → API Tokens**\\n3. Click **Create new API Token**\\n4. Enter a name, select a token duration, and choose a token type (Full Access or Custom)\\n5. Click **Save** and copy the generated token\",\n storage: {\n secrets: [\"STRAPI_TOKEN\"],\n variables: [\"STRAPI_BASE_URL\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n STRAPI_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n },\n STRAPI_BASE_URL: {\n label: \"Base URL\",\n publicId: \"baseUrl\",\n required: true,\n placeholder: \"https://your-strapi.example.com\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n STRAPI_TOKEN: \"$secrets.STRAPI_TOKEN\",\n STRAPI_BASE_URL: \"$vars.STRAPI_BASE_URL\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const streak = {\n streak: {\n label: \"Streak\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Streak account to manage CRM pipelines, contacts, and deals inside Gmail\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Install the Streak extension and navigate to [Gmail](https://mail.google.com)\\n2. Click on the Streak icon in the right sidebar\\n3. Select the **Integrations** button\\n4. Under the **Streak API** section, click **Create New Key**\\n5. Copy and store the API key securely\",\n storage: {\n secrets: [\"STREAK_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n STREAK_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-streak-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n STREAK_TOKEN: \"$secrets.STREAK_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const stripe = {\n stripe: {\n label: \"Stripe\",\n category: \"data-automation-infrastructure\",\n tags: [\"payments\", \"billing\", \"checkout\"],\n helpText:\n \"Connect your Stripe account to manage payments, customers, and subscriptions\",\n authMethods: {\n oauth: {\n showExperimentalLabel: false,\n label: \"Sign in with Stripe\",\n helpText: \"Sign in with Stripe to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"STRIPE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"STRIPE_SECRET_KEY\",\n },\n storage: {\n secrets: [\"STRIPE_ACCESS_TOKEN\", \"STRIPE_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\"read_write\"],\n outputs: {\n accessToken: \"$secrets.STRIPE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.STRIPE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.STRIPE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.STRIPE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.STRIPE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"STRIPE_ACCESS_TOKEN\"],\n envBindings: {\n STRIPE_TOKEN: \"$secrets.STRIPE_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your [Stripe Dashboard](https://dashboard.stripe.com/apikeys)\\n2. Go to **Developers > API keys**\\n3. Reveal the **Secret key** (starts with `sk_live_` or `sk_test_`) or create a **Restricted key** (`rk_live_...`) with the scopes you need\\n4. Copy the key\",\n storage: {\n secrets: [\"STRIPE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n STRIPE_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk_live_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n STRIPE_TOKEN: \"$secrets.STRIPE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n cli: {\n label: \"Sign in with Stripe\",\n helpText:\n \"Approve access in the Stripe Dashboard so vm0 can import a restricted API key.\",\n client: {\n clientRegistration: \"dynamic\",\n clientType: \"public\",\n },\n storage: {\n secrets: [\"STRIPE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"device-auth\",\n scopes: [],\n outputs: {\n token: \"$secrets.STRIPE_TOKEN\",\n },\n startOptions: {\n mode: {\n kind: \"select\",\n label: \"Mode\",\n publicId: \"mode\",\n required: true,\n defaultValue: \"test\",\n options: [\n { value: \"test\", label: \"Test\" },\n { value: \"live\", label: \"Live\" },\n ],\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n STRIPE_TOKEN: \"$secrets.STRIPE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const supabase = {\n supabase: {\n label: \"Supabase\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Supabase account to manage projects, databases, and APIs\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.SupabaseConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Supabase to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"SUPABASE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"SUPABASE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"SUPABASE_ACCESS_TOKEN\", \"SUPABASE_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"organizations:read\",\n \"projects:read\",\n \"projects:write\",\n \"database:read\",\n \"database:write\",\n \"secrets:read\",\n \"rest:read\",\n \"rest:write\",\n \"auth:read\",\n \"analytics:read\",\n \"environment:read\",\n \"domains:read\",\n ],\n outputs: {\n accessToken: \"$secrets.SUPABASE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SUPABASE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.SUPABASE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.SUPABASE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.SUPABASE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"SUPABASE_ACCESS_TOKEN\"],\n envBindings: {\n SUPABASE_TOKEN: \"$secrets.SUPABASE_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"Service Role Key\",\n helpText:\n \"1. Log in to the [Supabase Dashboard](https://supabase.com/dashboard)\\n2. Open your project's **Connect** dialog, or go to **Project Settings > API Keys**\\n3. For legacy keys, copy the `anon` key (for client-side) or `service_role` key (for server-side) from the **Legacy API Keys** tab\\n4. For new keys, open the **API Keys** tab, click **Create new API Keys** if needed, and copy the value from the **Publishable key** section\",\n storage: {\n secrets: [\"SUPABASE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SUPABASE_TOKEN: {\n label: \"Service Role Key\",\n publicId: \"serviceRoleKey\",\n required: true,\n placeholder: \"eyJhbGci... or sb_secret_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SUPABASE_TOKEN: \"$secrets.SUPABASE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const supadata = {\n supadata: {\n label: \"Supadata\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Supadata account to extract YouTube transcripts, channel data, and video metadata\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to the [Supadata Dashboard](https://dash.supadata.ai)\\n2. Sign up for an account (no credit card required)\\n3. Your API key will be generated automatically\\n4. Use it in API requests with the header `x-api-key: [your_api_key]`\",\n storage: {\n secrets: [\"SUPADATA_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SUPADATA_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-supadata-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SUPADATA_TOKEN: \"$secrets.SUPADATA_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const supermemory = {\n supermemory: {\n label: \"Supermemory\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect to Supermemory for AI agent memory, semantic recall, and managed RAG.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"Go to [console.supermemory.ai](https://console.supermemory.ai) → **API Keys** → create or copy your key.\",\n storage: {\n secrets: [\"SUPERMEMORY_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n SUPERMEMORY_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sm_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n SUPERMEMORY_API_KEY: \"$secrets.SUPERMEMORY_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const tavily = {\n tavily: {\n label: \"Tavily\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Tavily account to perform AI-optimized web searches and content extraction\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to [app.tavily.com](https://app.tavily.com/) and sign up for a free account\\n2. After signing in, your API key will be available on the dashboard\\n3. Copy the API key (it will start with `tvly-`)\",\n storage: {\n secrets: [\"TAVILY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TAVILY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"tvly-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TAVILY_TOKEN: \"$secrets.TAVILY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type {\n ConnectorAuthClientConfig,\n ConnectorAuthCodeGrantConfig,\n ConnectorConfig,\n ConnectorManualGrantConfig,\n ConnectorRevokeConfig,\n} from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nconst TEST_OAUTH_CLIENT = {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientId: \"test-oauth-client\",\n clientSecret: \"test-oauth-secret\",\n} satisfies ConnectorAuthClientConfig;\n\nconst TEST_OAUTH_AUTH_CODE_GRANT = {\n kind: \"auth-code\",\n scopes: [\"read\"],\n callbackOrigin: \"api\",\n outputs: {\n accessToken: \"$secrets.TEST_OAUTH_ACCESS_TOKEN\",\n refreshToken: \"$secrets.TEST_OAUTH_REFRESH_TOKEN\",\n tenantId: \"$vars.TEST_OAUTH_API_TENANT_ID\",\n },\n} as const satisfies ConnectorAuthCodeGrantConfig;\n\nconst TEST_OAUTH_API_AUTH_CODE_GRANT = {\n kind: \"auth-code\",\n scopes: [\"read\"],\n callbackOrigin: \"api\",\n outputs: {\n initialAccessToken: \"$secrets.TEST_OAUTH_API_ACCESS_TOKEN\",\n initialRefreshToken: \"$secrets.TEST_OAUTH_API_REFRESH_TOKEN\",\n tenantId: \"$vars.TEST_OAUTH_API_TENANT_ID\",\n },\n} as const satisfies ConnectorAuthCodeGrantConfig;\n\nconst TEST_OAUTH_API_TOKEN_MANUAL_GRANT = {\n kind: \"manual\",\n fields: {\n TEST_OAUTH_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"test-oauth-token\",\n },\n TEST_OAUTH_API_TOKEN_INPUT_VAR: {\n label: \"Input Variable\",\n publicId: \"inputVariable\",\n required: true,\n placeholder: \"test-input-variable\",\n storage: \"variable\",\n },\n TEST_OAUTH_API_TENANT_ID: {\n label: \"Tenant ID\",\n publicId: \"tenantId\",\n required: true,\n placeholder: \"test-oauth-tenant\",\n storage: \"variable\",\n },\n },\n} as const satisfies ConnectorManualGrantConfig;\n\nconst TEST_OAUTH_REVOKE = { kind: \"none\" } satisfies ConnectorRevokeConfig;\n\nexport const testOauth = {\n \"test-oauth\": {\n label: \"Test OAuth (internal)\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Synthetic OAuth 2.0 connector served by this app itself. For automated tests only — not a real third-party service.\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.TestOauthConnector,\n label: \"OAuth\",\n helpText: \"Test-only OAuth provider. Only reachable in dev/preview.\",\n client: TEST_OAUTH_CLIENT,\n storage: {\n secrets: [\"TEST_OAUTH_ACCESS_TOKEN\", \"TEST_OAUTH_REFRESH_TOKEN\"],\n variables: [\"TEST_OAUTH_API_TENANT_ID\"],\n },\n grant: TEST_OAUTH_AUTH_CODE_GRANT,\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.TEST_OAUTH_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.TEST_OAUTH_ACCESS_TOKEN\",\n refreshToken: \"$secrets.TEST_OAUTH_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"TEST_OAUTH_ACCESS_TOKEN\"],\n envBindings: {\n TEST_OAUTH_TOKEN: \"$secrets.TEST_OAUTH_ACCESS_TOKEN\",\n TEST_OAUTH_TENANT_ID: \"$vars.TEST_OAUTH_API_TENANT_ID\",\n },\n },\n revoke: TEST_OAUTH_REVOKE,\n },\n api: {\n featureFlag: FeatureSwitchKey.TestOauthConnector,\n label: \"API OAuth\",\n helpText:\n \"Secondary test-only OAuth method used to exercise method-aware provider registration.\",\n client: TEST_OAUTH_CLIENT,\n storage: {\n secrets: [\n \"TEST_OAUTH_API_ACCESS_TOKEN\",\n \"TEST_OAUTH_API_REFRESH_TOKEN\",\n \"TEST_OAUTH_API_SECONDARY_TOKEN\",\n ],\n variables: [\"TEST_OAUTH_API_TENANT_ID\"],\n },\n grant: TEST_OAUTH_API_AUTH_CODE_GRANT,\n access: {\n kind: \"refresh-token\",\n inputs: {\n apiRefreshToken: \"$secrets.TEST_OAUTH_API_REFRESH_TOKEN\",\n tenantId: \"$vars.TEST_OAUTH_API_TENANT_ID\",\n },\n outputs: {\n refreshedAccessToken: \"$secrets.TEST_OAUTH_API_ACCESS_TOKEN\",\n refreshedRefreshToken: \"$secrets.TEST_OAUTH_API_REFRESH_TOKEN\",\n secondaryToken: \"$secrets.TEST_OAUTH_API_SECONDARY_TOKEN\",\n refreshedTenantId: \"$vars.TEST_OAUTH_API_TENANT_ID\",\n },\n refreshableSecrets: [\"TEST_OAUTH_API_ACCESS_TOKEN\"],\n envBindings: {\n TEST_OAUTH_TOKEN: \"$secrets.TEST_OAUTH_API_ACCESS_TOKEN\",\n TEST_OAUTH_TENANT_ID: \"$vars.TEST_OAUTH_API_TENANT_ID\",\n },\n },\n revoke: TEST_OAUTH_REVOKE,\n },\n \"api-token\": {\n featureFlag: FeatureSwitchKey.TestOauthConnector,\n label: \"API Token\",\n helpText:\n \"Test-only manual method used to exercise refreshable access without a platform auth client.\",\n storage: {\n secrets: [\"TEST_OAUTH_TOKEN\", \"TEST_OAUTH_API_TOKEN_ACCESS_TOKEN\"],\n variables: [\n \"TEST_OAUTH_API_TOKEN_INPUT_VAR\",\n \"TEST_OAUTH_API_TENANT_ID\",\n ],\n },\n grant: TEST_OAUTH_API_TOKEN_MANUAL_GRANT,\n access: {\n kind: \"refresh-token\",\n inputs: {\n inputSecret: \"$secrets.TEST_OAUTH_TOKEN\",\n inputVariable: \"$vars.TEST_OAUTH_API_TOKEN_INPUT_VAR\",\n },\n outputs: {\n accessToken: \"$secrets.TEST_OAUTH_API_TOKEN_ACCESS_TOKEN\",\n },\n refreshableSecrets: [\"TEST_OAUTH_API_TOKEN_ACCESS_TOKEN\"],\n envBindings: {\n TEST_OAUTH_API_TOKEN: \"$secrets.TEST_OAUTH_API_TOKEN_ACCESS_TOKEN\",\n TEST_OAUTH_TENANT_ID: \"$vars.TEST_OAUTH_API_TENANT_ID\",\n },\n },\n revoke: TEST_OAUTH_REVOKE,\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const testOauthDevice = {\n \"test-oauth-device\": {\n label: \"Test OAuth Device (internal)\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Synthetic OAuth 2.0 device authorization connector. For automated tests only.\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.TestOauthConnector,\n label: \"OAuth Device Authorization\",\n helpText: \"Test-only OAuth device provider.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"public\",\n clientId: \"test-oauth-device-client\",\n },\n storage: {\n secrets: [\"TEST_OAUTH_DEVICE_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"device-auth\",\n scopes: [\"read\"],\n outputs: {\n accessToken: \"$secrets.TEST_OAUTH_DEVICE_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TEST_OAUTH_DEVICE_TOKEN: \"$secrets.TEST_OAUTH_DEVICE_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n api: {\n featureFlag: FeatureSwitchKey.TestOauthConnector,\n label: \"API Device Authorization\",\n helpText:\n \"Secondary test-only OAuth device method used to exercise method-aware device authorization sessions.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"public\",\n clientId: \"test-oauth-device-api-client\",\n },\n storage: {\n secrets: [\"TEST_OAUTH_DEVICE_API_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"device-auth\",\n scopes: [\"read\"],\n outputs: {\n accessToken: \"$secrets.TEST_OAUTH_DEVICE_API_ACCESS_TOKEN\",\n },\n startOptions: {\n mode: {\n kind: \"select\",\n label: \"Mode\",\n publicId: \"mode\",\n required: true,\n defaultValue: \"test\",\n options: [\n { value: \"test\", label: \"Test\" },\n { value: \"live\", label: \"Live\" },\n ],\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TEST_OAUTH_DEVICE_API_TOKEN:\n \"$secrets.TEST_OAUTH_DEVICE_API_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const testrail = {\n testrail: {\n label: \"TestRail\",\n category: \"engineering-team-execution\",\n tags: [\"qa\", \"testing\", \"test-cases\", \"test-management\", \"gurock\"],\n helpText:\n \"Connect your TestRail account to manage test cases, runs, and results across projects\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. In TestRail, open **My Settings** (top-right user menu) → **API Keys**\\n2. Click **Add Key**, name it (e.g. `vm0`), copy the generated key\\n3. Enter the email you log in with, the generated API key, and your TestRail instance subdomain — the prefix of `https://<subdomain>.testrail.io`\\n4. If your team self-hosts TestRail Server, set `TESTRAIL_INSTANCE` to the full host (e.g. `tests.example.com`) — the firewall accepts both forms\",\n storage: {\n secrets: [\"TESTRAIL_EMAIL\", \"TESTRAIL_TOKEN\"],\n variables: [\"TESTRAIL_INSTANCE\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TESTRAIL_EMAIL: {\n label: \"Email\",\n publicId: \"email\",\n required: true,\n placeholder: \"you@example.com\",\n },\n TESTRAIL_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-testrail-api-key\",\n },\n TESTRAIL_INSTANCE: {\n label: \"Instance\",\n publicId: \"instance\",\n required: true,\n storage: \"variable\",\n placeholder: \"your-subdomain\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TESTRAIL_EMAIL: \"$secrets.TESTRAIL_EMAIL\",\n TESTRAIL_TOKEN: \"$secrets.TESTRAIL_TOKEN\",\n TESTRAIL_INSTANCE: \"$vars.TESTRAIL_INSTANCE\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const ticketmaster = {\n ticketmaster: {\n label: \"Ticketmaster\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect Ticketmaster to search events, attractions, venues, and classifications with the Discovery API\",\n authMethods: {\n \"api-token\": {\n label: \"Discovery API Key\",\n helpText:\n \"1. Log in to the [Ticketmaster Developer Portal](https://developer.ticketmaster.com)\\n2. Open your application in **My Apps**\\n3. Copy the **Consumer Key** for the Discovery API\\n4. Use it as the `apikey` query parameter for Discovery API requests\",\n storage: {\n secrets: [\"TICKETMASTER_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TICKETMASTER_API_KEY: {\n label: \"Discovery API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-ticketmaster-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TICKETMASTER_API_KEY: \"$secrets.TICKETMASTER_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const tldv = {\n tldv: {\n label: \"tl;dv\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your tl;dv account to access meeting recordings, transcripts, and AI-generated notes\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Ensure you have a **Business Plan** subscription on [tldv](https://tldv.io)\\n2. API and webhook access is only available on the Business Plan\\n3. Contact support at **support@tldv.io** to request API access and obtain your credentials\",\n storage: {\n secrets: [\"TLDV_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TLDV_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-tldv-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TLDV_TOKEN: \"$secrets.TLDV_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const together = {\n together: {\n label: \"Together AI\",\n category: \"ai-general-models\",\n generation: [\"image\", \"text\"],\n helpText:\n \"Connect your Together AI account to run open-source models (Llama, Qwen, FLUX) via an OpenAI-compatible API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign up at [api.together.ai](https://api.together.ai)\\n2. Go to **Settings → API Keys**\\n3. Click **Create API Key**\\n4. Copy the key. Paste it here. Free $1 credit on signup.\",\n storage: {\n secrets: [\"TOGETHER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TOGETHER_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder:\n \"c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ff\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TOGETHER_TOKEN: \"$secrets.TOGETHER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const tripo = {\n tripo: {\n label: \"Tripo\",\n category: \"ai-image-video\",\n generation: [\"image\"],\n helpText:\n \"Connect your Tripo account to generate 3D models from text or images via the Tripo 3D API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Sign in at [platform.tripo3d.ai](https://platform.tripo3d.ai)\\n2. Open **API Keys**\\n3. Click **Create API Key**\\n4. Copy the key (it begins with `tsk_`). It is shown only once. Paste it here.\",\n storage: {\n secrets: [\"TRIPO_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TRIPO_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"tsk_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoc\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TRIPO_API_KEY: \"$secrets.TRIPO_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const twenty = {\n twenty: {\n label: \"Twenty\",\n category: \"sales-crm-business-operations\",\n helpText:\n \"Connect your Twenty CRM account to manage contacts, companies, and deals\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your [Twenty](https://twenty.com) workspace\\n2. Go to **Settings > APIs & Webhooks**\\n3. Click **+ Create key**\\n4. Enter a descriptive **Name** and set an **Expiration Date**\\n5. Click **Save**\\n6. Copy the key immediately — it is only shown once\",\n storage: {\n secrets: [\"TWENTY_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TWENTY_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-twenty-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TWENTY_TOKEN: \"$secrets.TWENTY_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const twilio = {\n twilio: {\n label: \"Twilio\",\n category: \"communication-collaboration\",\n tags: [\"sms\", \"voice\", \"whatsapp\", \"verify\", \"lookup\", \"messaging\"],\n helpText:\n \"Connect your Twilio account to send SMS / WhatsApp / MMS, place voice calls, look up phone numbers, and run Verify OTP flows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Open the [Twilio Console](https://console.twilio.com) — your **Account SID** is shown on the dashboard\\n2. Click **View** next to **Auth Token** to reveal the live auth token\\n3. Copy both values and paste them below — the SID always starts with `AC`\",\n storage: {\n secrets: [\"TWILIO_ACCOUNT_SID\", \"TWILIO_AUTH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TWILIO_ACCOUNT_SID: {\n label: \"Account SID\",\n publicId: \"accountSid\",\n required: true,\n placeholder: \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n },\n TWILIO_AUTH_TOKEN: {\n label: \"Auth Token\",\n publicId: \"authToken\",\n required: true,\n placeholder: \"32-char hex token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TWILIO_ACCOUNT_SID: \"$secrets.TWILIO_ACCOUNT_SID\",\n TWILIO_AUTH_TOKEN: \"$secrets.TWILIO_AUTH_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const typeform = {\n typeform: {\n label: \"Typeform\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Typeform account to create forms, fetch responses, and manage webhooks\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n helpText:\n \"1. Log in to [Typeform](https://admin.typeform.com)\\n2. Open the account menu (top-right) and pick **Personal tokens**\\n3. Click **Generate a new token**, name it, and choose the scopes you need (e.g. `forms:read`, `responses:read`, `webhooks:write`)\\n4. Copy the token (format: `tfp_...`)\",\n storage: {\n secrets: [\"TYPEFORM_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n TYPEFORM_TOKEN: {\n label: \"Personal Access Token\",\n publicId: \"accessToken\",\n required: true,\n placeholder: \"tfp_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n TYPEFORM_TOKEN: \"$secrets.TYPEFORM_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const v0 = {\n v0: {\n label: \"v0\",\n category: \"ai-agent-apps\",\n generation: [\"code\", \"website\"],\n helpText:\n \"Connect your v0 account to generate UI components, chat completions, and iterate on React and Next.js code with the v0 Platform API\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [v0](https://v0.dev)\\n2. Go to **Settings** → **Keys** ([direct link](https://v0.dev/chat/settings/keys))\\n3. Create a new API key\\n4. Copy the generated token\",\n storage: {\n secrets: [\"V0_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n V0_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"v0-...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n V0_TOKEN: \"$secrets.V0_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const wandb = {\n wandb: {\n label: \"Weights & Biases\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect to Weights & Biases for ML experiment tracking and LLM observability.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText: \"Go to wandb.ai → Settings → API Keys → copy your key.\",\n storage: {\n secrets: [\"WANDB_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n WANDB_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"Your W&B API Key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WANDB_TOKEN: \"$secrets.WANDB_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const webflow = {\n webflow: {\n label: \"Webflow\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Webflow account to manage sites, pages, CMS collections, and ecommerce\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.WebflowConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Webflow to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"WEBFLOW_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"WEBFLOW_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"WEBFLOW_ACCESS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"authorized_user:read\",\n \"sites:read\",\n \"sites:write\",\n \"pages:read\",\n \"pages:write\",\n \"cms:read\",\n \"cms:write\",\n \"assets:read\",\n \"assets:write\",\n \"forms:read\",\n \"ecommerce:read\",\n \"ecommerce:write\",\n \"users:read\",\n \"workspace:read\",\n \"custom_code:read\",\n \"custom_code:write\",\n ],\n outputs: {\n accessToken: \"$secrets.WEBFLOW_ACCESS_TOKEN\",\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WEBFLOW_TOKEN: \"$secrets.WEBFLOW_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n \"api-token\": {\n label: \"Site Token\",\n helpText:\n \"1. Log in to [Webflow](https://webflow.com) (site administrator access required)\\n2. In your workspace, find the site and click the gear icon to open **Site Settings**\\n3. In the left sidebar, select **Apps & integrations**\\n4. Scroll to the bottom of the page to the **API access** section\\n5. Click **Generate API token**\\n6. Enter a name for your token and choose the required scopes\\n7. Click **Generate token**\\n8. Copy the generated token and save it in a secure location\",\n storage: {\n secrets: [\"WEBFLOW_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n WEBFLOW_TOKEN: {\n label: \"Site Token\",\n publicId: \"siteToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WEBFLOW_TOKEN: \"$secrets.WEBFLOW_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const weread = {\n weread: {\n label: \"WeRead\",\n category: \"docs-files-knowledge\",\n tags: [\n \"weread\",\n \"微信读书\",\n \"wechat reading\",\n \"books\",\n \"reading\",\n \"highlights\",\n \"notes\",\n \"bookshelf\",\n ],\n helpText:\n \"Connect WeChat Reading (微信读书) to search books, browse your bookshelf, and read your notes, highlights, reviews, and reading statistics\",\n authMethods: {\n \"api-token\": {\n label: \"WeRead API Key\",\n helpText:\n \"1. Open the [WeRead Skill page](https://weread.qq.com/r/weread-skills)\\n2. Scan the QR code with WeChat to sign in to your WeChat Reading account\\n3. Copy the generated API key (it begins with `wrk-`)\\n4. The key authorises every endpoint under `i.weread.qq.com` and is scoped to your own account data\",\n storage: {\n secrets: [\"WEREAD_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n WEREAD_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"wrk-xxxxxxxxxxxxxxxx\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WEREAD_TOKEN: \"$secrets.WEREAD_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const whaleAlert = {\n \"whale-alert\": {\n label: \"Whale Alert\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Whale Alert developer account to access blockchain transaction data and custom whale alert APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Create a Whale Alert developer account\\n2. Subscribe to the Custom Alerts or Enterprise REST API plan\\n3. Copy the API key provided for your subscription\\n4. Use this key as the `api_key` query parameter\",\n storage: {\n secrets: [\"WHALE_ALERT_API_KEY\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n WHALE_ALERT_API_KEY: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"Coffee5afe10ca1Coffee5afe10ca1Co\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WHALE_ALERT_API_KEY: \"$secrets.WHALE_ALERT_API_KEY\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const wix = {\n wix: {\n label: \"Wix\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your Wix account to manage sites, collections, and content\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your [Wix](https://www.wix.com) account (account owner or co-owner access required)\\n2. Go to the [API Keys Manager](https://manage.wix.com/account/api-keys)\\n3. Create a new API key and assign the required permissions\\n4. Copy the generated API key and store it securely\",\n storage: {\n secrets: [\"WIX_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n WIX_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-wix-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WIX_TOKEN: \"$secrets.WIX_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const workos = {\n workos: {\n label: \"WorkOS\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect to WorkOS for enterprise SSO, SCIM directory sync, RBAC fine-grained authorization, and audit log management.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"Go to WorkOS Dashboard → API Keys → copy your secret key (starts with `sk_live_` for production or `sk_test_` for sandbox).\",\n storage: {\n secrets: [\"WORKOS_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n WORKOS_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"sk_live_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WORKOS_TOKEN: \"$secrets.WORKOS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const wrike = {\n wrike: {\n label: \"Wrike\",\n category: \"engineering-team-execution\",\n helpText:\n \"Connect your Wrike account to manage projects, tasks, folders, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"Permanent Access Token\",\n helpText:\n \"1. Navigate to your [Wrike](https://www.wrike.com) workspace\\n2. Click on your **profile icon** in the navigation bar\\n3. Select **Apps & Integrations**\\n4. Click on **API**\\n5. Click **+ App**\\n6. Enter a name for your integration\\n7. Click **Get Token** at the bottom of the window\\n8. Copy and securely store your token — it will not be shown again after closing the page\\n9. Click **Save**\",\n storage: {\n secrets: [\"WRIKE_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n WRIKE_TOKEN: {\n label: \"Permanent Access Token\",\n publicId: \"accessToken\",\n required: true,\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n WRIKE_TOKEN: \"$secrets.WRIKE_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const youtube = {\n youtube: {\n label: \"YouTube\",\n category: \"marketing-content-growth\",\n helpText:\n \"Connect your YouTube account to search videos, get channel info, and fetch comments via the Data API\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant YouTube Data API access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"GOOGLE_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"GOOGLE_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"YOUTUBE_ACCESS_TOKEN\", \"YOUTUBE_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"https://www.googleapis.com/auth/youtube\",\n \"https://www.googleapis.com/auth/youtube.force-ssl\",\n \"https://www.googleapis.com/auth/youtube.readonly\",\n \"https://www.googleapis.com/auth/youtube.upload\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n outputs: {\n accessToken: \"$secrets.YOUTUBE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.YOUTUBE_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.YOUTUBE_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.YOUTUBE_ACCESS_TOKEN\",\n refreshToken: \"$secrets.YOUTUBE_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"YOUTUBE_ACCESS_TOKEN\"],\n envBindings: {\n YOUTUBE_TOKEN: \"$secrets.YOUTUBE_ACCESS_TOKEN\",\n },\n },\n revoke: {\n kind: \"token-revoke\",\n inputs: {\n refreshToken: \"$secrets.YOUTUBE_REFRESH_TOKEN\",\n },\n },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const zapier = {\n zapier: {\n label: \"Zapier\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your Zapier account to trigger zaps and use AI Actions (NLA) to automate workflows\",\n authMethods: {\n \"api-token\": {\n featureFlag: FeatureSwitchKey.ZapierConnector,\n label: \"API Key\",\n storage: {\n secrets: [\"ZAPIER_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ZAPIER_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"your-zapier-api-key\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ZAPIER_TOKEN: \"$secrets.ZAPIER_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const zapsign = {\n zapsign: {\n label: \"ZapSign\",\n category: \"data-automation-infrastructure\",\n helpText:\n \"Connect your ZapSign account to create documents for electronic signature and track signing status\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to your [ZapSign](https://app.zapsign.com) account\\n2. Go to **Settings**\\n3. Navigate to **Integrations**\\n4. Select **ZAPSIGN API**\\n5. Copy your API token\",\n storage: {\n secrets: [\"ZAPSIGN_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ZAPSIGN_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-zapsign-api-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ZAPSIGN_TOKEN: \"$secrets.ZAPSIGN_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const zendesk = {\n zendesk: {\n label: \"Zendesk\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your Zendesk account to manage support tickets, users, organizations, and automate customer support workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Zendesk Admin Center](https://www.zendesk.com/admin/)\\n2. Go to **Apps and integrations → APIs → Zendesk API**\\n3. Enable **Token Access** under the Settings tab\\n4. Click **Add API token** and copy the token\",\n storage: {\n secrets: [\"ZENDESK_API_TOKEN\"],\n variables: [\"ZENDESK_EMAIL\", \"ZENDESK_SUBDOMAIN\"],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ZENDESK_API_TOKEN: {\n label: \"API Token\",\n publicId: \"apiToken\",\n required: true,\n placeholder: \"your-zendesk-api-token\",\n },\n ZENDESK_EMAIL: {\n label: \"Email\",\n publicId: \"email\",\n required: true,\n placeholder: \"your-email@company.com\",\n storage: \"variable\",\n },\n ZENDESK_SUBDOMAIN: {\n label: \"Subdomain\",\n publicId: \"subdomain\",\n required: true,\n placeholder: \"yourcompany\",\n storage: \"variable\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ZENDESK_API_TOKEN: \"$secrets.ZENDESK_API_TOKEN\",\n ZENDESK_EMAIL: \"$vars.ZENDESK_EMAIL\",\n ZENDESK_SUBDOMAIN: \"$vars.ZENDESK_SUBDOMAIN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const zep = {\n zep: {\n label: \"Zep\",\n category: \"ai-memory-tracing-eval\",\n helpText:\n \"Connect to Zep for long-term memory and conversation history management in AI agents.\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [app.getzep.com](https://app.getzep.com)\\n2. Go to **Settings**\\n3. Navigate to **API Keys**\\n4. Click **Create API Key** and copy the key\",\n storage: {\n secrets: [\"ZEP_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ZEP_TOKEN: {\n label: \"API Key\",\n publicId: \"apiKey\",\n required: true,\n placeholder: \"z_...\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ZEP_TOKEN: \"$secrets.ZEP_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\n\nexport const zeptomail = {\n zeptomail: {\n label: \"ZeptoMail\",\n category: \"communication-collaboration\",\n helpText:\n \"Connect your ZeptoMail account to send transactional emails via Zoho's email delivery service\",\n authMethods: {\n \"api-token\": {\n label: \"Send Mail Token\",\n helpText:\n \"1. Log in to [ZeptoMail](https://zeptomail.zoho.com)\\n2. Select the Mail Agent for which you want to generate the API key\\n3. Go to the **SMTP/API** tab\\n4. In the **API** section, copy the **Agent alias** (agentkey)\\n5. Submit a POST request to `https://api.zeptomail.com/v1.1/agents/{agentkey}/apikeys` with an `Authorization: Zoho-oauthtoken [your-token]` header\\n6. The response will contain your send mail token (username and password)\",\n storage: {\n secrets: [\"ZEPTOMAIL_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"manual\",\n fields: {\n ZEPTOMAIL_TOKEN: {\n label: \"Send Mail Token\",\n publicId: \"sendMailToken\",\n required: true,\n placeholder: \"your-zeptomail-send-mail-token\",\n },\n },\n },\n access: {\n kind: \"static\",\n envBindings: {\n ZEPTOMAIL_TOKEN: \"$secrets.ZEPTOMAIL_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import type { ConnectorConfig } from \"../connector-config\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\nexport const zoom = {\n zoom: {\n label: \"Zoom\",\n category: \"meetings-scheduling\",\n helpText:\n \"Connect your Zoom account to schedule meetings, manage cloud recordings, and access webinar and participant data\",\n authMethods: {\n oauth: {\n featureFlag: FeatureSwitchKey.ZoomConnector,\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Zoom to grant access.\",\n client: {\n clientRegistration: \"static\",\n clientType: \"confidential\",\n clientIdEnv: \"ZOOM_OAUTH_CLIENT_ID\",\n clientSecretEnv: \"ZOOM_OAUTH_CLIENT_SECRET\",\n },\n storage: {\n secrets: [\"ZOOM_ACCESS_TOKEN\", \"ZOOM_REFRESH_TOKEN\"],\n variables: [],\n },\n grant: {\n kind: \"auth-code\",\n scopes: [\n \"user:read:user\",\n \"meeting:read:list_meetings\",\n \"meeting:read:meeting\",\n \"meeting:write:meeting\",\n \"meeting:update:meeting\",\n \"meeting:delete:meeting\",\n \"meeting:update:status\",\n \"meeting:read:list_past_participants\",\n \"meeting:read:past_meeting\",\n \"cloud_recording:read:list_user_recordings\",\n \"cloud_recording:read:list_recording_files\",\n \"cloud_recording:read:recording\",\n \"webinar:read:list_webinars\",\n \"webinar:read:webinar\",\n ],\n outputs: {\n accessToken: \"$secrets.ZOOM_ACCESS_TOKEN\",\n refreshToken: \"$secrets.ZOOM_REFRESH_TOKEN\",\n },\n },\n access: {\n kind: \"refresh-token\",\n inputs: {\n refreshToken: \"$secrets.ZOOM_REFRESH_TOKEN\",\n },\n outputs: {\n accessToken: \"$secrets.ZOOM_ACCESS_TOKEN\",\n refreshToken: \"$secrets.ZOOM_REFRESH_TOKEN\",\n },\n refreshableSecrets: [\"ZOOM_ACCESS_TOKEN\"],\n envBindings: {\n ZOOM_TOKEN: \"$secrets.ZOOM_ACCESS_TOKEN\",\n },\n },\n revoke: { kind: \"none\" },\n },\n },\n },\n} as const satisfies Record<string, ConnectorConfig>;\n","import { z } from \"zod\";\n\nimport type { FeatureSwitchKey } from \"./feature-switch-key\";\n\n/**\n * User-entered field configuration for manual connector grant methods.\n */\nexport interface ConnectorManualGrantFieldConfig {\n /**\n * Stable public form id used by catalog clients. This must not be a private\n * credential, storage, env binding, or runtime binding name.\n */\n publicId: string;\n label: string;\n required: boolean;\n placeholder?: string;\n /** Storage type: \"secret\" (default, encrypted) or \"variable\" (plain text). */\n storage?: \"secret\" | \"variable\";\n /**\n * Optional normalization applied to the user-entered value before it is\n * persisted.\n *\n * - `\"host\"`: strip the URL scheme, userinfo, path, query, fragment, and\n * trailing slash, leaving only `host[:port]`. Use this for fields templated\n * into a firewall base URL's authority position (`https://${{ vars.X }}`),\n * where the firewall validator rejects values that introduce URL structure\n * (`/`, `?`, `#`, `@`). Lets a user paste a full backend URL\n * (e.g. `https://my-project.example.app/`) without breaking the connection.\n */\n normalize?: \"host\";\n}\n\nexport type ConnectorAuthClientConfig =\n | {\n readonly clientRegistration: \"static\";\n readonly clientType: \"confidential\";\n readonly clientIdEnv: string;\n readonly clientSecretEnv: string;\n }\n | {\n readonly clientRegistration: \"static\";\n readonly clientType: \"confidential\";\n readonly clientId: string;\n readonly clientSecret: string;\n }\n | {\n readonly clientRegistration: \"static\";\n readonly clientType: \"public\";\n readonly clientIdEnv: string;\n }\n | {\n readonly clientRegistration: \"static\";\n readonly clientType: \"public\";\n readonly clientId: string;\n }\n | {\n readonly clientRegistration: \"dynamic\";\n readonly clientType: \"public\";\n };\n\nexport type StaticConfidentialConnectorAuthClientConfig = Extract<\n ConnectorAuthClientConfig,\n {\n readonly clientRegistration: \"static\";\n readonly clientType: \"confidential\";\n }\n>;\n\nexport type StaticPublicConnectorAuthClientConfig = Extract<\n ConnectorAuthClientConfig,\n {\n readonly clientRegistration: \"static\";\n readonly clientType: \"public\";\n }\n>;\n\nexport type DynamicPublicConnectorAuthClientConfig = Extract<\n ConnectorAuthClientConfig,\n {\n readonly clientRegistration: \"dynamic\";\n readonly clientType: \"public\";\n }\n>;\n\nexport type PublicConnectorAuthClientConfig =\n | StaticPublicConnectorAuthClientConfig\n | DynamicPublicConnectorAuthClientConfig;\n\nexport type ConnectorGrantKind =\n | \"none\"\n | \"manual\"\n | \"auth-code\"\n | \"openid-auth\"\n | \"external-code\"\n | \"device-auth\"\n | \"managed\";\n\nexport interface ConnectorNoAuthGrantConfig {\n readonly kind: \"none\";\n}\n\nexport interface ConnectorManualGrantConfig {\n readonly kind: \"manual\";\n readonly fields: Record<string, ConnectorManualGrantFieldConfig>;\n}\n\nexport type ConnectorBrowserAuthCallbackOrigin = \"web\" | \"api\";\nexport type ConnectorAuthCodeCallbackOrigin =\n ConnectorBrowserAuthCallbackOrigin;\n\nexport interface ConnectorAuthCodeGrantConfig {\n readonly kind: \"auth-code\";\n readonly scopes: string[];\n readonly callbackOrigin?: ConnectorAuthCodeCallbackOrigin;\n readonly outputs: ConnectorGrantOutputBindings;\n}\n\nexport interface ConnectorOpenIdAuthGrantConfig {\n readonly kind: \"openid-auth\";\n readonly callbackOrigin?: ConnectorBrowserAuthCallbackOrigin;\n readonly outputs: ConnectorGrantOutputBindings;\n}\n\nexport interface ConnectorExternalCodeGrantConfig {\n readonly kind: \"external-code\";\n readonly scopes: string[];\n readonly outputs: ConnectorGrantOutputBindings;\n}\n\nexport interface ConnectorDeviceAuthStartSelectOptionChoiceConfig {\n readonly value: string;\n readonly label: string;\n}\n\ntype ConnectorDeviceAuthStartSelectOptionChoicesConfig = readonly [\n ConnectorDeviceAuthStartSelectOptionChoiceConfig,\n ...ConnectorDeviceAuthStartSelectOptionChoiceConfig[],\n];\n\nexport interface ConnectorDeviceAuthStartSelectOptionConfig {\n readonly kind: \"select\";\n /**\n * Stable public start option id used by catalog clients.\n */\n readonly publicId: string;\n readonly label: string;\n readonly required: boolean;\n readonly defaultValue?: string;\n readonly options: ConnectorDeviceAuthStartSelectOptionChoicesConfig;\n}\n\nexport type ConnectorDeviceAuthStartOptionConfig =\n ConnectorDeviceAuthStartSelectOptionConfig;\n\nexport type ConnectorDeviceAuthStartOptionsConfig = Readonly<\n Record<string, ConnectorDeviceAuthStartOptionConfig>\n>;\n\nexport type ConnectorDeviceAuthStartOptions = Readonly<Record<string, string>>;\n\nexport interface ConnectorDeviceAuthGrantConfig {\n readonly kind: \"device-auth\";\n readonly scopes: string[];\n readonly outputs: ConnectorGrantOutputBindings;\n readonly startOptions?: ConnectorDeviceAuthStartOptionsConfig;\n}\n\nexport interface ConnectorManagedGrantConfig {\n readonly kind: \"managed\";\n}\n\nexport type ConnectorGrantConfig =\n | ConnectorNoAuthGrantConfig\n | ConnectorManualGrantConfig\n | ConnectorAuthCodeGrantConfig\n | ConnectorOpenIdAuthGrantConfig\n | ConnectorExternalCodeGrantConfig\n | ConnectorDeviceAuthGrantConfig\n | ConnectorManagedGrantConfig;\n\nexport type ConnectorAccessKind = \"static\" | \"refresh-token\" | \"none\";\n\nexport const CONNECTOR_PLATFORM_SECRET_NAMES = [\n \"GOOGLE_ADS_DEVELOPER_TOKEN\",\n \"STEAM_WEB_API_KEY\",\n] as const;\nexport type ConnectorPlatformSecretName =\n (typeof CONNECTOR_PLATFORM_SECRET_NAMES)[number];\n\nexport type ConnectorSecretValueRef = `$secrets.${string}`;\nexport type ConnectorVariableValueRef = `$vars.${string}`;\nexport type ConnectorOutputValueRef =\n | ConnectorSecretValueRef\n | ConnectorVariableValueRef;\nexport type ConnectorRefreshTokenInputValueRef =\n | ConnectorSecretValueRef\n | ConnectorVariableValueRef;\nexport type ConnectorEnvBindingValue =\n | ConnectorRefreshTokenInputValueRef\n | {\n readonly valueRef: ConnectorRefreshTokenInputValueRef;\n readonly optional?: boolean;\n };\nexport type ConnectorEnvBindings = Record<string, ConnectorEnvBindingValue>;\n\nexport type ConnectorGrantOutputBindings = Record<\n string,\n ConnectorOutputValueRef\n>;\nexport type ConnectorRevokeInputBindings = Record<\n string,\n ConnectorSecretValueRef\n>;\n\nexport interface ConnectorStorageConfig {\n readonly secrets: readonly string[];\n readonly variables: readonly string[];\n}\n\ninterface ConnectorEnvBindingAccessConfigBase {\n readonly envBindings: ConnectorEnvBindings;\n /**\n * `$secrets.NAME` backing sources read from platform env instead of connector\n * DB storage. Runtime aliases must still be declared in `envBindings`.\n */\n readonly platformSecrets?: readonly ConnectorPlatformSecretName[];\n}\n\nexport interface ConnectorStaticAccessConfig extends ConnectorEnvBindingAccessConfigBase {\n readonly kind: \"static\";\n}\n\nexport type ConnectorRefreshTokenInputBindings = Record<\n string,\n ConnectorRefreshTokenInputValueRef\n>;\nexport type ConnectorRefreshTokenOutputBindings = Record<\n string,\n ConnectorOutputValueRef\n>;\n\nexport interface ConnectorRefreshTokenAccessConfig extends ConnectorEnvBindingAccessConfigBase {\n readonly kind: \"refresh-token\";\n readonly inputs: ConnectorRefreshTokenInputBindings;\n readonly outputs: ConnectorRefreshTokenOutputBindings;\n readonly refreshableSecrets: readonly string[];\n}\n\nexport interface ConnectorNoAccessConfig {\n readonly kind: \"none\";\n}\n\nexport type ConnectorAccessConfig =\n | ConnectorStaticAccessConfig\n | ConnectorRefreshTokenAccessConfig\n | ConnectorNoAccessConfig;\n\nexport type ConnectorRevokeKind = \"none\" | \"token-revoke\";\n\nexport type ConnectorRevokeConfig =\n | {\n readonly kind: \"none\";\n }\n | {\n readonly kind: \"token-revoke\";\n readonly inputs: ConnectorRevokeInputBindings;\n };\n\ninterface ConnectorAuthMethodConfigBase {\n label: string;\n helpText?: string;\n /** When false, this auth method is unavailable for new connector actions. */\n visible?: boolean;\n /** When set, this auth method is only available while the feature is enabled. */\n featureFlag?: FeatureSwitchKey;\n /** When false, feature-gated UI surfaces should not add an experimental label. */\n showExperimentalLabel?: boolean;\n /**\n * Connector-scoped storage names owned by this auth method.\n *\n * These lists are write/delete allowlists, not guarantees that rows currently\n * exist in the DB.\n */\n storage: ConnectorStorageConfig;\n}\n\n/**\n * Auth method configuration for user-selectable connector connection flows.\n */\nexport type ConnectorAuthMethodConfig =\n | (ConnectorAuthMethodConfigBase & {\n readonly client?: never;\n readonly grant: ConnectorNoAuthGrantConfig;\n readonly access: ConnectorNoAccessConfig;\n readonly revoke: Extract<\n ConnectorRevokeConfig,\n { readonly kind: \"none\" }\n >;\n })\n | (ConnectorAuthMethodConfigBase & {\n readonly client: ConnectorAuthClientConfig;\n readonly grant: ConnectorAuthCodeGrantConfig;\n readonly access: ConnectorAccessConfig;\n readonly revoke: ConnectorRevokeConfig;\n })\n | (ConnectorAuthMethodConfigBase & {\n readonly client?: ConnectorAuthClientConfig;\n readonly grant: ConnectorOpenIdAuthGrantConfig;\n readonly access: ConnectorAccessConfig;\n readonly revoke: ConnectorRevokeConfig;\n })\n | (ConnectorAuthMethodConfigBase & {\n readonly client: ConnectorAuthClientConfig;\n readonly grant: ConnectorExternalCodeGrantConfig;\n readonly access: ConnectorAccessConfig;\n readonly revoke: ConnectorRevokeConfig;\n })\n | (ConnectorAuthMethodConfigBase & {\n readonly client: PublicConnectorAuthClientConfig;\n readonly grant: ConnectorDeviceAuthGrantConfig;\n readonly access: ConnectorAccessConfig;\n readonly revoke: ConnectorRevokeConfig;\n })\n | (ConnectorAuthMethodConfigBase & {\n readonly client?: ConnectorAuthClientConfig;\n readonly grant: ConnectorManualGrantConfig | ConnectorManagedGrantConfig;\n readonly access: ConnectorAccessConfig;\n readonly revoke: ConnectorRevokeConfig;\n });\n\n/**\n * Connector auth method ids exposed as configured connection flows.\n *\n * These values are connector registry keys, not lifecycle categories. Behavior\n * must be derived from the selected auth method lifecycle config.\n */\nexport const CONNECTOR_AUTH_METHOD_IDS = [\n \"oauth\",\n \"openid\",\n \"api-token\",\n \"cli\",\n \"api\",\n] as const;\nexport const connectorAuthMethodIdSchema = z.enum(CONNECTOR_AUTH_METHOD_IDS);\nexport type ConnectorAuthMethodId = z.infer<typeof connectorAuthMethodIdSchema>;\n\nexport type ConnectorDisplayCategory =\n | \"ai-general-models\"\n | \"ai-image-video\"\n | \"ai-voice-audio\"\n | \"ai-agent-apps\"\n | \"ai-memory-tracing-eval\"\n | \"communication-collaboration\"\n | \"meetings-scheduling\"\n | \"docs-files-knowledge\"\n | \"engineering-team-execution\"\n | \"sales-crm-business-operations\"\n | \"marketing-content-growth\"\n | \"data-automation-infrastructure\";\n\nexport type ConnectorDisplayCategoryGroup = \"ai\";\n\nexport type ConnectorGenerationType =\n | \"audio\"\n | \"code\"\n | \"document\"\n | \"image\"\n | \"presentation\"\n | \"text\"\n | \"video\"\n | \"website\";\n\nexport const CONNECTOR_DISPLAY_CATEGORY_GROUPS: Record<\n ConnectorDisplayCategoryGroup,\n { label: string; menuLabel: string }\n> = {\n ai: { label: \"AI\", menuLabel: \"AI\" },\n};\n\nexport const CONNECTOR_DISPLAY_CATEGORY_META: Record<\n ConnectorDisplayCategory,\n { label: string; menuLabel: string; group?: ConnectorDisplayCategoryGroup }\n> = {\n \"ai-general-models\": {\n label: \"General Models and Reasoning\",\n menuLabel: \"General Models\",\n group: \"ai\",\n },\n \"ai-image-video\": {\n label: \"Image / Video Generation\",\n menuLabel: \"Image and Video\",\n group: \"ai\",\n },\n \"ai-voice-audio\": {\n label: \"Voice / Audio\",\n menuLabel: \"Voice and Audio\",\n group: \"ai\",\n },\n \"ai-agent-apps\": {\n label: \"Agent Platforms and AI Apps\",\n menuLabel: \"Agent Platforms\",\n group: \"ai\",\n },\n \"ai-memory-tracing-eval\": {\n label: \"Memory / Tracing / Evaluation\",\n menuLabel: \"Memory and Evaluation\",\n group: \"ai\",\n },\n \"communication-collaboration\": {\n label: \"Communication and Collaboration\",\n menuLabel: \"Communication\",\n },\n \"meetings-scheduling\": {\n label: \"Meetings and Scheduling\",\n menuLabel: \"Meetings\",\n },\n \"docs-files-knowledge\": {\n label: \"Docs, Files, and Knowledge\",\n menuLabel: \"Documents\",\n },\n \"engineering-team-execution\": {\n label: \"Engineering and Team Execution\",\n menuLabel: \"Engineering\",\n },\n \"sales-crm-business-operations\": {\n label: \"Sales, CRM, and Business Operations\",\n menuLabel: \"Sales and Business\",\n },\n \"marketing-content-growth\": {\n label: \"Marketing, Content, and Growth\",\n menuLabel: \"Marketing\",\n },\n \"data-automation-infrastructure\": {\n label: \"Data, Automation, and Infrastructure\",\n menuLabel: \"Data and Automation\",\n },\n};\n\nexport const CONNECTOR_DISPLAY_CATEGORY_ORDER: readonly ConnectorDisplayCategory[] =\n [\n \"ai-general-models\",\n \"ai-image-video\",\n \"ai-voice-audio\",\n \"ai-agent-apps\",\n \"ai-memory-tracing-eval\",\n \"communication-collaboration\",\n \"meetings-scheduling\",\n \"docs-files-knowledge\",\n \"engineering-team-execution\",\n \"sales-crm-business-operations\",\n \"marketing-content-growth\",\n \"data-automation-infrastructure\",\n ];\n\nexport interface ConnectorDisplayCategorizedItem {\n readonly category: string;\n}\n\nexport interface ConnectorDisplayCategoryMetadataGroup {\n id: string;\n label: string;\n menuLabel: string;\n}\n\nexport interface ConnectorDisplayCategoryMetadataCategory {\n id: string;\n label: string;\n menuLabel: string;\n groupId: string | null;\n}\n\nexport interface ConnectorDisplayCategoryMetadata {\n categories: ConnectorDisplayCategoryMetadataCategory[];\n groups: ConnectorDisplayCategoryMetadataGroup[];\n}\n\nfunction isConnectorDisplayCategory(\n category: string,\n): category is ConnectorDisplayCategory {\n return Object.prototype.hasOwnProperty.call(\n CONNECTOR_DISPLAY_CATEGORY_META,\n category,\n );\n}\n\nfunction fallbackCategoryLabel(category: string): string {\n const label = category\n .split(/[-_\\s]+/)\n .filter((part) => {\n return part.length > 0;\n })\n .map((part) => {\n return part.charAt(0).toUpperCase() + part.slice(1);\n })\n .join(\" \");\n return label || \"Other\";\n}\n\nexport function connectorDisplayCategoryMetadataForItems(\n items: readonly ConnectorDisplayCategorizedItem[],\n): ConnectorDisplayCategoryMetadata {\n const visibleCategories = new Set(\n items.flatMap((item) => {\n return item.category ? [item.category] : [];\n }),\n );\n const orderedConnectorDisplayCategories =\n CONNECTOR_DISPLAY_CATEGORY_ORDER.filter((category) => {\n return visibleCategories.has(category);\n });\n const orderedCategoryIds = new Set<string>(orderedConnectorDisplayCategories);\n const orderedCategories = [\n ...orderedConnectorDisplayCategories,\n ...[...visibleCategories].filter((category) => {\n return !orderedCategoryIds.has(category);\n }),\n ];\n const visibleGroups = new Set<ConnectorDisplayCategoryGroup>();\n const categories = orderedCategories.map((category) => {\n if (!isConnectorDisplayCategory(category)) {\n const label = fallbackCategoryLabel(category);\n return {\n id: category,\n label,\n menuLabel: label,\n groupId: null,\n };\n }\n const metadata = CONNECTOR_DISPLAY_CATEGORY_META[category];\n if (metadata.group) {\n visibleGroups.add(metadata.group);\n }\n return {\n id: category,\n label: metadata.label,\n menuLabel: metadata.menuLabel,\n groupId: metadata.group ?? null,\n };\n });\n\n return {\n categories,\n groups: [...visibleGroups].map((group) => {\n const metadata = CONNECTOR_DISPLAY_CATEGORY_GROUPS[group];\n return {\n id: group,\n label: metadata.label,\n menuLabel: metadata.menuLabel,\n };\n }),\n };\n}\n\ntype ConnectorAuthMethods = Partial<\n Record<ConnectorAuthMethodId, ConnectorAuthMethodConfig>\n>;\n\ntype ConnectorConfigBase = {\n readonly label: string;\n readonly helpText: string;\n readonly category: ConnectorDisplayCategory;\n /**\n * Output categories this connector skill can generate. This is product\n * metadata for discovery and routing, not a permission/capability grant.\n */\n readonly generation?: readonly ConnectorGenerationType[];\n /**\n * Optional concept words and common-guess aliases used by connector search.\n * Lowercase only. Avoid duplicating content already in `label`,\n * runtime output keys, or auth method field keys.\n */\n readonly tags?: readonly string[];\n};\n\n/**\n * Base configuration shape for all connector types.\n */\nexport type ConnectorConfig = ConnectorConfigBase & {\n readonly authMethods: ConnectorAuthMethods;\n};\n","import { z } from \"zod\";\n\nimport { connectorTypeSchema } from \"@vm0/connectors/connectors\";\n\n/**\n * Connector response schema\n */\nexport const connectorResponseConnectionStatusSchema = z.enum([\n \"connected\",\n \"reconnect-required\",\n]);\n\nexport type ConnectorResponseConnectionStatus = z.infer<\n typeof connectorResponseConnectionStatusSchema\n>;\n\nexport const connectorReconnectReasonSchema = z.enum([\n \"provider_session_expired\",\n \"authorization_expired_or_revoked\",\n \"credential_expired\",\n]);\n\nexport type ConnectorReconnectReason = z.infer<\n typeof connectorReconnectReasonSchema\n>;\n\nexport const connectorResponseSchema = z.object({\n id: z.uuid(),\n type: connectorTypeSchema,\n authMethod: z.string(),\n externalId: z.string().nullable(),\n externalUsername: z.string().nullable(),\n externalEmail: z.string().nullable(),\n oauthScopes: z.array(z.string()).nullable(),\n connectionStatus: connectorResponseConnectionStatusSchema,\n reconnectReason: connectorReconnectReasonSchema.nullable().default(null),\n tokenExpiresAt: z.string().nullable().default(null),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type ConnectorResponse = z.infer<typeof connectorResponseSchema>;\n\nexport const connectorProvidedBindingNamespaceSchema = z.enum([\n \"secrets\",\n \"vars\",\n]);\n\nexport const connectorProvidedBindingSourceSchema = z.discriminatedUnion(\n \"kind\",\n [\n z.object({\n kind: z.literal(\"connector-secret\"),\n name: z.string(),\n }),\n z.object({\n kind: z.literal(\"connector-variable\"),\n name: z.string(),\n }),\n ],\n);\n\nexport const connectorProvidedBindingSchema = z.object({\n connectorType: connectorTypeSchema,\n authMethod: z.string(),\n namespace: connectorProvidedBindingNamespaceSchema,\n name: z.string(),\n optional: z.boolean(),\n source: connectorProvidedBindingSourceSchema,\n});\n\nexport type ConnectorProvidedBinding = z.infer<\n typeof connectorProvidedBindingSchema\n>;\nexport type ConnectorProvidedBindingNamespace = z.infer<\n typeof connectorProvidedBindingNamespaceSchema\n>;\n\n/**\n * Names that a stored connector guarantees at runtime. Optional bindings are\n * omitted because they describe possible connector supply, not guaranteed\n * connector supply.\n */\nexport function guaranteedConnectorProvidedBindingNames(args: {\n readonly bindings: readonly ConnectorProvidedBinding[];\n readonly namespace: ConnectorProvidedBindingNamespace;\n}): Set<string> {\n const names = new Set<string>();\n for (const binding of args.bindings) {\n if (binding.namespace === args.namespace && !binding.optional) {\n names.add(binding.name);\n }\n }\n return names;\n}\n\n/**\n * List connectors response\n */\nexport const connectorListResponseSchema = z.object({\n connectors: z.array(connectorResponseSchema),\n configuredTypes: z.array(connectorTypeSchema),\n connectorProvidedBindings: z\n .array(connectorProvidedBindingSchema)\n .default([]),\n});\n\nexport type ConnectorListResponse = z.infer<typeof connectorListResponseSchema>;\n\n/**\n * Scope diff response schema\n */\nexport const scopeDiffResponseSchema = z.object({\n addedScopes: z.array(z.string()),\n removedScopes: z.array(z.string()),\n currentScopes: z.array(z.string()),\n storedScopes: z.array(z.string()),\n});\n\nexport type ScopeDiffResponse = z.infer<typeof scopeDiffResponseSchema>;\n\nexport const connectorOauthStartResponseSchema = z.object({\n authorizationUrl: z.string(),\n});\n\nexport type ConnectorOauthStartResponse = z.infer<\n typeof connectorOauthStartResponseSchema\n>;\n\nexport const connectorOauthDeviceAuthSessionStartResponseSchema = z.object({\n sessionId: z.uuid(),\n sessionToken: z.string(),\n type: connectorTypeSchema,\n status: z.literal(\"pending\"),\n userCode: z.string(),\n verificationUri: z.string(),\n verificationUriComplete: z.string().optional(),\n expiresIn: z.number(),\n interval: z.number(),\n});\n\nexport type ConnectorOauthDeviceAuthSessionStartResponse = z.infer<\n typeof connectorOauthDeviceAuthSessionStartResponseSchema\n>;\n\nexport const connectorOauthDeviceAuthSessionPollRequestSchema = z.object({\n sessionToken: z.string(),\n});\n\nexport type ConnectorOauthDeviceAuthSessionPollRequest = z.infer<\n typeof connectorOauthDeviceAuthSessionPollRequestSchema\n>;\n\nexport const connectorOauthDeviceAuthSessionPollResponseSchema =\n z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"pending\"),\n interval: z.number(),\n }),\n z.object({\n status: z.literal(\"complete\"),\n connector: connectorResponseSchema,\n }),\n z.object({\n status: z.literal(\"denied\"),\n errorCode: z.string().optional(),\n errorMessage: z.string().optional(),\n }),\n z.object({\n status: z.literal(\"expired\"),\n errorCode: z.string().optional(),\n errorMessage: z.string().optional(),\n }),\n z.object({\n status: z.literal(\"error\"),\n errorCode: z.string().optional(),\n errorMessage: z.string().optional(),\n }),\n ]);\n\nexport type ConnectorOauthDeviceAuthSessionPollResponse = z.infer<\n typeof connectorOauthDeviceAuthSessionPollResponseSchema\n>;\n\nexport const connectorExternalCodeSessionStartResponseSchema = z.object({\n sessionId: z.uuid(),\n sessionToken: z.string(),\n type: connectorTypeSchema,\n status: z.literal(\"pending\"),\n authorizationUrl: z.string(),\n expiresIn: z.number(),\n});\n\nexport type ConnectorExternalCodeSessionStartResponse = z.infer<\n typeof connectorExternalCodeSessionStartResponseSchema\n>;\n\nexport const connectorExternalCodeSessionCompleteRequestSchema = z.object({\n sessionToken: z.string(),\n code: z.string().trim().min(1).max(4096),\n});\n\nexport type ConnectorExternalCodeSessionCompleteRequest = z.infer<\n typeof connectorExternalCodeSessionCompleteRequestSchema\n>;\n\nexport const connectorExternalCodeSessionCompleteResponseSchema = z.object({\n status: z.literal(\"complete\"),\n connector: connectorResponseSchema,\n});\n\nexport type ConnectorExternalCodeSessionCompleteResponse = z.infer<\n typeof connectorExternalCodeSessionCompleteResponseSchema\n>;\n","import { z } from \"zod\";\n\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { connectorReconnectReasonSchema } from \"./connector-schemas\";\nimport { connectorRefSchema } from \"./connector-ref\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst publicConnectorCatalogAuthMethodSummarySchema = z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().nullable(),\n grantKind: z.enum([\n \"none\",\n \"manual\",\n \"auth-code\",\n \"openid-auth\",\n \"external-code\",\n \"device-auth\",\n \"managed\",\n ]),\n});\n\nconst publicConnectorCatalogPermissionSummarySchema = z.object({\n hasPermissions: z.boolean(),\n permissionCount: z.number().int().nonnegative(),\n hasCategories: z.boolean(),\n hasDefaultPolicyOverrides: z.boolean(),\n});\n\nconst publicConnectorCatalogCategoryGroupSchema = z.object({\n id: z.string(),\n label: z.string(),\n menuLabel: z.string(),\n});\n\nconst publicConnectorCatalogCategorySchema = z.object({\n id: z.string(),\n label: z.string(),\n menuLabel: z.string(),\n groupId: z.string().nullable(),\n});\n\nconst publicConnectorCatalogCategoryMetadataSchema = z.object({\n categories: z.array(publicConnectorCatalogCategorySchema),\n groups: z.array(publicConnectorCatalogCategoryGroupSchema),\n});\n\nconst publicConnectorCatalogItemSchema = z.object({\n connectorRef: connectorRefSchema,\n label: z.string(),\n description: z.string(),\n category: z.string(),\n generation: z.array(z.string()),\n tags: z.array(z.string()),\n authMethods: z.array(publicConnectorCatalogAuthMethodSummarySchema),\n permissionSummary: publicConnectorCatalogPermissionSummarySchema,\n});\n\nconst publicConnectorCatalogManualFieldSchema = z.object({\n id: z.string(),\n label: z.string(),\n required: z.boolean(),\n placeholder: z.string().nullable(),\n inputType: z.enum([\"password\", \"text\"]),\n});\n\nconst publicConnectorCatalogStartOptionChoiceSchema = z.object({\n value: z.string(),\n label: z.string(),\n});\n\nconst publicConnectorCatalogStartOptionSchema = z.object({\n id: z.string(),\n kind: z.literal(\"select\"),\n label: z.string(),\n required: z.boolean(),\n defaultValue: z.string().nullable(),\n options: z.array(publicConnectorCatalogStartOptionChoiceSchema),\n});\n\nconst publicConnectorCatalogAuthMethodDetailSchema =\n publicConnectorCatalogAuthMethodSummarySchema.extend({\n manualFields: z.array(publicConnectorCatalogManualFieldSchema),\n startOptions: z.array(publicConnectorCatalogStartOptionSchema),\n });\n\nconst publicConnectorCatalogDetailSchema =\n publicConnectorCatalogItemSchema.extend({\n authMethods: z.array(publicConnectorCatalogAuthMethodDetailSchema),\n });\n\nconst publicConnectorCatalogListResponseSchema = z.object({\n connectors: z.array(publicConnectorCatalogItemSchema),\n categoryMetadata: publicConnectorCatalogCategoryMetadataSchema.optional(),\n});\n\nconst publicConnectorCatalogDetailResponseSchema = z.object({\n connector: publicConnectorCatalogDetailSchema,\n});\n\nconst publicConnectorCatalogConnectionStatusSchema = z.enum([\n \"not-connected\",\n \"connected\",\n \"scope-mismatch\",\n \"reconnect-required\",\n]);\n\nconst publicConnectorCatalogConnectionSchema = z.object({\n authMethod: z.string(),\n externalUsername: z.string().nullable(),\n externalEmail: z.string().nullable(),\n reconnectReason: connectorReconnectReasonSchema.nullable(),\n});\n\nconst publicConnectorCatalogStatusItemSchema =\n publicConnectorCatalogDetailSchema.extend({\n connection: publicConnectorCatalogConnectionSchema.nullable(),\n connected: z.boolean(),\n connectionStatus: publicConnectorCatalogConnectionStatusSchema,\n scopeMismatch: z.boolean(),\n authMethodSupportsRefresh: z.boolean(),\n tokenExpiresAt: z.string().nullable(),\n singleAuthCodeAuthMethodId: z.string().nullable(),\n connectNotice: z.enum([\"google-security-warning\"]).nullable(),\n });\n\nconst publicConnectorCatalogStatusResponseSchema = z.object({\n connectors: z.array(publicConnectorCatalogStatusItemSchema),\n categoryMetadata: publicConnectorCatalogCategoryMetadataSchema.optional(),\n});\n\nconst publicFirewallPolicyValueSchema = z.enum([\"allow\", \"deny\", \"ask\"]);\n\nconst publicConnectorCatalogPermissionSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n});\n\nconst publicConnectorCatalogPermissionCategoriesSchema = z.object({\n categories: z.record(z.string(), z.string()),\n displayOrder: z.array(z.string()),\n});\n\nconst publicConnectorCatalogDefaultPolicySchema = z.object({\n permissionDefault: publicFirewallPolicyValueSchema,\n permissionOverrides: z.record(z.string(), z.array(z.string())).optional(),\n unknownPolicy: publicFirewallPolicyValueSchema,\n});\n\nconst publicConnectorCatalogPermissionDetailSchema = z.object({\n connectorRef: connectorRefSchema,\n label: z.string(),\n permissionCount: z.number().int().nonnegative(),\n permissions: z.array(publicConnectorCatalogPermissionSchema),\n categories: publicConnectorCatalogPermissionCategoriesSchema.nullable(),\n defaultPolicy: publicConnectorCatalogDefaultPolicySchema,\n});\n\nconst publicConnectorCatalogPermissionDetailResponseSchema = z.object({\n permissions: publicConnectorCatalogPermissionDetailSchema,\n});\n\nconst connectorCatalogPathParamsSchema = z.object({\n connectorRef: connectorRefSchema,\n});\n\nexport type PublicConnectorCatalogAuthMethodSummary = z.infer<\n typeof publicConnectorCatalogAuthMethodSummarySchema\n>;\nexport type PublicConnectorCatalogPermissionSummary = z.infer<\n typeof publicConnectorCatalogPermissionSummarySchema\n>;\nexport type PublicConnectorCatalogCategoryGroup = z.infer<\n typeof publicConnectorCatalogCategoryGroupSchema\n>;\nexport type PublicConnectorCatalogCategory = z.infer<\n typeof publicConnectorCatalogCategorySchema\n>;\nexport type PublicConnectorCatalogCategoryMetadata = z.infer<\n typeof publicConnectorCatalogCategoryMetadataSchema\n>;\nexport type PublicConnectorCatalogItem = z.infer<\n typeof publicConnectorCatalogItemSchema\n>;\nexport type PublicConnectorCatalogManualField = z.infer<\n typeof publicConnectorCatalogManualFieldSchema\n>;\nexport type PublicConnectorCatalogStartOption = z.infer<\n typeof publicConnectorCatalogStartOptionSchema\n>;\nexport type PublicConnectorCatalogAuthMethodDetail = z.infer<\n typeof publicConnectorCatalogAuthMethodDetailSchema\n>;\nexport type PublicConnectorCatalogDetail = z.infer<\n typeof publicConnectorCatalogDetailSchema\n>;\nexport type PublicConnectorCatalogListResponse = z.infer<\n typeof publicConnectorCatalogListResponseSchema\n>;\nexport type PublicConnectorCatalogDetailResponse = z.infer<\n typeof publicConnectorCatalogDetailResponseSchema\n>;\nexport type PublicConnectorCatalogConnectionStatus = z.infer<\n typeof publicConnectorCatalogConnectionStatusSchema\n>;\nexport type PublicConnectorCatalogConnection = z.infer<\n typeof publicConnectorCatalogConnectionSchema\n>;\nexport type PublicConnectorCatalogStatusItem = z.infer<\n typeof publicConnectorCatalogStatusItemSchema\n>;\nexport type PublicConnectorCatalogStatusResponse = z.infer<\n typeof publicConnectorCatalogStatusResponseSchema\n>;\nexport type PublicConnectorCatalogPermissionDetail = z.infer<\n typeof publicConnectorCatalogPermissionDetailSchema\n>;\nexport type PublicConnectorCatalogPermissionDetailResponse = z.infer<\n typeof publicConnectorCatalogPermissionDetailResponseSchema\n>;\n\nexport const zeroConnectorCatalogContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/connector-catalog\",\n headers: authHeadersSchema,\n responses: {\n 200: publicConnectorCatalogListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List public connector catalog metadata\",\n },\n status: {\n method: \"GET\",\n path: \"/api/zero/connector-catalog/status\",\n headers: authHeadersSchema,\n responses: {\n 200: publicConnectorCatalogStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List public connector catalog metadata with connection status\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/connector-catalog/:connectorRef\",\n headers: authHeadersSchema,\n pathParams: connectorCatalogPathParamsSchema,\n responses: {\n 200: publicConnectorCatalogDetailResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get public connector catalog metadata\",\n },\n permissions: {\n method: \"GET\",\n path: \"/api/zero/connector-catalog/:connectorRef/permissions\",\n headers: authHeadersSchema,\n pathParams: connectorCatalogPathParamsSchema,\n responses: {\n 200: publicConnectorCatalogPermissionDetailResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get public connector permission metadata\",\n },\n});\n\nexport type ZeroConnectorCatalogContract = typeof zeroConnectorCatalogContract;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const customConnectorFieldKindSchema = z.enum([\"secret\", \"variable\"]);\nexport type CustomConnectorFieldKind = z.infer<\n typeof customConnectorFieldKindSchema\n>;\n\nexport const customConnectorFieldSchema = z.object({\n key: z.string().min(1).max(64),\n label: z.string().min(1).max(128),\n kind: customConnectorFieldKindSchema,\n required: z.boolean(),\n description: z.string().max(512).optional(),\n});\nexport type CustomConnectorField = z.infer<typeof customConnectorFieldSchema>;\n\nexport const customConnectorHeaderInjectionSchema = z.object({\n name: z.string().min(1).max(128),\n valueTemplate: z.string().min(1).max(2048),\n});\nexport type CustomConnectorHeaderInjection = z.infer<\n typeof customConnectorHeaderInjectionSchema\n>;\n\nexport const customConnectorQueryInjectionSchema = z.object({\n name: z.string().min(1).max(128),\n valueTemplate: z.string().min(1).max(2048),\n});\nexport type CustomConnectorQueryInjection = z.infer<\n typeof customConnectorQueryInjectionSchema\n>;\n\n/**\n * Custom connector response — safe to return to any org member.\n * Never includes any secret material.\n */\nexport const customConnectorResponseSchema = z.object({\n id: z.string().uuid(),\n slug: z.string(),\n displayName: z.string(),\n prefixes: z.array(z.string()),\n headerName: z.string(),\n headerTemplate: z.string(),\n prefixTemplates: z.array(z.string()),\n fields: z.array(customConnectorFieldSchema),\n headerInjections: z.array(customConnectorHeaderInjectionSchema),\n queryInjections: z.array(customConnectorQueryInjectionSchema),\n connected: z.boolean(),\n missingRequiredFields: z.array(z.string()),\n configuredFieldKeys: z.array(z.string()),\n createdAt: z.string(),\n updatedAt: z.string(),\n hasSecret: z.boolean(),\n});\nexport type CustomConnectorResponse = z.infer<\n typeof customConnectorResponseSchema\n>;\n\nexport const customConnectorListResponseSchema = z.object({\n connectors: z.array(customConnectorResponseSchema),\n});\n\nconst customConnectorPrefixSchema = z\n .string()\n .min(1)\n .refine(\n (value) => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n },\n { message: \"Invalid URL\" },\n );\n\nexport const createCustomConnectorBodySchema = z.object({\n displayName: z.string().min(1).max(128),\n prefixes: z.array(customConnectorPrefixSchema).min(1).optional(),\n headerName: z.string().min(1).max(128).optional(),\n headerTemplate: z.string().min(1).optional(),\n prefixTemplates: z.array(z.string().min(1)).min(1).optional(),\n fields: z.array(customConnectorFieldSchema).optional(),\n headerInjections: z.array(customConnectorHeaderInjectionSchema).optional(),\n queryInjections: z.array(customConnectorQueryInjectionSchema).optional(),\n slug: z.string().optional(),\n});\nexport type CreateCustomConnectorBody = z.infer<\n typeof createCustomConnectorBodySchema\n>;\n\nexport const updateCustomConnectorBodySchema = z.object({\n displayName: z.string().min(1).max(128),\n prefixTemplates: z.array(z.string().min(1)).min(1),\n fields: z.array(customConnectorFieldSchema),\n headerInjections: z.array(customConnectorHeaderInjectionSchema),\n queryInjections: z.array(customConnectorQueryInjectionSchema),\n});\nexport type UpdateCustomConnectorBody = z.infer<\n typeof updateCustomConnectorBodySchema\n>;\n\nexport const setCustomConnectorSecretBodySchema = z.object({\n value: z.string().min(1),\n});\n\nexport const customConnectorValueInputSchema = z.object({\n key: z.string().min(1).max(64),\n kind: customConnectorFieldKindSchema,\n value: z.string().min(1),\n});\nexport type CustomConnectorValueInput = z.infer<\n typeof customConnectorValueInputSchema\n>;\n\nexport const patchCustomConnectorBodySchema = z.object({\n displayName: z.string().min(1).max(128),\n});\nexport type PatchCustomConnectorBody = z.infer<\n typeof patchCustomConnectorBodySchema\n>;\n\nexport const customConnectorProposalSchema = z.object({\n operation: z.enum([\"create\", \"update\"]),\n connectorId: z.string().uuid().optional(),\n displayName: z.string().min(1).max(128),\n prefixTemplates: z.array(z.string().min(1)).min(1),\n fields: z.array(customConnectorFieldSchema),\n headerInjections: z.array(customConnectorHeaderInjectionSchema),\n queryInjections: z.array(customConnectorQueryInjectionSchema),\n notes: z.string().max(2048).optional(),\n});\nexport type CustomConnectorProposal = z.infer<\n typeof customConnectorProposalSchema\n>;\n\nexport const saveCustomConnectorProposalBodySchema = z.object({\n proposal: customConnectorProposalSchema,\n values: z.array(customConnectorValueInputSchema),\n agentId: z.string().uuid().optional(),\n});\nexport type SaveCustomConnectorProposalBody = z.infer<\n typeof saveCustomConnectorProposalBodySchema\n>;\n\nexport const saveCustomConnectorProposalResponseSchema = z.object({\n connector: customConnectorResponseSchema,\n authorizedAgentId: z.string().uuid().optional(),\n});\nexport type SaveCustomConnectorProposalResponse = z.infer<\n typeof saveCustomConnectorProposalResponseSchema\n>;\n\n/**\n * Zero custom connectors contract for /api/zero/custom-connectors\n * GET: list all org custom connectors (with per-user hasSecret flag)\n * POST: create a new custom connector (admin only)\n */\nexport const zeroCustomConnectorsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/custom-connectors\",\n headers: authHeadersSchema,\n responses: {\n 200: customConnectorListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List org custom connectors\",\n },\n create: {\n method: \"POST\",\n path: \"/api/zero/custom-connectors\",\n headers: authHeadersSchema,\n body: createCustomConnectorBodySchema,\n responses: {\n 201: customConnectorResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create an org custom connector\",\n },\n});\nexport type ZeroCustomConnectorsContract = typeof zeroCustomConnectorsContract;\n\n/**\n * Zero custom connector by id contract for /api/zero/custom-connectors/[id]\n * DELETE: delete a custom connector (admin only — cascades secrets)\n * PATCH: rename a custom connector (admin only — displayName only in v1)\n */\nexport const zeroCustomConnectorByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/custom-connectors/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: customConnectorResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get an org custom connector\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/custom-connectors/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete an org custom connector\",\n },\n patch: {\n method: \"PATCH\",\n path: \"/api/zero/custom-connectors/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: patchCustomConnectorBodySchema,\n responses: {\n 200: customConnectorResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Rename an org custom connector\",\n },\n});\nexport type ZeroCustomConnectorByIdContract =\n typeof zeroCustomConnectorByIdContract;\n\n/**\n * Zero custom connector secret contract for /api/zero/custom-connectors/[id]/secret\n * PUT: set the calling user's secret for this connector\n * DELETE: clear the calling user's secret\n */\nexport const zeroCustomConnectorSecretContract = c.router({\n set: {\n method: \"PUT\",\n path: \"/api/zero/custom-connectors/:id/secret\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: setCustomConnectorSecretBodySchema,\n responses: {\n 204: c.noBody(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Set the calling user's secret for a custom connector\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/custom-connectors/:id/secret\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Clear the calling user's secret for a custom connector\",\n },\n});\nexport type ZeroCustomConnectorSecretContract =\n typeof zeroCustomConnectorSecretContract;\n\nexport const zeroCustomConnectorProposalContract = c.router({\n save: {\n method: \"POST\",\n path: \"/api/zero/custom-connectors/proposals/save\",\n headers: authHeadersSchema,\n body: saveCustomConnectorProposalBodySchema,\n responses: {\n 200: saveCustomConnectorProposalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Save a custom connector proposal\",\n },\n});\nexport type ZeroCustomConnectorProposalContract =\n typeof zeroCustomConnectorProposalContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroRunAgentEventsContract,\n zeroRunContextContract,\n} from \"@vm0/api-contracts/contracts/zero-runs\";\nimport type { AgentEventsResponse } from \"@vm0/api-contracts/contracts/runs\";\nimport type { RunContextResponse } from \"@vm0/api-contracts/contracts/zero-runs\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\ninterface LogPaginationOptions {\n readonly since?: number;\n readonly sinceTime?: number;\n readonly cursor?: string;\n readonly limit?: number;\n readonly order?: \"asc\" | \"desc\";\n}\n\nexport async function getZeroRunAgentEvents(\n id: string,\n options?: LogPaginationOptions,\n): Promise<AgentEventsResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroRunAgentEventsContract, config);\n const result = await client.getAgentEvents({\n params: { id },\n query: {\n since: options?.since,\n sinceTime: options?.sinceTime,\n cursor: options?.cursor,\n limit: options?.limit,\n order: options?.order,\n },\n });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to get zero run events for \"${id}\"`);\n}\n\nexport async function getZeroRunContext(\n id: string,\n): Promise<RunContextResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroRunContextContract, config);\n const result = await client.getContext({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to get zero run context for \"${id}\"`);\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n executionFirewallBuiltinEntrySchema,\n networkPoliciesSchema,\n} from \"@vm0/connectors/firewall-types\";\nimport {\n createRunResponseSchema,\n getRunResponseSchema,\n cancelRunResponseSchema,\n agentEventsResponseSchema,\n queueResponseSchema,\n unifiedRunRequestSchema,\n networkLogsResponseSchema,\n logsSearchQuerySchema,\n logsSearchResponseSchema,\n createLogPaginationQuerySchema,\n} from \"./runs\";\nimport { sandboxReuseResultSchema } from \"./webhooks\";\n\n/**\n * Zero run request schema — subset of unified schema.\n * Server-side defaults are injected by createZeroRun():\n * artifacts, disallowedTools.\n * Fields not used by zero triggers are omitted:\n * triggerSource, vars, secrets, volumeVersions, permissionPolicies.\n */\nconst zeroRunRequestSchema = unifiedRunRequestSchema\n .omit({\n triggerSource: true,\n artifacts: true,\n disallowedTools: true,\n volumeVersions: true,\n vars: true,\n secrets: true,\n agentComposeId: true,\n appendSystemPrompt: true,\n modelProviderType: true,\n permissionPolicies: true,\n })\n .extend({\n agentId: z.string().optional(),\n modelProvider: z.string().optional(),\n });\n\nconst c = initContract();\n\nconst zeroLogPaginationQuerySchema = createLogPaginationQuerySchema({\n cursorKind: \"sequence\",\n});\n\nconst zeroNetworkLogPaginationQuerySchema = createLogPaginationQuerySchema({\n cursorKind: \"time\",\n maxLimit: 500,\n defaultLimit: 500,\n defaultOrder: \"asc\",\n});\n\n/**\n * Zero runs main contract (POST /api/zero/runs)\n * Proxies to runsMainContract.create\n */\nexport const zeroRunsMainContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/runs\",\n headers: authHeadersSchema,\n body: zeroRunRequestSchema,\n responses: {\n 201: createRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 429: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create and execute agent run (zero proxy)\",\n },\n});\n\n/**\n * Zero runs by ID contract (GET /api/zero/runs/:id)\n * Proxies to runsByIdContract\n */\nexport const zeroRunsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/runs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n responses: {\n 200: getRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run by ID (zero proxy)\",\n },\n});\n\n/**\n * Zero runs cancel contract (POST /api/zero/runs/:id/cancel)\n * Proxies to runsCancelContract\n */\nexport const zeroRunsCancelContract = c.router({\n cancel: {\n method: \"POST\",\n path: \"/api/zero/runs/:id/cancel\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n body: z.undefined(),\n responses: {\n 200: cancelRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Cancel a pending or running run (zero proxy)\",\n },\n});\n\n/**\n * Zero runs queue contract (GET /api/zero/runs/queue)\n * Proxies to runsQueueContract\n */\nexport const zeroRunsQueueContract = c.router({\n getQueue: {\n method: \"GET\",\n path: \"/api/zero/runs/queue\",\n headers: authHeadersSchema,\n responses: {\n 200: queueResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get org run queue status (zero proxy)\",\n },\n});\n\n/**\n * Zero run agent events contract (GET /api/zero/runs/:id/telemetry/agent)\n * Proxies to runAgentEventsContract\n */\nexport const zeroRunAgentEventsContract = c.router({\n getAgentEvents: {\n method: \"GET\",\n path: \"/api/zero/runs/:id/telemetry/agent\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n query: zeroLogPaginationQuerySchema,\n responses: {\n 200: agentEventsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent events with pagination (zero proxy)\",\n },\n});\n\n/**\n * Run context snapshot — sanitized execution context for debugging.\n * Dynamic fields (environment, firewalls, volumes, artifact) are stored in Axiom.\n * Static fields (prompt, vars, secretNames) are merged from agent_runs at query time.\n */\nconst runContextVolumeSchema = z.object({\n name: z.string(),\n mountPath: z.string(),\n vasStorageName: z.string(),\n vasVersionId: z.string(),\n});\n\nconst runContextArtifactSchema = z.object({\n mountPath: z.string(),\n vasStorageName: z.string(),\n vasVersionId: z.string(),\n});\n\nconst runContextSanitizedFirewallSchema = z.object({\n name: z.string(),\n apis: z.array(\n z.object({\n base: z.string(),\n permissions: z\n .array(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n rules: z.array(z.string()),\n }),\n )\n .optional(),\n }),\n ),\n});\n\nconst runContextFirewallSchema = z.union([\n executionFirewallBuiltinEntrySchema,\n runContextSanitizedFirewallSchema,\n]);\n\nexport const runContextResponseSchema = z.object({\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n runId: z.string(),\n sessionId: z.string().nullable(),\n cliAgentType: z.string().optional(),\n secretNames: z.array(z.string()),\n vars: z.record(z.string(), z.string()).nullable(),\n environment: z.record(z.string(), z.string()),\n firewalls: z.array(runContextFirewallSchema),\n networkPolicies: networkPoliciesSchema.nullable(),\n volumes: z.array(runContextVolumeSchema),\n artifact: runContextArtifactSchema.nullable(),\n featureFlags: z.record(z.string(), z.boolean()).nullable(),\n});\n\n/**\n * Zero run context contract (GET /api/zero/runs/:id/context)\n * Returns sanitized execution context snapshot for debugging\n */\nexport const zeroRunContextContract = c.router({\n getContext: {\n method: \"GET\",\n path: \"/api/zero/runs/:id/context\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n responses: {\n 200: runContextResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get run execution context snapshot for debugging\",\n },\n});\n\n/**\n * Zero run network logs contract (GET /api/zero/runs/:id/network)\n * Returns mitmproxy network logs for a run\n */\nexport const zeroRunNetworkLogsContract = c.router({\n getNetworkLogs: {\n method: \"GET\",\n path: \"/api/zero/runs/:id/network\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n query: zeroNetworkLogPaginationQuerySchema,\n responses: {\n 200: networkLogsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get network logs for a run\",\n },\n});\n\n/**\n * Zero run runner contract (GET /api/zero/runs/:id/runner)\n * Returns runner-level metadata about how the run was provisioned\n * (sandbox reuse decision, etc.). Kept separate from logDetailSchema\n * so runner-tab fields can grow without polluting the generic log\n * detail response.\n */\nconst runRunnerResponseSchema = z.object({\n sandboxReuseResult: sandboxReuseResultSchema.nullable(),\n});\n\nexport const zeroRunRunnerContract = c.router({\n getRunner: {\n method: \"GET\",\n path: \"/api/zero/runs/:id/runner\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(\"Run ID must be a valid UUID\"),\n }),\n responses: {\n 200: runRunnerResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get runner-level metadata for a run\",\n },\n});\n\n/**\n * Zero logs search contract (GET /api/zero/logs/search)\n * Search agent events across runs via zero token auth\n */\nexport const zeroLogsSearchContract = c.router({\n searchLogs: {\n method: \"GET\",\n path: \"/api/zero/logs/search\",\n headers: authHeadersSchema,\n query: logsSearchQuerySchema,\n responses: {\n 200: logsSearchResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Search agent events across runs (zero proxy)\",\n },\n});\n\n// Inferred types from Zod schemas\nexport type RunContextResponse = z.infer<typeof runContextResponseSchema>;\nexport type RunRunnerResponse = z.infer<typeof runRunnerResponseSchema>;\n\n// Type exports\nexport type ZeroLogsSearchContract = typeof zeroLogsSearchContract;\nexport type ZeroRunsMainContract = typeof zeroRunsMainContract;\nexport type ZeroRunsByIdContract = typeof zeroRunsByIdContract;\nexport type ZeroRunsCancelContract = typeof zeroRunsCancelContract;\nexport type ZeroRunsQueueContract = typeof zeroRunsQueueContract;\nexport type ZeroRunAgentEventsContract = typeof zeroRunAgentEventsContract;\nexport type ZeroRunContextContract = typeof zeroRunContextContract;\nexport type ZeroRunNetworkLogsContract = typeof zeroRunNetworkLogsContract;\nexport type ZeroRunRunnerContract = typeof zeroRunRunnerContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n artifactMissingRootPolicySchema,\n RESUME_SESSION_HISTORY_MAX_BYTES,\n sessionHistoryDownloadSourceSchema,\n sessionHistoryEncodingSchema,\n secretConnectorMetadataMapSchema,\n} from \"./runners\";\nimport { eventSequenceNumberSchema, networkLogEntrySchema } from \"./runs\";\nimport {\n storageTypeSchema,\n fileEntryWithHashSchema,\n storageChangesSchema,\n presignedUploadSchema,\n} from \"./storages\";\n\nconst c = initContract();\n\n// Hash-backed resume history is keyed and verified as lowercase SHA-256 hex.\n// Accepting other 64-character strings would defer bad input until runner claim.\nconst sha256HexSchema = z\n .string()\n .regex(\n /^[a-f0-9]{64}$/,\n \"hash must be a lowercase 64-character SHA-256 hex string\",\n );\n\nconst thirdPartyWebhookErrorSchema = z.object({ error: z.string() });\nconst thirdPartyWebhookOkSchema = z.union([\n z.string(),\n z.object({ message: z.literal(\"pong\") }),\n]);\n\n/**\n * Clerk third-party webhook contract for /api/webhooks/clerk.\n */\nexport const webhookClerkContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/clerk\",\n body: c.type<string>(),\n responses: {\n 200: thirdPartyWebhookOkSchema,\n 401: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle Clerk organization and user webhooks\",\n },\n});\n\n/**\n * GitHub App third-party webhook contract for /api/webhooks/github.\n */\nexport const webhookGithubContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/github\",\n body: c.type<string>(),\n responses: {\n 200: thirdPartyWebhookOkSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle GitHub App webhooks\",\n },\n});\n\n/**\n * Stripe third-party webhook contract for /api/webhooks/stripe.\n */\nexport const webhookStripeContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/stripe\",\n body: c.type<string>(),\n responses: {\n 200: thirdPartyWebhookOkSchema,\n 401: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle Stripe billing webhooks\",\n },\n});\n\nconst gmailWebhookResponseSchema = z.object({\n success: z.literal(true),\n watchStates: z.number(),\n dispatched: z.number(),\n duplicates: z.number(),\n});\n\nconst googleCalendarWebhookResponseSchema = z.object({\n success: z.literal(true),\n watchStates: z.number(),\n dispatched: z.number(),\n duplicates: z.number(),\n});\n\nconst googleWorkspaceEventsWebhookResponseSchema = z.object({\n success: z.literal(true),\n watchStates: z.number(),\n dispatched: z.number(),\n duplicates: z.number(),\n});\n\nconst notionWebhookResponseSchema = z.object({\n success: z.literal(true),\n kind: z.enum([\"verification\", \"event\"]),\n pending: z.number(),\n refreshed: z.number(),\n duplicates: z.number(),\n});\n\nconst workflowTriggerWebhookResponseSchema = z.object({\n success: z.literal(true),\n duplicate: z.boolean(),\n runId: z.string().uuid().optional(),\n});\n\n/**\n * Gmail Pub/Sub push webhook contract for /api/webhooks/gmail.\n */\nexport const webhookGmailContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/gmail\",\n body: c.type<string>(),\n responses: {\n 200: gmailWebhookResponseSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 429: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle Gmail Pub/Sub push notifications\",\n },\n});\n\n/**\n * Google Calendar push webhook contract for /api/webhooks/google-calendar.\n */\nexport const webhookGoogleCalendarContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/google-calendar\",\n body: c.type<string>(),\n responses: {\n 200: googleCalendarWebhookResponseSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 429: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle Google Calendar push notifications\",\n },\n});\n\n/**\n * Google Workspace Events Pub/Sub push webhook contract for\n * /api/webhooks/google-workspace-events.\n */\nexport const webhookGoogleWorkspaceEventsContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/google-workspace-events\",\n body: c.type<string>(),\n responses: {\n 200: googleWorkspaceEventsWebhookResponseSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 429: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle Google Workspace Events Pub/Sub push notifications\",\n },\n});\n\n/**\n * Notion webhook contract for /api/webhooks/notion.\n */\nexport const webhookNotionContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/notion\",\n body: c.type<string>(),\n responses: {\n 200: notionWebhookResponseSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle Notion webhook events\",\n },\n});\n\n/**\n * Workflow trigger inbound webhook contract for\n * /api/webhooks/workflow-triggers/:token.\n */\nexport const webhookWorkflowTriggerContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/workflow-triggers/:token\",\n pathParams: z.object({\n token: z.string().min(1),\n }),\n body: c.type<string>(),\n responses: {\n 200: workflowTriggerWebhookResponseSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 404: thirdPartyWebhookErrorSchema,\n 413: thirdPartyWebhookErrorSchema,\n 429: thirdPartyWebhookErrorSchema,\n 500: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle inbound workflow trigger webhooks\",\n },\n});\n\nexport const webhookBuiltInGenerationFalContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/built-in-generations/fal/:generationId\",\n pathParams: z.object({\n generationId: z.uuid(),\n }),\n query: z.object({\n token: z.string().min(1),\n visualKey: z.string().min(1).optional(),\n }),\n body: c.type<string>(),\n responses: {\n 200: thirdPartyWebhookOkSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle fal built-in generation webhooks\",\n },\n});\n\nexport const webhookBuiltInGenerationBytePlusContract = c.router({\n post: {\n method: \"POST\",\n path: \"/api/webhooks/built-in-generations/byteplus/:generationId\",\n pathParams: z.object({\n generationId: z.uuid(),\n }),\n query: z.object({\n token: z.string().min(1),\n visualKey: z.string().min(1).optional(),\n }),\n body: c.type<string>(),\n responses: {\n 200: thirdPartyWebhookOkSchema,\n 400: thirdPartyWebhookErrorSchema,\n 401: thirdPartyWebhookErrorSchema,\n 503: thirdPartyWebhookErrorSchema,\n },\n summary: \"Handle BytePlus built-in generation webhooks\",\n },\n});\n\n/**\n * Sandbox reuse outcome. One enum value per code branch in the runner's\n * reuse-decision block. `reused` means the sandbox was unparked from the idle\n * pool; the remaining variants describe why reuse did not happen.\n *\n * `featureDisabled` is legacy: written by older runners while reuse was gated\n * by the `sandboxReuse` feature flag (removed when reuse went to full rollout\n * in #10744). Retained here so historical `agent_runs.sandbox_reuse_result`\n * rows still parse on read. The runner no longer emits it.\n */\nexport const sandboxReuseResultSchema = z.enum([\n \"reused\",\n \"featureDisabled\",\n \"noSessionId\",\n \"poolMiss\",\n \"profileMismatch\",\n \"deviceLimitMismatch\",\n \"unparkFailed\",\n]);\n\nexport type SandboxReuseResult = z.infer<typeof sandboxReuseResultSchema>;\n\n/**\n * Agent event schema for webhook events\n * Note: Claude Code JSONL events have varying structures with different fields\n * depending on the event type (system, assistant, user, result, etc.)\n * We require `type` and `sequenceNumber`, and allow any other fields to pass through\n */\nconst agentEventSchema = z\n .object({\n type: z.string(),\n sequenceNumber: eventSequenceNumberSchema,\n })\n .passthrough();\n\n/**\n * Artifact snapshots schema — canonical\n * `Array<{name, version, mountPath, missingRootPolicy?}>` form. Legacy\n * `Record<name, version>` support was removed in #10913 after the DB\n * migration and guest-agent writer flip completed.\n */\nconst artifactSnapshotsSchema = z.array(\n z.object({\n name: z.string(),\n version: z.string(),\n mountPath: z.string(),\n missingRootPolicy: artifactMissingRootPolicySchema.optional(),\n }),\n);\n\n/**\n * Volume versions snapshot schema\n */\nconst volumeVersionsSnapshotSchema = z.object({\n versions: z.record(z.string(), z.string()),\n});\n\nconst firewallAuthErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string(),\n connectors: z.array(z.string()).optional(),\n failureReason: z\n .enum([\"upstream_provider\", \"reconnect_required\"])\n .optional(),\n }),\n});\n\nconst firewallAwsSigv4AuthSchema = z\n .object({\n accessKeyId: z.string().min(1),\n secretAccessKey: z.string().min(1),\n sessionToken: z.string().min(1).optional(),\n })\n .strict();\n\nconst firewallAuthResponseSchema = z.object({\n headers: z.record(z.string(), z.string()),\n base: z.string().optional(),\n query: z.record(z.string(), z.string()).optional(),\n awsSigv4: firewallAwsSigv4AuthSchema.optional(),\n // Effective addon cache expiry as Unix seconds. Access token expiry is the\n // normal source; billable firewall auth can shorten it to force credit\n // re-authorization. Null means non-expiring only for non-billable auth.\n expiresAt: z.number().nullable(),\n resolvedSecrets: z.array(z.string()),\n refreshedConnectors: z.array(z.string()),\n refreshedSecrets: z.array(z.string()),\n});\n\nexport const webhookFirewallAuthContract = c.router({\n /**\n * POST /api/webhooks/agent/firewall/auth\n * Resolve firewall auth templates and refresh access tokens on demand.\n */\n resolve: {\n method: \"POST\",\n path: \"/api/webhooks/agent/firewall/auth\",\n headers: authHeadersSchema,\n body: z.object({\n // Encrypted runtime secret namespace. After decryption, keys are the\n // `NAME` in `${{ secrets.NAME }}`.\n encryptedSecrets: z.string().min(1),\n authHeaders: z.record(z.string(), z.string()),\n authBase: z.string().optional(),\n authQuery: z.record(z.string(), z.string()).optional(),\n authAwsSigv4: firewallAwsSigv4AuthSchema.optional(),\n // Maps firewall auth secret env aliases (the `NAME` in `${{ secrets.NAME }}`)\n // to the connector or provider owner that can refresh/resolve access.\n secretConnectorMap: z.record(z.string(), z.string()).optional(),\n // Same keys as secretConnectorMap; adds source details when the owner\n // alone is not enough to locate access storage.\n secretConnectorMetadataMap: secretConnectorMetadataMapSchema.optional(),\n vars: z.record(z.string(), z.string()).optional(),\n // Set by mitm from billableFirewalls. Server uses this only to bound\n // auth cache lifetime by the current credit authorization lease.\n firewallBillable: z.boolean().optional(),\n forceRefresh: z.boolean().optional(),\n }),\n responses: {\n 200: firewallAuthResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 424: firewallAuthErrorSchema,\n 502: firewallAuthErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Resolve firewall auth templates\",\n },\n});\n\n/**\n * Webhook events contract for /api/webhooks/agent/events\n */\nexport const webhookEventsContract = c.router({\n /**\n * POST /api/webhooks/agent/events\n * Receive agent events from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/events\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n events: z.array(agentEventSchema).min(1, \"events array cannot be empty\"),\n }),\n responses: {\n 200: z.object({\n received: z.number(),\n firstSequence: z.number(),\n lastSequence: z.number(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive agent events from sandbox\",\n },\n});\n\n/**\n * Webhook complete contract for /api/webhooks/agent/complete\n */\nexport const webhookCompleteContract = c.router({\n /**\n * POST /api/webhooks/agent/complete\n * Handle agent run completion (success or failure)\n */\n complete: {\n method: \"POST\",\n path: \"/api/webhooks/agent/complete\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n exitCode: z.number(),\n error: z.string().optional(),\n lastEventSequence: eventSequenceNumberSchema.optional(),\n // Sandbox id the run executed against. Optional because a run that fails\n // before VM creation has no sandbox. Persisted to agent_runs.sandbox_id;\n // the 255-char cap matches the DB column (defense in depth).\n sandboxId: z.string().max(255).optional(),\n // Sandbox reuse outcome. One enum value covers both \"reused\" and the\n // non-reuse reasons, because (reused, reason) is a partial function —\n // encoding it as one field makes inconsistent states unrepresentable.\n // Optional/nullable for old runners and historical rows.\n sandboxReuseResult: sandboxReuseResultSchema.optional(),\n }),\n responses: {\n 200: z.object({\n success: z.boolean(),\n status: z.enum([\"completed\", \"failed\"]),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Handle agent run completion\",\n },\n});\n\n/**\n * Webhook checkpoints contract for /api/webhooks/agent/checkpoints\n */\nexport const webhookCheckpointsContract = c.router({\n /**\n * POST /api/webhooks/agent/checkpoints\n * Create a recoverable checkpoint for an agent run.\n */\n create: {\n method: \"POST\",\n path: \"/api/webhooks/agent/checkpoints\",\n headers: authHeadersSchema,\n body: z\n .object({\n runId: z.string().min(1, \"runId is required\"),\n cliAgentType: z.string().min(1, \"cliAgentType is required\"),\n cliAgentSessionId: z.string().min(1, \"cliAgentSessionId is required\"),\n cliAgentSessionHistoryHash: sha256HexSchema,\n // Multi-artifact snapshot payload. Canonical\n // `Array<{name, version, mountPath}>` form persisted verbatim to\n // checkpoints.artifact_snapshots.\n artifactSnapshots: artifactSnapshotsSchema.optional(),\n volumeVersionsSnapshot: volumeVersionsSnapshotSchema.optional(),\n })\n .strict(),\n responses: {\n 200: z.object({\n checkpointId: z.string(),\n agentSessionId: z.string(),\n conversationId: z.string(),\n artifacts: artifactSnapshotsSchema.optional(),\n volumes: z.record(z.string(), z.string()).optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create checkpoint for agent run\",\n },\n});\n\n/**\n * Webhook checkpoint prepare-history contract for /api/webhooks/agent/checkpoints/prepare-history\n * Returns a presigned URL for uploading session history directly to S3,\n * bypassing Vercel's 4.5MB body size limit.\n */\nexport const webhookCheckpointsPrepareHistoryContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/webhooks/agent/checkpoints/prepare-history\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n hash: sha256HexSchema,\n rawSize: z\n .number()\n .int()\n .positive(\"rawSize must be a positive integer\")\n .max(RESUME_SESSION_HISTORY_MAX_BYTES),\n encodedSize: z\n .number()\n .int()\n .positive(\"encodedSize must be a positive integer\")\n .max(RESUME_SESSION_HISTORY_MAX_BYTES),\n encoding: sessionHistoryEncodingSchema.optional(),\n }),\n responses: {\n 200: z.object({\n presignedUrl: z.string().optional(),\n existing: z.boolean(),\n encoding: sessionHistoryEncodingSchema.optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get presigned URL for uploading session history to S3\",\n },\n});\n\n/**\n * Webhook heartbeat contract for /api/webhooks/agent/heartbeat\n */\nexport const webhookHeartbeatContract = c.router({\n /**\n * POST /api/webhooks/agent/heartbeat\n * Receive heartbeat signals from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/heartbeat\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n }),\n responses: {\n 200: z.object({\n ok: z.boolean(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive heartbeat from sandbox\",\n },\n});\n\n/**\n * Webhook storages contract for /api/webhooks/agent/storages\n * Note: This endpoint handles multipart form data upload\n * The contract defines the JSON response schema\n */\nexport const webhookStoragesContract = c.router({\n /**\n * POST /api/webhooks/agent/storages\n * Create a new version of a storage from sandbox\n *\n * Form fields:\n * - runId: string (required)\n * - storageName: string (required)\n * - message: string (optional)\n * - file: File (required, tar.gz archive)\n */\n upload: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: z.object({\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage version from sandbox\",\n },\n});\n\n/**\n * Webhook storages incremental contract for /api/webhooks/agent/storages/incremental\n * Note: This endpoint handles multipart form data upload\n */\nexport const webhookStoragesIncrementalContract = c.router({\n /**\n * POST /api/webhooks/agent/storages/incremental\n * Create a new version using incremental upload\n *\n * Form fields:\n * - runId: string (required)\n * - storageName: string (required)\n * - baseVersion: string (required)\n * - changes: JSON string (required)\n * - message: string (optional)\n * - file: File (optional, tar.gz of changed files)\n */\n upload: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/incremental\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: z.object({\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n incrementalStats: z\n .object({\n addedFiles: z.number(),\n modifiedFiles: z.number(),\n deletedFiles: z.number(),\n unchangedFiles: z.number(),\n bytesUploaded: z.number(),\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage version incrementally from sandbox\",\n },\n});\n\n/**\n * Metric data point schema\n */\nconst metricDataSchema = z.object({\n ts: z.string(),\n cpu: z.number(),\n mem_used: z.number(),\n mem_total: z.number(),\n disk_used: z.number(),\n disk_total: z.number(),\n});\n\nconst sessionHistorySizeBucketSchema = z.enum([\n \"lt_64_kib\",\n \"64_256_kib\",\n \"256_kib_1_mib\",\n \"1_4_mib\",\n \"4_16_mib\",\n \"16_64_mib\",\n \"64_128_mib\",\n]);\n\nconst sessionHistoryCompressionRatioBucketSchema = z.enum([\n \"identity\",\n \"lt_0_25\",\n \"0_25_0_5\",\n \"0_5_0_75\",\n \"0_75_1\",\n \"ge_1\",\n]);\n\nconst booleanStringSchema = z.enum([\"true\", \"false\"]);\n\nconst sessionHistoryContentLengthStateSchema = z.enum([\n \"absent\",\n \"matches_expected\",\n \"mismatches_expected\",\n \"present_without_expected\",\n \"oversized\",\n]);\n\nconst sessionHistoryContentEncodingStateSchema = z.enum([\n \"absent\",\n \"gzip\",\n \"zstd\",\n \"other\",\n]);\n\nconst sessionHistoryTransferEncodingStateSchema = z.enum([\n \"absent\",\n \"chunked\",\n \"other\",\n]);\n\nconst sandboxOperationDownloadSourceSchema = z\n .preprocess((value) => {\n const parsed = sessionHistoryDownloadSourceSchema.safeParse(value);\n if (parsed.success) {\n return parsed.data;\n }\n if (typeof value === \"string\") {\n return undefined;\n }\n return value;\n }, sessionHistoryDownloadSourceSchema.optional())\n .optional();\n\n/**\n * Sandbox operation schema for internal sandbox operations (init, storage, cli, checkpoint, cleanup)\n */\nconst sandboxOperationSchema = z.object({\n ts: z.string(),\n action_type: z.string(),\n duration_ms: z.number(),\n success: z.boolean(),\n error: z.string().optional(),\n encoding: sessionHistoryEncodingSchema.optional(),\n session_history_raw_size_bucket: sessionHistorySizeBucketSchema.optional(),\n session_history_encoded_size_bucket:\n sessionHistorySizeBucketSchema.optional(),\n session_history_compression_ratio_bucket:\n sessionHistoryCompressionRatioBucketSchema.optional(),\n session_history_ref_seen_recently: booleanStringSchema.optional(),\n session_history_ref_download_inflight: booleanStringSchema.optional(),\n session_history_content_length_state:\n sessionHistoryContentLengthStateSchema.optional(),\n session_history_content_encoding_state:\n sessionHistoryContentEncodingStateSchema.optional(),\n session_history_transfer_encoding_state:\n sessionHistoryTransferEncodingStateSchema.optional(),\n session_history_download_source: sandboxOperationDownloadSourceSchema,\n});\n\n/**\n * Webhook telemetry contract for /api/webhooks/agent/telemetry\n */\nexport const webhookTelemetryContract = c.router({\n /**\n * POST /api/webhooks/agent/telemetry\n * Receive telemetry data (system log, metrics, network logs, and sandbox operations) from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/telemetry\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n systemLog: z.string().optional(),\n metrics: z.array(metricDataSchema).optional(),\n networkLogs: z.array(networkLogEntrySchema).optional(),\n sandboxOperations: z.array(sandboxOperationSchema).optional(),\n }),\n responses: {\n 200: z.object({\n success: z.boolean(),\n id: z.string(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive telemetry data from sandbox\",\n },\n});\n\n// ============================================================================\n// Direct Upload Contracts (Webhook endpoints for sandbox)\n// ============================================================================\n\n/**\n * Webhook storage prepare contract for /api/webhooks/agent/storages/prepare\n *\n * Sandbox version of storage prepare endpoint.\n * Uses JWT sandbox token authentication and verifies runId matches token.\n */\nexport const webhookStoragesPrepareContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/prepare\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"), // Required for webhook auth\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n files: z.array(fileEntryWithHashSchema),\n parentVersionId: z.string().optional(),\n force: z.boolean().optional(),\n baseVersion: z.string().optional(),\n changes: storageChangesSchema.optional(),\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n existing: z.boolean(),\n uploads: z\n .object({\n archive: presignedUploadSchema,\n manifest: presignedUploadSchema,\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Prepare for direct S3 upload from sandbox\",\n },\n});\n\n/**\n * Webhook storage commit contract for /api/webhooks/agent/storages/commit\n *\n * Sandbox version of storage commit endpoint.\n * Uses JWT sandbox token authentication and verifies runId matches token.\n */\nexport const webhookStoragesCommitContract = c.router({\n commit: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/commit\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"), // Required for webhook auth\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n versionId: z.string().min(1, \"Version ID is required\"),\n parentVersionId: z.string().optional(),\n files: z.array(fileEntryWithHashSchema),\n message: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.literal(true),\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n deduplicated: z.boolean().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema, // S3 files missing\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Commit uploaded storage from sandbox\",\n },\n});\n\nexport type WebhookEventsContract = typeof webhookEventsContract;\nexport type WebhookClerkContract = typeof webhookClerkContract;\nexport type WebhookGithubContract = typeof webhookGithubContract;\nexport type WebhookGmailContract = typeof webhookGmailContract;\nexport type WebhookGoogleCalendarContract =\n typeof webhookGoogleCalendarContract;\nexport type WebhookGoogleWorkspaceEventsContract =\n typeof webhookGoogleWorkspaceEventsContract;\nexport type WebhookStripeContract = typeof webhookStripeContract;\nexport type WebhookWorkflowTriggerContract =\n typeof webhookWorkflowTriggerContract;\nexport type WebhookBuiltInGenerationFalContract =\n typeof webhookBuiltInGenerationFalContract;\nexport type WebhookBuiltInGenerationBytePlusContract =\n typeof webhookBuiltInGenerationBytePlusContract;\nexport type WebhookFirewallAuthContract = typeof webhookFirewallAuthContract;\nexport type WebhookCompleteContract = typeof webhookCompleteContract;\nexport type WebhookCheckpointsContract = typeof webhookCheckpointsContract;\nexport type WebhookCheckpointsPrepareHistoryContract =\n typeof webhookCheckpointsPrepareHistoryContract;\nexport type WebhookHeartbeatContract = typeof webhookHeartbeatContract;\nexport type WebhookStoragesContract = typeof webhookStoragesContract;\nexport type WebhookStoragesIncrementalContract =\n typeof webhookStoragesIncrementalContract;\nexport type WebhookTelemetryContract = typeof webhookTelemetryContract;\nexport type WebhookStoragesPrepareContract =\n typeof webhookStoragesPrepareContract;\nexport type WebhookStoragesCommitContract =\n typeof webhookStoragesCommitContract;\n\n/**\n * Webhook usage event contract for /api/webhooks/agent/usage-event\n *\n * Receives billing usage records from the sandbox for persistence in the\n * `usage_event` ledger. Reporters send `{ runId, events }` batches.\n */\nconst webhookUsageEventItemSchema = z\n .object({\n idempotencyKey: z.uuid(),\n kind: z.enum([\"connector\", \"model\", \"image\"]),\n provider: z.string().min(1).max(100),\n category: z.string().min(1).max(100),\n quantity: z.number().int().min(0),\n })\n .strict();\n\nexport const webhookUsageEventContract = c.router({\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/usage-event\",\n headers: authHeadersSchema,\n body: z\n .object({\n runId: z.string().min(1, \"runId is required\"),\n events: z.array(webhookUsageEventItemSchema).min(1).max(100),\n })\n .strict(),\n responses: {\n 200: z.object({\n success: z.boolean(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive billing usage event data from sandbox\",\n },\n});\n\n/**\n * Webhook model usage observation contract for\n * /api/webhooks/agent/model-usage-observation\n *\n * Receives model token observations from the sandbox for model usage statistics.\n * This endpoint is not a billing ledger input.\n */\nconst modelUsageObservationCategorySchema = z.enum([\n \"tokens.input\",\n \"tokens.output\",\n \"tokens.cache_read\",\n \"tokens.cache_creation\",\n]);\n\nconst webhookModelUsageObservationItemSchema = z\n .object({\n idempotencyKey: z.uuid(),\n model: z.string().min(1).max(255),\n category: modelUsageObservationCategorySchema,\n quantity: z.number().int().min(1),\n })\n .strict();\n\nexport const webhookModelUsageObservationContract = c.router({\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/model-usage-observation\",\n headers: authHeadersSchema,\n body: z\n .object({\n runId: z.string().min(1, \"runId is required\"),\n events: z.array(webhookModelUsageObservationItemSchema).min(1).max(100),\n })\n .strict(),\n responses: {\n 200: z.object({\n success: z.boolean(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive model usage observation data from sandbox\",\n },\n});\n\nexport type WebhookUsageEventContract = typeof webhookUsageEventContract;\nexport type WebhookModelUsageObservationContract =\n typeof webhookModelUsageObservationContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport {\n executionFirewallsSchema,\n firewallSchema,\n networkPolicySchema,\n networkPoliciesSchema,\n} from \"@vm0/connectors/firewall-types\";\nimport { apiErrorSchema } from \"./errors\";\nimport { modelProviderCodexRuntimeConfigSchema } from \"./model-providers\";\n\nconst c = initContract();\n\nexport const MIN_EPOCH_MS_TIMESTAMP = 1_000_000_000_000;\nconst apiStartTimeSchema = z.number().int().min(MIN_EPOCH_MS_TIMESTAMP);\n\nexport const CANONICAL_GUEST_HOME_DIR = \"/home/user\";\nexport const CANONICAL_WORKING_DIR = `${CANONICAL_GUEST_HOME_DIR}/workspace`;\nconst CANONICAL_CLAUDE_PROJECT_NAME = CANONICAL_WORKING_DIR.replace(\n /^\\//,\n \"\",\n).replace(/\\//g, \"-\");\nexport const CANONICAL_CLAUDE_MEMORY_MOUNT_PATH = `${CANONICAL_GUEST_HOME_DIR}/.claude/projects/-${CANONICAL_CLAUDE_PROJECT_NAME}/memory`;\nexport const CANONICAL_CODEX_MEMORY_MOUNT_PATH = `${CANONICAL_GUEST_HOME_DIR}/.codex/memories`;\n// Shared resume history size contract. Rust consumers import the generated\n// binding from `api_contracts::generated::constants`.\nexport const RESUME_SESSION_HISTORY_MAX_BYTES = 128 * 1024 * 1024;\nexport const SESSION_HISTORY_ENCODING_IDENTITY = \"identity\";\nexport const SESSION_HISTORY_ENCODING_GZIP = \"gzip\";\nexport const SESSION_HISTORY_ENCODING_ZSTD = \"zstd\";\nexport const SESSION_HISTORY_DOWNLOAD_SOURCE_CONFIGURED_PUBLIC_ENDPOINT =\n \"configured_public_endpoint\";\nexport const SESSION_HISTORY_DOWNLOAD_SOURCE_DEFAULT_R2_ENDPOINT =\n \"default_r2_endpoint\";\nexport const SESSION_HISTORY_GZIP_MIN_BYTES = 64 * 1024;\nexport const NETWORK_POLICY_REFRESH_CONNECTOR_REFS_MAX = 256;\nexport const RUNNER_BUILTIN_FIREWALL_RESOLVE_NAMES_MAX = 512;\nexport const sessionHistoryEncodingSchema = z.enum([\n SESSION_HISTORY_ENCODING_IDENTITY,\n SESSION_HISTORY_ENCODING_GZIP,\n SESSION_HISTORY_ENCODING_ZSTD,\n]);\nexport const sessionHistoryDownloadSourceSchema = z.enum([\n SESSION_HISTORY_DOWNLOAD_SOURCE_CONFIGURED_PUBLIC_ENDPOINT,\n SESSION_HISTORY_DOWNLOAD_SOURCE_DEFAULT_R2_ENDPOINT,\n]);\n\nexport function elapsedSinceApiStartMs(\n apiStartTimeMs: number | undefined,\n nowMs: number,\n): number | undefined {\n if (\n apiStartTimeMs === undefined ||\n !Number.isInteger(apiStartTimeMs) ||\n apiStartTimeMs < MIN_EPOCH_MS_TIMESTAMP\n ) {\n return undefined;\n }\n\n return Math.max(0, nowMs - apiStartTimeMs);\n}\n\nexport const runnerClaimPollReasonSchema = z.enum([\n \"immediate\",\n \"deferred\",\n \"wakeup_retry\",\n \"slow\",\n \"fast\",\n]);\n\nconst runnerClaimDiscoverySourceSchema = z.enum([\"ably\", \"poll\"]);\nconst runnerPreLocalAdmissionOutcomeSchema = z.enum([\n \"not_protected\",\n \"local_holder\",\n \"missing_session_metadata\",\n]);\n\nconst runnerClaimTelemetrySchema = z.object({\n discoverySource: runnerClaimDiscoverySourceSchema.optional(),\n jobDiscoveredToClaimRequestMs: z.number().int().nonnegative().optional(),\n localAdmissionToClaimRequestMs: z.number().int().nonnegative().optional(),\n directCandidateNotificationToEnqueueMs: z\n .number()\n .int()\n .nonnegative()\n .optional(),\n directCandidateInboxWaitMs: z.number().int().nonnegative().optional(),\n providerDiscoveryToMainLoopMs: z.number().int().nonnegative().optional(),\n mainLoopToLocalAdmissionMs: z.number().int().nonnegative().optional(),\n preLocalAdmissionOutcome: runnerPreLocalAdmissionOutcomeSchema.optional(),\n pollDueToJobDiscoveredMs: z.number().int().nonnegative().optional(),\n pollHttpRequestMs: z.number().int().nonnegative().optional(),\n pollReason: runnerClaimPollReasonSchema.optional(),\n});\n\nconst runnerPollTelemetrySchema = z.object({\n pollReason: runnerClaimPollReasonSchema.optional(),\n});\n\nconst runnerProfileListSchema = z.array(z.string());\nconst runnerSupportedProfileListSchema = runnerProfileListSchema.min(1);\n\nconst networkPolicyRefreshSchema = z.object({\n nextRefreshAt: z.string().datetime({ offset: true }),\n});\n\nconst networkPolicyRefreshesSchema = z.record(\n z.string(),\n networkPolicyRefreshSchema,\n);\nconst runnerBuiltinFirewallNameSchema = z\n .string()\n .min(1)\n .max(128)\n .regex(/^(?:[a-z0-9][a-z0-9-]*|model-provider:[a-z0-9][a-z0-9-]*)$/);\nconst runnerBuiltinFirewallsResolveBodySchema = z\n .object({\n names: z\n .array(runnerBuiltinFirewallNameSchema)\n .min(1)\n .max(RUNNER_BUILTIN_FIREWALL_RESOLVE_NAMES_MAX)\n .optional(),\n })\n .strict();\nconst runnerBuiltinFirewallsResolveResponseSchema = z.object({\n catalogDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/),\n catalogVersion: z.string().min(1),\n firewalls: z.record(runnerBuiltinFirewallNameSchema, firewallSchema),\n});\n\n/**\n * Default profile when none is specified.\n * Must stay in sync with Rust: crates/runner/src/profile.rs → DEFAULT_PROFILE\n */\nexport const DEFAULT_PROFILE = \"vm0/default\";\n\n/**\n * Runner group format: vm0/<name> (e.g., \"vm0/production\")\n */\nexport const runnerGroupSchema = z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Runner group must be in vm0/<name> format (e.g., vm0/production)\",\n );\n\nconst runnersPollBodySchema = z.object({\n group: runnerGroupSchema,\n supportedProfiles: runnerSupportedProfileListSchema,\n telemetry: runnerPollTelemetrySchema.optional(),\n});\n\n/**\n * Job schema for polling response\n */\nexport const jobSchema = z.object({\n runId: z.uuid(),\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n agentComposeVersionId: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n checkpointId: z.uuid().nullable(),\n experimentalProfile: z.string().optional(),\n cliAgentSessionId: z.string().nullable().optional(),\n affinityProtectedUntil: z\n .string()\n .datetime({ offset: true })\n .nullable()\n .optional(),\n});\n\nexport const heldSessionStateSchema = z.object({\n // Compatibility wire name. Semantically this is the Claude/Codex CLI agent\n // session id used to route work toward a runner with a reusable sandbox.\n sessionId: z.string(),\n lastCompletedAt: z.string().datetime({ offset: true }),\n});\n\n/**\n * Runners poll contract - POST /api/runners/poll\n * Long-polling endpoint to fetch pending jobs for a runner group\n *\n * NOTE: Uses POST instead of GET to avoid CDN caching issues on preview deployments.\n * POST requests are never cached, ensuring the Authorization header is always read fresh.\n */\nexport const runnersPollContract = c.router({\n poll: {\n method: \"POST\",\n path: \"/api/runners/poll\",\n headers: authHeadersSchema,\n body: runnersPollBodySchema,\n responses: {\n 200: z.object({\n job: jobSchema.nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Poll for pending jobs (long-polling with 30s timeout)\",\n },\n});\n\n/**\n * Storage entry in manifest\n */\nexport const storageEntrySchema = z.object({\n name: z.string(),\n mountPath: z.string(),\n vasStorageName: z.string(),\n vasVersionId: z.string(),\n instructionsTargetFilename: z.string().optional(),\n archiveUrl: z.string(),\n});\n\n/**\n * Artifact entry in manifest\n */\n// Optional internal checkpoint behavior for a missing artifact root. Absence\n// is equivalent to \"fail\".\nexport const artifactMissingRootPolicySchema = z.enum([\n \"fail\",\n \"preserveParentVersion\",\n]);\n\nexport const artifactEntrySchema = z\n .object({\n mountPath: z.string(),\n vasStorageName: z.string(),\n vasStorageId: z.string(),\n vasVersionId: z.string(),\n archiveUrl: z.string().optional(),\n empty: z.boolean().optional(),\n missingRootPolicy: artifactMissingRootPolicySchema.optional(),\n })\n .superRefine((artifact, ctx) => {\n if (artifact.empty === true || artifact.archiveUrl !== undefined) {\n return;\n }\n\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"archiveUrl\"],\n message: \"archiveUrl is required unless empty is true\",\n });\n });\n\n/**\n * Storage manifest with presigned URLs for download\n */\nexport const storageManifestSchema = z.object({\n storages: z.array(storageEntrySchema),\n artifacts: z.array(artifactEntrySchema),\n});\n\n/**\n * Resume session information. The compatibility wire field is `sessionId`, but\n * its semantic name in API/runner code is `cliAgentSessionId`.\n */\nconst inlineResumeSessionSchema = z.object({\n sessionId: z.string(),\n sessionHistory: z.string(),\n});\n\nconst resumeSessionHistoryBlobRefSchema = z.object({\n kind: z.literal(\"blob\"),\n hash: z.string().regex(/^[a-f0-9]{64}$/),\n});\nconst resumeSessionHistoryDownloadSourceFieldSchema = {\n downloadSource: sessionHistoryDownloadSourceSchema.optional(),\n};\nconst resumeSessionHistoryRawSizeSchema = z\n .number()\n .int()\n .positive()\n .max(RESUME_SESSION_HISTORY_MAX_BYTES);\nconst resumeSessionHistoryEncodedSizeSchema = z\n .number()\n .int()\n .positive()\n .max(RESUME_SESSION_HISTORY_MAX_BYTES);\n\nconst storedResumeSessionRefSchema = z.object({\n sessionId: z.string(),\n historyRef: resumeSessionHistoryBlobRefSchema.extend({\n encoding: sessionHistoryEncodingSchema.optional(),\n }),\n});\n\nconst resumeSessionIdentityHistoryRefSchema = resumeSessionHistoryBlobRefSchema\n .extend({\n url: z.string().url(),\n encoding: z.literal(\"identity\").optional(),\n rawSize: resumeSessionHistoryRawSizeSchema,\n encodedSize: resumeSessionHistoryEncodedSizeSchema,\n ...resumeSessionHistoryDownloadSourceFieldSchema,\n })\n .strict();\n\nconst resumeSessionGzipHistoryRefSchema = resumeSessionHistoryBlobRefSchema\n .extend({\n url: z.string().url(),\n encoding: z.literal(\"gzip\"),\n rawSize: resumeSessionHistoryRawSizeSchema,\n encodedSize: resumeSessionHistoryEncodedSizeSchema,\n ...resumeSessionHistoryDownloadSourceFieldSchema,\n })\n .strict();\n\nconst resumeSessionZstdHistoryRefSchema = resumeSessionHistoryBlobRefSchema\n .extend({\n url: z.string().url(),\n encoding: z.literal(\"zstd\"),\n rawSize: resumeSessionHistoryRawSizeSchema,\n encodedSize: resumeSessionHistoryEncodedSizeSchema,\n ...resumeSessionHistoryDownloadSourceFieldSchema,\n })\n .strict();\n\nconst resumeSessionRefSchema = z.object({\n sessionId: z.string(),\n historyRef: z.union([\n resumeSessionGzipHistoryRefSchema,\n resumeSessionZstdHistoryRefSchema,\n resumeSessionIdentityHistoryRefSchema,\n ]),\n});\n\nexport const storedResumeSessionSchema = z.union([\n inlineResumeSessionSchema,\n storedResumeSessionRefSchema,\n]);\n\nexport const resumeSessionSchema = z.union([\n inlineResumeSessionSchema,\n resumeSessionRefSchema,\n]);\n\n// Capability names are intentionally open-ended so a newer runner can claim\n// jobs through an older API; the API ignores capabilities it does not know.\nexport const runnerClaimCapabilitySchema = z.string().min(1);\n\nexport const secretConnectorMetadataSchema = z.object({\n sourceType: z.enum([\"connector\", \"model-provider\", \"platform-secret\"]),\n sourceUserId: z.string().optional(),\n metadataKey: z.string().optional(),\n});\n\n// Keyed by the same firewall auth secret env aliases as secretConnectorMap.\nexport const secretConnectorMetadataMapSchema = z.record(\n z.string(),\n secretConnectorMetadataSchema,\n);\n\n/**\n * Stored execution context (subset stored in database for late routing)\n * Contains prepared context without runtime-generated fields\n * Secrets are encrypted with AES-256-GCM before storage\n */\nexport const storedExecutionContextSchema = z.object({\n storageManifest: storageManifestSchema.nullable(),\n environment: z.record(z.string(), z.string()).nullable(),\n // API-only references used to reconstruct runner masking values from the\n // stored environment. Missing means legacy/stripped data, null means no\n // persistent secret map, and array order/repetition follows secret-map values.\n // This field must not be included in the runner-facing ExecutionContext.\n secretValueEnvironmentKeys: z.array(z.string()).nullable().optional(),\n // Connector-owned runtime vars used by proxy/firewall template resolution.\n // User-provided run vars stay in agent_runs.vars and are merged at claim time.\n vars: z.record(z.string(), z.string()).nullable().optional(),\n resumeSession: storedResumeSessionSchema.nullable(),\n // AES-256-GCM encrypted Record<string, string>. Keys are the runtime secret\n // names used by `${{ secrets.NAME }}`; connector/model-provider keys are env\n // aliases, not backing storage secret names.\n encryptedSecrets: z.string().nullable(),\n // Maps firewall auth secret env aliases (the `NAME` in `${{ secrets.NAME }}`) to\n // their connector or provider owner. Keys are env aliases, not storage secret names.\n secretConnectorMap: z.record(z.string(), z.string()).nullable().optional(),\n // Same keys as secretConnectorMap; adds source details when the owner alone\n // is not enough to locate access storage (for example, personal model providers).\n secretConnectorMetadataMap: secretConnectorMetadataMapSchema\n .nullable()\n .optional(),\n cliAgentType: z.string(),\n // Preview evaluation escape hatch: bypass preview mock CLIs and use the real\n // agent runtime.\n realAgentInPreview: z.boolean().optional(),\n // Capture HTTP header names, selected safe header values, request bodies, and response bodies\n // in network logs\n captureNetworkBodies: z.boolean().optional(),\n // Dispatch timestamp for E2E timing metrics, as Unix epoch milliseconds\n apiStartTime: apiStartTimeSchema.optional(),\n // User's timezone preference (IANA format, e.g., \"Asia/Shanghai\")\n userTimezone: z.string().optional(),\n // Firewall entries for proxy-side token replacement. Built-ins stay compact;\n // org custom connectors use inline firewall bodies.\n firewalls: executionFirewallsSchema.optional(),\n // Per-firewall network policies: which permissions are granted + unknownPolicy\n networkPolicies: networkPoliciesSchema.optional(),\n // Per-connector runtime network policy refresh deadlines. Used by runners to refresh\n // active sandbox policy when temporary allow grants expire.\n networkPolicyRefreshes: networkPolicyRefreshesSchema.optional(),\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n // Tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n // VM profile for resource allocation (e.g., \"vm0/default\")\n experimentalProfile: z.string().optional(),\n // Feature flags evaluated at job creation time (all switch states for user/org)\n featureFlags: z.record(z.string(), z.boolean()).optional(),\n billableFirewalls: z.array(z.string()).optional(),\n // Canonical model id the proxy reports for model token usage. The API uses\n // this model id for built-in billing rows and model usage observations;\n // billing eligibility is decided from API-owned run context.\n modelUsageProvider: z.string().optional(),\n // API-owned Codex provider/runtime metadata forwarded through the runner.\n codexRuntimeConfig: modelProviderCodexRuntimeConfigSchema\n .nullable()\n .optional(),\n});\n\n/**\n * Execution context returned when claiming a job.\n *\n * Keep in sync with Rust: crates/runner/src/types.rs → ExecutionContext\n */\nexport const executionContextSchema = z.object({\n runId: z.uuid(),\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n agentComposeVersionId: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n checkpointId: z.uuid().nullable(),\n sandboxToken: z.string(),\n storageManifest: storageManifestSchema.nullable(),\n environment: z.record(z.string(), z.string()).nullable(),\n resumeSession: resumeSessionSchema.nullable(),\n // Plain secret values used by the runner for redaction. These are values, not\n // names, and are base64-encoded only when exported through VM0_SECRET_VALUES.\n secretValues: z.array(z.string()).nullable(),\n // AES-256-GCM encrypted Record<string, string>, passed through to mitm-addon\n // for auth resolution. Keys are runtime secret names used by\n // `${{ secrets.NAME }}`; connector/model-provider keys are env aliases, not\n // backing storage secret names.\n encryptedSecrets: z.string().nullable(),\n // Maps firewall auth secret env aliases (the `NAME` in `${{ secrets.NAME }}`) to\n // their connector or provider owner. Keys are env aliases, not storage secret names.\n secretConnectorMap: z.record(z.string(), z.string()).nullable().optional(),\n // Same keys as secretConnectorMap; adds source details when the owner alone\n // is not enough to locate access storage (for example, personal model providers).\n secretConnectorMetadataMap: secretConnectorMetadataMapSchema\n .nullable()\n .optional(),\n cliAgentType: z.string(),\n // Preview evaluation escape hatch: bypass preview mock CLIs and use the real\n // agent runtime.\n realAgentInPreview: z.boolean().optional(),\n // Capture HTTP header names, selected safe header values, request bodies, and response bodies\n // in network logs\n captureNetworkBodies: z.boolean().optional(),\n // Dispatch timestamp for E2E timing metrics, as Unix epoch milliseconds\n apiStartTime: apiStartTimeSchema.optional(),\n // User's timezone preference (IANA format, e.g., \"Asia/Shanghai\")\n userTimezone: z.string().optional(),\n // Firewall entries for proxy-side token replacement. Built-ins stay compact;\n // org custom connectors use inline firewall bodies.\n firewalls: executionFirewallsSchema.optional(),\n // Per-firewall network policies: which permissions are granted + unknownPolicy\n networkPolicies: networkPoliciesSchema.optional(),\n // Per-connector runtime network policy refresh deadlines. Used by runners to refresh\n // active sandbox policy when temporary allow grants expire.\n networkPolicyRefreshes: networkPolicyRefreshesSchema.optional(),\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n // Tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n // VM profile for resource allocation (e.g., \"vm0/default\")\n experimentalProfile: z.string().optional(),\n // Feature flags evaluated at job creation time (all switch states for user/org)\n featureFlags: z.record(z.string(), z.boolean()).optional(),\n billableFirewalls: z.array(z.string()).optional(),\n // Canonical model id the proxy reports for model token usage. The API uses\n // this model id for built-in billing rows and model usage observations;\n // billing eligibility is decided from API-owned run context.\n modelUsageProvider: z.string().optional(),\n // API-owned Codex provider/runtime metadata forwarded through the runner.\n codexRuntimeConfig: modelProviderCodexRuntimeConfigSchema\n .nullable()\n .optional(),\n});\n\n/**\n * Runners job claim contract - POST /api/runners/jobs/:id/claim\n * Claim a pending job for execution\n * Verifies that the job's agent_run belongs to the authenticated user\n */\nexport const runnersJobClaimContract = c.router({\n claim: {\n method: \"POST\",\n path: \"/api/runners/jobs/:id/claim\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(),\n }),\n body: z.object({\n telemetry: runnerClaimTelemetrySchema.optional(),\n capabilities: z.array(runnerClaimCapabilitySchema).optional(),\n }),\n responses: {\n 200: executionContextSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema, // Job does not belong to user\n 404: apiErrorSchema,\n 409: apiErrorSchema, // Already claimed\n 500: apiErrorSchema,\n },\n summary: \"Claim a pending job for execution\",\n },\n});\n\nexport const runnersNetworkPolicyRefreshContract = c.router({\n refresh: {\n method: \"POST\",\n path: \"/api/runners/runs/:runId/network-policy-refresh\",\n headers: authHeadersSchema,\n pathParams: z.object({\n runId: z.uuid(),\n }),\n body: z.object({\n connectorRefs: z\n .array(z.string().min(1).max(64))\n .min(1)\n .max(NETWORK_POLICY_REFRESH_CONNECTOR_REFS_MAX),\n }),\n responses: {\n 200: z.object({\n refreshes: z.array(\n z.object({\n connectorRef: z.string(),\n networkPolicy: networkPolicySchema,\n nextRefreshAt: z.string().datetime({ offset: true }).nullable(),\n }),\n ),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Refresh active run network policies\",\n },\n});\n\nexport const runnersBuiltinFirewallsResolveContract = c.router({\n resolve: {\n method: \"POST\",\n path: \"/api/runners/builtin-firewalls/resolve\",\n headers: authHeadersSchema,\n body: runnerBuiltinFirewallsResolveBodySchema,\n responses: {\n 200: runnerBuiltinFirewallsResolveResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Resolve builtin firewall definitions for runners\",\n },\n});\n\n/**\n * Runner heartbeat body — periodic state report from each runner\n */\nexport const heartbeatBodySchema = z.object({\n runnerId: z.uuid(),\n runnerName: z.string(),\n group: runnerGroupSchema,\n totalVcpu: z.number().int().nonnegative(),\n totalMemoryMb: z.number().int().nonnegative(),\n maxConcurrent: z.number().int().nonnegative(),\n allocatedVcpu: z.number().int().nonnegative(),\n allocatedMemoryMb: z.number().int().nonnegative(),\n runningCount: z.number().int().nonnegative(),\n admittableProfiles: runnerProfileListSchema,\n heldSessionStates: z.array(heldSessionStateSchema).max(1024),\n mode: z.enum([\"starting\", \"running\", \"draining\", \"stopping\"]),\n});\n\n/**\n * Runners heartbeat contract - POST /api/runners/heartbeat\n * Periodic state report from runners for capacity tracking and dispatch\n */\nexport const runnersHeartbeatContract = c.router({\n heartbeat: {\n method: \"POST\",\n path: \"/api/runners/heartbeat\",\n headers: authHeadersSchema,\n body: heartbeatBodySchema,\n responses: {\n 200: z.object({ ok: z.literal(true) }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Report runner heartbeat with capacity and state\",\n },\n});\n\nexport type RunnersPollContract = typeof runnersPollContract;\nexport type RunnersJobClaimContract = typeof runnersJobClaimContract;\nexport type RunnersNetworkPolicyRefreshContract =\n typeof runnersNetworkPolicyRefreshContract;\nexport type RunnersHeartbeatContract = typeof runnersHeartbeatContract;\nexport type RunnersBuiltinFirewallsResolveContract =\n typeof runnersBuiltinFirewallsResolveContract;\nexport type Job = z.infer<typeof jobSchema>;\nexport type HeldSessionState = z.infer<typeof heldSessionStateSchema>;\nexport type ExecutionContext = z.infer<typeof executionContextSchema>;\nexport type StoredExecutionContext = z.infer<\n typeof storedExecutionContextSchema\n>;\nexport type NetworkPolicyRefresh = z.infer<typeof networkPolicyRefreshSchema>;\nexport type RunnerBuiltinFirewallsResolveBody = z.infer<\n typeof runnerBuiltinFirewallsResolveBodySchema\n>;\nexport type RunnerBuiltinFirewallsResolveResponse = z.infer<\n typeof runnerBuiltinFirewallsResolveResponseSchema\n>;\nexport type SecretConnectorMetadata = z.infer<\n typeof secretConnectorMetadataSchema\n>;\nexport type StorageEntry = z.infer<typeof storageEntrySchema>;\nexport type ArtifactEntry = z.infer<typeof artifactEntrySchema>;\nexport type StorageManifest = z.infer<typeof storageManifestSchema>;\nexport type StoredResumeSession = z.infer<typeof storedResumeSessionSchema>;\nexport type ResumeSession = z.infer<typeof resumeSessionSchema>;\nexport type SessionHistoryDownloadSource = z.infer<\n typeof sessionHistoryDownloadSourceSchema\n>;\n\nexport type RunnerClaimCapability = z.infer<typeof runnerClaimCapabilitySchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Storage type enum\n */\nconst storageTypeSchema = z.enum([\"volume\", \"artifact\"]);\n\n/**\n * Version ID query parameter schema\n *\n * Validates hex format (8-64 characters). Used for version prefix resolution.\n */\nconst versionQuerySchema = z\n .string()\n .regex(/^[a-f0-9]{8,64}$/i, \"Version must be 8-64 hex characters\")\n .optional();\n\n/**\n * Upload storage response schema (JSON part of POST response)\n */\nconst uploadStorageResponseSchema = z.object({\n name: z.string(),\n versionId: z.string(),\n size: z.number(),\n fileCount: z.number(),\n type: storageTypeSchema,\n deduplicated: z.boolean(),\n});\n\n/**\n * Storages contract for /api/storages\n *\n * Note: This API handles binary file upload/download:\n * - POST: Multipart form data upload, returns JSON\n * - GET: Query params, returns binary tar.gz file\n *\n * The contract defines the JSON parts for type safety.\n * Binary response handling is done at the route level.\n */\nexport const storagesContract = c.router({\n /**\n * POST /api/storages\n * Upload a storage (tar.gz file)\n *\n * Content-Type: multipart/form-data\n * Form fields:\n * - name: string (storage name, 3-64 chars, lowercase alphanumeric with hyphens)\n * - file: File (tar.gz archive)\n * - type: \"volume\" | \"artifact\" (optional, defaults to \"volume\")\n * - force: \"true\" | \"false\" (optional, skip deduplication)\n */\n upload: {\n method: \"POST\",\n path: \"/api/storages\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: uploadStorageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage archive\",\n },\n\n /**\n * GET /api/storages\n * Download a storage as tar.gz file\n *\n * Query params:\n * - name: string (required, storage name)\n * - version: string (optional, version ID or prefix)\n *\n * Returns: Binary tar.gz file (application/gzip)\n */\n download: {\n method: \"GET\",\n path: \"/api/storages\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Storage name is required\"),\n version: versionQuerySchema,\n }),\n responses: {\n // Binary response - actual handling done at route level\n 200: c.otherResponse({\n contentType: \"application/gzip\",\n body: c.type<Blob>(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Download storage archive\",\n },\n});\n\nexport type StoragesContract = typeof storagesContract;\n\n// ============================================================================\n// Direct Upload Schemas (for CLI and Webhook endpoints)\n// ============================================================================\n\n/**\n * Maximum file size per file in bytes (100MB)\n */\nexport const MAX_FILE_SIZE_BYTES = 104_857_600;\n\n/**\n * File entry with hash for content-addressable storage\n */\nexport const fileEntryWithHashSchema = z.object({\n path: z.string().min(1, \"File path is required\"),\n hash: z.string().length(64, \"Hash must be SHA-256 (64 hex chars)\"),\n size: z\n .number()\n .int()\n .min(0, \"Size must be non-negative\")\n .max(MAX_FILE_SIZE_BYTES, \"File size exceeds 100MB limit\"),\n});\n\n/**\n * Incremental changes schema for partial uploads\n */\nexport const storageChangesSchema = z.object({\n added: z.array(z.string()),\n modified: z.array(z.string()),\n deleted: z.array(z.string()),\n});\n\n/**\n * Presigned upload URL schema\n */\nexport const presignedUploadSchema = z.object({\n key: z.string(),\n presignedUrl: z.url(),\n});\n\n// ============================================================================\n// Direct Upload Contracts (CLI endpoints)\n// ============================================================================\n\n/**\n * Storage prepare contract for /api/storages/prepare\n *\n * Prepares for direct S3 upload by:\n * 1. Computing content hash from file metadata\n * 2. Checking for existing version (deduplication)\n * 3. Generating presigned URLs if upload needed\n */\nexport const storagesPrepareContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/storages/prepare\",\n headers: authHeadersSchema,\n body: z.object({\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n files: z.array(fileEntryWithHashSchema),\n force: z.boolean().optional(),\n runId: z.string().optional(), // For sandbox auth\n baseVersion: z.string().optional(), // For incremental uploads\n changes: storageChangesSchema.optional(),\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n existing: z.boolean(),\n uploads: z\n .object({\n archive: presignedUploadSchema,\n manifest: presignedUploadSchema,\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Prepare for direct S3 upload\",\n },\n});\n\n/**\n * Storage commit contract for /api/storages/commit\n *\n * Commits a direct S3 upload by:\n * 1. Verifying uploaded files exist in S3\n * 2. Creating storage version record\n * 3. Updating storage HEAD pointer\n */\nexport const storagesCommitContract = c.router({\n commit: {\n method: \"POST\",\n path: \"/api/storages/commit\",\n headers: authHeadersSchema,\n body: z.object({\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n versionId: z.string().min(1, \"Version ID is required\"),\n files: z.array(fileEntryWithHashSchema),\n runId: z.string().optional(),\n message: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.literal(true),\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n deduplicated: z.boolean().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema, // S3 files missing\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Commit uploaded storage\",\n },\n});\n\n/**\n * Storage download contract for /api/storages/download\n *\n * Returns presigned URL for downloading storage archive from S3.\n * Different from storagesContract.download which streams the file directly.\n */\nexport const storagesDownloadContract = c.router({\n download: {\n method: \"GET\",\n path: \"/api/storages/download\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Storage name is required\"),\n type: storageTypeSchema,\n version: versionQuerySchema,\n }),\n responses: {\n // Normal response with presigned URL\n 200: z.union([\n z.object({\n url: z.url(),\n versionId: z.string(),\n fileCount: z.number(),\n size: z.number(),\n }),\n // Empty artifact response\n z.object({\n empty: z.literal(true),\n versionId: z.string(),\n fileCount: z.literal(0),\n size: z.literal(0),\n }),\n ]),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get presigned download URL\",\n },\n});\n\n/**\n * Storage list contract for /api/storages/list\n *\n * Lists all storages for the authenticated user, filtered by type.\n */\nexport const storagesListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/storages/list\",\n headers: authHeadersSchema,\n query: z.object({\n type: storageTypeSchema,\n }),\n responses: {\n 200: z.array(\n z.object({\n name: z.string(),\n size: z.number(),\n fileCount: z.number(),\n updatedAt: z.string(),\n }),\n ),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List user storages by type\",\n },\n});\n\nexport type StoragesPrepareContract = typeof storagesPrepareContract;\nexport type StoragesCommitContract = typeof storagesCommitContract;\nexport type StoragesDownloadContract = typeof storagesDownloadContract;\nexport type StoragesListContract = typeof storagesListContract;\n\n// Export schemas for reuse\nexport { storageTypeSchema, uploadStorageResponseSchema };\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n chatThreadMetadataContract,\n chatThreadModelSelectionContract,\n chatThreadRenameContract,\n chatSearchContract,\n type ChatThreadMetadata,\n type ChatSearchResponse,\n} from \"@vm0/api-contracts/contracts/chat-threads\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function searchZeroChat(options: {\n keyword: string;\n agentId?: string;\n since?: number;\n limit?: number;\n before?: number;\n after?: number;\n}): Promise<ChatSearchResponse> {\n const config = await getClientConfig();\n const client = initClient(chatSearchContract, config);\n const result = await client.search({\n query: {\n keyword: options.keyword,\n agentId: options.agentId,\n since: options.since,\n limit: options.limit,\n before: options.before,\n after: options.after,\n },\n });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to search chat messages\");\n}\n\nexport async function renameZeroChatThread(options: {\n threadId: string;\n title: string;\n}): Promise<{ threadId: string; title: string }> {\n const config = await getClientConfig();\n const client = initClient(chatThreadRenameContract, config);\n const result = await client.rename({\n params: { id: options.threadId },\n body: { title: options.title },\n });\n if (result.status === 204) {\n return { threadId: options.threadId, title: options.title };\n }\n handleError(result, \"Failed to rename chat thread\");\n}\n\nexport async function getZeroChatThread(options: {\n threadId: string;\n}): Promise<ChatThreadMetadata> {\n const config = await getClientConfig();\n const client = initClient(chatThreadMetadataContract, config);\n const result = await client.get({\n params: { id: options.threadId },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to get chat thread\");\n}\n\nexport async function updateZeroChatThreadModelSelection(options: {\n threadId: string;\n model: string | null;\n}): Promise<{ threadId: string; selectedModel: string | null }> {\n const config = await getClientConfig();\n const client = initClient(chatThreadModelSelectionContract, config);\n const result = await client.update({\n params: { id: options.threadId },\n body: { model: options.model },\n });\n if (result.status === 204) {\n return {\n threadId: options.threadId,\n selectedModel: options.model,\n };\n }\n handleError(result, \"Failed to update chat thread model\");\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport { zeroDeveloperSupportContract } from \"@vm0/api-contracts/contracts/zero-developer-support\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function requestDeveloperSupportConsent(body: {\n title: string;\n description: string;\n}): Promise<{ consentCode: string }> {\n const config = await getClientConfig();\n const client = initClient(zeroDeveloperSupportContract, config);\n const result = await client.submit({ body, headers: {} });\n if (result.status === 200) return result.body as { consentCode: string };\n handleError(result, \"Failed to request developer support consent\");\n}\n\nexport async function submitDeveloperSupport(body: {\n title: string;\n description: string;\n consentCode: string;\n}): Promise<{ reference: string }> {\n const config = await getClientConfig();\n const client = initClient(zeroDeveloperSupportContract, config);\n const result = await client.submit({ body, headers: {} });\n if (result.status === 200) return result.body as { reference: string };\n handleError(result, \"Failed to submit developer support request\");\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst developerSupportBodySchema = z.object({\n title: z.string().min(1, \"Title is required\"),\n description: z.string().min(1, \"Description is required\"),\n consentCode: z.string().optional(),\n});\n\nconst consentCodeResponseSchema = z.object({\n consentCode: z.string(),\n});\n\nconst submitResponseSchema = z.object({\n reference: z.string(),\n});\n\nexport const zeroDeveloperSupportContract = c.router({\n submit: {\n method: \"POST\",\n path: \"/api/zero/developer-support\",\n headers: authHeadersSchema,\n body: developerSupportBodySchema,\n responses: {\n 200: z.union([consentCodeResponseSchema, submitResponseSchema]),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary:\n \"Developer support: consent code generation or diagnostic submission\",\n },\n});\n\nexport type ZeroDeveloperSupportContract = typeof zeroDeveloperSupportContract;\nexport {\n developerSupportBodySchema,\n consentCodeResponseSchema,\n submitResponseSchema,\n};\n","import { z } from \"zod\";\n\nexport const COMPUTER_USE_PLUGIN_CALL_KIND = \"plugin.call\" as const;\nexport const COMPUTER_USE_FILESYSTEM_PLUGIN = \"filesystem\" as const;\nexport const COMPUTER_USE_MCP_PLUGIN = \"mcp\" as const;\nexport const COMPUTER_USE_MCP_LIST_TOOLS = \"tools/list\" as const;\nexport const COMPUTER_USE_FILESYSTEM_MCP_PACKAGE =\n \"@modelcontextprotocol/server-filesystem\" as const;\nexport const COMPUTER_USE_FILESYSTEM_MCP_VERSION = \"2026.1.14\" as const;\n\nexport const COMPUTER_USE_PLUGIN_RESULT_INLINE_TEXT_MAX_BYTES = 64 * 1024;\nexport const COMPUTER_USE_PLUGIN_RESULT_INLINE_JSON_MAX_BYTES = 256 * 1024;\nexport const COMPUTER_USE_PLUGIN_RESULT_BLOB_MAX_BYTES = 10 * 1024 * 1024;\n\nexport const computerUseFilesystemToolNames = [\n \"list_allowed_directories\",\n \"read_text_file\",\n \"read_media_file\",\n \"read_multiple_files\",\n \"write_file\",\n \"edit_file\",\n \"create_directory\",\n \"list_directory\",\n \"list_directory_with_sizes\",\n \"directory_tree\",\n \"move_file\",\n \"search_files\",\n \"get_file_info\",\n] as const;\n\nexport type ComputerUseFilesystemTool =\n (typeof computerUseFilesystemToolNames)[number];\n\nexport const computerUseFilesystemToolSchema = z.enum(\n computerUseFilesystemToolNames,\n);\n\nexport const computerUsePluginNameSchema = z.literal(\n COMPUTER_USE_FILESYSTEM_PLUGIN,\n);\n\nexport type ComputerUsePluginName = z.infer<typeof computerUsePluginNameSchema>;\n\nconst pathArgumentSchema = z.string().trim().min(1).max(16_384);\nconst textContentSchema = z\n .string()\n .max(COMPUTER_USE_PLUGIN_RESULT_BLOB_MAX_BYTES);\nconst excludePatternsSchema = z.array(z.string().trim().min(1)).max(512);\n\nconst noArgumentsSchema = z.object({}).strict();\n\nconst readTextFileArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n tail: z.number().int().positive().optional(),\n head: z.number().int().positive().optional(),\n })\n .strict()\n .superRefine((args, ctx) => {\n if (args.head !== undefined && args.tail !== undefined) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"head\"],\n message: \"read_text_file accepts either head or tail, not both\",\n });\n }\n });\n\nconst readMediaFileArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n })\n .strict();\n\nconst readMultipleFilesArgumentsSchema = z\n .object({\n paths: z.array(pathArgumentSchema).min(1).max(100),\n })\n .strict();\n\nconst writeFileArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n content: textContentSchema,\n })\n .strict();\n\nconst editFileArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n edits: z\n .array(\n z\n .object({\n oldText: textContentSchema,\n newText: textContentSchema,\n })\n .strict(),\n )\n .min(1)\n .max(1_000),\n dryRun: z.boolean().optional(),\n })\n .strict();\n\nconst createDirectoryArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n })\n .strict();\n\nconst listDirectoryArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n })\n .strict();\n\nconst listDirectoryWithSizesArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n sortBy: z.enum([\"name\", \"size\"]).optional(),\n })\n .strict();\n\nconst directoryTreeArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n excludePatterns: excludePatternsSchema.optional(),\n })\n .strict();\n\nconst moveFileArgumentsSchema = z\n .object({\n source: pathArgumentSchema,\n destination: pathArgumentSchema,\n })\n .strict();\n\nconst searchFilesArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n pattern: z.string().trim().min(1).max(4_096),\n excludePatterns: excludePatternsSchema.optional(),\n })\n .strict();\n\nconst getFileInfoArgumentsSchema = z\n .object({\n path: pathArgumentSchema,\n })\n .strict();\n\nexport function isComputerUseFilesystemTool(\n value: string,\n): value is ComputerUseFilesystemTool {\n return computerUseFilesystemToolNames.some((tool) => {\n return tool === value;\n });\n}\n\nexport function computerUseFilesystemToolArgumentsSchema(\n tool: ComputerUseFilesystemTool,\n): z.ZodType<Record<string, unknown>> {\n switch (tool) {\n case \"list_allowed_directories\":\n return noArgumentsSchema;\n case \"read_text_file\":\n return readTextFileArgumentsSchema;\n case \"read_media_file\":\n return readMediaFileArgumentsSchema;\n case \"read_multiple_files\":\n return readMultipleFilesArgumentsSchema;\n case \"write_file\":\n return writeFileArgumentsSchema;\n case \"edit_file\":\n return editFileArgumentsSchema;\n case \"create_directory\":\n return createDirectoryArgumentsSchema;\n case \"list_directory\":\n return listDirectoryArgumentsSchema;\n case \"list_directory_with_sizes\":\n return listDirectoryWithSizesArgumentsSchema;\n case \"directory_tree\":\n return directoryTreeArgumentsSchema;\n case \"move_file\":\n return moveFileArgumentsSchema;\n case \"search_files\":\n return searchFilesArgumentsSchema;\n case \"get_file_info\":\n return getFileInfoArgumentsSchema;\n }\n}\n\nexport function parseComputerUseFilesystemToolArguments(\n tool: ComputerUseFilesystemTool,\n args: unknown,\n): Record<string, unknown> {\n return computerUseFilesystemToolArgumentsSchema(tool).parse(args);\n}\n\nexport function computerUsePluginCapability(\n plugin: ComputerUsePluginName,\n): string {\n return `plugin.${plugin}`;\n}\n\nexport function computerUsePluginToolCapability(\n plugin: ComputerUsePluginName,\n tool: ComputerUseFilesystemTool,\n): string {\n return `plugin.${plugin}.${tool}`;\n}\n\nexport function computerUsePluginCallRequiredCapabilities(params: {\n readonly plugin: ComputerUsePluginName;\n readonly tool: ComputerUseFilesystemTool;\n}): readonly string[] {\n return [\n COMPUTER_USE_PLUGIN_CALL_KIND,\n computerUsePluginCapability(params.plugin),\n computerUsePluginToolCapability(params.plugin, params.tool),\n ];\n}\n\nexport function computerUseFilesystemToolIsDestructive(\n tool: ComputerUseFilesystemTool,\n): boolean {\n return tool === \"write_file\" || tool === \"edit_file\" || tool === \"move_file\";\n}\n\nexport const computerUsePluginCallBodySchema = z\n .object({\n plugin: computerUsePluginNameSchema,\n tool: computerUseFilesystemToolSchema,\n arguments: z.record(z.string(), z.unknown()).default({}),\n timeoutMs: z.number().int().min(1_000).max(120_000).default(60_000),\n })\n .superRefine((body, ctx) => {\n const parsed = computerUseFilesystemToolArgumentsSchema(\n body.tool,\n ).safeParse(body.arguments);\n if (parsed.success) {\n return;\n }\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"arguments\", ...issue.path],\n message: issue.message,\n });\n }\n });\n\nexport type ComputerUsePluginCallBody = z.infer<\n typeof computerUsePluginCallBodySchema\n>;\n\nexport interface ComputerUsePluginCallPayload {\n readonly plugin: ComputerUsePluginName;\n readonly tool: ComputerUseFilesystemTool;\n readonly arguments: Record<string, unknown>;\n}\n\nexport function isComputerUsePluginCallPayload(\n value: unknown,\n): value is ComputerUsePluginCallPayload {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const payload = value as {\n readonly plugin?: unknown;\n readonly tool?: unknown;\n readonly arguments?: unknown;\n };\n return (\n payload.plugin === COMPUTER_USE_FILESYSTEM_PLUGIN &&\n typeof payload.tool === \"string\" &&\n isComputerUseFilesystemTool(payload.tool) &&\n typeof payload.arguments === \"object\" &&\n payload.arguments !== null &&\n !Array.isArray(payload.arguments)\n );\n}\n\nexport const COMPUTER_USE_MCP_SERVER_NAME_PATTERN = /^[a-z0-9_-]{1,64}$/;\n\nexport function computerUseMcpServerCapability(server: string): string {\n return `plugin.${COMPUTER_USE_MCP_PLUGIN}.${server}`;\n}\n\nexport const computerUseMcpPluginCallBodySchema = z.object({\n plugin: z.literal(COMPUTER_USE_MCP_PLUGIN),\n server: z\n .string()\n .regex(\n COMPUTER_USE_MCP_SERVER_NAME_PATTERN,\n \"MCP server names must match [a-z0-9_-]{1,64}\",\n ),\n tool: z.string().trim().min(1).max(256),\n arguments: z.record(z.string(), z.unknown()).default({}),\n timeoutMs: z.number().int().min(1_000).max(120_000).default(60_000),\n});\n\nexport type ComputerUseMcpPluginCallBody = z.infer<\n typeof computerUseMcpPluginCallBodySchema\n>;\n\nexport const computerUseAnyPluginCallBodySchema = z.union([\n computerUsePluginCallBodySchema,\n computerUseMcpPluginCallBodySchema,\n]);\n\nexport type ComputerUseAnyPluginCallBody = z.infer<\n typeof computerUseAnyPluginCallBodySchema\n>;\n\nexport function computerUseMcpPluginCallRequiredCapabilities(\n server: string,\n): readonly string[] {\n return [\n COMPUTER_USE_PLUGIN_CALL_KIND,\n computerUseMcpServerCapability(server),\n ];\n}\n\nexport interface ComputerUseMcpPluginCallPayload {\n readonly plugin: typeof COMPUTER_USE_MCP_PLUGIN;\n readonly server: string;\n readonly tool: string;\n readonly arguments: Record<string, unknown>;\n}\n\nexport function isComputerUseMcpPluginCallPayload(\n value: unknown,\n): value is ComputerUseMcpPluginCallPayload {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const payload = value as {\n readonly plugin?: unknown;\n readonly server?: unknown;\n readonly tool?: unknown;\n readonly arguments?: unknown;\n };\n return (\n payload.plugin === COMPUTER_USE_MCP_PLUGIN &&\n typeof payload.server === \"string\" &&\n COMPUTER_USE_MCP_SERVER_NAME_PATTERN.test(payload.server) &&\n typeof payload.tool === \"string\" &&\n payload.tool.length > 0 &&\n typeof payload.arguments === \"object\" &&\n payload.arguments !== null &&\n !Array.isArray(payload.arguments)\n );\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport type {\n ComputerUseAuthorizationRequestCreateResponse,\n ComputerUseCommandCreateResponse,\n ComputerUseCommandResponse,\n ComputerUseHost,\n ComputerUseReadCommandKind,\n ComputerUseWriteCommandKind,\n} from \"@vm0/api-contracts/contracts/zero-computer-use\";\nimport type { ComputerUseAnyPluginCallBody } from \"@vm0/api-contracts/contracts/zero-computer-use-plugins\";\nimport {\n zeroComputerUseAuthorizationRequestsContract,\n zeroComputerUseCommandContract,\n zeroComputerUseHostsContract,\n zeroComputerUsePluginCommandContract,\n zeroComputerUseWriteCommandContract,\n} from \"@vm0/api-contracts/contracts/zero-computer-use\";\nimport {\n ApiRequestError,\n getBaseUrl,\n handleError,\n} from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport {\n cliClientHeaderApi,\n headersWithCliClientHeaders,\n} from \"../client-headers\";\n\nfunction normalizeConfiguredUrl(value: string): string {\n return value.startsWith(\"http\") ? value : `https://${value}`;\n}\n\nfunction resolveComputerUseApiBaseUrl(baseUrl: string): string {\n const override = process.env.VM0_API_BACKEND_URL;\n if (override) {\n return normalizeConfiguredUrl(override).replace(/\\/$/, \"\");\n }\n\n const url = new URL(baseUrl);\n if (url.hostname === \"www.vm0.ai\" || url.hostname === \"app.vm0.ai\") {\n url.hostname = \"api.vm0.ai\";\n }\n return url.toString().replace(/\\/$/, \"\");\n}\n\nfunction buildHeaders(token?: string): Record<string, string> {\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return headers;\n}\n\nasync function getComputerUseClientConfig() {\n const baseUrl = resolveComputerUseApiBaseUrl(await getBaseUrl());\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n return {\n baseUrl,\n baseHeaders: buildHeaders(token),\n jsonQuery: false as const,\n api: cliClientHeaderApi,\n };\n}\n\ninterface ComputerUseCommandParams<\n Kind extends ComputerUseReadCommandKind | ComputerUseWriteCommandKind,\n> {\n readonly kind: Kind;\n readonly app?: string;\n readonly snapshotId?: string;\n readonly elementId?: string;\n readonly elementIndex?: number;\n readonly x?: number;\n readonly y?: number;\n readonly button?: \"left\" | \"right\" | \"middle\";\n readonly clickCount?: number;\n readonly direction?: \"up\" | \"down\" | \"left\" | \"right\";\n readonly pages?: number;\n readonly value?: string;\n readonly text?: string;\n readonly key?: string;\n readonly action?: string;\n readonly timeoutMs?: number;\n}\n\nfunction commandBody<\n Kind extends ComputerUseReadCommandKind | ComputerUseWriteCommandKind,\n>(params: ComputerUseCommandParams<Kind>) {\n return {\n kind: params.kind,\n timeoutMs: params.timeoutMs ?? 15_000,\n ...(params.app ? { app: params.app } : {}),\n ...(params.snapshotId ? { snapshotId: params.snapshotId } : {}),\n ...(params.elementId ? { elementId: params.elementId } : {}),\n ...(params.elementIndex !== undefined\n ? { elementIndex: params.elementIndex }\n : {}),\n ...(params.x !== undefined ? { x: params.x } : {}),\n ...(params.y !== undefined ? { y: params.y } : {}),\n ...(params.button ? { button: params.button } : {}),\n ...(params.clickCount !== undefined\n ? { clickCount: params.clickCount }\n : {}),\n ...(params.direction ? { direction: params.direction } : {}),\n ...(params.pages !== undefined ? { pages: params.pages } : {}),\n ...(params.value !== undefined ? { value: params.value } : {}),\n ...(params.text !== undefined ? { text: params.text } : {}),\n ...(params.key ? { key: params.key } : {}),\n ...(params.action ? { action: params.action } : {}),\n };\n}\n\nexport async function createComputerUseReadCommand(\n params: ComputerUseCommandParams<ComputerUseReadCommandKind>,\n): Promise<ComputerUseCommandCreateResponse> {\n const config = await getComputerUseClientConfig();\n const client = initClient(zeroComputerUseCommandContract, config);\n const result = await client.create({ body: commandBody(params) });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create computer-use command\");\n}\n\nexport async function createComputerUseWriteCommand(\n params: ComputerUseCommandParams<ComputerUseWriteCommandKind>,\n): Promise<ComputerUseCommandCreateResponse> {\n const config = await getComputerUseClientConfig();\n const client = initClient(zeroComputerUseWriteCommandContract, config);\n const result = await client.create({ body: commandBody(params) });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create computer-use write command\");\n}\n\nexport async function createComputerUsePluginCommand(\n params: ComputerUseAnyPluginCallBody,\n): Promise<ComputerUseCommandCreateResponse> {\n const config = await getComputerUseClientConfig();\n const client = initClient(zeroComputerUsePluginCommandContract, config);\n const result = await client.create({ body: params });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create computer-use plugin command\");\n}\n\nexport async function listComputerUseHosts(): Promise<\n readonly ComputerUseHost[]\n> {\n const config = await getComputerUseClientConfig();\n const client = initClient(zeroComputerUseHostsContract, config);\n const result = await client.list({});\n\n if (result.status === 200) {\n return result.body.hosts;\n }\n\n handleError(result, \"Failed to list computer-use hosts\");\n}\n\nexport async function getComputerUseCommand(\n commandId: string,\n): Promise<ComputerUseCommandResponse> {\n const config = await getComputerUseClientConfig();\n const client = initClient(zeroComputerUseCommandContract, config);\n const result = await client.get({ params: { commandId } });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get computer-use command\");\n}\n\nexport async function createComputerUseAuthorizationRequest(): Promise<ComputerUseAuthorizationRequestCreateResponse> {\n const config = await getComputerUseClientConfig();\n const client = initClient(\n zeroComputerUseAuthorizationRequestsContract,\n config,\n );\n const result = await client.create({ body: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create computer-use authorization request\");\n}\n\n/**\n * Download a command screenshot through the authenticated API proxy. The bytes\n * never traverse a public URL; the API authorizes by command ownership and\n * streams the object back. Used when the command result carries an\n * object-storage pointer instead of an inline data URL.\n */\nexport async function fetchComputerUseScreenshot(\n commandId: string,\n): Promise<{ readonly buffer: Buffer; readonly mimeType: string }> {\n const config = await getComputerUseClientConfig();\n const response = await fetch(\n `${config.baseUrl}/api/zero/computer-use/commands/${encodeURIComponent(\n commandId,\n )}/screenshot`,\n { headers: headersWithCliClientHeaders(config.baseHeaders) },\n );\n\n if (!response.ok) {\n throw new ApiRequestError(\n \"Failed to download computer-use screenshot\",\n \"REQUEST_FAILED\",\n response.status,\n );\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const mimeType =\n response.headers.get(\"content-type\") ?? \"application/octet-stream\";\n return { buffer: Buffer.from(arrayBuffer), mimeType };\n}\n\nexport async function fetchComputerUsePluginContent(\n commandId: string,\n): Promise<{\n readonly buffer: Buffer;\n readonly mimeType: string;\n readonly fileName: string;\n}> {\n const config = await getComputerUseClientConfig();\n const response = await fetch(\n `${config.baseUrl}/api/zero/computer-use/commands/${encodeURIComponent(\n commandId,\n )}/plugin-content`,\n { headers: headersWithCliClientHeaders(config.baseHeaders) },\n );\n\n if (!response.ok) {\n throw new ApiRequestError(\n \"Failed to download computer-use plugin content\",\n \"REQUEST_FAILED\",\n response.status,\n );\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const mimeType =\n response.headers.get(\"content-type\") ?? \"application/octet-stream\";\n const disposition = response.headers.get(\"content-disposition\") ?? \"\";\n const fileName =\n /filename=\"([^\"]+)\"/.exec(disposition)?.[1] ?? \"plugin-content.bin\";\n return { buffer: Buffer.from(arrayBuffer), mimeType, fileName };\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n COMPUTER_USE_PLUGIN_CALL_KIND,\n computerUseAnyPluginCallBodySchema,\n} from \"./zero-computer-use-plugins\";\n\nconst c = initContract();\n\nexport const computerUseHostStatusSchema = z.enum([\"online\", \"offline\"]);\n\nexport const computerUseReadCommandKindSchema = z.enum([\n \"apps.list\",\n \"app.state\",\n]);\n\nexport const computerUseWriteCommandKindSchema = z.enum([\n \"app.open\",\n \"element.click\",\n \"element.scroll\",\n \"element.set_value\",\n \"element.perform_action\",\n \"keyboard.type_text\",\n \"keyboard.press_key\",\n]);\n\nexport const computerUsePluginCommandKindSchema = z.literal(\n COMPUTER_USE_PLUGIN_CALL_KIND,\n);\n\nexport const computerUseCommandKindSchema = z.enum([\n ...computerUseReadCommandKindSchema.options,\n ...computerUseWriteCommandKindSchema.options,\n COMPUTER_USE_PLUGIN_CALL_KIND,\n]);\n\nexport const computerUseCommandStatusSchema = z.enum([\n \"queued\",\n \"running\",\n \"succeeded\",\n \"failed\",\n]);\n\nexport const computerUseCommandErrorCodeSchema = z.enum([\n \"no_host\",\n \"permission_denied\",\n \"accessibility_unavailable\",\n \"automation_permission_denied\",\n \"window_unavailable\",\n \"screen_recording_unavailable\",\n \"app_not_found\",\n \"app_open_failed\",\n \"element_action_unsupported\",\n \"element_not_editable\",\n \"unsupported_command\",\n \"timeout\",\n \"command_timeout\",\n \"feature_disabled\",\n \"plugin_disabled\",\n \"plugin_unavailable\",\n \"plugin_restarting\",\n \"unknown_plugin\",\n \"unknown_tool\",\n \"invalid_arguments\",\n \"path_denied\",\n \"result_too_large\",\n \"input_too_large\",\n \"mcp_error\",\n]);\n\nconst hostNameSchema = z.string().trim().min(1).max(253);\nconst hostInstallationIdSchema = z.string().trim().uuid();\nconst hostVersionSchema = z.string().trim().min(1).max(64);\nconst hostOsVersionSchema = z.string().trim().min(1).max(128);\nconst hostIdPathParamsSchema = z.object({\n hostId: z.string().min(1),\n});\nconst authorizationRequestTokenPathParamsSchema = z.object({\n requestToken: z.string().min(1),\n});\nconst commandIdPathParamsSchema = z.object({\n commandId: z.string().min(1),\n});\nconst supportedCapabilitiesSchema = z\n .array(z.string().trim().min(1).max(128))\n .max(50);\nconst appNameSchema = z.string().trim().min(1).max(256);\nconst snapshotIdSchema = z.string().trim().min(1).max(256);\nconst elementIdSchema = z.string().trim().min(1).max(256);\nconst elementIndexSchema = z.number().int().min(0);\n\nconst computerUsePermissionsSchema = z.object({\n accessibility: z.boolean(),\n screenRecording: z.boolean(),\n automation: z\n .object({\n chrome: z\n .object({\n status: z.enum([\n \"unknown\",\n \"granted\",\n \"denied\",\n \"not_installed\",\n \"not_running\",\n ]),\n updatedAt: z.string().nullable().default(null),\n reason: z.string().nullable().default(null),\n })\n .default({ status: \"unknown\", updatedAt: null, reason: null }),\n safari: z\n .object({\n status: z.enum([\n \"unknown\",\n \"granted\",\n \"denied\",\n \"not_installed\",\n \"not_running\",\n ]),\n updatedAt: z.string().nullable().default(null),\n reason: z.string().nullable().default(null),\n })\n .default({ status: \"unknown\", updatedAt: null, reason: null }),\n })\n .default({\n chrome: { status: \"unknown\", updatedAt: null, reason: null },\n safari: { status: \"unknown\", updatedAt: null, reason: null },\n }),\n});\n\nconst computerUseRuntimeBodySchema = z.object({\n installationId: hostInstallationIdSchema.optional(),\n hostName: hostNameSchema,\n appVersion: hostVersionSchema,\n osVersion: hostOsVersionSchema,\n supportedCapabilities: supportedCapabilitiesSchema.default([]),\n permissions: computerUsePermissionsSchema,\n});\n\nconst computerUseCommandTargetShape = {\n timeoutMs: z.number().int().min(1_000).max(120_000).default(60_000),\n} as const;\n\nconst computerUseCommandPayloadShape = {\n app: appNameSchema.optional(),\n snapshotId: snapshotIdSchema.optional(),\n elementId: elementIdSchema.optional(),\n elementIndex: elementIndexSchema.optional(),\n x: z.number().int().min(0).optional(),\n y: z.number().int().min(0).optional(),\n button: z.enum([\"left\", \"right\", \"middle\"]).optional(),\n clickCount: z.number().int().min(1).max(3).optional(),\n direction: z.enum([\"up\", \"down\", \"left\", \"right\"]).optional(),\n pages: z.number().positive().max(25).optional(),\n value: z.string().min(1).max(64_000).optional(),\n text: z.string().min(1).max(64_000).optional(),\n key: z.string().trim().min(1).max(256).optional(),\n action: z.string().trim().min(1).max(256).optional(),\n} as const;\n\nconst computerUseCommandCreateBodySchema = z\n .object({\n kind: computerUseReadCommandKindSchema,\n ...computerUseCommandTargetShape,\n ...computerUseCommandPayloadShape,\n })\n .superRefine((body, ctx) => {\n if (body.kind === \"app.state\" && !body.app) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"app\"],\n message: \"app.state requires app\",\n });\n }\n });\n\nconst computerUseWriteCommandCreateBaseSchema = z.object({\n kind: computerUseWriteCommandKindSchema,\n ...computerUseCommandTargetShape,\n ...computerUseCommandPayloadShape,\n});\n\ntype ComputerUseWriteCommandCreateBody = z.infer<\n typeof computerUseWriteCommandCreateBaseSchema\n>;\n\ninterface ComputerUseCommandValidationContext {\n addIssue(issue: {\n code: \"custom\";\n path: PropertyKey[];\n message: string;\n }): void;\n}\n\nfunction requireComputerUseField(\n ctx: ComputerUseCommandValidationContext,\n field: string,\n message: string,\n): void {\n ctx.addIssue({ code: \"custom\", path: [field], message });\n}\n\nfunction validateElementClickCommand(\n body: ComputerUseWriteCommandCreateBody,\n ctx: ComputerUseCommandValidationContext,\n): void {\n const hasPoint = body.x !== undefined && body.y !== undefined;\n if (!body.elementId && body.elementIndex === undefined && !hasPoint) {\n requireComputerUseField(\n ctx,\n \"elementIndex\",\n \"element.click requires elementId, elementIndex, or x/y\",\n );\n }\n if ((body.x === undefined) !== (body.y === undefined)) {\n requireComputerUseField(\n ctx,\n \"x\",\n \"element.click coordinates require both x and y\",\n );\n }\n}\n\nfunction validateElementScrollCommand(\n body: ComputerUseWriteCommandCreateBody,\n ctx: ComputerUseCommandValidationContext,\n): void {\n if (!body.elementId && body.elementIndex === undefined) {\n requireComputerUseField(\n ctx,\n \"elementIndex\",\n \"element.scroll requires elementId or elementIndex\",\n );\n }\n if (!body.direction) {\n requireComputerUseField(\n ctx,\n \"direction\",\n \"element.scroll requires direction\",\n );\n }\n}\n\nfunction validateElementSetValueCommand(\n body: ComputerUseWriteCommandCreateBody,\n ctx: ComputerUseCommandValidationContext,\n): void {\n if (!body.elementId && body.elementIndex === undefined) {\n requireComputerUseField(\n ctx,\n \"elementIndex\",\n \"element.set_value requires elementId or elementIndex\",\n );\n }\n if (!body.value) {\n requireComputerUseField(ctx, \"value\", \"element.set_value requires value\");\n }\n}\n\nfunction validateElementActionCommand(\n body: ComputerUseWriteCommandCreateBody,\n ctx: ComputerUseCommandValidationContext,\n): void {\n if (!body.elementId && body.elementIndex === undefined) {\n requireComputerUseField(\n ctx,\n \"elementIndex\",\n \"element.perform_action requires elementId or elementIndex\",\n );\n }\n if (!body.action) {\n requireComputerUseField(\n ctx,\n \"action\",\n \"element.perform_action requires action\",\n );\n }\n}\n\nfunction validateComputerUseWriteCommand(\n body: ComputerUseWriteCommandCreateBody,\n ctx: ComputerUseCommandValidationContext,\n): void {\n if (!body.app) {\n requireComputerUseField(ctx, \"app\", `${body.kind} requires app`);\n return;\n }\n\n switch (body.kind) {\n case \"app.open\":\n return;\n case \"element.click\":\n validateElementClickCommand(body, ctx);\n return;\n case \"element.scroll\":\n validateElementScrollCommand(body, ctx);\n return;\n case \"element.set_value\":\n validateElementSetValueCommand(body, ctx);\n return;\n case \"element.perform_action\":\n validateElementActionCommand(body, ctx);\n return;\n case \"keyboard.type_text\":\n if (!body.text) {\n requireComputerUseField(\n ctx,\n \"text\",\n \"keyboard.type_text requires text\",\n );\n }\n return;\n case \"keyboard.press_key\":\n if (!body.key) {\n requireComputerUseField(ctx, \"key\", \"keyboard.press_key requires key\");\n }\n }\n}\n\nconst computerUseWriteCommandCreateBodySchema =\n computerUseWriteCommandCreateBaseSchema.superRefine(\n validateComputerUseWriteCommand,\n );\n\nconst computerUseCommandErrorSchema = z.object({\n code: computerUseCommandErrorCodeSchema,\n message: z.string(),\n});\n\nconst computerUseCommandResultSchema = z.record(z.string(), z.unknown());\n\n/**\n * Screenshot pointer shapes for `computer_use_commands.result.screenshot`.\n *\n * Old rows store the screenshot as a `data:image/...;base64,...` string. New\n * rows store the bytes in private object storage and keep only a pointer here.\n * The stored pointer carries `bucket`/`key`; the client-facing pointer omits\n * them so internal storage layout never leaves the API. After retention\n * deletes the object the pointer is rewritten to `{ type: \"expired\" }`.\n */\nexport interface StoredScreenshotPointer {\n readonly type: \"s3\";\n readonly bucket: string;\n readonly key: string;\n readonly mimeType: string;\n readonly sizeBytes: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface ClientScreenshotPointer {\n readonly type: \"s3\" | \"expired\";\n readonly mimeType?: string;\n readonly sizeBytes?: number;\n readonly width?: number;\n readonly height?: number;\n}\n\nexport interface StoredPluginContentPointer {\n readonly type: \"s3\";\n readonly bucket: string;\n readonly key: string;\n readonly mimeType: string;\n readonly sizeBytes: number;\n readonly fileName: string;\n}\n\nexport interface ClientPluginContentPointer {\n readonly type: \"s3\" | \"expired\";\n readonly mimeType?: string;\n readonly sizeBytes?: number;\n readonly fileName?: string;\n}\n\nexport function isStoredScreenshotPointer(\n value: unknown,\n): value is StoredScreenshotPointer {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { readonly type?: unknown }).type === \"s3\" &&\n typeof (value as { readonly key?: unknown }).key === \"string\"\n );\n}\n\nexport function isExpiredScreenshotPointer(\n value: unknown,\n): value is { readonly type: \"expired\" } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { readonly type?: unknown }).type === \"expired\"\n );\n}\n\nexport function isStoredPluginContentPointer(\n value: unknown,\n): value is StoredPluginContentPointer {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { readonly type?: unknown }).type === \"s3\" &&\n typeof (value as { readonly bucket?: unknown }).bucket === \"string\" &&\n typeof (value as { readonly key?: unknown }).key === \"string\" &&\n typeof (value as { readonly mimeType?: unknown }).mimeType === \"string\" &&\n typeof (value as { readonly fileName?: unknown }).fileName === \"string\"\n );\n}\n\nexport function isExpiredPluginContentPointer(\n value: unknown,\n): value is { readonly type: \"expired\" } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { readonly type?: unknown }).type === \"expired\"\n );\n}\n\nexport const computerUseHostSchema = z.object({\n id: z.string(),\n hostName: z.string().optional(),\n displayName: z.string(),\n appVersion: z.string(),\n osVersion: z.string(),\n supportedCapabilities: z.array(z.string()),\n permissions: computerUsePermissionsSchema,\n status: computerUseHostStatusSchema,\n lastSeenAt: z.string(),\n createdAt: z.string(),\n});\n\nexport const computerUseHostStartResponseSchema = z.object({\n hostId: z.string(),\n hostToken: z.string(),\n});\n\nexport const computerUseHeartbeatResponseSchema = z.object({\n ok: z.literal(true),\n hostId: z.string(),\n});\n\nexport const computerUseHostStopBodySchema = z.object({});\n\nexport const computerUseHostStopResponseSchema = z.object({\n ok: z.literal(true),\n hostId: z.string(),\n});\n\nexport const computerUseHostListResponseSchema = z.object({\n hosts: z.array(computerUseHostSchema),\n});\n\nexport const computerUseHostDeleteResponseSchema = z.object({\n ok: z.literal(true),\n});\n\nexport const computerUseAuthorizationSourceSchema = z.enum([\n \"chat\",\n \"slack\",\n \"teams\",\n]);\n\nconst computerUseAuthorizationRequestCreateBodySchema = z.object({});\n\nexport const computerUseAuthorizationRequestCreateResponseSchema = z.object({\n authorizationUrl: z.string().url(),\n source: computerUseAuthorizationSourceSchema,\n expiresAt: z.string(),\n});\n\nexport const computerUseAuthorizationRequestResponseSchema = z.object({\n source: computerUseAuthorizationSourceSchema,\n expiresAt: z.string(),\n completedAt: z.string().nullable(),\n computerUseHostId: z.string().uuid().nullable(),\n hosts: z.array(computerUseHostSchema),\n});\n\nconst computerUseAuthorizationRequestApplyBodySchema = z.object({\n computerUseHostId: z.string().uuid(),\n});\n\nexport const computerUseAuthorizationRequestApplyResponseSchema = z.object({\n ok: z.literal(true),\n source: computerUseAuthorizationSourceSchema,\n computerUseHostId: z.string().uuid(),\n});\n\nexport const computerUseCommandCreateResponseSchema = z.object({\n commandId: z.string(),\n status: z.literal(\"queued\"),\n});\n\nexport const computerUseCommandResponseSchema = z.object({\n id: z.string(),\n kind: computerUseCommandKindSchema,\n status: computerUseCommandStatusSchema,\n hostId: z.string().nullable(),\n hostName: z.string().nullable(),\n payload: z.record(z.string(), z.unknown()),\n result: computerUseCommandResultSchema.optional(),\n error: computerUseCommandErrorSchema.optional(),\n timeoutMs: z.number().int().nullable(),\n createdAt: z.string(),\n claimedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n});\n\nexport const computerUseHostCommandNextBodySchema = z.object({\n supportedCapabilities: supportedCapabilitiesSchema.default([]),\n});\n\nexport const computerUseHostCommandNextResponseSchema = z.discriminatedUnion(\n \"status\",\n [\n z.object({ status: z.literal(\"idle\") }),\n z.object({\n status: z.literal(\"command\"),\n command: computerUseCommandResponseSchema,\n }),\n ],\n);\n\nexport const computerUseHostCommandCompleteBodySchema = z.discriminatedUnion(\n \"status\",\n [\n z.object({\n status: z.literal(\"succeeded\"),\n result: computerUseCommandResultSchema,\n }),\n z.object({\n status: z.literal(\"failed\"),\n error: computerUseCommandErrorSchema,\n }),\n ],\n);\n\nexport const computerUseCommandCompleteResponseSchema = z.object({\n ok: z.literal(true),\n});\n\nexport const computerUseAuditEventSchema = z.object({\n id: z.string(),\n commandId: z.string(),\n runId: z.string().nullable(),\n hostId: z.string().nullable(),\n kind: computerUseCommandKindSchema,\n app: z.string().nullable(),\n event: z.literal(\"completed\"),\n redactedResult: z.record(z.string(), z.unknown()).nullable(),\n error: z.record(z.string(), z.unknown()).nullable(),\n createdAt: z.string(),\n});\n\nexport const computerUseAuditEventListResponseSchema = z.object({\n auditEvents: z.array(computerUseAuditEventSchema),\n});\n\nexport const zeroComputerUseHostsContract = c.router({\n start: {\n method: \"POST\",\n path: \"/api/zero/computer-use/hosts/start\",\n headers: authHeadersSchema,\n body: computerUseRuntimeBodySchema,\n responses: {\n 200: computerUseHostStartResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Start or reactivate a desktop computer-use host\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/computer-use/hosts\",\n headers: authHeadersSchema,\n responses: {\n 200: computerUseHostListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List linked desktop computer-use hosts\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/computer-use/hosts/:hostId\",\n headers: authHeadersSchema,\n pathParams: hostIdPathParamsSchema,\n responses: {\n 200: computerUseHostDeleteResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete a desktop computer-use host\",\n },\n});\n\nexport const zeroComputerUseHeartbeatContract = c.router({\n heartbeat: {\n method: \"POST\",\n path: \"/api/zero/computer-use/heartbeat\",\n headers: authHeadersSchema,\n body: computerUseRuntimeBodySchema,\n responses: {\n 200: computerUseHeartbeatResponseSchema,\n 401: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Refresh a desktop computer-use host heartbeat\",\n },\n stop: {\n method: \"POST\",\n path: \"/api/zero/computer-use/host/stop\",\n headers: authHeadersSchema,\n body: computerUseHostStopBodySchema,\n responses: {\n 200: computerUseHostStopResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Stop a desktop computer-use host\",\n },\n});\n\nexport const zeroComputerUseAuthorizationRequestsContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/computer-use/authorization-requests\",\n headers: authHeadersSchema,\n body: computerUseAuthorizationRequestCreateBodySchema,\n responses: {\n 200: computerUseAuthorizationRequestCreateResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary:\n \"Create a short-lived Computer Use authorization request for the current run\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/computer-use/authorization-requests/:requestToken\",\n headers: authHeadersSchema,\n pathParams: authorizationRequestTokenPathParamsSchema,\n responses: {\n 200: computerUseAuthorizationRequestResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 410: apiErrorSchema,\n },\n summary: \"Read a Computer Use authorization request\",\n },\n apply: {\n method: \"POST\",\n path: \"/api/zero/computer-use/authorization-requests/:requestToken/apply\",\n headers: authHeadersSchema,\n pathParams: authorizationRequestTokenPathParamsSchema,\n body: computerUseAuthorizationRequestApplyBodySchema,\n responses: {\n 200: computerUseAuthorizationRequestApplyResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 410: apiErrorSchema,\n },\n summary: \"Bind a Computer Use host for a delegated authorization request\",\n },\n});\n\nexport const zeroComputerUseCommandContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/computer-use/commands\",\n headers: authHeadersSchema,\n body: computerUseCommandCreateBodySchema,\n responses: {\n 200: computerUseCommandCreateResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a read-only desktop computer-use command\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/computer-use/commands/:commandId\",\n headers: authHeadersSchema,\n pathParams: commandIdPathParamsSchema,\n responses: {\n 200: computerUseCommandResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get a desktop computer-use command result\",\n },\n getScreenshot: {\n method: \"GET\",\n path: \"/api/zero/computer-use/commands/:commandId/screenshot\",\n headers: authHeadersSchema,\n pathParams: commandIdPathParamsSchema,\n responses: {\n 200: c.type<Blob>(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Download a desktop computer-use command screenshot\",\n },\n getPluginContent: {\n method: \"GET\",\n path: \"/api/zero/computer-use/commands/:commandId/plugin-content\",\n headers: authHeadersSchema,\n pathParams: commandIdPathParamsSchema,\n responses: {\n 200: c.type<Blob>(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Download offloaded desktop computer-use plugin content\",\n },\n});\n\nexport const zeroComputerUseWriteCommandContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/computer-use/write-commands\",\n headers: authHeadersSchema,\n body: computerUseWriteCommandCreateBodySchema,\n responses: {\n 200: computerUseCommandCreateResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a desktop computer-use write command\",\n },\n});\n\nexport const zeroComputerUsePluginCommandContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/computer-use/plugin-commands\",\n headers: authHeadersSchema,\n body: computerUseAnyPluginCallBodySchema,\n responses: {\n 200: computerUseCommandCreateResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a desktop computer-use plugin command\",\n },\n});\n\nexport const zeroComputerUseHostCommandsContract = c.router({\n next: {\n method: \"POST\",\n path: \"/api/zero/computer-use/host/commands/next\",\n headers: authHeadersSchema,\n body: computerUseHostCommandNextBodySchema,\n responses: {\n 200: computerUseHostCommandNextResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Claim the next approved desktop computer-use command\",\n },\n complete: {\n method: \"POST\",\n path: \"/api/zero/computer-use/host/commands/:commandId/complete\",\n headers: authHeadersSchema,\n pathParams: commandIdPathParamsSchema,\n body: computerUseHostCommandCompleteBodySchema,\n responses: {\n 200: computerUseCommandCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Complete a desktop computer-use command\",\n },\n});\n\nexport const zeroComputerUseAuditEventsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/computer-use/audit-events\",\n headers: authHeadersSchema,\n query: z.object({\n limit: z.coerce.number().int().positive().max(200).default(50),\n commandId: z.string().optional(),\n hostId: z.string().optional(),\n runId: z.string().optional(),\n }),\n responses: {\n 200: computerUseAuditEventListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List desktop computer-use write command audit events\",\n },\n});\n\nexport type ComputerUseAuditEvent = z.infer<typeof computerUseAuditEventSchema>;\nexport type ComputerUseAuditEventListResponse = z.infer<\n typeof computerUseAuditEventListResponseSchema\n>;\nexport type ComputerUseCommandCreateResponse = z.infer<\n typeof computerUseCommandCreateResponseSchema\n>;\nexport type ComputerUseCommandError = z.infer<\n typeof computerUseCommandErrorSchema\n>;\nexport type ComputerUseCommandKind = z.infer<\n typeof computerUseCommandKindSchema\n>;\nexport type ComputerUseCommandResponse = z.infer<\n typeof computerUseCommandResponseSchema\n>;\nexport type ComputerUseCommandResult = z.infer<\n typeof computerUseCommandResultSchema\n>;\nexport type ComputerUseCommandStatus = z.infer<\n typeof computerUseCommandStatusSchema\n>;\nexport type ComputerUseHost = z.infer<typeof computerUseHostSchema>;\nexport type ComputerUseHostDeleteResponse = z.infer<\n typeof computerUseHostDeleteResponseSchema\n>;\nexport type ComputerUseHostListResponse = z.infer<\n typeof computerUseHostListResponseSchema\n>;\nexport type ComputerUseAuthorizationRequestCreateResponse = z.infer<\n typeof computerUseAuthorizationRequestCreateResponseSchema\n>;\nexport type ComputerUseAuthorizationRequestResponse = z.infer<\n typeof computerUseAuthorizationRequestResponseSchema\n>;\nexport type ComputerUseAuthorizationRequestApplyResponse = z.infer<\n typeof computerUseAuthorizationRequestApplyResponseSchema\n>;\nexport type ComputerUseAuthorizationSource = z.infer<\n typeof computerUseAuthorizationSourceSchema\n>;\nexport type ComputerUseReadCommandKind = z.infer<\n typeof computerUseReadCommandKindSchema\n>;\nexport type ComputerUseWriteCommandKind = z.infer<\n typeof computerUseWriteCommandKindSchema\n>;\nexport type ComputerUsePluginCommandKind = z.infer<\n typeof computerUsePluginCommandKindSchema\n>;\nexport type ZeroComputerUseAuditEventsContract =\n typeof zeroComputerUseAuditEventsContract;\nexport type ZeroComputerUseCommandContract =\n typeof zeroComputerUseCommandContract;\nexport type ZeroComputerUseHeartbeatContract =\n typeof zeroComputerUseHeartbeatContract;\nexport type ZeroComputerUseAuthorizationRequestsContract =\n typeof zeroComputerUseAuthorizationRequestsContract;\nexport type ZeroComputerUseHostCommandsContract =\n typeof zeroComputerUseHostCommandsContract;\nexport type ZeroComputerUseHostsContract = typeof zeroComputerUseHostsContract;\nexport type ZeroComputerUseWriteCommandContract =\n typeof zeroComputerUseWriteCommandContract;\nexport type ZeroComputerUsePluginCommandContract =\n typeof zeroComputerUsePluginCommandContract;\n","import { ApiRequestError, getBaseUrl } from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\ntype ZeroMapsOperation =\n | \"geocode\"\n | \"reverse-geocode\"\n | \"directions\"\n | \"places/search\"\n | \"places/details\"\n | \"osm/download\"\n | \"osm/render\";\n\nexport interface ZeroMapsResponse {\n readonly operation?: string;\n readonly provider?: string;\n readonly creditsCharged?: number;\n readonly billingCategory?: string;\n readonly billingQuantity?: number;\n readonly result?: unknown;\n}\n\nfunction authenticatedJsonHeaders(token: string): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return headers;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function parseErrorBody(\n response: Response,\n): Promise<{ message: string; code: string }> {\n let message = `Zero Maps request failed (HTTP ${response.status})`;\n let code = response.status === 404 ? \"NOT_FOUND\" : \"UNKNOWN\";\n\n try {\n const body: unknown = await response.json();\n if (isRecord(body) && isRecord(body.error)) {\n if (typeof body.error.message === \"string\") {\n message = body.error.message;\n }\n if (typeof body.error.code === \"string\") {\n code = body.error.code;\n }\n }\n } catch {\n // Keep the status-based fallback when the response is not JSON.\n }\n\n if (response.status === 404 && code === \"NOT_FOUND\") {\n message =\n \"Zero Maps API is not available on this server yet. Try again after the maps backend is deployed.\";\n }\n\n return { message, code };\n}\n\nexport async function callZeroMaps(\n operation: ZeroMapsOperation,\n body: Record<string, unknown>,\n): Promise<ZeroMapsResponse> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const response = await fetch(\n new URL(`/api/zero/maps/${operation}`, baseUrl),\n {\n method: \"POST\",\n headers: headersWithCliClientHeaders(authenticatedJsonHeaders(token)),\n body: JSON.stringify(body),\n },\n );\n\n if (!response.ok) {\n const { message, code } = await parseErrorBody(response);\n throw new ApiRequestError(message, code, response.status);\n }\n\n return (await response.json()) as ZeroMapsResponse;\n}\n","import { ApiRequestError, getBaseUrl } from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\nexport type ZeroBankingOperation = \"accounts\" | \"balances\" | \"transactions\";\n\nexport interface ZeroBankingResponse {\n readonly operation: ZeroBankingOperation;\n readonly provider: \"finicity\";\n readonly accounts?: unknown[];\n readonly balance?: unknown;\n readonly accountId?: string;\n readonly transactions?: unknown[];\n}\n\nfunction authenticatedJsonHeaders(token: string): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return headers;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function parseErrorBody(\n response: Response,\n): Promise<{ message: string; code: string }> {\n let message = `Zero Banking request failed (HTTP ${response.status})`;\n let code = response.status === 404 ? \"NOT_FOUND\" : \"UNKNOWN\";\n\n try {\n const body: unknown = await response.json();\n if (isRecord(body) && isRecord(body.error)) {\n if (typeof body.error.message === \"string\") {\n message = body.error.message;\n }\n if (typeof body.error.code === \"string\") {\n code = body.error.code;\n }\n }\n } catch {\n // Keep the status-based fallback when the response is not JSON.\n }\n\n if (response.status === 404 && code === \"NOT_FOUND\") {\n message =\n \"Zero Banking API is not available on this server yet. Try again after the banking backend is deployed.\";\n }\n\n return { message, code };\n}\n\nexport async function callZeroBanking(\n operation: ZeroBankingOperation,\n body: Record<string, unknown>,\n): Promise<ZeroBankingResponse> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const response = await fetch(\n new URL(`/api/zero/banking/${operation}`, baseUrl),\n {\n method: \"POST\",\n headers: headersWithCliClientHeaders(authenticatedJsonHeaders(token)),\n body: JSON.stringify(body),\n },\n );\n\n if (!response.ok) {\n const { message, code } = await parseErrorBody(response);\n throw new ApiRequestError(message, code, response.status);\n }\n\n return (await response.json()) as ZeroBankingResponse;\n}\n","// Core types (only export what's actually used)\nexport type { RunResult } from \"./core/types\";\n\n// Custom error class\nexport { ApiRequestError } from \"./core/client-factory\";\n\n// HTTP utilities (only export what's actually used)\n\n// Domain modules - Composes\nexport {\n getComposeByName,\n getComposeById,\n getComposeVersion,\n createOrUpdateCompose,\n} from \"./domains/composes\";\n\n// Domain modules - Runs\nexport {\n createRun,\n getEvents,\n listRuns,\n cancelRun,\n getRunQueue,\n} from \"./domains/runs\";\n\n// Domain modules - Sessions\nexport { getSession, getCheckpoint } from \"./domains/sessions\";\n\n// Domain modules - Storages\nexport {\n prepareStorage,\n commitStorage,\n getStorageDownload,\n listStorages,\n} from \"./domains/storages\";\n\n// Domain modules - Registry Resources\nexport { getRegistryResourceDownload } from \"./domains/registry-resources\";\n\n// Domain modules - Zero User Preferences\nexport {\n getZeroUserPreferences,\n updateZeroUserPreferences,\n} from \"./domains/zero-user-preferences\";\n\n// Domain modules - Zero Organizations\nexport {\n getZeroOrg,\n updateZeroOrg,\n listZeroOrgs,\n getZeroOrgMembers,\n inviteZeroOrgMember,\n removeZeroOrgMember,\n leaveZeroOrg,\n deleteZeroOrg,\n switchZeroOrg,\n} from \"./domains/zero-orgs\";\n\n// Domain modules - Zero Billing\nexport {\n getZeroBillingStatus,\n createZeroCreditCheckout,\n} from \"./domains/zero-billing\";\n\n// Domain modules - Zero Secrets\nexport {\n listZeroSecrets,\n setZeroSecret,\n deleteZeroSecret,\n} from \"./domains/zero-secrets\";\n\n// Domain modules - Zero Variables\nexport {\n listZeroVariables,\n setZeroVariable,\n deleteZeroVariable,\n} from \"./domains/zero-variables\";\n\n// Domain modules - Zero Org Secrets\nexport {\n listZeroOrgSecrets,\n setZeroOrgSecret,\n deleteZeroOrgSecret,\n} from \"./domains/zero-org-secrets\";\n\n// Domain modules - Zero Org Variables\nexport {\n listZeroOrgVariables,\n setZeroOrgVariable,\n deleteZeroOrgVariable,\n} from \"./domains/zero-org-variables\";\n\n// Domain modules - Zero Org Model Providers\nexport {\n listZeroOrgModelProviders,\n upsertZeroOrgModelProvider,\n deleteZeroOrgModelProvider,\n} from \"./domains/zero-org-model-providers\";\n\n// Domain modules - Zero Model Policies\nexport { listZeroModelPolicies } from \"./domains/zero-model-policies\";\n\n// Domain modules - Zero Agents\nexport {\n createZeroAgent,\n listZeroAgents,\n getZeroAgent,\n updateZeroAgent,\n deleteZeroAgent,\n getZeroAgentInstructions,\n updateZeroAgentInstructions,\n getZeroAgentUserConnectors,\n getZeroAgentCustomConnectors,\n listZeroUserPermissionGrants,\n} from \"./domains/zero-agents\";\n\n// Domain modules - Zero Workflows\nexport {\n listWorkflows,\n createWorkflow,\n getWorkflow,\n updateWorkflow,\n deleteWorkflow,\n copyWorkflow,\n listWorkflowTriggers,\n createWorkflowTrigger,\n getWorkflowTrigger,\n updateWorkflowTrigger,\n deleteWorkflowTrigger,\n enableWorkflowTrigger,\n disableWorkflowTrigger,\n} from \"./domains/zero-workflows\";\n\n// Domain modules - Zero Goals\nexport {\n createGoal,\n editGoal,\n getGoal,\n completeGoal,\n blockGoal,\n pauseGoal,\n resumeGoal,\n clearGoal,\n} from \"./domains/zero-goals\";\n\n// Domain modules - Zero Connectors\nexport {\n listZeroConnectors,\n listZeroConnectorCatalog,\n listZeroConnectorCatalogStatus,\n connectZeroConnectorManualGrant,\n listZeroCustomConnectors,\n getZeroCustomConnector,\n} from \"./domains/zero-connectors\";\n\n// Domain modules - Integrations Slack\nexport {\n sendSlackMessage,\n initSlackFileUpload,\n completeSlackFileUpload,\n downloadSlackFile,\n} from \"./domains/integrations-slack\";\n\n// Domain modules - Integrations Telegram\nexport {\n listTelegramBots,\n sendTelegramMessage,\n downloadTelegramFile,\n initTelegramFileUpload,\n completeTelegramFileUpload,\n} from \"./domains/integrations-telegram\";\n\n// Domain modules - Integrations Teams\nexport {\n sendTeamsMessage,\n initTeamsFileUpload,\n completeTeamsFileUpload,\n downloadTeamsFile,\n} from \"./domains/integrations-teams\";\n\n// Domain modules - Integrations GitHub\nexport {\n downloadGithubFile,\n initGithubFileUpload,\n completeGithubFileUpload,\n} from \"./domains/integrations-github\";\n\n// Domain modules - Integrations Phone\nexport {\n sendPhoneMessage,\n downloadPhoneFile,\n initPhoneFileUpload,\n completePhoneFileUpload,\n} from \"./domains/integrations-phone\";\n\n// Domain modules - Zero Runs\nexport { getZeroRunAgentEvents } from \"./domains/zero-runs\";\n\n// Domain modules - Zero Logs\nexport { listZeroLogs, searchZeroLogs } from \"./domains/zero-logs\";\n\n// Domain modules - Zero Chat\nexport {\n getZeroChatThread,\n renameZeroChatThread,\n searchZeroChat,\n updateZeroChatThreadModelSelection,\n} from \"./domains/zero-chat\";\n\n// Domain modules - Zero Relationships\nexport {\n resolveZeroRelationship,\n searchZeroRelationships,\n} from \"./domains/zero-relationships\";\n\n// Domain modules - Zero Memory\nexport {\n createZeroMemory,\n forgetZeroMemory,\n forgetZeroMemoryByPrompt,\n getZeroMemoryContext,\n listZeroMemory,\n listZeroMemoryDocuments,\n listZeroMemoryForgotten,\n listZeroMemoryHistory,\n recallZeroMemory,\n searchZeroMemory,\n updateZeroMemory,\n} from \"./domains/zero-memory\";\n\n// Domain modules - Logs\nexport {\n getSystemLog,\n getMetrics,\n getAgentEvents,\n getNetworkLogs,\n searchLogs,\n type RunEvent,\n type TelemetryMetric,\n type NetworkLogEntry,\n type LogsSearchResponse,\n} from \"./domains/logs\";\n\n// Domain modules - Zero Developer Support\nexport {\n requestDeveloperSupportConsent,\n submitDeveloperSupport,\n} from \"./domains/zero-developer-support\";\n\n// Domain modules - Zero Computer Use\nexport {\n createComputerUseAuthorizationRequest,\n createComputerUsePluginCommand,\n listComputerUseHosts,\n createComputerUseReadCommand,\n createComputerUseWriteCommand,\n fetchComputerUsePluginContent,\n fetchComputerUseScreenshot,\n getComputerUseCommand,\n} from \"./domains/zero-computer-use\";\n\n// Domain modules - Zero Maps\nexport { callZeroMaps, type ZeroMapsResponse } from \"./domains/zero-maps\";\n\n// Domain modules - Zero Banking\nexport {\n callZeroBanking,\n type ZeroBankingResponse,\n} from \"./domains/zero-banking\";\n\n// Domain modules - Web\nexport {\n downloadWebFile,\n uploadWebFile,\n generateWebVoice,\n generateWebImage,\n generateWebVideo,\n} from \"./domains/web\";\n\n// Domain modules - Zero Host\nexport {\n prepareHostedSite,\n completeHostedSite,\n getHostedSiteFiles,\n} from \"./domains/zero-host\";\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n composesMainContract,\n composesByIdContract,\n composesVersionsContract,\n agentComposeApiContentSchema,\n} from \"@vm0/api-contracts/contracts/composes\";\nimport type { z } from \"zod\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type {\n GetComposeResponse,\n CreateComposeResponse,\n GetComposeVersionResponse,\n} from \"../core/types\";\n\nexport async function getComposeByName(\n name: string,\n): Promise<GetComposeResponse | null> {\n const config = await getClientConfig();\n const client = initClient(composesMainContract, config);\n\n const result = await client.getByName({\n query: { name },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n if (result.status === 404) {\n return null;\n }\n\n handleError(result, `Compose not found: ${name}`);\n}\n\nexport async function getComposeById(id: string): Promise<GetComposeResponse> {\n const config = await getClientConfig();\n const client = initClient(composesByIdContract, config);\n\n const result = await client.getById({\n params: { id },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Compose not found: ${id}`);\n}\n\n/**\n * Resolve a version specifier to a full version ID\n * Supports: \"latest\", full hash (64 chars), or hash prefix (8+ chars)\n */\nexport async function getComposeVersion(\n composeId: string,\n version: string,\n): Promise<GetComposeVersionResponse> {\n const config = await getClientConfig();\n const client = initClient(composesVersionsContract, config);\n\n const result = await client.resolveVersion({\n query: { composeId, version },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Version not found: ${version}`);\n}\n\nexport async function createOrUpdateCompose(body: {\n content: unknown;\n}): Promise<CreateComposeResponse> {\n const config = await getClientConfig();\n const client = initClient(composesMainContract, config);\n\n const result = await client.create({\n body: body as { content: z.infer<typeof agentComposeApiContentSchema> },\n });\n\n // Both 200 and 201 are success cases\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to create compose\");\n}\n","import { z } from \"zod\";\nimport { firewallsSchema } from \"@vm0/connectors/firewall-types\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { CANONICAL_WORKING_DIR } from \"./runners\";\n\nconst c = initContract();\n\nexport const MOUNT_PATH_TEMPLATE = \"${{ working_dir }}\";\n\nexport function expandMountPath(mountPath: string | undefined): string {\n if (mountPath === undefined || mountPath === MOUNT_PATH_TEMPLATE) {\n return CANONICAL_WORKING_DIR;\n }\n return mountPath;\n}\n\n/**\n * Version query parameter schema for compose versions\n *\n * Accepts: \"latest\" tag or 8-64 hex character version hash\n */\nconst composeVersionQuerySchema = z\n .string()\n .min(1, \"Missing version query parameter\")\n .regex(\n /^[a-f0-9]{8,64}$|^latest$/i,\n \"Version must be 8-64 hex characters or 'latest'\",\n );\n\n/**\n * Agent name regex: 3-64 chars, letters/numbers/hyphens, start and end with alphanumeric.\n */\nexport const AGENT_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}[a-zA-Z0-9]$/;\n\n/**\n * Capabilities for the zero-layer capability system (ZERO_TOKEN).\n * These protect /api/zero/* routes only.\n */\nexport const ZERO_CAPABILITIES = [\n \"agent:read\",\n \"agent:write\",\n \"agent:delete\",\n \"agent-run:read\",\n \"agent-run:write\",\n \"goal:read\",\n \"goal:agent-result:write\",\n \"goal:user-control:write\",\n \"github:read\",\n \"github:write\",\n \"slack:write\",\n \"teams:write\",\n \"phone:read\",\n \"phone:write\",\n \"telegram:read\",\n \"telegram:write\",\n \"chat-message:read\",\n \"chat-thread:read\",\n \"chat-thread:write\",\n \"connector:read\",\n \"relationship:read\",\n \"billing:read\",\n \"billing:write\",\n \"banking:read\",\n \"maps:read\",\n \"computer-use:write\",\n \"file:read\",\n \"file:write\",\n \"host:read\",\n \"host:write\",\n] as const;\n\n/** Inferred union type of all zero capability strings. */\nexport type ZeroCapability = (typeof ZERO_CAPABILITIES)[number];\n\n/** Metadata for a single zero capability. */\nexport interface ZeroCapabilityMeta {\n group: string;\n label: string;\n}\n\n/**\n * Exhaustive mapping from every zero capability to its UI group and label.\n * Adding a new capability to ZERO_CAPABILITIES without updating this record\n * will produce a TypeScript compile error.\n */\nexport const ZERO_CAPABILITY_META: Record<ZeroCapability, ZeroCapabilityMeta> =\n {\n \"agent:read\": { group: \"Agent\", label: \"Read agents\" },\n \"agent:write\": { group: \"Agent\", label: \"Create & update agents\" },\n \"agent:delete\": { group: \"Agent\", label: \"Delete agents\" },\n \"agent-run:read\": { group: \"Agent Runs\", label: \"View runs & telemetry\" },\n \"agent-run:write\": { group: \"Agent Runs\", label: \"Create & cancel runs\" },\n \"goal:read\": { group: \"Goals\", label: \"Read thread goals\" },\n \"goal:agent-result:write\": {\n group: \"Goals\",\n label: \"Complete or block thread goals\",\n },\n \"goal:user-control:write\": {\n group: \"Goals\",\n label: \"Create and manage thread goals\",\n },\n \"github:read\": {\n group: \"Integrations\",\n label: \"Download GitHub files\",\n },\n \"github:write\": {\n group: \"Integrations\",\n label: \"Send GitHub comments and files\",\n },\n \"slack:write\": { group: \"Integrations\", label: \"Send Slack messages\" },\n \"teams:write\": {\n group: \"Integrations\",\n label: \"Send Microsoft Teams messages and files\",\n },\n \"phone:read\": {\n group: \"Integrations\",\n label: \"Download AgentPhone files\",\n },\n \"phone:write\": {\n group: \"Integrations\",\n label: \"Send AgentPhone messages and files\",\n },\n \"telegram:read\": {\n group: \"Integrations\",\n label: \"Download Telegram files\",\n },\n \"telegram:write\": {\n group: \"Integrations\",\n label: \"Send Telegram messages and files\",\n },\n \"chat-message:read\": {\n group: \"Integrations\",\n label: \"Read chat messages\",\n },\n \"chat-thread:read\": {\n group: \"Chat Threads\",\n label: \"Read chat thread metadata\",\n },\n \"chat-thread:write\": {\n group: \"Chat Threads\",\n label: \"Update chat thread metadata\",\n },\n \"connector:read\": { group: \"Connectors\", label: \"View connected services\" },\n \"relationship:read\": {\n group: \"Memory\",\n label: \"Read relationship memory\",\n },\n \"billing:read\": { group: \"Billing\", label: \"View billing and credits\" },\n \"billing:write\": {\n group: \"Billing\",\n label: \"Buy credits and manage billing\",\n },\n \"banking:read\": {\n group: \"Banking\",\n label: \"Read enabled banking accounts\",\n },\n \"maps:read\": { group: \"Maps\", label: \"Use managed maps services\" },\n \"computer-use:write\": {\n group: \"Computer Use\",\n label: \"Control desktop apps\",\n },\n \"file:read\": { group: \"Files\", label: \"Download uploaded files\" },\n \"file:write\": { group: \"Files\", label: \"Upload files\" },\n \"host:read\": { group: \"Hosting\", label: \"View hosted sites\" },\n \"host:write\": { group: \"Hosting\", label: \"Publish hosted sites\" },\n };\n\n/**\n * Agent name validation schema\n * - Must be 3-64 characters\n * - Letters, numbers, and hyphens only\n * - Must start and end with letter or number\n */\nconst agentNameSchema = z\n .string()\n .min(3, \"Agent name must be at least 3 characters\")\n .max(64, \"Agent name must be 64 characters or less\")\n .regex(\n AGENT_NAME_REGEX,\n \"Agent name must start and end with letter or number, and contain only letters, numbers, and hyphens\",\n );\n\n/**\n * Volume configuration schema\n */\nconst volumeConfigSchema = z.object({\n name: z.string().min(1, \"Volume name is required\"),\n version: z.string().min(1, \"Volume version is required\"),\n /** When true, skip mounting without error if volume doesn't exist */\n optional: z.boolean().optional(),\n});\n\n/**\n * Mount path must be an absolute path (starts with \"/\") or the canonical\n * workspace template. When omitted, artifacts default to the canonical\n * workspace root at resolution time.\n */\nconst mountPathSchema = z\n .string()\n .min(1, \"mount_path cannot be empty\")\n .refine((val) => {\n return val === MOUNT_PATH_TEMPLATE || val.startsWith(\"/\");\n }, \"mount_path must be an absolute path or ${{ working_dir }}\");\n\n/**\n * Artifact entry in compose.\n * - name: required storage name\n * - version: optional, defaults to \"latest\" at resolution time\n * - mount_path: optional, defaults to the canonical workspace root at\n * resolution time. `${{ working_dir }}` is also accepted as a shorthand for\n * the same canonical workspace root.\n */\nconst artifactConfigSchema = z.object({\n name: z.string().min(1, \"Artifact name is required\"),\n version: z.string().min(1).optional(),\n mount_path: mountPathSchema.optional(),\n});\n\nconst artifactsArraySchema = z.array(artifactConfigSchema).refine((items) => {\n const names = items.map((i) => {\n return i.name;\n });\n return new Set(names).size === names.length;\n}, \"Artifact names must be unique\");\n\nconst agentFirewallsMapSchema = z.record(\n z.string(),\n z.object({\n permissions: z.union([z.literal(\"all\"), z.array(z.string()).min(1)]),\n }),\n);\nconst legacyAgentFirewallsSchema = z.union([\n agentFirewallsMapSchema,\n firewallsSchema,\n]);\n\n/**\n * Agent definition schema\n */\nconst agentDefinitionSchema = z.object({\n description: z.string().optional(),\n framework: z.enum([\"claude-code\", \"codex\"]),\n volumes: z.array(z.string()).optional(),\n environment: z.record(z.string(), z.string()).optional(),\n /**\n * Path to instructions file (e.g., AGENTS.md).\n * Auto-uploaded as volume and mounted at /home/user/.claude/CLAUDE.md\n */\n instructions: z\n .string()\n .min(1, \"Instructions path cannot be empty\")\n .refine((val) => {\n return (\n !val.includes(\"..\") && !val.startsWith(\"/\") && !val.startsWith(\"\\\\\")\n );\n }, \"Instructions path must be a relative path without '..' segments\")\n .optional(),\n /**\n * @deprecated Skills are no longer processed by the CLI path. Declare\n * mounts via `volumes:` / `--volume` instead. Field retained as optional\n * so older CLI clients posting `skills:` are not rejected; server strips\n * the field before persisting compose content.\n */\n skills: z.array(z.string()).optional(),\n /**\n * Route this agent to a self-hosted runner instead of E2B.\n * When specified, runs will be queued for the specified runner group.\n */\n experimental_runner: z\n .object({\n group: z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Runner group must be in vm0/<name> format (e.g., vm0/production)\",\n ),\n })\n .optional(),\n /**\n * VM profile for resource allocation (e.g., \"vm0/default\").\n * Determines rootfs image and VM resources (vCPU, memory).\n * Defaults to \"vm0/default\" when omitted.\n */\n experimental_profile: z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Profile must be in org/name format (e.g., vm0/default)\",\n )\n .optional(),\n /**\n * External firewall rules for proxy-side token replacement.\n * Map format: { slack: { permissions: [...] | \"all\" } }\n * Resolved to full ExpandedFirewallConfig[] at runtime.\n */\n firewalls: agentFirewallsMapSchema.optional(),\n});\n\n/**\n * Agent compose YAML content schema (CLI input — firewalls is map format)\n */\nconst agentComposeContentSchema = z.object({\n version: z.string().min(1, \"Version is required\"),\n agents: z.record(z.string(), agentDefinitionSchema),\n volumes: z.record(z.string(), volumeConfigSchema).optional(),\n artifacts: artifactsArraySchema.optional(),\n});\n\n/**\n * Agent compose content schema for API requests.\n * firewalls is no longer stored in compose content — all firewalls\n * are injected at runtime. The field accepts documented legacy map or expanded\n * array shapes for backward compatibility (ignored at runtime).\n */\nconst agentComposeApiContentSchema = z.object({\n version: z.string().min(1, \"Version is required\"),\n agents: z.record(\n z.string(),\n agentDefinitionSchema.extend({\n // Legacy: older compose versions may have this field (map or expanded array).\n // Accepted for backward compat but ignored at runtime.\n firewalls: legacyAgentFirewallsSchema.optional(),\n }),\n ),\n volumes: z.record(z.string(), volumeConfigSchema).optional(),\n artifacts: artifactsArraySchema.optional(),\n});\n\n/**\n * Compose response schema (used in GET responses)\n */\nconst composeResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n headVersionId: z.string().nullable(),\n content: agentComposeApiContentSchema.nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Create/update compose response schema (used in POST responses)\n */\nconst createComposeResponseSchema = z.object({\n composeId: z.string(),\n name: z.string(),\n versionId: z.string(),\n action: z.enum([\"created\", \"existing\"]),\n updatedAt: z.string(),\n});\n\n/**\n * Composes main route contract (/api/agent/composes)\n * Handles GET by name and POST create/update\n */\nexport const composesMainContract = c.router({\n /**\n * GET /api/agent/composes?name={name}&org={org}\n * Get agent compose by name with HEAD version content\n * If org is not provided, uses the authenticated user's default org\n */\n getByName: {\n method: \"GET\",\n path: \"/api/agent/composes\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Missing name query parameter\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose by name\",\n },\n\n /**\n * POST /api/agent/composes\n * Create or update an agent compose version\n *\n * Returns 201 when a new compose is created, 200 when updating an existing compose.\n * The action field indicates whether a new version was created or an existing one reused.\n */\n create: {\n method: \"POST\",\n path: \"/api/agent/composes\",\n headers: authHeadersSchema,\n body: z.object({\n content: agentComposeApiContentSchema,\n }),\n responses: {\n 200: createComposeResponseSchema,\n 201: createComposeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Create or update agent compose version\",\n },\n});\n\n/**\n * Composes by ID route contract (/api/agent/composes/[id])\n */\nexport const composesByIdContract = c.router({\n /**\n * GET /api/agent/composes/:id\n * Get agent compose by ID with HEAD version content\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Compose ID must be a valid UUID\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose by ID\",\n },\n});\n\n/**\n * Composes versions route contract (/api/agent/composes/versions)\n */\nexport const composesVersionsContract = c.router({\n /**\n * GET /api/agent/composes/versions?composeId={id}&version={hash|tag}\n * Resolve a version specifier to a full version ID\n */\n resolveVersion: {\n method: \"GET\",\n path: \"/api/agent/composes/versions\",\n headers: authHeadersSchema,\n query: z.object({\n composeId: z.string().min(1, \"Missing composeId query parameter\"),\n version: composeVersionQuerySchema,\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n tag: z.string().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Resolve version specifier to full version ID\",\n },\n});\n\n/**\n * Compose list item schema (used in list response)\n */\nconst composeListItemSchema = z.object({\n id: z.string(),\n name: z.string(),\n displayName: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n sound: z.string().nullable().optional(),\n headVersionId: z.string().nullable(),\n updatedAt: z.string(),\n});\n\nexport type ComposesMainContract = typeof composesMainContract;\nexport type ComposesByIdContract = typeof composesByIdContract;\nexport type ComposesVersionsContract = typeof composesVersionsContract;\n\n// Export schemas for reuse\nexport {\n agentNameSchema,\n volumeConfigSchema,\n artifactConfigSchema,\n artifactsArraySchema,\n agentDefinitionSchema,\n agentComposeContentSchema,\n agentComposeApiContentSchema,\n composeResponseSchema,\n composeListItemSchema,\n};\n\n// Export inferred types for consumers\nexport type ComposeResponse = z.infer<typeof composeResponseSchema>;\nexport type ComposeListItem = z.infer<typeof composeListItemSchema>;\nexport type ArtifactConfig = z.infer<typeof artifactConfigSchema>;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n runsMainContract,\n runEventsContract,\n runsCancelContract,\n runsQueueContract,\n type DirectRunModelProviderType,\n type RunsListResponse,\n type CancelRunResponse,\n type QueueResponse,\n} from \"@vm0/api-contracts/contracts/runs\";\nimport type { FirewallPolicies } from \"@vm0/connectors/firewall-types\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type { CreateRunResponse, GetEventsResponse } from \"../core/types\";\n\n/**\n * Create a run with unified request format\n * Supports new runs, checkpoint resume, and session continue\n * Note: Environment variables are expanded server-side from vars\n */\nexport async function createRun(body: {\n // Shortcuts (mutually exclusive)\n checkpointId?: string;\n sessionId?: string;\n // Base parameters\n agentComposeId?: string;\n agentComposeVersionId?: string;\n conversationId?: string;\n vars?: Record<string, string>;\n secrets?: Record<string, string>;\n volumeVersions?: Record<string, string>;\n // Multi-mount artifacts passed directly at run time\n artifacts?: Array<{\n name: string;\n version?: string;\n mountPath: string;\n }>;\n // Additional volumes passed directly at run time (bypass compose)\n additionalVolumes?: Array<{\n name: string;\n version?: string;\n mountPath: string;\n }>;\n // Preview evaluation escape hatch (internal use only)\n realAgentInPreview?: boolean;\n // Capture HTTP header names, selected safe header values, request bodies, and response bodies\n // in network logs\n captureNetworkBodies?: boolean;\n // Append text to the agent's system prompt\n appendSystemPrompt?: string;\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools?: string[];\n // Tools to make available in Claude CLI (passed as --tools)\n tools?: string[];\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings?: string;\n // Per-permission policies\n permissionPolicies?: FirewallPolicies;\n // Internal: pin provider type for direct CLI runs used by E2E.\n // vm0 is excluded; zero runs own vm0 credit enforcement.\n modelProviderType?: DirectRunModelProviderType;\n // Required\n prompt: string;\n}): Promise<CreateRunResponse> {\n const config = await getClientConfig();\n const client = initClient(runsMainContract, config);\n\n const result = await client.create({ body });\n\n if (result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to create run\");\n}\n\nexport async function getEvents(\n runId: string,\n options?: { since?: number; limit?: number },\n): Promise<GetEventsResponse> {\n const config = await getClientConfig();\n const client = initClient(runEventsContract, config);\n\n const result = await client.getEvents({\n params: { id: runId },\n query: {\n since: options?.since ?? -1,\n limit: options?.limit ?? 100,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch events\");\n}\n\n/**\n * List runs with optional filters\n */\nexport async function listRuns(params?: {\n status?: string; // comma-separated: \"pending,running\"\n agent?: string;\n since?: string; // ISO timestamp\n until?: string; // ISO timestamp\n limit?: number;\n}): Promise<RunsListResponse> {\n const config = await getClientConfig();\n const client = initClient(runsMainContract, config);\n\n const result = await client.list({\n query: {\n status: params?.status,\n agent: params?.agent,\n since: params?.since,\n until: params?.until,\n limit: params?.limit ?? 50,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list runs\");\n}\n\n/**\n * Get org run queue status\n */\nexport async function getRunQueue(): Promise<QueueResponse> {\n const config = await getClientConfig();\n const client = initClient(runsQueueContract, config);\n\n const result = await client.getQueue({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get run queue\");\n}\n\n/**\n * Cancel (kill) a run\n */\nexport async function cancelRun(runId: string): Promise<CancelRunResponse> {\n const config = await getClientConfig();\n const client = initClient(runsCancelContract, config);\n\n const result = await client.cancel({\n params: { id: runId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to cancel run\");\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n sessionsByIdContract,\n checkpointsByIdContract,\n} from \"@vm0/api-contracts/contracts/sessions\";\nimport type { ApiErrorResponse } from \"@vm0/api-contracts/contracts/errors\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type { GetSessionResponse, GetCheckpointResponse } from \"../core/types\";\n\n/**\n * Get session by ID\n * Used by run continue to fetch session info including secretNames\n */\nexport async function getSession(\n sessionId: string,\n): Promise<GetSessionResponse> {\n const config = await getClientConfig();\n const client = initClient(sessionsByIdContract, config);\n\n const result = await client.getById({\n params: { id: sessionId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n const errorBody = result.body as ApiErrorResponse;\n const message = errorBody.error?.message || `Session not found: ${sessionId}`;\n throw new Error(message);\n}\n\n/**\n * Get checkpoint by ID\n * Used by run resume to fetch checkpoint info including secretNames\n */\nexport async function getCheckpoint(\n checkpointId: string,\n): Promise<GetCheckpointResponse> {\n const config = await getClientConfig();\n const client = initClient(checkpointsByIdContract, config);\n\n const result = await client.getById({\n params: { id: checkpointId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Checkpoint not found: ${checkpointId}`);\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Session response schema\n * Represents a persistent running context across multiple runs\n */\nconst sessionResponseSchema = z.object({\n id: z.string(),\n agentComposeId: z.string(),\n conversationId: z.string().nullable(),\n artifactNames: z.array(z.string()),\n secretNames: z.array(z.string()).nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Agent compose snapshot schema (stored in checkpoints)\n */\nconst agentComposeSnapshotSchema = z.object({\n agentComposeVersionId: z.string(),\n vars: z.record(z.string(), z.string()).optional(),\n secretNames: z.array(z.string()).optional(),\n});\n\n/**\n * Volume versions snapshot schema\n */\nconst volumeVersionsSnapshotSchema = z.object({\n versions: z.record(z.string(), z.string()),\n});\n\n/**\n * Artifact snapshots schema.\n *\n * Tolerant union accepting both the legacy `Record<name, version>` map\n * (pre-#10911 guest-agent payloads) and the canonical `Array<{name, version,\n * mountPath}>` form (post-#10911). The GET-by-id handler echoes whatever shape\n * is stored in the JSONB column; CLI consumers tolerate both via the union.\n */\nconst artifactSnapshotsSchema = z.union([\n z.record(z.string(), z.string()),\n z.array(\n z.object({\n name: z.string(),\n version: z.string(),\n mountPath: z.string(),\n }),\n ),\n]);\n\n/**\n * Checkpoint response schema\n * Represents an immutable snapshot of agent run state\n */\nconst checkpointResponseSchema = z.object({\n id: z.string(),\n runId: z.string(),\n conversationId: z.string(),\n agentComposeSnapshot: agentComposeSnapshotSchema,\n // Multi-artifact snapshot payload. Accepts both the legacy\n // `Record<name, version>` map and the canonical\n // `Array<{name, version, mountPath}>` form. Null when the checkpoint has\n // no artifacts.\n artifactSnapshots: artifactSnapshotsSchema.nullable(),\n volumeVersionsSnapshot: volumeVersionsSnapshotSchema.nullable(),\n createdAt: z.string(),\n});\n\n/**\n * Sessions by ID route contract (/api/agent/sessions/[id])\n */\nexport const sessionsByIdContract = c.router({\n /**\n * GET /api/agent/sessions/:id\n * Get session by ID\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/sessions/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Session ID is required\"),\n }),\n responses: {\n 200: sessionResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get session by ID\",\n },\n});\n\n/**\n * Checkpoints by ID route contract (/api/agent/checkpoints/[id])\n */\nexport const checkpointsByIdContract = c.router({\n /**\n * GET /api/agent/checkpoints/:id\n * Get checkpoint by ID\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/checkpoints/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Checkpoint ID is required\"),\n }),\n responses: {\n 200: checkpointResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get checkpoint by ID\",\n },\n});\n\nexport type SessionsByIdContract = typeof sessionsByIdContract;\nexport type CheckpointsByIdContract = typeof checkpointsByIdContract;\n\n// Export schemas for reuse\nexport {\n sessionResponseSchema,\n checkpointResponseSchema,\n agentComposeSnapshotSchema,\n volumeVersionsSnapshotSchema,\n};\n\n// Export inferred types for consumers\nexport type SessionResponse = z.infer<typeof sessionResponseSchema>;\nexport type CheckpointResponse = z.infer<typeof checkpointResponseSchema>;\nexport type AgentComposeSnapshot = z.infer<typeof agentComposeSnapshotSchema>;\nexport type VolumeVersionsSnapshot = z.infer<\n typeof volumeVersionsSnapshotSchema\n>;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n storagesPrepareContract,\n storagesCommitContract,\n storagesDownloadContract,\n storagesListContract,\n} from \"@vm0/api-contracts/contracts/storages\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * Prepare storage for direct S3 upload\n */\nexport async function prepareStorage(body: {\n storageName: string;\n storageType: \"volume\" | \"artifact\";\n files: Array<{ path: string; hash: string; size: number }>;\n force?: boolean;\n}): Promise<{\n versionId: string;\n existing: boolean;\n uploads?: {\n archive: { key: string; presignedUrl: string };\n manifest: { key: string; presignedUrl: string };\n };\n}> {\n const config = await getClientConfig();\n const client = initClient(storagesPrepareContract, config);\n\n const result = await client.prepare({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to prepare storage\");\n}\n\n/**\n * Commit storage after S3 upload\n */\nexport async function commitStorage(body: {\n storageName: string;\n storageType: \"volume\" | \"artifact\";\n versionId: string;\n files: Array<{ path: string; hash: string; size: number }>;\n}): Promise<{\n success: true;\n versionId: string;\n storageName: string;\n size: number;\n fileCount: number;\n deduplicated?: boolean;\n}> {\n const config = await getClientConfig();\n const client = initClient(storagesCommitContract, config);\n\n const result = await client.commit({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to commit storage\");\n}\n\n/**\n * Get download URL for storage (volume or artifact)\n */\nexport async function getStorageDownload(query: {\n name: string;\n type: \"volume\" | \"artifact\";\n version?: string;\n}): Promise<\n | {\n url: string;\n versionId: string;\n fileCount: number;\n size: number;\n }\n | {\n empty: true;\n versionId: string;\n fileCount: 0;\n size: 0;\n }\n> {\n const config = await getClientConfig();\n const client = initClient(storagesDownloadContract, config);\n\n const result = await client.download({\n query: {\n name: query.name,\n type: query.type,\n version: query.version,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Storage \"${query.name}\" not found`);\n}\n\n/**\n * List storages (volumes or artifacts)\n */\nexport async function listStorages(query: {\n type: \"volume\" | \"artifact\";\n}): Promise<\n Array<{\n name: string;\n size: number;\n fileCount: number;\n updatedAt: string;\n }>\n> {\n const config = await getClientConfig();\n const client = initClient(storagesListContract, config);\n\n const result = await client.list({ query });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to list ${query.type}s`);\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroSecretsContract,\n zeroSecretsByNameContract,\n} from \"@vm0/api-contracts/contracts/zero-secrets\";\nimport type {\n SecretListResponse,\n SecretResponse,\n} from \"@vm0/api-contracts/contracts/secrets\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List user-level secrets via zero API (metadata only, no values)\n */\nexport async function listZeroSecrets(): Promise<SecretListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list secrets\");\n}\n\n/**\n * Set (create or update) a user-level secret via zero API\n */\nexport async function setZeroSecret(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<SecretResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set secret\");\n}\n\n/**\n * Delete a user-level secret by name via zero API\n */\nexport async function deleteZeroSecret(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Secret \"${name}\" not found`);\n}\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n secretResponseSchema,\n secretListResponseSchema,\n secretNameSchema,\n setSecretRequestSchema,\n} from \"./secrets\";\nimport {\n variableResponseSchema,\n variableListResponseSchema,\n variableNameSchema,\n setVariableRequestSchema,\n} from \"./variables\";\n\nconst c = initContract();\n\n/**\n * Zero secrets contract for /api/zero/secrets\n *\n * GET: List all secrets (metadata only)\n * POST: Create or update a secret (platform → infra proxy)\n */\nexport const zeroSecretsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/secrets\",\n headers: authHeadersSchema,\n responses: {\n 200: secretListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all secrets (metadata only)\",\n },\n set: {\n method: \"POST\",\n path: \"/api/zero/secrets\",\n headers: authHeadersSchema,\n body: setSecretRequestSchema,\n responses: {\n 200: secretResponseSchema,\n 201: secretResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update a secret\",\n },\n});\n\nexport type ZeroSecretsContract = typeof zeroSecretsContract;\n\n/**\n * Zero secrets by name contract for /api/zero/secrets/[name]\n *\n * DELETE: Delete a secret by name\n */\nexport const zeroSecretsByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/secrets/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: secretNameSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete a secret by name\",\n },\n});\n\nexport type ZeroSecretsByNameContract = typeof zeroSecretsByNameContract;\n\n/**\n * Zero variables contract for /api/zero/variables\n *\n * GET: List all variables (includes values)\n * POST: Create or update a variable (platform → infra proxy)\n */\nexport const zeroVariablesContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/variables\",\n headers: authHeadersSchema,\n responses: {\n 200: variableListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all variables (includes values)\",\n },\n set: {\n method: \"POST\",\n path: \"/api/zero/variables\",\n headers: authHeadersSchema,\n body: setVariableRequestSchema,\n responses: {\n 200: variableResponseSchema,\n 201: variableResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update a variable\",\n },\n});\n\nexport type ZeroVariablesContract = typeof zeroVariablesContract;\n\n/**\n * Zero variables by name contract for /api/zero/variables/[name]\n *\n * DELETE: Delete a variable by name\n */\nexport const zeroVariablesByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/variables/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: variableNameSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete a variable by name\",\n },\n});\n\nexport type ZeroVariablesByNameContract = typeof zeroVariablesByNameContract;\n","import { z } from \"zod\";\n\n/**\n * Secret name validation\n * Rules:\n * - 1-255 characters\n * - uppercase letters, numbers, and underscores only\n * - must start with a letter\n * Examples: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\n */\nexport const secretNameSchema = z\n .string()\n .min(1, \"Secret name is required\")\n .max(255, \"Secret name must be at most 255 characters\")\n .regex(\n /^[A-Z][A-Z0-9_]*$/,\n \"Secret name must contain only uppercase letters, numbers, and underscores, and must start with a letter (e.g., MY_API_KEY)\",\n );\n\n/**\n * Secret type schema\n */\nexport const secretTypeSchema = z.enum([\"user\", \"model-provider\", \"connector\"]);\n\nexport type SecretType = z.infer<typeof secretTypeSchema>;\n\n/**\n * Secret metadata response (value is never returned)\n */\nexport const secretResponseSchema = z.object({\n id: z.uuid(),\n name: z.string(),\n description: z.string().nullable(),\n type: secretTypeSchema,\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type SecretResponse = z.infer<typeof secretResponseSchema>;\n\n/**\n * List secrets response\n */\nexport const secretListResponseSchema = z.object({\n secrets: z.array(secretResponseSchema),\n});\n\nexport type SecretListResponse = z.infer<typeof secretListResponseSchema>;\n\n/**\n * Set secret request (create or update)\n */\nexport const setSecretRequestSchema = z.object({\n name: secretNameSchema,\n value: z.string().min(1, \"Secret value is required\"),\n description: z.string().max(1000).optional(),\n});\n\nexport type SetSecretRequest = z.infer<typeof setSecretRequestSchema>;\n","import { z } from \"zod\";\n\n/**\n * Variable name validation\n * Rules:\n * - 1-255 characters\n * - uppercase letters, numbers, and underscores only\n * - must start with a letter\n * Examples: MY_VAR, API_URL, DEBUG_MODE\n */\nexport const variableNameSchema = z\n .string()\n .min(1, \"Variable name is required\")\n .max(255, \"Variable name must be at most 255 characters\")\n .regex(\n /^[A-Z][A-Z0-9_]*$/,\n \"Variable name must contain only uppercase letters, numbers, and underscores, and must start with a letter (e.g., MY_VAR)\",\n );\n\n/**\n * Variable response (includes value - key difference from secrets)\n */\nexport const variableResponseSchema = z.object({\n id: z.uuid(),\n name: z.string(),\n value: z.string(),\n description: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type VariableResponse = z.infer<typeof variableResponseSchema>;\n\n/**\n * List variables response\n */\nexport const variableListResponseSchema = z.object({\n variables: z.array(variableResponseSchema),\n});\n\nexport type VariableListResponse = z.infer<typeof variableListResponseSchema>;\n\n/**\n * Set variable request (create or update)\n */\nexport const setVariableRequestSchema = z.object({\n name: variableNameSchema,\n value: z.string().min(1, \"Variable value is required\"),\n description: z.string().max(1000).optional(),\n});\n\nexport type SetVariableRequest = z.infer<typeof setVariableRequestSchema>;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroVariablesContract,\n zeroVariablesByNameContract,\n} from \"@vm0/api-contracts/contracts/zero-secrets\";\nimport type {\n VariableListResponse,\n VariableResponse,\n} from \"@vm0/api-contracts/contracts/variables\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List user-level variables via zero API (includes values)\n */\nexport async function listZeroVariables(): Promise<VariableListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list variables\");\n}\n\n/**\n * Set (create or update) a user-level variable via zero API\n */\nexport async function setZeroVariable(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<VariableResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set variable\");\n}\n\n/**\n * Delete a user-level variable by name via zero API\n */\nexport async function deleteZeroVariable(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Variable \"${name}\" not found`);\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroSecretsContract,\n zeroSecretsByNameContract,\n} from \"@vm0/api-contracts/contracts/zero-secrets\";\nimport type {\n SecretResponse,\n SecretListResponse,\n} from \"@vm0/api-contracts/contracts/secrets\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List org-level secrets via zero API (metadata only, no values)\n */\nexport async function listZeroOrgSecrets(): Promise<SecretListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org secrets\");\n}\n\n/**\n * Set (create or update) an org-level secret via zero API\n */\nexport async function setZeroOrgSecret(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<SecretResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org secret\");\n}\n\n/**\n * Delete an org-level secret by name via zero API\n */\nexport async function deleteZeroOrgSecret(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org secret \"${name}\" not found`);\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroVariablesContract,\n zeroVariablesByNameContract,\n} from \"@vm0/api-contracts/contracts/zero-secrets\";\nimport type {\n VariableResponse,\n VariableListResponse,\n} from \"@vm0/api-contracts/contracts/variables\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List org-level variables via zero API (includes values)\n */\nexport async function listZeroOrgVariables(): Promise<VariableListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org variables\");\n}\n\n/**\n * Set (create or update) an org-level variable via zero API\n */\nexport async function setZeroOrgVariable(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<VariableResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org variable\");\n}\n\n/**\n * Delete an org-level variable by name via zero API\n */\nexport async function deleteZeroOrgVariable(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org variable \"${name}\" not found`);\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroModelProvidersByTypeContract,\n zeroModelProvidersMainContract,\n} from \"@vm0/api-contracts/contracts/zero-model-providers\";\nimport type {\n ModelProviderListResponse,\n ModelProviderType,\n UpsertModelProviderResponse,\n} from \"@vm0/api-contracts/contracts/model-providers\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List all org-level model providers via zero API\n */\nexport async function listZeroOrgModelProviders(): Promise<ModelProviderListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org model providers\");\n}\n\n/**\n * Create or update an org-level model provider via zero API (admin only)\n */\nexport async function upsertZeroOrgModelProvider(body: {\n type: ModelProviderType;\n secret?: string;\n authMethod?: string;\n secrets?: Record<string, string>;\n}): Promise<UpsertModelProviderResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersMainContract, config);\n\n const result = await client.upsert({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org model provider\");\n}\n\n/**\n * Delete an org-level model provider via zero API (admin only)\n */\nexport async function deleteZeroOrgModelProvider(\n type: ModelProviderType,\n): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersByTypeContract, config);\n\n const result = await client.delete({\n params: { type },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org model provider \"${type}\" not found`);\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n modelProviderListResponseSchema,\n upsertModelProviderRequestSchema,\n upsertModelProviderResponseSchema,\n modelProviderTypeSchema,\n} from \"./model-providers\";\n\nconst c = initContract();\nconst orgUpsertModelProviderRequestSchema =\n upsertModelProviderRequestSchema.omit({ selectedModel: true });\n\n/**\n * Zero model providers main contract for /api/zero/model-providers\n *\n * GET: List org-level model providers (any member)\n * POST: Create or update an org-level model provider (admin only)\n */\nexport const zeroModelProvidersMainContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/model-providers\",\n headers: authHeadersSchema,\n responses: {\n 200: modelProviderListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List org-level model providers\",\n },\n upsert: {\n method: \"POST\",\n path: \"/api/zero/model-providers\",\n headers: authHeadersSchema,\n body: orgUpsertModelProviderRequestSchema,\n responses: {\n 200: upsertModelProviderResponseSchema,\n 201: upsertModelProviderResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update an org-level model provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersMainContract =\n typeof zeroModelProvidersMainContract;\n\n/**\n * Zero model providers by type contract for /api/zero/model-providers/:type\n *\n * DELETE: Delete an org-level model provider (admin only)\n */\nexport const zeroModelProvidersByTypeContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/model-providers/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: modelProviderTypeSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete an org-level model provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersByTypeContract =\n typeof zeroModelProvidersByTypeContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroWorkflowsCollectionContract,\n zeroWorkflowsDetailContract,\n zeroWorkflowTriggersContract,\n type WorkflowFileEntry,\n type ZeroWorkflowDetailResponse,\n type ZeroWorkflowSummary,\n type ZeroWorkflowTriggerCreateRequest,\n type ZeroWorkflowTriggerSummary,\n type ZeroWorkflowTriggerUpdateRequest,\n} from \"@vm0/api-contracts/contracts/zero-workflows\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function listWorkflows(query: {\n agentId?: string;\n}): Promise<ZeroWorkflowSummary[]> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowsCollectionContract, config);\n const result = await client.list({ query });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to list workflows\");\n}\n\nexport async function createWorkflow(body: {\n agentId: string;\n chatThreadId?: string;\n name: string;\n instruction?: string;\n files?: WorkflowFileEntry[];\n displayName?: string;\n description?: string;\n visibility?: \"public\" | \"private\";\n}): Promise<ZeroWorkflowSummary> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowsCollectionContract, config);\n const result = await client.create({ body });\n if (result.status === 201) return result.body;\n handleError(result, `Failed to create workflow \"${body.name}\"`);\n}\n\nexport async function getWorkflow(\n workflowId: string,\n): Promise<ZeroWorkflowDetailResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowsDetailContract, config);\n const result = await client.get({ params: { workflowId } });\n if (result.status === 200) return result.body;\n handleError(result, `Workflow \"${workflowId}\" not found`);\n}\n\nexport async function updateWorkflow(\n workflowId: string,\n body: {\n instruction?: string | null;\n files?: WorkflowFileEntry[];\n displayName?: string | null;\n description?: string | null;\n },\n): Promise<ZeroWorkflowDetailResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowsDetailContract, config);\n const result = await client.update({ params: { workflowId }, body });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to update workflow \"${workflowId}\"`);\n}\n\nexport async function deleteWorkflow(workflowId: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowsDetailContract, config);\n const result = await client.delete({ params: { workflowId } });\n if (result.status === 204) return;\n handleError(result, `Workflow \"${workflowId}\" not found`);\n}\n\nexport async function copyWorkflow(\n workflowId: string,\n toAgentId: string,\n): Promise<ZeroWorkflowSummary> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowsDetailContract, config);\n const result = await client.copy({\n params: { workflowId },\n body: { toAgentId },\n });\n if (result.status === 201) return result.body;\n handleError(result, `Failed to copy workflow \"${workflowId}\"`);\n}\n\nexport async function listWorkflowTriggers(\n workflowId: string,\n): Promise<readonly ZeroWorkflowTriggerSummary[]> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowTriggersContract, config);\n const result = await client.list({ params: { workflowId } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to list triggers for workflow \"${workflowId}\"`);\n}\n\nexport async function createWorkflowTrigger(\n workflowId: string,\n body: ZeroWorkflowTriggerCreateRequest,\n): Promise<ZeroWorkflowTriggerSummary> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowTriggersContract, config);\n const result = await client.create({ params: { workflowId }, body });\n if (result.status === 201) return result.body;\n handleError(result, `Failed to add trigger to workflow \"${workflowId}\"`);\n}\n\nexport async function getWorkflowTrigger(\n id: string,\n): Promise<ZeroWorkflowTriggerSummary> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowTriggersContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Workflow trigger \"${id}\" not found`);\n}\n\nexport async function updateWorkflowTrigger(\n id: string,\n body: ZeroWorkflowTriggerUpdateRequest,\n): Promise<ZeroWorkflowTriggerSummary> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowTriggersContract, config);\n const result = await client.update({ params: { id }, body });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to update workflow trigger \"${id}\"`);\n}\n\nexport async function deleteWorkflowTrigger(id: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowTriggersContract, config);\n const result = await client.delete({ params: { id } });\n if (result.status === 204) return;\n handleError(result, `Workflow trigger \"${id}\" not found`);\n}\n\nexport async function enableWorkflowTrigger(\n id: string,\n): Promise<ZeroWorkflowTriggerSummary> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowTriggersContract, config);\n const result = await client.enable({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to enable workflow trigger \"${id}\"`);\n}\n\nexport async function disableWorkflowTrigger(\n id: string,\n): Promise<ZeroWorkflowTriggerSummary> {\n const config = await getClientConfig();\n const client = initClient(zeroWorkflowTriggersContract, config);\n const result = await client.disable({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to disable workflow trigger \"${id}\"`);\n}\n","import { z } from \"zod\";\nimport { connectorTypeSchema } from \"@vm0/connectors/connectors\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const zeroWorkflowVisibilitySchema = z.enum([\"public\", \"private\"]);\nexport type ZeroWorkflowVisibility = z.infer<\n typeof zeroWorkflowVisibilitySchema\n>;\n\n/**\n * Workflow name (slug) validation regex.\n * Must be lowercase alphanumeric with hyphens, no leading/trailing hyphens.\n * Minimum 2 characters. Slugs are NOT unique — duplicates across and within an\n * agent are allowed; run-time picks a winner by a fixed priority rule.\n */\nexport const zeroWorkflowNameSchema = z\n .string()\n .min(2)\n .max(64)\n .regex(/^[a-z0-9][a-z0-9-]*[a-z0-9]$/);\n\n/**\n * Reserved file name. `SKILL.md` is synthesized server-side from the workflow's\n * (name, description, instruction); users never author or see it.\n */\nexport const RESERVED_SKILL_FILE = \"SKILL.md\";\n\n/**\n * A single attached (supplementary) file. The synthesized SKILL.md is never\n * part of this set — `SKILL.md` is a reserved path and is rejected.\n */\nexport const workflowFileEntrySchema = z.object({\n path: z\n .string()\n .min(1)\n .max(256)\n .refine(\n (p) => {\n return !p.startsWith(\"/\");\n },\n { message: \"Path must be relative\" },\n )\n .refine(\n (p) => {\n return !p.includes(\"..\");\n },\n { message: \"Path must not contain ..\" },\n )\n .refine(\n (p) => {\n return p !== RESERVED_SKILL_FILE;\n },\n { message: \"SKILL.md is reserved and is generated automatically\" },\n ),\n content: z.string(),\n});\n\nconst WORKFLOW_FILES_MAX_BYTES = 5 * 1024 * 1024;\nconst WORKFLOW_FILES_MAX_COUNT = 500;\n\n/**\n * Attached files (excluding the synthesized SKILL.md). May be empty.\n */\nexport const workflowFilesSchema = z\n .array(workflowFileEntrySchema)\n .max(\n WORKFLOW_FILES_MAX_COUNT,\n `Maximum ${WORKFLOW_FILES_MAX_COUNT} files allowed`,\n )\n .refine(\n (files) => {\n const total = files.reduce((sum, f) => {\n return sum + new TextEncoder().encode(f.content).length;\n }, 0);\n return total <= WORKFLOW_FILES_MAX_BYTES;\n },\n { message: \"Total file size must not exceed 5MB\" },\n );\n\nexport const workflowFileMetadataSchema = z.object({\n path: z.string(),\n size: z.number(),\n});\n\nexport const workflowInstructionSchema = z\n .string()\n .max(WORKFLOW_FILES_MAX_BYTES);\n\nexport const zeroWorkflowScheduleTypeSchema = z.enum([\"cron\", \"loop\", \"once\"]);\nexport type ZeroWorkflowScheduleType = z.infer<\n typeof zeroWorkflowScheduleTypeSchema\n>;\n\nexport const zeroWorkflowTriggerKindSchema = z.enum([\"schedule\", \"event\"]);\nexport type ZeroWorkflowTriggerKind = z.infer<\n typeof zeroWorkflowTriggerKindSchema\n>;\n\nexport const zeroWorkflowEventTypeSchema = z.enum([\n \"gmail-new-message\",\n \"gmail-label-applied\",\n \"github-label-applied\",\n \"google-calendar-event-created\",\n \"google-calendar-event-updated\",\n \"google-calendar-event-cancelled\",\n \"google-meet-transcript-generated\",\n \"notion-child-page-created\",\n \"notion-database-item-created\",\n \"notion-page-content-updated\",\n \"webhook-received\",\n]);\nexport type ZeroWorkflowEventType = z.infer<typeof zeroWorkflowEventTypeSchema>;\n\nconst gmailTextMatchSchema = z\n .object({\n contains: z.string().min(1).optional(),\n containsAny: z.array(z.string().min(1)).min(1).optional(),\n doesNotContain: z.string().min(1).optional(),\n doesNotContainAny: z.array(z.string().min(1)).min(1).optional(),\n })\n .strict()\n .refine(\n (value) => {\n return (\n value.contains !== undefined ||\n value.containsAny !== undefined ||\n value.doesNotContain !== undefined ||\n value.doesNotContainAny !== undefined\n );\n },\n { message: \"At least one text matcher is required\" },\n );\n\nexport const gmailNewMessageEventConfigSchema = z\n .object({\n provider: z.literal(\"gmail\"),\n event: z.literal(\"new_message\"),\n match: z\n .object({\n from: gmailTextMatchSchema.optional(),\n subject: gmailTextMatchSchema.optional(),\n body: gmailTextMatchSchema.optional(),\n to: gmailTextMatchSchema.optional(),\n cc: gmailTextMatchSchema.optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\nexport type GmailNewMessageEventConfig = z.infer<\n typeof gmailNewMessageEventConfigSchema\n>;\n\nexport const gmailLabelAppliedEventConfigSchema = z\n .object({\n provider: z.literal(\"gmail\"),\n event: z.literal(\"label_applied\"),\n labelName: z.string().trim().min(1).max(225),\n resolvedLabelId: z.string().min(1).max(128).optional(),\n })\n .strict();\nexport type GmailLabelAppliedEventConfig = z.infer<\n typeof gmailLabelAppliedEventConfigSchema\n>;\n\nexport const gmailWorkflowEventConfigSchema = z.discriminatedUnion(\"event\", [\n gmailNewMessageEventConfigSchema,\n gmailLabelAppliedEventConfigSchema,\n]);\nexport type GmailWorkflowEventConfig = z.infer<\n typeof gmailWorkflowEventConfigSchema\n>;\n\nexport const webhookReceivedEventConfigSchema = z\n .object({\n provider: z.literal(\"webhook\"),\n event: z.literal(\"received\"),\n auth: z\n .object({\n mode: z.literal(\"hmac-sha256\"),\n })\n .strict(),\n })\n .strict();\nexport type WebhookReceivedEventConfig = z.infer<\n typeof webhookReceivedEventConfigSchema\n>;\n\nexport const githubLabelAppliedSubjectFilterSchema = z.enum([\n \"both\",\n \"issues\",\n \"pull_requests\",\n]);\nexport type GithubLabelAppliedSubjectFilter = z.infer<\n typeof githubLabelAppliedSubjectFilterSchema\n>;\n\nexport const githubLabelAppliedActorFilterSchema = z\n .object({\n type: z.enum([\"me\", \"anyone\"]),\n })\n .strict();\nexport type GithubLabelAppliedActorFilter = z.infer<\n typeof githubLabelAppliedActorFilterSchema\n>;\n\nexport const githubLabelAppliedEventConfigSchema = z\n .object({\n provider: z.literal(\"github\"),\n event: z.literal(\"label_applied\"),\n labelName: z.string().trim().min(1).max(255),\n filters: z\n .object({\n subject: githubLabelAppliedSubjectFilterSchema.default(\"both\"),\n actor: githubLabelAppliedActorFilterSchema.default({ type: \"me\" }),\n })\n .strict()\n .default({ subject: \"both\", actor: { type: \"me\" } }),\n })\n .strict();\nexport type GithubLabelAppliedEventConfig = z.infer<\n typeof githubLabelAppliedEventConfigSchema\n>;\n\nexport type GithubWorkflowEventConfig = GithubLabelAppliedEventConfig;\n\nexport const googleCalendarEventCreatedEventConfigSchema = z\n .object({\n provider: z.literal(\"google-calendar\"),\n event: z.literal(\"event_created\"),\n calendarId: z.string().trim().min(1).max(1024).default(\"primary\"),\n })\n .strict();\nexport type GoogleCalendarEventCreatedEventConfig = z.infer<\n typeof googleCalendarEventCreatedEventConfigSchema\n>;\n\nexport const googleCalendarEventUpdatedEventConfigSchema = z\n .object({\n provider: z.literal(\"google-calendar\"),\n event: z.literal(\"event_updated\"),\n calendarId: z.string().trim().min(1).max(1024).default(\"primary\"),\n })\n .strict();\nexport type GoogleCalendarEventUpdatedEventConfig = z.infer<\n typeof googleCalendarEventUpdatedEventConfigSchema\n>;\n\nexport const googleCalendarEventCancelledEventConfigSchema = z\n .object({\n provider: z.literal(\"google-calendar\"),\n event: z.literal(\"event_cancelled\"),\n calendarId: z.string().trim().min(1).max(1024).default(\"primary\"),\n })\n .strict();\nexport type GoogleCalendarEventCancelledEventConfig = z.infer<\n typeof googleCalendarEventCancelledEventConfigSchema\n>;\n\nexport type GoogleCalendarWorkflowEventConfig =\n | GoogleCalendarEventCreatedEventConfig\n | GoogleCalendarEventUpdatedEventConfig\n | GoogleCalendarEventCancelledEventConfig;\n\nexport const googleMeetTranscriptGeneratedEventConfigSchema = z\n .object({\n provider: z.literal(\"google-meet\"),\n event: z.literal(\"transcript_generated\"),\n scope: z\n .object({\n type: z.literal(\"organizer_user\"),\n })\n .strict()\n .default({ type: \"organizer_user\" }),\n })\n .strict();\nexport type GoogleMeetTranscriptGeneratedEventConfig = z.infer<\n typeof googleMeetTranscriptGeneratedEventConfigSchema\n>;\nexport type GoogleMeetWorkflowEventConfig =\n GoogleMeetTranscriptGeneratedEventConfig;\n\nexport const notionPageReferenceSchema = z\n .object({\n id: z.string().uuid(),\n url: z.url(),\n title: z.string().nullable(),\n rawUrl: z.string().min(1).max(2048).optional(),\n })\n .strict();\nexport type NotionPageReference = z.infer<typeof notionPageReferenceSchema>;\n\nexport const notionDataSourceReferenceSchema = z\n .object({\n id: z.string().uuid(),\n url: z.url(),\n title: z.string().nullable(),\n rawUrl: z.string().min(1).max(2048).optional(),\n })\n .strict();\nexport type NotionDataSourceReference = z.infer<\n typeof notionDataSourceReferenceSchema\n>;\n\nexport const notionChildPageCreatedEventConfigSchema = z\n .object({\n provider: z.literal(\"notion\"),\n event: z.literal(\"child_page_created\"),\n connectorId: z.string().uuid(),\n parentPage: notionPageReferenceSchema,\n })\n .strict();\nexport type NotionChildPageCreatedEventConfig = z.infer<\n typeof notionChildPageCreatedEventConfigSchema\n>;\n\nexport const notionChildPageCreatedEventCreateConfigSchema = z\n .object({\n provider: z.literal(\"notion\"),\n event: z.literal(\"child_page_created\"),\n parentPageUrl: z.string().trim().min(1).max(2048),\n })\n .strict();\nexport type NotionChildPageCreatedEventCreateConfig = z.infer<\n typeof notionChildPageCreatedEventCreateConfigSchema\n>;\n\nexport const notionDatabaseItemCreatedEventConfigSchema = z\n .object({\n provider: z.literal(\"notion\"),\n event: z.literal(\"database_item_created\"),\n connectorId: z.string().uuid(),\n dataSource: notionDataSourceReferenceSchema,\n })\n .strict();\nexport type NotionDatabaseItemCreatedEventConfig = z.infer<\n typeof notionDatabaseItemCreatedEventConfigSchema\n>;\n\nexport const notionDatabaseItemCreatedEventCreateConfigSchema = z\n .object({\n provider: z.literal(\"notion\"),\n event: z.literal(\"database_item_created\"),\n databaseUrl: z.string().trim().min(1).max(2048),\n })\n .strict();\nexport type NotionDatabaseItemCreatedEventCreateConfig = z.infer<\n typeof notionDatabaseItemCreatedEventCreateConfigSchema\n>;\n\nexport const notionPageContentUpdatedScopeSchema = z.discriminatedUnion(\n \"type\",\n [\n z\n .object({\n type: z.literal(\"page\"),\n page: notionPageReferenceSchema,\n })\n .strict(),\n z\n .object({\n type: z.literal(\"data_source\"),\n dataSource: notionDataSourceReferenceSchema,\n })\n .strict(),\n ],\n);\nexport type NotionPageContentUpdatedScope = z.infer<\n typeof notionPageContentUpdatedScopeSchema\n>;\n\nexport const notionPageContentUpdatedEventConfigSchema = z\n .object({\n provider: z.literal(\"notion\"),\n event: z.literal(\"page_content_updated\"),\n connectorId: z.string().uuid(),\n scope: notionPageContentUpdatedScopeSchema,\n })\n .strict();\nexport type NotionPageContentUpdatedEventConfig = z.infer<\n typeof notionPageContentUpdatedEventConfigSchema\n>;\n\nexport const notionPageContentUpdatedEventCreateConfigSchema = z\n .object({\n provider: z.literal(\"notion\"),\n event: z.literal(\"page_content_updated\"),\n pageUrl: z.string().trim().min(1).max(2048).optional(),\n databaseUrl: z.string().trim().min(1).max(2048).optional(),\n })\n .strict()\n .refine(\n (value) => {\n return (\n (value.pageUrl !== undefined) !== (value.databaseUrl !== undefined)\n );\n },\n { message: \"Provide exactly one of pageUrl or databaseUrl\" },\n );\nexport type NotionPageContentUpdatedEventCreateConfig = z.infer<\n typeof notionPageContentUpdatedEventCreateConfigSchema\n>;\n\nexport type NotionWorkflowEventConfig =\n | NotionChildPageCreatedEventConfig\n | NotionDatabaseItemCreatedEventConfig\n | NotionPageContentUpdatedEventConfig;\n\n/**\n * Schedule configuration, discriminated by `type`. Aligned with Automation's\n * time-trigger model:\n * - `cron`: recurring at wall-clock times.\n * - `loop`: re-scheduled `intervalSeconds` after each completion.\n * - `once`: fires once at `atTime`, then auto-disables.\n */\nexport const zeroWorkflowScheduleSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"cron\"),\n cronExpression: z.string().min(1).max(100),\n timezone: z.string().min(1),\n }),\n z.object({\n type: z.literal(\"loop\"),\n intervalSeconds: z.number().int().positive(),\n }),\n z.object({\n type: z.literal(\"once\"),\n atTime: z.string().min(1),\n timezone: z.string().min(1),\n }),\n]);\nexport type ZeroWorkflowSchedule = z.infer<typeof zeroWorkflowScheduleSchema>;\n\n/**\n * Trigger summary. Under 1:N the agent is derived from the workflow, so triggers\n * no longer carry an agentId. Detail responses only ever list the caller's own\n * triggers.\n */\nconst zeroWorkflowTriggerSummaryBaseSchema = z.object({\n id: z.string(),\n ownerUserId: z.string(),\n enabled: z.boolean(),\n chatThreadId: z.string().nullable(),\n nextRunAt: z.string().datetime().nullable(),\n lastRunAt: z.string().datetime().nullable(),\n});\n\nexport const zeroWorkflowScheduleTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"schedule\"),\n schedule: zeroWorkflowScheduleSchema,\n scheduleSummary: z.string(),\n });\n\nexport const zeroWorkflowGmailNewMessageTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"gmail-new-message\"),\n eventConfig: gmailNewMessageEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowGmailLabelAppliedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"gmail-label-applied\"),\n eventConfig: gmailLabelAppliedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowGithubLabelAppliedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"github-label-applied\"),\n eventConfig: githubLabelAppliedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowGoogleCalendarEventCreatedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-created\"),\n eventConfig: googleCalendarEventCreatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowGoogleCalendarEventUpdatedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-updated\"),\n eventConfig: googleCalendarEventUpdatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowGoogleCalendarEventCancelledTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-cancelled\"),\n eventConfig: googleCalendarEventCancelledEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowGoogleMeetTranscriptGeneratedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-meet-transcript-generated\"),\n eventConfig: googleMeetTranscriptGeneratedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowNotionChildPageCreatedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-child-page-created\"),\n eventConfig: notionChildPageCreatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowNotionDatabaseItemCreatedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-database-item-created\"),\n eventConfig: notionDatabaseItemCreatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowNotionPageContentUpdatedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-page-content-updated\"),\n eventConfig: notionPageContentUpdatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const zeroWorkflowWebhookReceivedTriggerSummarySchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"webhook-received\"),\n eventConfig: webhookReceivedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n webhookUrl: z.url().optional(),\n secretLastFour: z.string().length(4),\n lastReceivedAt: z.string().datetime().nullable(),\n webhookSecret: z.string().min(1).optional(),\n });\n\nexport const zeroWorkflowEventTriggerSummarySchema = z.discriminatedUnion(\n \"eventType\",\n [\n zeroWorkflowGmailNewMessageTriggerSummarySchema,\n zeroWorkflowGmailLabelAppliedTriggerSummarySchema,\n zeroWorkflowGithubLabelAppliedTriggerSummarySchema,\n zeroWorkflowGoogleCalendarEventCreatedTriggerSummarySchema,\n zeroWorkflowGoogleCalendarEventUpdatedTriggerSummarySchema,\n zeroWorkflowGoogleCalendarEventCancelledTriggerSummarySchema,\n zeroWorkflowGoogleMeetTranscriptGeneratedTriggerSummarySchema,\n zeroWorkflowNotionChildPageCreatedTriggerSummarySchema,\n zeroWorkflowNotionDatabaseItemCreatedTriggerSummarySchema,\n zeroWorkflowNotionPageContentUpdatedTriggerSummarySchema,\n zeroWorkflowWebhookReceivedTriggerSummarySchema,\n ],\n);\n\nexport const zeroWorkflowTriggerSummarySchema = z.union([\n zeroWorkflowScheduleTriggerSummarySchema,\n zeroWorkflowEventTriggerSummarySchema,\n]);\nexport type ZeroWorkflowTriggerSummary = z.infer<\n typeof zeroWorkflowTriggerSummarySchema\n>;\n\nconst chatThreadWorkflowSchema = z.object({\n id: z.string().uuid(),\n agentId: z.string().uuid(),\n name: zeroWorkflowNameSchema,\n displayName: z.string().nullable(),\n description: z.string().nullable(),\n});\n\nconst chatThreadWorkflowTriggerBaseSchema =\n zeroWorkflowTriggerSummaryBaseSchema.extend({\n id: z.string().uuid(),\n chatThreadId: z.string().min(1),\n workflow: chatThreadWorkflowSchema,\n });\n\nexport const chatThreadWorkflowScheduleTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"schedule\"),\n schedule: zeroWorkflowScheduleSchema,\n scheduleSummary: z.string(),\n });\n\nexport const chatThreadWorkflowGmailNewMessageTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"gmail-new-message\"),\n eventConfig: gmailNewMessageEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowGmailLabelAppliedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"gmail-label-applied\"),\n eventConfig: gmailLabelAppliedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowGithubLabelAppliedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"github-label-applied\"),\n eventConfig: githubLabelAppliedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowGoogleCalendarEventCreatedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-created\"),\n eventConfig: googleCalendarEventCreatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowGoogleCalendarEventUpdatedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-updated\"),\n eventConfig: googleCalendarEventUpdatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowGoogleCalendarEventCancelledTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-cancelled\"),\n eventConfig: googleCalendarEventCancelledEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowGoogleMeetTranscriptGeneratedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-meet-transcript-generated\"),\n eventConfig: googleMeetTranscriptGeneratedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowNotionChildPageCreatedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-child-page-created\"),\n eventConfig: notionChildPageCreatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowNotionDatabaseItemCreatedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-database-item-created\"),\n eventConfig: notionDatabaseItemCreatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowNotionPageContentUpdatedTriggerSchema =\n chatThreadWorkflowTriggerBaseSchema.extend({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-page-content-updated\"),\n eventConfig: notionPageContentUpdatedEventConfigSchema,\n schedule: z.null(),\n scheduleSummary: z.null(),\n });\n\nexport const chatThreadWorkflowTriggerSchema = z.union([\n chatThreadWorkflowScheduleTriggerSchema,\n chatThreadWorkflowGmailNewMessageTriggerSchema,\n chatThreadWorkflowGmailLabelAppliedTriggerSchema,\n chatThreadWorkflowGithubLabelAppliedTriggerSchema,\n chatThreadWorkflowGoogleCalendarEventCreatedTriggerSchema,\n chatThreadWorkflowGoogleCalendarEventUpdatedTriggerSchema,\n chatThreadWorkflowGoogleCalendarEventCancelledTriggerSchema,\n chatThreadWorkflowGoogleMeetTranscriptGeneratedTriggerSchema,\n chatThreadWorkflowNotionChildPageCreatedTriggerSchema,\n chatThreadWorkflowNotionDatabaseItemCreatedTriggerSchema,\n chatThreadWorkflowNotionPageContentUpdatedTriggerSchema,\n]);\nexport type ChatThreadWorkflowTrigger = z.infer<\n typeof chatThreadWorkflowTriggerSchema\n>;\n\nexport const zeroWorkflowScheduleTriggerCreateRequestSchema = z.object({\n kind: z.literal(\"schedule\").optional(),\n schedule: zeroWorkflowScheduleSchema,\n enabled: z.boolean().optional(),\n});\n\nexport const zeroWorkflowGmailNewMessageTriggerCreateRequestSchema = z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"gmail-new-message\"),\n eventConfig: gmailNewMessageEventConfigSchema,\n enabled: z.boolean().optional(),\n});\n\nexport const zeroWorkflowGmailLabelAppliedTriggerCreateRequestSchema = z.object(\n {\n kind: z.literal(\"event\"),\n eventType: z.literal(\"gmail-label-applied\"),\n eventConfig: gmailLabelAppliedEventConfigSchema,\n enabled: z.boolean().optional(),\n },\n);\n\nexport const zeroWorkflowGithubLabelAppliedTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"github-label-applied\"),\n eventConfig: githubLabelAppliedEventConfigSchema,\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowGoogleCalendarEventCreatedTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-created\"),\n eventConfig: googleCalendarEventCreatedEventConfigSchema\n .optional()\n .default({\n provider: \"google-calendar\",\n event: \"event_created\",\n calendarId: \"primary\",\n }),\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowGoogleCalendarEventUpdatedTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-updated\"),\n eventConfig: googleCalendarEventUpdatedEventConfigSchema\n .optional()\n .default({\n provider: \"google-calendar\",\n event: \"event_updated\",\n calendarId: \"primary\",\n }),\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowGoogleCalendarEventCancelledTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-calendar-event-cancelled\"),\n eventConfig: googleCalendarEventCancelledEventConfigSchema\n .optional()\n .default({\n provider: \"google-calendar\",\n event: \"event_cancelled\",\n calendarId: \"primary\",\n }),\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowGoogleMeetTranscriptGeneratedTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"google-meet-transcript-generated\"),\n eventConfig: googleMeetTranscriptGeneratedEventConfigSchema\n .optional()\n .default({\n provider: \"google-meet\",\n event: \"transcript_generated\",\n scope: { type: \"organizer_user\" },\n }),\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowNotionChildPageCreatedTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-child-page-created\"),\n eventConfig: notionChildPageCreatedEventCreateConfigSchema,\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowNotionDatabaseItemCreatedTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-database-item-created\"),\n eventConfig: notionDatabaseItemCreatedEventCreateConfigSchema,\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowNotionPageContentUpdatedTriggerCreateRequestSchema =\n z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"notion-page-content-updated\"),\n eventConfig: notionPageContentUpdatedEventCreateConfigSchema,\n enabled: z.boolean().optional(),\n });\n\nexport const zeroWorkflowWebhookReceivedTriggerCreateRequestSchema = z.object({\n kind: z.literal(\"event\"),\n eventType: z.literal(\"webhook-received\"),\n eventConfig: webhookReceivedEventConfigSchema.optional(),\n enabled: z.boolean().optional(),\n});\n\nexport const zeroWorkflowTriggerCreateRequestSchema = z.union([\n zeroWorkflowScheduleTriggerCreateRequestSchema,\n zeroWorkflowGmailNewMessageTriggerCreateRequestSchema,\n zeroWorkflowGmailLabelAppliedTriggerCreateRequestSchema,\n zeroWorkflowGithubLabelAppliedTriggerCreateRequestSchema,\n zeroWorkflowGoogleCalendarEventCreatedTriggerCreateRequestSchema,\n zeroWorkflowGoogleCalendarEventUpdatedTriggerCreateRequestSchema,\n zeroWorkflowGoogleCalendarEventCancelledTriggerCreateRequestSchema,\n zeroWorkflowGoogleMeetTranscriptGeneratedTriggerCreateRequestSchema,\n zeroWorkflowNotionChildPageCreatedTriggerCreateRequestSchema,\n zeroWorkflowNotionDatabaseItemCreatedTriggerCreateRequestSchema,\n zeroWorkflowNotionPageContentUpdatedTriggerCreateRequestSchema,\n zeroWorkflowWebhookReceivedTriggerCreateRequestSchema,\n]);\nexport type ZeroWorkflowTriggerCreateRequest = z.infer<\n typeof zeroWorkflowTriggerCreateRequestSchema\n>;\n\nexport const zeroWorkflowScheduleTriggerUpdateRequestSchema = z.object({\n schedule: zeroWorkflowScheduleSchema,\n});\n\nexport const zeroWorkflowGmailEventTriggerUpdateRequestSchema = z.object({\n eventConfig: gmailWorkflowEventConfigSchema,\n});\n\nexport const zeroWorkflowGithubEventTriggerUpdateRequestSchema = z.object({\n eventConfig: githubLabelAppliedEventConfigSchema,\n});\n\nexport const zeroWorkflowTriggerUpdateRequestSchema = z.union([\n zeroWorkflowScheduleTriggerUpdateRequestSchema,\n zeroWorkflowGmailEventTriggerUpdateRequestSchema,\n zeroWorkflowGithubEventTriggerUpdateRequestSchema,\n]);\nexport type ZeroWorkflowTriggerUpdateRequest = z.infer<\n typeof zeroWorkflowTriggerUpdateRequestSchema\n>;\n\n/**\n * Workflow summary. A workflow belongs to exactly one agent (`agentId`).\n * `canManage` reflects the caller's effective rights (agent write-permission\n * for public workflows; ownership for private ones).\n */\nexport const zeroWorkflowSummarySchema = z.object({\n id: z.string().uuid(),\n agentId: z.string().uuid(),\n agentName: z.string().nullable(),\n agentDisplayName: z.string().nullable(),\n name: zeroWorkflowNameSchema,\n displayName: z.string().max(256).nullable(),\n description: z.string().max(1024).nullable(),\n visibility: zeroWorkflowVisibilitySchema,\n ownerUserId: z.string(),\n ownerUserDisplayName: z.string().nullable().optional(),\n ownerUserImageUrl: z.string().nullable().optional(),\n createdAt: z.string().datetime(),\n canManage: z.boolean(),\n canPublish: z.boolean(),\n shadowedBy: z\n .object({\n id: z.string().uuid(),\n name: zeroWorkflowNameSchema,\n displayName: z.string().max(256).nullable(),\n })\n .nullable()\n .optional(),\n});\n\nexport const zeroWorkflowDetailResponseSchema =\n zeroWorkflowSummarySchema.extend({\n createdByUserId: z.string(),\n updatedByUserId: z.string(),\n updatedAt: z.string().datetime(),\n instruction: z.string().nullable(),\n files: z.array(workflowFileMetadataSchema).nullable(),\n fileContents: z.array(workflowFileEntrySchema).nullable(),\n triggers: z.array(zeroWorkflowTriggerSummarySchema),\n });\n\nexport const zeroWorkflowListResponseSchema = z.array(\n zeroWorkflowSummarySchema,\n);\n\nexport const zeroWorkflowTriggerAutomationEntrySchema = z.object({\n workflow: zeroWorkflowSummarySchema,\n trigger: zeroWorkflowTriggerSummarySchema,\n});\nexport const zeroWorkflowTriggerAutomationListResponseSchema = z.array(\n zeroWorkflowTriggerAutomationEntrySchema,\n);\n\nexport const zeroWorkflowCreateRequestSchema = z.object({\n agentId: z.string().uuid(),\n chatThreadId: z.string().uuid().optional(),\n name: zeroWorkflowNameSchema,\n instruction: workflowInstructionSchema.optional(),\n files: workflowFilesSchema.optional(),\n displayName: z.string().max(256).optional(),\n description: z.string().max(1024).optional(),\n visibility: zeroWorkflowVisibilitySchema.optional(),\n});\n\nexport const zeroWorkflowUpdateRequestSchema = z\n .object({\n name: zeroWorkflowNameSchema.optional(),\n instruction: workflowInstructionSchema.nullable().optional(),\n files: workflowFilesSchema.optional(),\n displayName: z.string().max(256).nullable().optional(),\n description: z.string().max(1024).nullable().optional(),\n })\n .refine(\n (body) => {\n return (\n body.name !== undefined ||\n body.instruction !== undefined ||\n body.files !== undefined ||\n body.displayName !== undefined ||\n body.description !== undefined\n );\n },\n { message: \"At least one workflow update is required\" },\n );\n\nexport const zeroWorkflowCopyRequestSchema = z.object({\n toAgentId: z.string().uuid(),\n});\n\nexport const zeroWorkflowRunResponseSchema = z.object({\n chatThreadId: z.string().uuid(),\n runId: z.string(),\n});\n\nexport const zeroWorkflowChatThreadResponseSchema = z.object({\n chatThreadId: z.string().uuid(),\n prompt: z.string(),\n});\n\nexport const zeroWorkflowConnectorReadinessStatusSchema = z.enum([\n \"connected\",\n \"not-connected\",\n \"scope-mismatch\",\n \"reconnect-required\",\n \"not-enabled-for-agent\",\n \"unavailable\",\n]);\nexport type ZeroWorkflowConnectorReadinessStatus = z.infer<\n typeof zeroWorkflowConnectorReadinessStatusSchema\n>;\n\nexport const zeroWorkflowConnectorReadinessEntrySchema = z\n .object({\n connectorRef: connectorTypeSchema,\n label: z.string().min(1),\n reason: z.string().min(1),\n status: zeroWorkflowConnectorReadinessStatusSchema,\n })\n .strict();\nexport type ZeroWorkflowConnectorReadinessEntry = z.infer<\n typeof zeroWorkflowConnectorReadinessEntrySchema\n>;\n\nexport const zeroWorkflowConnectorReadinessResponseSchema = z\n .object({\n connectors: z.array(zeroWorkflowConnectorReadinessEntrySchema),\n })\n .strict();\nexport type ZeroWorkflowConnectorReadinessResponse = z.infer<\n typeof zeroWorkflowConnectorReadinessResponseSchema\n>;\n\nconst workflowIdParams = z.object({ workflowId: z.string().uuid() });\n\nexport const zeroWorkflowsCollectionContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/workflows\",\n headers: authHeadersSchema,\n query: z.object({ agentId: z.string().uuid().optional() }),\n responses: {\n 200: zeroWorkflowListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List visible workflows, optionally scoped to one agent\",\n },\n create: {\n method: \"POST\",\n path: \"/api/zero/workflows\",\n headers: authHeadersSchema,\n body: zeroWorkflowCreateRequestSchema,\n responses: {\n 201: zeroWorkflowSummarySchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a workflow under an agent\",\n },\n});\n\nexport const zeroWorkflowsDetailContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/workflows/:workflowId\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n responses: {\n 200: zeroWorkflowDetailResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get a workflow with its instruction and files\",\n },\n update: {\n method: \"PATCH\",\n path: \"/api/zero/workflows/:workflowId\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: zeroWorkflowUpdateRequestSchema,\n responses: {\n 200: zeroWorkflowDetailResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Update a workflow's instruction, files, or metadata\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/workflows/:workflowId\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete a workflow\",\n },\n copy: {\n method: \"POST\",\n path: \"/api/zero/workflows/:workflowId/copy\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: zeroWorkflowCopyRequestSchema,\n responses: {\n 201: zeroWorkflowSummarySchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Copy (fork) a workflow onto another agent\",\n },\n chatThread: {\n method: \"POST\",\n path: \"/api/zero/workflows/:workflowId/chat-thread\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowChatThreadResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get or create the shared chat thread for a workflow\",\n },\n run: {\n method: \"POST\",\n path: \"/api/zero/workflows/:workflowId/run\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowRunResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary:\n \"Run the workflow once in its shared chat thread (equivalent to /slug)\",\n },\n connectorReadiness: {\n method: \"POST\",\n path: \"/api/zero/workflows/:workflowId/connector-readiness\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowConnectorReadinessResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary:\n \"Detect the built-in connectors a workflow may need and report their readiness\",\n },\n});\n\n/** Visibility transitions. */\nexport const zeroWorkflowVisibilityContract = c.router({\n publish: {\n method: \"POST\",\n path: \"/api/zero/workflows/:workflowId/publish\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowSummarySchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Publish a private workflow\",\n },\n demote: {\n method: \"POST\",\n path: \"/api/zero/workflows/:workflowId/demote\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowSummarySchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary:\n \"Agent write-permission holder demotes a public workflow to private\",\n },\n});\n\nconst triggerIdParams = z.object({ id: z.string().uuid() });\nconst chatThreadIdParams = z.object({ threadId: z.string().min(1) });\n\nexport const zeroWorkflowWebhookSecretResponseSchema = z.object({\n webhookUrl: z.url(),\n webhookSecret: z.string().min(1),\n});\nexport type ZeroWorkflowWebhookSecretResponse = z.infer<\n typeof zeroWorkflowWebhookSecretResponseSchema\n>;\n\nexport const zeroWorkflowTriggersContract = c.router({\n listWorkspace: {\n method: \"GET\",\n path: \"/api/zero/workflow-triggers\",\n headers: authHeadersSchema,\n responses: {\n 200: zeroWorkflowTriggerAutomationListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List the caller's workflow triggers across visible workflows\",\n },\n listForChatThread: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:threadId/workflow-triggers\",\n headers: authHeadersSchema,\n pathParams: chatThreadIdParams,\n responses: {\n 200: z.array(chatThreadWorkflowTriggerSchema),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"List workflow triggers bound to a chat thread\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/workflows/:workflowId/triggers\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n responses: {\n 200: z.array(zeroWorkflowTriggerSummarySchema),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"List the caller's own triggers for a workflow\",\n },\n create: {\n method: \"POST\",\n path: \"/api/zero/workflows/:workflowId/triggers\",\n headers: authHeadersSchema,\n pathParams: workflowIdParams,\n body: zeroWorkflowTriggerCreateRequestSchema,\n responses: {\n 201: zeroWorkflowTriggerSummarySchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a trigger on a workflow\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/workflow-triggers/:id\",\n headers: authHeadersSchema,\n pathParams: triggerIdParams,\n responses: {\n 200: zeroWorkflowTriggerSummarySchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get a workflow trigger\",\n },\n update: {\n method: \"PATCH\",\n path: \"/api/zero/workflow-triggers/:id\",\n headers: authHeadersSchema,\n pathParams: triggerIdParams,\n body: zeroWorkflowTriggerUpdateRequestSchema,\n responses: {\n 200: zeroWorkflowTriggerSummarySchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Update a workflow trigger\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/workflow-triggers/:id\",\n headers: authHeadersSchema,\n pathParams: triggerIdParams,\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete a workflow trigger\",\n },\n enable: {\n method: \"POST\",\n path: \"/api/zero/workflow-triggers/:id/enable\",\n headers: authHeadersSchema,\n pathParams: triggerIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowTriggerSummarySchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Enable a workflow trigger\",\n },\n disable: {\n method: \"POST\",\n path: \"/api/zero/workflow-triggers/:id/disable\",\n headers: authHeadersSchema,\n pathParams: triggerIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowTriggerSummarySchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Disable a workflow trigger\",\n },\n run: {\n method: \"POST\",\n path: \"/api/zero/workflow-triggers/:id/run\",\n headers: authHeadersSchema,\n pathParams: triggerIdParams,\n body: c.noBody(),\n responses: {\n 201: zeroWorkflowRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Run a workflow trigger immediately in its bound chat thread\",\n },\n revealWebhookSecret: {\n method: \"POST\",\n path: \"/api/zero/workflow-triggers/:id/webhook-secret\",\n headers: authHeadersSchema,\n pathParams: triggerIdParams,\n body: c.noBody(),\n responses: {\n 200: zeroWorkflowWebhookSecretResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Reveal the webhook URL and signing secret for a workflow trigger\",\n },\n});\n\nexport type WorkflowFileEntry = z.infer<typeof workflowFileEntrySchema>;\nexport type WorkflowFileMetadata = z.infer<typeof workflowFileMetadataSchema>;\nexport type ZeroWorkflowSummary = z.infer<typeof zeroWorkflowSummarySchema>;\nexport type ZeroWorkflowDetailResponse = z.infer<\n typeof zeroWorkflowDetailResponseSchema\n>;\nexport type ZeroWorkflowCreateRequest = z.infer<\n typeof zeroWorkflowCreateRequestSchema\n>;\nexport type ZeroWorkflowUpdateRequest = z.infer<\n typeof zeroWorkflowUpdateRequestSchema\n>;\nexport type ZeroWorkflowCopyRequest = z.infer<\n typeof zeroWorkflowCopyRequestSchema\n>;\nexport type ZeroWorkflowChatThreadResponse = z.infer<\n typeof zeroWorkflowChatThreadResponseSchema\n>;\nexport type ZeroWorkflowRunResponse = z.infer<\n typeof zeroWorkflowRunResponseSchema\n>;\nexport type ZeroWorkflowTriggerAutomationEntry = z.infer<\n typeof zeroWorkflowTriggerAutomationEntrySchema\n>;\nexport type ZeroWorkflowsCollectionContract =\n typeof zeroWorkflowsCollectionContract;\nexport type ZeroWorkflowsDetailContract = typeof zeroWorkflowsDetailContract;\nexport type ZeroWorkflowVisibilityContract =\n typeof zeroWorkflowVisibilityContract;\nexport type ZeroWorkflowTriggersContract = typeof zeroWorkflowTriggersContract;\n","import { createWriteStream } from \"node:fs\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n integrationsSlackMessageContract,\n integrationsSlackUploadInitContract,\n integrationsSlackUploadCompleteContract,\n type SendSlackMessageBody,\n type SendSlackMessageResponse,\n type SlackUploadInitBody,\n type SlackUploadInitResponse,\n type SlackUploadCompleteBody,\n type SlackUploadCompleteResponse,\n} from \"@vm0/api-contracts/contracts/integrations\";\nimport {\n ApiRequestError,\n getBaseUrl,\n getClientConfig,\n handleError,\n} from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\nexport async function sendSlackMessage(\n body: SendSlackMessageBody,\n): Promise<SendSlackMessageResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsSlackMessageContract, config);\n\n const result = await client.sendMessage({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to send Slack message\");\n}\n\nexport async function initSlackFileUpload(\n body: SlackUploadInitBody,\n): Promise<SlackUploadInitResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsSlackUploadInitContract, config);\n\n const result = await client.init({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to initialize Slack file upload\");\n}\n\nexport async function completeSlackFileUpload(\n body: SlackUploadCompleteBody,\n): Promise<SlackUploadCompleteResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsSlackUploadCompleteContract, config);\n\n const result = await client.complete({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to complete Slack file upload\");\n}\n\ninterface DownloadSlackFileResult {\n path: string;\n mimetype: string;\n size: number;\n}\n\n/**\n * Download a Slack file to a local path, streaming the response body to disk.\n * Uses the org bot token on the server side; the CLI just authenticates via\n * ZERO_TOKEN and writes the bytes. Response is binary, so this bypasses the\n * typed contract client.\n */\nexport async function downloadSlackFile(\n fileId: string,\n outPath: string,\n): Promise<DownloadSlackFileResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const url = new URL(\"/api/zero/integrations/slack/download-file\", baseUrl);\n url.searchParams.set(\"file_id\", fileId);\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n const response = await fetch(url, {\n headers: headersWithCliClientHeaders(headers),\n });\n\n if (!response.ok) {\n let message = `Failed to download Slack file (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // ignore parse errors — keep generic message\n }\n throw new ApiRequestError(message, code, response.status);\n }\n\n if (!response.body) {\n throw new ApiRequestError(\n \"Slack download response has no body\",\n \"EMPTY_BODY\",\n 502,\n );\n }\n\n const mimetype =\n response.headers.get(\"x-file-mimetype\") ??\n response.headers.get(\"content-type\") ??\n \"application/octet-stream\";\n\n await pipeline(\n Readable.fromWeb(response.body as never),\n createWriteStream(outPath),\n );\n\n const contentLengthHeader = response.headers.get(\"content-length\");\n const size = contentLengthHeader ? Number(contentLengthHeader) : 0;\n\n return { path: outPath, mimetype, size };\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Integration Slack message contract\n * POST /api/zero/integrations/slack/message\n *\n * Sends a Slack message via the org's installed bot token.\n * Requires `slack:write` capability (via ZERO_TOKEN).\n */\nconst sendSlackMessageBodySchema = z\n .object({\n channel: z.string().min(1, \"Channel ID is required\").optional(),\n user: z.string().min(1, \"User ID is required\").optional(),\n text: z.string().optional(),\n threadTs: z.string().optional(),\n blocks: z.array(z.object({ type: z.string() }).passthrough()).optional(),\n })\n .refine(\n (data) => {\n return Boolean(data.channel) !== Boolean(data.user);\n },\n { message: \"Exactly one of 'channel' or 'user' must be provided\" },\n );\n\nexport type SendSlackMessageBody = z.infer<typeof sendSlackMessageBodySchema>;\n\nconst sendSlackMessageResponseSchema = z.object({\n ok: z.literal(true),\n ts: z.string().optional(),\n channel: z.string().optional(),\n});\n\nexport type SendSlackMessageResponse = z.infer<\n typeof sendSlackMessageResponseSchema\n>;\n\nexport const integrationsSlackMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/message\",\n headers: authHeadersSchema,\n body: sendSlackMessageBodySchema,\n responses: {\n 200: sendSlackMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Send a Slack message via org bot token\",\n },\n});\n\nexport type IntegrationsSlackMessageContract =\n typeof integrationsSlackMessageContract;\n\n/**\n * Integration Telegram message contract\n * POST /api/zero/integrations/telegram/message\n *\n * Sends a Telegram message via an org-owned bot token.\n * Requires `telegram:write` capability (via ZERO_TOKEN).\n */\nconst sendTelegramMessageBodySchema = z.object({\n botId: z.string().min(1, \"Bot ID is required\"),\n chatId: z.string().min(1, \"Chat ID is required\"),\n text: z.string().min(1, \"Message text is required\"),\n replyToMessageId: z.number().int().positive().optional(),\n messageThreadId: z.number().int().positive().optional(),\n});\n\nexport type SendTelegramMessageBody = z.infer<\n typeof sendTelegramMessageBodySchema\n>;\n\nconst sendTelegramMessageResponseSchema = z.object({\n ok: z.literal(true),\n messageId: z.number().int(),\n chatId: z.string(),\n});\n\nexport type SendTelegramMessageResponse = z.infer<\n typeof sendTelegramMessageResponseSchema\n>;\n\nexport const integrationsTelegramMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/telegram/message\",\n headers: authHeadersSchema,\n body: sendTelegramMessageBodySchema,\n responses: {\n 200: sendTelegramMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Send a Telegram message via org bot token\",\n },\n});\n\nexport type IntegrationsTelegramMessageContract =\n typeof integrationsTelegramMessageContract;\n\n/**\n * Integration Microsoft Teams message contract\n * POST /api/zero/integrations/teams/message\n *\n * Sends a Microsoft Teams message via the org's installed Teams bot.\n * Requires `teams:write` capability (via ZERO_TOKEN).\n */\nconst teamsAdaptiveCardSchema = z\n .object({\n type: z.literal(\"AdaptiveCard\"),\n version: z.string().min(1),\n body: z.array(z.record(z.string(), z.unknown())).optional(),\n actions: z.array(z.record(z.string(), z.unknown())).optional(),\n })\n .passthrough();\n\nconst sendTeamsMessageBodySchema = z\n .object({\n conversationId: z.string().min(1, \"Conversation ID is required\").optional(),\n user: z.string().min(1, \"Teams user ID is required\").optional(),\n text: z.string().min(1, \"Message text is required\").optional(),\n activityId: z.string().min(1, \"Activity ID is required\").optional(),\n card: teamsAdaptiveCardSchema.optional(),\n })\n .refine(\n (body) => {\n return Boolean(body.conversationId) !== Boolean(body.user);\n },\n {\n message: \"Exactly one of conversationId or user is required\",\n path: [\"conversationId\"],\n },\n )\n .refine(\n (body) => {\n return Boolean(body.text) || Boolean(body.card);\n },\n {\n message: \"Message text or card is required\",\n path: [\"text\"],\n },\n )\n .refine(\n (body) => {\n return !(body.user && body.activityId);\n },\n {\n message: \"activityId can only be used with conversationId\",\n path: [\"activityId\"],\n },\n );\n\nexport type SendTeamsMessageBody = z.infer<typeof sendTeamsMessageBodySchema>;\n\nconst sendTeamsMessageResponseSchema = z.object({\n ok: z.literal(true),\n activityId: z.string().optional(),\n conversationId: z.string(),\n});\n\nexport type SendTeamsMessageResponse = z.infer<\n typeof sendTeamsMessageResponseSchema\n>;\n\nexport const integrationsTeamsMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/teams/message\",\n headers: authHeadersSchema,\n body: sendTeamsMessageBodySchema,\n responses: {\n 200: sendTeamsMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Send a Microsoft Teams message via org bot\",\n },\n});\n\nexport type IntegrationsTeamsMessageContract =\n typeof integrationsTeamsMessageContract;\n\n/**\n * Integration AgentPhone message contract\n * POST /api/zero/integrations/phone/message\n *\n * Sends an AgentPhone text message to the connected phone handle.\n * Requires `phone:write` capability (via ZERO_TOKEN).\n */\nconst sendPhoneMessageBodySchema = z.object({\n agentphoneAgentId: z\n .string()\n .min(1, \"AgentPhone agent ID is required\")\n .optional(),\n toNumber: z.string().min(1, \"Phone number is required\"),\n text: z.string().min(1, \"Message text is required\"),\n});\n\nexport type SendPhoneMessageBody = z.infer<typeof sendPhoneMessageBodySchema>;\n\nconst sendPhoneMessageResponseSchema = z.object({\n ok: z.literal(true),\n messageId: z.string(),\n channel: z.string().nullable(),\n toNumber: z.string(),\n});\n\nexport type SendPhoneMessageResponse = z.infer<\n typeof sendPhoneMessageResponseSchema\n>;\n\nexport const integrationsPhoneMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/phone/message\",\n headers: authHeadersSchema,\n body: sendPhoneMessageBodySchema,\n responses: {\n 200: sendPhoneMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Send an AgentPhone message\",\n },\n});\n\nexport type IntegrationsPhoneMessageContract =\n typeof integrationsPhoneMessageContract;\n\nconst phoneDownloadFileQuerySchema = z.object({\n file_id: z.string().min(1, \"file_id query parameter is required\"),\n});\n\nexport const integrationsPhoneDownloadFileContract = c.router({\n download: {\n method: \"GET\",\n path: \"/api/zero/integrations/phone/download-file\",\n headers: authHeadersSchema,\n query: phoneDownloadFileQuerySchema,\n responses: {\n 200: c.type<Blob>(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Download an AgentPhone media attachment\",\n },\n});\n\nexport type IntegrationsPhoneDownloadFileContract =\n typeof integrationsPhoneDownloadFileContract;\n\n/**\n * Integration Telegram bot list contract\n * GET /api/zero/integrations/telegram/bots\n *\n * Lists Telegram bots available in the authenticated user's org.\n * Requires `telegram:read` capability (via ZERO_TOKEN).\n */\nconst telegramBotTokenStatusSchema = z.enum([\"valid\", \"invalid\", \"unknown\"]);\n\nconst telegramConnectedUserSchema = z.object({\n telegramUserId: z.string(),\n telegramUsername: z.string().nullable(),\n telegramDisplayName: z.string().nullable(),\n});\n\nconst telegramBotListItemSchema = z.object({\n id: z.string(),\n kind: z.enum([\"custom\", \"official\"]).optional(),\n username: z.string().nullable(),\n agent: z.object({ id: z.string(), name: z.string() }).nullable(),\n isOwner: z.boolean(),\n isConnected: z.boolean(),\n connectedUser: telegramConnectedUserSchema.nullable().optional(),\n tokenStatus: telegramBotTokenStatusSchema,\n official: z\n .object({\n configured: z.boolean(),\n usesDefaultAgent: z.boolean(),\n linkedTelegramUserId: z.string().nullable(),\n })\n .optional(),\n});\n\nconst listTelegramBotsResponseSchema = z.object({\n bots: z.array(telegramBotListItemSchema),\n});\n\nexport type TelegramBotListItem = z.infer<typeof telegramBotListItemSchema>;\nexport type ListTelegramBotsResponse = z.infer<\n typeof listTelegramBotsResponseSchema\n>;\n\nexport const integrationsTelegramBotListContract = c.router({\n listBots: {\n method: \"GET\",\n path: \"/api/zero/integrations/telegram/bots\",\n headers: authHeadersSchema,\n responses: {\n 200: listTelegramBotsResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List Telegram bots available in the authenticated user's org\",\n },\n});\n\nexport type IntegrationsTelegramBotListContract =\n typeof integrationsTelegramBotListContract;\n\n/**\n * Integration Slack file upload — init contract\n * POST /api/zero/integrations/slack/upload-file/init\n *\n * Requests a pre-signed upload URL from Slack via the org's bot token.\n * The CLI then uploads the file directly to that URL (no auth needed).\n * Requires `slack:write` capability (via ZERO_TOKEN).\n */\nconst slackUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\"),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n});\n\nexport type SlackUploadInitBody = z.infer<typeof slackUploadInitBodySchema>;\n\nconst slackUploadInitResponseSchema = z.object({\n uploadUrl: z.string(),\n fileId: z.string(),\n});\n\nexport type SlackUploadInitResponse = z.infer<\n typeof slackUploadInitResponseSchema\n>;\n\nexport const integrationsSlackUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/upload-file/init\",\n headers: authHeadersSchema,\n body: slackUploadInitBodySchema,\n responses: {\n 200: slackUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get a pre-signed Slack upload URL via org bot token\",\n },\n});\n\n/**\n * Integration Telegram file upload — init contract\n * POST /api/zero/integrations/telegram/upload-file/init\n *\n * Requests a pre-signed upload URL for a temporary VM0-hosted file. The CLI\n * uploads the file body directly to R2, then the complete route asks Telegram\n * to fetch that file URL with the org-owned bot token.\n * Requires `telegram:write` capability (via ZERO_TOKEN).\n */\nconst telegramUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n});\n\nexport type TelegramUploadInitBody = z.infer<\n typeof telegramUploadInitBodySchema\n>;\n\nconst telegramUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n});\n\nexport type TelegramUploadInitResponse = z.infer<\n typeof telegramUploadInitResponseSchema\n>;\n\nexport const integrationsTelegramUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/telegram/upload-file/init\",\n headers: authHeadersSchema,\n body: telegramUploadInitBodySchema,\n responses: {\n 200: telegramUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for Telegram file delivery\",\n },\n});\n\n/**\n * Integration Microsoft Teams file upload — init contract\n * POST /api/zero/integrations/teams/upload-file/init\n *\n * Requests a pre-signed upload URL for a temporary VM0-hosted file. The CLI\n * uploads the file body directly to R2, then the complete route sends a Teams\n * message with the file attachment and public file URL.\n * Requires `teams:write` capability (via ZERO_TOKEN).\n */\nconst teamsUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n});\n\nexport type TeamsUploadInitBody = z.infer<typeof teamsUploadInitBodySchema>;\n\nconst teamsUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n});\n\nexport type TeamsUploadInitResponse = z.infer<\n typeof teamsUploadInitResponseSchema\n>;\n\nexport const integrationsTeamsUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/teams/upload-file/init\",\n headers: authHeadersSchema,\n body: teamsUploadInitBodySchema,\n responses: {\n 200: teamsUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for Microsoft Teams file delivery\",\n },\n});\n\n/**\n * Integration Telegram file upload — complete contract\n * POST /api/zero/integrations/telegram/upload-file/complete\n *\n * Sends an uploaded file URL to a Telegram chat via sendDocument using the\n * requested org-owned bot token.\n * Requires `telegram:write` capability (via ZERO_TOKEN).\n */\nconst telegramUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n botId: z.string().min(1, \"Bot ID is required\"),\n chatId: z.string().min(1, \"Chat ID is required\"),\n contentType: z.string().min(1).max(200).optional(),\n caption: z.string().max(1024).optional(),\n messageThreadId: z.number().int().positive().optional(),\n});\n\nexport type TelegramUploadCompleteBody = z.infer<\n typeof telegramUploadCompleteBodySchema\n>;\n\nconst telegramUploadCompleteResponseSchema = z.object({\n messageId: z.number().int(),\n chatId: z.string(),\n fileId: z.string().optional(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type TelegramUploadCompleteResponse = z.infer<\n typeof telegramUploadCompleteResponseSchema\n>;\n\nexport const integrationsTelegramUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/telegram/upload-file/complete\",\n headers: authHeadersSchema,\n body: telegramUploadCompleteBodySchema,\n responses: {\n 200: telegramUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Finalize Telegram file upload and send it to a chat\",\n },\n});\n\n/**\n * Integration Microsoft Teams file upload — complete contract\n * POST /api/zero/integrations/teams/upload-file/complete\n *\n * Sends an uploaded file URL to a Microsoft Teams conversation using the org's\n * installed Teams bot.\n * Requires `teams:write` capability (via ZERO_TOKEN).\n */\nconst teamsUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n conversationId: z.string().min(1, \"Conversation ID is required\"),\n activityId: z.string().min(1, \"Activity ID is required\").optional(),\n contentType: z.string().min(1).max(200).optional(),\n text: z.string().max(4000).optional(),\n});\n\nexport type TeamsUploadCompleteBody = z.infer<\n typeof teamsUploadCompleteBodySchema\n>;\n\nconst teamsUploadCompleteResponseSchema = z.object({\n activityId: z.string().optional(),\n conversationId: z.string(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type TeamsUploadCompleteResponse = z.infer<\n typeof teamsUploadCompleteResponseSchema\n>;\n\nexport const integrationsTeamsUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/teams/upload-file/complete\",\n headers: authHeadersSchema,\n body: teamsUploadCompleteBodySchema,\n responses: {\n 200: teamsUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary:\n \"Finalize Microsoft Teams file upload and send it to a conversation\",\n },\n});\n\n/**\n * Integration GitHub file upload — init contract\n * POST /api/zero/integrations/github/upload-file/init\n *\n * Requests a pre-signed upload URL for a temporary VM0-hosted file. The CLI\n * uploads the file body directly to R2, then the complete route posts the file\n * URL back to a GitHub issue or pull request comment.\n * Requires `github:write` capability (via ZERO_TOKEN).\n */\nconst githubUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n});\n\nexport type GithubUploadInitBody = z.infer<typeof githubUploadInitBodySchema>;\n\nconst githubUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n});\n\nexport type GithubUploadInitResponse = z.infer<\n typeof githubUploadInitResponseSchema\n>;\n\nexport const integrationsGithubUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/github/upload-file/init\",\n headers: authHeadersSchema,\n body: githubUploadInitBodySchema,\n responses: {\n 200: githubUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for GitHub file delivery\",\n },\n});\n\n/**\n * Integration GitHub file upload — complete contract\n * POST /api/zero/integrations/github/upload-file/complete\n *\n * Posts an uploaded file URL to a GitHub issue or pull request comment using\n * the organization GitHub App installation token.\n * Requires `github:write` capability (via ZERO_TOKEN).\n */\nconst githubUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n repo: z\n .string()\n .min(1, \"Repository is required\")\n .regex(/^[^/\\s]+\\/[^/\\s]+$/, \"Repository must be owner/name\"),\n issueNumber: z\n .number()\n .int()\n .positive(\"Issue or pull request number must be positive\"),\n contentType: z.string().min(1).max(200).optional(),\n caption: z.string().max(65_536).optional(),\n});\n\nexport type GithubUploadCompleteBody = z.infer<\n typeof githubUploadCompleteBodySchema\n>;\n\nconst githubUploadCompleteResponseSchema = z.object({\n commentId: z.string(),\n repo: z.string(),\n issueNumber: z.number().int(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type GithubUploadCompleteResponse = z.infer<\n typeof githubUploadCompleteResponseSchema\n>;\n\nexport const integrationsGithubUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/github/upload-file/complete\",\n headers: authHeadersSchema,\n body: githubUploadCompleteBodySchema,\n responses: {\n 200: githubUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Finalize GitHub file upload and post it to an issue or PR\",\n },\n});\n\n/**\n * Integration AgentPhone file upload — init contract\n * POST /api/zero/integrations/phone/upload-file/init\n *\n * Requests a pre-signed upload URL for a VM0-hosted file. The CLI uploads the\n * file body directly to R2, then complete sends the public file URL through\n * AgentPhone.\n * Requires `phone:write` capability (via ZERO_TOKEN).\n */\nconst phoneUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n});\n\nexport type PhoneUploadInitBody = z.infer<typeof phoneUploadInitBodySchema>;\n\nconst phoneUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n});\n\nexport type PhoneUploadInitResponse = z.infer<\n typeof phoneUploadInitResponseSchema\n>;\n\nexport const integrationsPhoneUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/phone/upload-file/init\",\n headers: authHeadersSchema,\n body: phoneUploadInitBodySchema,\n responses: {\n 200: phoneUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for AgentPhone file delivery\",\n },\n});\n\n/**\n * Integration AgentPhone file upload — complete contract\n * POST /api/zero/integrations/phone/upload-file/complete\n *\n * Sends an uploaded file URL to a connected phone handle through AgentPhone.\n * Requires `phone:write` capability (via ZERO_TOKEN).\n */\nconst phoneUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n agentphoneAgentId: z\n .string()\n .min(1, \"AgentPhone agent ID is required\")\n .optional(),\n toNumber: z.string().min(1, \"Phone number is required\"),\n contentType: z.string().min(1).max(200).optional(),\n caption: z.string().max(1024).optional(),\n});\n\nexport type PhoneUploadCompleteBody = z.infer<\n typeof phoneUploadCompleteBodySchema\n>;\n\nconst phoneUploadCompleteResponseSchema = z.object({\n messageId: z.string(),\n channel: z.string().nullable(),\n toNumber: z.string(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type PhoneUploadCompleteResponse = z.infer<\n typeof phoneUploadCompleteResponseSchema\n>;\n\nexport const integrationsPhoneUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/phone/upload-file/complete\",\n headers: authHeadersSchema,\n body: phoneUploadCompleteBodySchema,\n responses: {\n 200: phoneUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Finalize AgentPhone file upload and send it to a phone handle\",\n },\n});\n\n/**\n * Integration Slack file upload — complete contract\n * POST /api/zero/integrations/slack/upload-file/complete\n *\n * Finalizes a Slack file upload and shares it to a channel/thread.\n * Requires `slack:write` capability (via ZERO_TOKEN).\n */\nconst slackUploadCompleteBodySchema = z.object({\n fileId: z.string().min(1, \"File ID is required\"),\n channel: z.string().min(1, \"Channel ID is required\"),\n threadTs: z.string().optional(),\n title: z.string().optional(),\n initialComment: z.string().optional(),\n});\n\nexport type SlackUploadCompleteBody = z.infer<\n typeof slackUploadCompleteBodySchema\n>;\n\nconst slackUploadCompleteResponseSchema = z.object({\n fileId: z.string(),\n permalink: z.string(),\n});\n\nexport type SlackUploadCompleteResponse = z.infer<\n typeof slackUploadCompleteResponseSchema\n>;\n\nexport const integrationsSlackUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/upload-file/complete\",\n headers: authHeadersSchema,\n body: slackUploadCompleteBodySchema,\n responses: {\n 200: slackUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Finalize Slack file upload and share to channel\",\n },\n});\n","import { createWriteStream } from \"node:fs\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n integrationsTelegramBotListContract,\n integrationsTelegramMessageContract,\n integrationsTelegramUploadCompleteContract,\n integrationsTelegramUploadInitContract,\n type ListTelegramBotsResponse,\n type SendTelegramMessageBody,\n type SendTelegramMessageResponse,\n type TelegramUploadCompleteBody,\n type TelegramUploadCompleteResponse,\n type TelegramUploadInitBody,\n type TelegramUploadInitResponse,\n} from \"@vm0/api-contracts/contracts/integrations\";\nimport {\n ApiRequestError,\n getBaseUrl,\n getClientConfig,\n handleError,\n} from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\ninterface DownloadTelegramFileResult {\n path: string;\n mimetype: string;\n size: number;\n}\n\nexport async function listTelegramBots(): Promise<ListTelegramBotsResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsTelegramBotListContract, config);\n\n const result = await client.listBots({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list Telegram bots\");\n}\n\nexport async function sendTelegramMessage(\n body: SendTelegramMessageBody,\n): Promise<SendTelegramMessageResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsTelegramMessageContract, config);\n\n const result = await client.sendMessage({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to send Telegram message\");\n}\n\nexport async function initTelegramFileUpload(\n body: TelegramUploadInitBody,\n): Promise<TelegramUploadInitResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsTelegramUploadInitContract, config);\n\n const result = await client.init({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to initialize Telegram file upload\");\n}\n\nexport async function completeTelegramFileUpload(\n body: TelegramUploadCompleteBody,\n): Promise<TelegramUploadCompleteResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsTelegramUploadCompleteContract, config);\n\n const result = await client.complete({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to complete Telegram file upload\");\n}\n\n/**\n * Download a Telegram file to a local path, streaming the response body to disk.\n * Uses the bot token on the server side; the CLI authenticates via ZERO_TOKEN.\n */\nexport async function downloadTelegramFile(\n fileId: string,\n botId: string,\n outPath: string,\n): Promise<DownloadTelegramFileResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const url = new URL(\"/api/zero/integrations/telegram/download-file\", baseUrl);\n url.searchParams.set(\"file_id\", fileId);\n url.searchParams.set(\"bot_id\", botId);\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n const response = await fetch(url, {\n headers: headersWithCliClientHeaders(headers),\n });\n\n if (!response.ok) {\n let message = `Failed to download Telegram file (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // keep generic message when the body is not JSON\n }\n throw new ApiRequestError(message, code, response.status);\n }\n\n if (!response.body) {\n throw new ApiRequestError(\n \"Telegram download response has no body\",\n \"EMPTY_BODY\",\n 502,\n );\n }\n\n const mimetype =\n response.headers.get(\"x-file-mimetype\") ??\n response.headers.get(\"content-type\") ??\n \"application/octet-stream\";\n\n await pipeline(\n Readable.fromWeb(response.body as never),\n createWriteStream(outPath),\n );\n\n const contentLengthHeader = response.headers.get(\"content-length\");\n const size = contentLengthHeader ? Number(contentLengthHeader) : 0;\n\n return { path: outPath, mimetype, size };\n}\n","import { createWriteStream } from \"node:fs\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n integrationsTeamsMessageContract,\n integrationsTeamsUploadCompleteContract,\n integrationsTeamsUploadInitContract,\n type SendTeamsMessageBody,\n type SendTeamsMessageResponse,\n type TeamsUploadCompleteBody,\n type TeamsUploadCompleteResponse,\n type TeamsUploadInitBody,\n type TeamsUploadInitResponse,\n} from \"@vm0/api-contracts/contracts/integrations\";\nimport {\n ApiRequestError,\n getBaseUrl,\n getClientConfig,\n handleError,\n} from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\nexport async function sendTeamsMessage(\n body: SendTeamsMessageBody,\n): Promise<SendTeamsMessageResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsTeamsMessageContract, config);\n\n const result = await client.sendMessage({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to send Microsoft Teams message\");\n}\n\nexport async function initTeamsFileUpload(\n body: TeamsUploadInitBody,\n): Promise<TeamsUploadInitResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsTeamsUploadInitContract, config);\n\n const result = await client.init({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to initialize Microsoft Teams file upload\");\n}\n\nexport async function completeTeamsFileUpload(\n body: TeamsUploadCompleteBody,\n): Promise<TeamsUploadCompleteResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsTeamsUploadCompleteContract, config);\n\n const result = await client.complete({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to complete Microsoft Teams file upload\");\n}\n\ninterface DownloadTeamsFileResult {\n path: string;\n mimetype: string;\n size: number;\n}\n\nexport async function downloadTeamsFile(\n fileId: string,\n outPath: string,\n): Promise<DownloadTeamsFileResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const url = new URL(\"/api/zero/integrations/teams/download-file\", baseUrl);\n url.searchParams.set(\"file_id\", fileId);\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n const response = await fetch(url, {\n headers: headersWithCliClientHeaders(headers),\n });\n\n if (!response.ok) {\n let message = `Failed to download Microsoft Teams file (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // Keep the generic HTTP message when the server returned non-JSON.\n }\n throw new ApiRequestError(message, code, response.status);\n }\n\n if (!response.body) {\n throw new ApiRequestError(\n \"Microsoft Teams download response has no body\",\n \"EMPTY_BODY\",\n 502,\n );\n }\n\n const mimetype =\n response.headers.get(\"x-file-mimetype\") ??\n response.headers.get(\"content-type\") ??\n \"application/octet-stream\";\n\n await pipeline(\n Readable.fromWeb(response.body as never),\n createWriteStream(outPath),\n );\n\n const contentLengthHeader = response.headers.get(\"content-length\");\n const size = contentLengthHeader ? Number(contentLengthHeader) : 0;\n\n return { path: outPath, mimetype, size };\n}\n","import { createWriteStream } from \"node:fs\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n integrationsGithubUploadCompleteContract,\n integrationsGithubUploadInitContract,\n type GithubUploadCompleteBody,\n type GithubUploadCompleteResponse,\n type GithubUploadInitBody,\n type GithubUploadInitResponse,\n} from \"@vm0/api-contracts/contracts/integrations\";\nimport {\n ApiRequestError,\n getBaseUrl,\n getClientConfig,\n handleError,\n} from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\ninterface DownloadGithubFileResult {\n path: string;\n mimetype: string;\n size: number;\n}\n\nexport async function initGithubFileUpload(\n body: GithubUploadInitBody,\n): Promise<GithubUploadInitResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsGithubUploadInitContract, config);\n\n const result = await client.init({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to initialize GitHub file upload\");\n}\n\nexport async function completeGithubFileUpload(\n body: GithubUploadCompleteBody,\n): Promise<GithubUploadCompleteResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsGithubUploadCompleteContract, config);\n\n const result = await client.complete({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to complete GitHub file upload\");\n}\n\nexport async function downloadGithubFile(\n fileUrl: string,\n outPath: string,\n filename?: string,\n): Promise<DownloadGithubFileResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const url = new URL(\"/api/zero/integrations/github/download-file\", baseUrl);\n url.searchParams.set(\"url\", fileUrl);\n if (filename) {\n url.searchParams.set(\"filename\", filename);\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n const response = await fetch(url, {\n headers: headersWithCliClientHeaders(headers),\n });\n\n if (!response.ok) {\n let message = `Failed to download GitHub file (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // keep generic message when the body is not JSON\n }\n throw new ApiRequestError(message, code, response.status);\n }\n\n if (!response.body) {\n throw new ApiRequestError(\n \"GitHub download response has no body\",\n \"EMPTY_BODY\",\n 502,\n );\n }\n\n const mimetype =\n response.headers.get(\"x-file-mimetype\") ??\n response.headers.get(\"content-type\") ??\n \"application/octet-stream\";\n\n await pipeline(\n Readable.fromWeb(response.body as never),\n createWriteStream(outPath),\n );\n\n const contentLengthHeader = response.headers.get(\"content-length\");\n const size = contentLengthHeader ? Number(contentLengthHeader) : 0;\n\n return { path: outPath, mimetype, size };\n}\n","import { createWriteStream } from \"node:fs\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n integrationsPhoneMessageContract,\n integrationsPhoneUploadCompleteContract,\n integrationsPhoneUploadInitContract,\n type PhoneUploadCompleteBody,\n type PhoneUploadCompleteResponse,\n type PhoneUploadInitBody,\n type PhoneUploadInitResponse,\n type SendPhoneMessageBody,\n type SendPhoneMessageResponse,\n} from \"@vm0/api-contracts/contracts/integrations\";\nimport {\n ApiRequestError,\n getBaseUrl,\n getClientConfig,\n handleError,\n} from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\ninterface DownloadPhoneFileResult {\n path: string;\n mimetype: string;\n size: number;\n}\n\nexport async function sendPhoneMessage(\n body: SendPhoneMessageBody,\n): Promise<SendPhoneMessageResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsPhoneMessageContract, config);\n\n const result = await client.sendMessage({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to send AgentPhone message\");\n}\n\nexport async function initPhoneFileUpload(\n body: PhoneUploadInitBody,\n): Promise<PhoneUploadInitResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsPhoneUploadInitContract, config);\n\n const result = await client.init({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to initialize AgentPhone file upload\");\n}\n\nexport async function completePhoneFileUpload(\n body: PhoneUploadCompleteBody,\n): Promise<PhoneUploadCompleteResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsPhoneUploadCompleteContract, config);\n\n const result = await client.complete({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to complete AgentPhone file upload\");\n}\n\n/**\n * Download an AgentPhone media attachment to a local path.\n */\nexport async function downloadPhoneFile(\n fileId: string,\n outPath: string,\n): Promise<DownloadPhoneFileResult> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n const url = new URL(\"/api/zero/integrations/phone/download-file\", baseUrl);\n url.searchParams.set(\"file_id\", fileId);\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n const response = await fetch(url, {\n headers: headersWithCliClientHeaders(headers),\n });\n\n if (!response.ok) {\n let message = `Failed to download AgentPhone file (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // keep generic message when the body is not JSON\n }\n throw new ApiRequestError(message, code, response.status);\n }\n\n if (!response.body) {\n throw new ApiRequestError(\n \"AgentPhone download response has no body\",\n \"EMPTY_BODY\",\n 502,\n );\n }\n\n const mimetype =\n response.headers.get(\"x-file-mimetype\") ??\n response.headers.get(\"content-type\") ??\n \"application/octet-stream\";\n\n await pipeline(\n Readable.fromWeb(response.body as never),\n createWriteStream(outPath),\n );\n\n const contentLengthHeader = response.headers.get(\"content-length\");\n const size = contentLengthHeader ? Number(contentLengthHeader) : 0;\n\n return { path: outPath, mimetype, size };\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n logsListContract,\n type LogsListResponse,\n type LogStatus,\n} from \"@vm0/api-contracts/contracts/logs\";\nimport { type LogsSearchResponse } from \"@vm0/api-contracts/contracts/runs\";\nimport { zeroLogsSearchContract } from \"@vm0/api-contracts/contracts/zero-runs\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function listZeroLogs(options?: {\n agentId?: string;\n status?: string;\n since?: number;\n limit?: number;\n cursor?: string;\n}): Promise<LogsListResponse> {\n const config = await getClientConfig();\n const client = initClient(logsListContract, config);\n const result = await client.list({\n query: {\n agentId: options?.agentId,\n status: options?.status as LogStatus | undefined,\n since: options?.since,\n limit: options?.limit,\n cursor: options?.cursor,\n },\n });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to list zero logs\");\n}\n\nexport async function searchZeroLogs(options: {\n keyword: string;\n agentId?: string;\n runId?: string;\n since?: number;\n limit?: number;\n before?: number;\n after?: number;\n}): Promise<LogsSearchResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroLogsSearchContract, config);\n const result = await client.searchLogs({\n query: {\n keyword: options.keyword,\n agentId: options.agentId,\n runId: options.runId,\n since: options.since,\n limit: options.limit,\n before: options.before,\n after: options.after,\n },\n });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to search zero logs\");\n}\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroRelationshipsContract,\n type RelationshipResolveResponse,\n type RelationshipSearchResponse,\n} from \"@vm0/api-contracts/contracts/zero-relationships\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function resolveZeroRelationship(\n options:\n | { readonly id: string; readonly email?: never; readonly domain?: never }\n | { readonly email: string; readonly id?: never; readonly domain?: never }\n | { readonly domain: string; readonly id?: never; readonly email?: never },\n): Promise<RelationshipResolveResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroRelationshipsContract, config);\n const result = await client.resolve({ query: options });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to resolve relationship\");\n}\n\nexport async function searchZeroRelationships(options: {\n readonly q: string;\n readonly limit?: number;\n}): Promise<RelationshipSearchResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroRelationshipsContract, config);\n const result = await client.search({\n query: { q: options.q, limit: options.limit },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to search relationships\");\n}\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const RELATIONSHIP_SEARCH_DEFAULT_LIMIT = 100;\nexport const RELATIONSHIP_SEARCH_MAX_LIMIT = 100;\nexport const RELATIONSHIP_RECENT_INTERACTION_LIMIT = 5;\n\nconst relationshipEntityTypeSchema = z.enum([\"person\", \"organization\"]);\nconst relationshipItemKindSchema = z.enum([\n \"key_fact\",\n \"preference\",\n \"open_loop\",\n]);\nconst relationshipProviderSchema = z.enum([\n \"gmail\",\n \"slack\",\n \"github\",\n \"notion\",\n]);\n\nconst relationshipEntitySchema = z.object({\n id: z.string().uuid(),\n type: relationshipEntityTypeSchema,\n displayName: z.string(),\n primaryEmail: z.string().nullable(),\n domain: z.string().nullable(),\n});\n\nconst relationshipSourceSchema = z.object({\n id: z.string().uuid(),\n provider: relationshipProviderSchema,\n externalId: z.string(),\n threadId: z.string().nullable(),\n messageId: z.string().nullable(),\n quote: z.string().nullable(),\n occurredAt: z.string().nullable(),\n});\n\nconst relationshipItemSchema = z.object({\n id: z.string().uuid(),\n kind: relationshipItemKindSchema,\n text: z.string(),\n confidence: z.number().int().min(0).max(100),\n lastSeenAt: z.string(),\n sources: z.array(relationshipSourceSchema),\n});\n\nconst relationshipInteractionSchema = z.object({\n id: z.string().uuid(),\n provider: relationshipProviderSchema,\n externalId: z.string(),\n threadId: z.string().nullable(),\n messageId: z.string().nullable(),\n subject: z.string().nullable(),\n snippet: z.string(),\n occurredAt: z.string(),\n});\n\nexport const relationshipRecordSchema = z.object({\n id: z.string().uuid(),\n entity: relationshipEntitySchema,\n relationshipType: z.string().nullable(),\n status: z.enum([\"active\", \"quiet\", \"archived\"]).nullable(),\n summary: z.string().nullable(),\n lastInteractionAt: z.string().nullable(),\n items: z.array(relationshipItemSchema),\n recentInteractions: z.array(relationshipInteractionSchema),\n});\n\nexport const relationshipResolveResponseSchema = z.object({\n relationship: relationshipRecordSchema.nullable(),\n});\n\nexport const relationshipSearchResponseSchema = z.object({\n relationships: z.array(relationshipRecordSchema),\n pagination: z.object({\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n total: z.number().int().nonnegative(),\n totalPages: z.number().int().positive(),\n hasMore: z.boolean(),\n }),\n});\n\nexport const gmailRelationshipBackfillStatusSchema = z.enum([\n \"idle\",\n \"pending\",\n \"running\",\n \"stopped\",\n \"done\",\n \"failed\",\n]);\n\nexport const gmailRelationshipBackfillSchema = z.object({\n status: gmailRelationshipBackfillStatusSchema,\n estimatedTotal: z.number().int().nonnegative().nullable(),\n scannedCount: z.number().int().nonnegative(),\n enqueuedCount: z.number().int().nonnegative(),\n pendingSyncJobs: z.number().int().nonnegative(),\n lastError: z.string().nullable(),\n updatedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n});\n\nexport const gmailRelationshipStatusResponseSchema = z.object({\n provider: z.literal(\"gmail\"),\n connectorConnected: z.boolean(),\n enabled: z.boolean(),\n watchEnabled: z.boolean(),\n backfill: gmailRelationshipBackfillSchema,\n});\n\nexport const gmailRelationshipBackfillRequestSchema = z.object({\n days: z.union([z.literal(30), z.literal(90), z.literal(180), z.literal(365)]),\n includeArchived: z.boolean(),\n includeSent: z.boolean(),\n});\n\nexport type RelationshipRecord = z.infer<typeof relationshipRecordSchema>;\nexport type RelationshipResolveResponse = z.infer<\n typeof relationshipResolveResponseSchema\n>;\nexport type RelationshipSearchResponse = z.infer<\n typeof relationshipSearchResponseSchema\n>;\nexport type GmailRelationshipStatusResponse = z.infer<\n typeof gmailRelationshipStatusResponseSchema\n>;\nexport type GmailRelationshipBackfillRequest = z.infer<\n typeof gmailRelationshipBackfillRequestSchema\n>;\n\nconst resolveQuerySchema = z\n .object({\n id: z.string().uuid().optional(),\n email: z.string().email().optional(),\n domain: z.string().min(1).max(255).optional(),\n })\n .refine(\n (query) => {\n const keys = [query.id, query.email, query.domain].filter(Boolean);\n return keys.length === 1;\n },\n {\n message: \"Provide exactly one of id, email, or domain\",\n },\n );\n\nexport const zeroRelationshipsContract = c.router({\n gmailStatus: {\n method: \"GET\",\n path: \"/api/zero/relationships/gmail/status\",\n headers: authHeadersSchema,\n responses: {\n 200: gmailRelationshipStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Read Gmail relationship memory enable and backfill status\",\n },\n gmailEnable: {\n method: \"POST\",\n path: \"/api/zero/relationships/gmail/enable\",\n headers: authHeadersSchema,\n responses: {\n 200: gmailRelationshipStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Enable Gmail relationship memory and start backfill\",\n },\n gmailBackfill: {\n method: \"POST\",\n path: \"/api/zero/relationships/gmail/backfill\",\n headers: authHeadersSchema,\n body: gmailRelationshipBackfillRequestSchema,\n responses: {\n 200: gmailRelationshipStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Start or restart Gmail relationship memory backfill\",\n },\n gmailStopBackfill: {\n method: \"POST\",\n path: \"/api/zero/relationships/gmail/backfill/stop\",\n headers: authHeadersSchema,\n responses: {\n 200: gmailRelationshipStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Stop the current Gmail relationship memory backfill\",\n },\n gmailDeleteStoppedBackfill: {\n method: \"DELETE\",\n path: \"/api/zero/relationships/gmail/backfill/stopped\",\n headers: authHeadersSchema,\n responses: {\n 200: gmailRelationshipStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete a stopped Gmail relationship memory backfill job\",\n },\n resolve: {\n method: \"GET\",\n path: \"/api/zero/relationships/resolve\",\n headers: authHeadersSchema,\n query: resolveQuerySchema,\n responses: {\n 200: relationshipResolveResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Resolve one relationship in the current organization\",\n },\n search: {\n method: \"GET\",\n path: \"/api/zero/relationships/search\",\n headers: authHeadersSchema,\n query: z.object({\n q: z.string().max(300).optional(),\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce\n .number()\n .int()\n .min(1)\n .max(RELATIONSHIP_SEARCH_MAX_LIMIT)\n .default(RELATIONSHIP_SEARCH_DEFAULT_LIMIT),\n entityType: relationshipEntityTypeSchema.optional(),\n itemKind: relationshipItemKindSchema.optional(),\n }),\n responses: {\n 200: relationshipSearchResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Search relationships in the current organization\",\n },\n});\n\nexport type ZeroRelationshipsContract = typeof zeroRelationshipsContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroMemoryContract,\n type MemoryContextResponse,\n type MemoryCreateRequest,\n type MemoryDocumentListResponse,\n type MemoryForgetByPromptRequest,\n type MemoryForgetRequest,\n type MemoryForgetResponse,\n type MemoryHistoryResponse,\n type MemoryKind,\n type MemoryLifecycleMemory,\n type MemoryListResponse,\n type MemoryRecallItemKind,\n type MemoryRecallResponse,\n type MemorySearchMode,\n type MemorySearchResponse,\n type MemorySourceProvider,\n type MemoryTombstoneListResponse,\n type MemoryUpdateRequest,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function recallZeroMemory(options: {\n readonly q: string;\n readonly kind?: MemoryRecallItemKind;\n readonly limit?: number;\n}): Promise<MemoryRecallResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.recall({\n query: {\n q: options.q,\n kind: options.kind,\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to recall memory\");\n}\n\nexport async function getZeroMemoryContext(options: {\n readonly q?: string;\n readonly limit?: number;\n}): Promise<MemoryContextResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.context({\n query: {\n q: options.q,\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to load memory context\");\n}\n\nexport async function searchZeroMemory(options: {\n readonly q: string;\n readonly mode?: MemorySearchMode;\n readonly provider?: MemorySourceProvider;\n readonly limit?: number;\n}): Promise<MemorySearchResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.search({\n query: {\n q: options.q,\n mode: options.mode,\n provider: options.provider,\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to search memory\");\n}\n\nexport async function listZeroMemory(options: {\n readonly status?: \"active\" | \"archived\";\n readonly kind?: MemoryKind;\n readonly limit?: number;\n}): Promise<MemoryListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.memories({\n query: {\n status: options.status,\n kind: options.kind,\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to list memory\");\n}\n\nexport async function createZeroMemory(\n request: MemoryCreateRequest,\n): Promise<MemoryLifecycleMemory> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.createMemory({ body: request });\n if (result.status === 200) {\n return result.body.memory;\n }\n handleError(result, \"Failed to create memory\");\n}\n\nexport async function updateZeroMemory(\n memoryId: string,\n request: MemoryUpdateRequest,\n): Promise<MemoryLifecycleMemory> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.updateMemory({\n params: { memoryId },\n body: request,\n });\n if (result.status === 200) {\n return result.body.memory;\n }\n handleError(result, \"Failed to update memory\");\n}\n\nexport async function forgetZeroMemory(\n memoryId: string,\n request: MemoryForgetRequest,\n): Promise<MemoryForgetResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.forgetMemory({\n params: { memoryId },\n body: request,\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to forget memory\");\n}\n\nexport async function forgetZeroMemoryByPrompt(\n request: MemoryForgetByPromptRequest,\n): Promise<MemoryForgetResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.forgetPrompt({ body: request });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to forget memory by prompt\");\n}\n\nexport async function listZeroMemoryHistory(options: {\n readonly targetKind: \"memory\" | \"document\" | \"profile\";\n readonly targetId: string;\n readonly limit?: number;\n}): Promise<MemoryHistoryResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.history({\n query: {\n targetKind: options.targetKind,\n targetId: options.targetId,\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to list memory history\");\n}\n\nexport async function listZeroMemoryDocuments(options: {\n readonly status?: \"active\" | \"archived\" | \"deleted\";\n readonly provider?: MemorySourceProvider;\n readonly limit?: number;\n}): Promise<MemoryDocumentListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.documents({\n query: {\n status: options.status,\n provider: options.provider,\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to list memory documents\");\n}\n\nexport async function listZeroMemoryForgotten(options: {\n readonly limit?: number;\n}): Promise<MemoryTombstoneListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroMemoryContract, config);\n const result = await client.forgotten({\n query: {\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to list forgotten memory\");\n}\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst memoryFileSchema = z.object({\n path: z.string(),\n size: z.number(),\n});\n\nconst memoryFileContentSchema = z.object({\n path: z.string(),\n content: z.string(),\n});\n\nconst memorySourceProviderSchema = z.enum([\n \"gmail\",\n \"slack\",\n \"github\",\n \"notion\",\n]);\nconst memorySourceTypeSchema = z.enum([\n \"gmail_message\",\n \"slack_message\",\n \"github_issue\",\n \"github_pull_request\",\n \"github_issue_comment\",\n \"notion_page\",\n \"notion_page_event\",\n]);\nconst memoryRecallItemKindSchema = z.enum([\n \"key_fact\",\n \"preference\",\n \"open_loop\",\n]);\nconst memoryKindSchema = z.enum([\n \"key_fact\",\n \"preference\",\n \"open_loop\",\n \"role\",\n \"project\",\n \"communication_style\",\n \"recent_context\",\n]);\nconst memoryStatusSchema = z.enum([\"active\", \"archived\"]);\nconst memoryDocumentStatusSchema = z.enum([\"active\", \"archived\", \"deleted\"]);\nconst memorySearchModeSchema = z.enum([\"hybrid\", \"memories\", \"documents\"]);\nconst memoryContextSpaceTypeSchema = z.enum([\n \"user\",\n \"org\",\n \"project\",\n \"repo\",\n \"customer\",\n \"agent\",\n \"workflow\",\n]);\nconst memoryVersionTargetKindSchema = z.enum([\"memory\", \"document\", \"profile\"]);\nconst memoryTombstoneTargetKindSchema = z.enum([\n \"memory\",\n \"document\",\n \"document_chunk\",\n \"profile\",\n]);\nconst memoryInjectionItemKindSchema = z.enum([\n \"key_fact\",\n \"preference\",\n \"open_loop\",\n \"role\",\n \"project\",\n \"communication_style\",\n \"recent_context\",\n]);\nconst memorySourceDirectionSchema = z.enum([\n \"sent\",\n \"received\",\n \"mixed\",\n \"unknown\",\n]);\n\nconst memorySourceCompactMetadataSchema = z.object({\n workspaceId: z.string().optional(),\n channelId: z.string().optional(),\n channelType: z.string().optional(),\n threadId: z.string().nullable().optional(),\n messageTs: z.string().optional(),\n senderId: z.string().optional(),\n mailboxEmail: z.string().optional(),\n direction: memorySourceDirectionSchema.optional(),\n githubRepository: z.string().optional(),\n githubSubjectKind: z.enum([\"issue\", \"pull_request\"]).optional(),\n githubSubjectNumber: z.number().int().positive().optional(),\n githubIssueCommentId: z.string().optional(),\n githubActorLogin: z.string().optional(),\n notionWorkspaceName: z.string().nullable().optional(),\n notionPageId: z.string().optional(),\n notionEventFamily: z\n .enum([\"new_child_page\", \"new_database_item\", \"page_content_updated\"])\n .optional(),\n notionEventType: z\n .enum([\"page.created\", \"page.content_updated\", \"page.properties_updated\"])\n .optional(),\n notionParentTitle: z.string().nullable().optional(),\n});\n\nconst memorySourceMetadataSchema = memorySourceCompactMetadataSchema\n .extend({\n messageId: z.string().nullable().optional(),\n participantIds: z.array(z.string()).optional(),\n fileIds: z.array(z.string()).optional(),\n historyId: z.string().optional(),\n from: z.string().nullable().optional(),\n to: z.array(z.string()).optional(),\n cc: z.array(z.string()).optional(),\n githubInstallationId: z.string().optional(),\n githubRemoteInstallationId: z.string().optional(),\n githubSubjectUrl: z.string().optional(),\n githubIssueCommentId: z.string().optional(),\n githubActorId: z.string().optional(),\n githubAuthorId: z.string().optional(),\n githubAuthorLogin: z.string().optional(),\n githubLabels: z.array(z.string()).optional(),\n notionWorkspaceId: z.string().optional(),\n notionPageUrl: z.string().nullable().optional(),\n notionLastEditedTime: z.string().nullable().optional(),\n notionEventId: z.string().optional(),\n notionScopeType: z.enum([\"page\", \"data_source\"]).optional(),\n notionScopeId: z.string().optional(),\n notionParentUrl: z.string().nullable().optional(),\n notionAuthorIds: z.array(z.string()).optional(),\n reason: z.string().optional(),\n })\n .passthrough();\n\nconst memorySourceBaseSchema = z.object({\n id: z.string().uuid(),\n provider: memorySourceProviderSchema,\n sourceType: memorySourceTypeSchema,\n title: z.string().nullable(),\n occurredAt: z.string().nullable(),\n createdAt: z.string(),\n contentHash: z.string().nullable(),\n});\n\nconst memorySourceSchema = memorySourceBaseSchema.extend({\n metadata: memorySourceCompactMetadataSchema,\n});\n\nconst memorySourceDetailResponseSchema = memorySourceBaseSchema.extend({\n externalId: z.string(),\n connectorId: z.string().uuid().nullable(),\n updatedAt: z.string(),\n metadata: memorySourceMetadataSchema,\n});\n\nconst memoryRecallRelationshipSchema = z.object({\n id: z.string().uuid(),\n entity: z.object({\n id: z.string().uuid(),\n type: z.enum([\"person\", \"organization\"]),\n displayName: z.string(),\n primaryEmail: z.string().nullable(),\n domain: z.string().nullable(),\n }),\n relationshipType: z.string().nullable(),\n status: z.enum([\"active\", \"quiet\", \"archived\"]).nullable(),\n summary: z.string().nullable(),\n lastInteractionAt: z.string().nullable(),\n});\n\nconst memoryRecallSourceSchema = z.object({\n id: z.string().uuid(),\n provider: memorySourceProviderSchema,\n externalId: z.string(),\n threadId: z.string().nullable(),\n messageId: z.string().nullable(),\n quote: z.string().nullable(),\n occurredAt: z.string().nullable(),\n});\n\nconst memoryRecallItemSchema = z.object({\n id: z.string().uuid(),\n kind: memoryRecallItemKindSchema,\n text: z.string(),\n confidence: z.number().int().min(0).max(100),\n lastSeenAt: z.string(),\n relationship: memoryRecallRelationshipSchema,\n sources: z.array(memoryRecallSourceSchema),\n});\n\nexport const memoryRecallResponseSchema = z.object({\n query: z.string(),\n memories: z.array(memoryRecallItemSchema),\n});\n\nexport const memoryContextResponseSchema = z.object({\n query: z.string().nullable(),\n context: z.string(),\n memories: z.array(memoryRecallItemSchema),\n});\n\nconst memoryDocumentSearchCitationSchema = z.object({\n provider: memorySourceProviderSchema,\n sourceId: z.string(),\n externalId: z.string(),\n title: z.string().nullable(),\n url: z.string().nullable(),\n locator: z.string().nullable(),\n occurredAt: z.string().nullable(),\n});\n\nconst memoryDocumentSearchResultSchema = z.object({\n kind: z.literal(\"document_chunk\"),\n id: z.string().uuid(),\n documentId: z.string().uuid(),\n chunkId: z.string().uuid(),\n title: z.string().nullable(),\n text: z.string(),\n score: z.number(),\n provider: memorySourceProviderSchema,\n sourceType: memorySourceTypeSchema,\n externalId: z.string(),\n occurredAt: z.string().nullable(),\n contextSpace: z.object({\n id: z.string().uuid(),\n type: memoryContextSpaceTypeSchema,\n key: z.string(),\n displayName: z.string(),\n }),\n citation: memoryDocumentSearchCitationSchema,\n});\n\nconst memorySearchMemoryResultSchema = z.object({\n kind: z.literal(\"memory\"),\n id: z.string().uuid(),\n score: z.number(),\n memory: memoryRecallItemSchema,\n});\n\nexport const memorySearchResponseSchema = z.object({\n query: z.string(),\n mode: memorySearchModeSchema,\n results: z.array(\n z.discriminatedUnion(\"kind\", [\n memorySearchMemoryResultSchema,\n memoryDocumentSearchResultSchema,\n ]),\n ),\n});\n\nconst memoryContextSpaceSchema = z.object({\n id: z.string().uuid(),\n type: memoryContextSpaceTypeSchema,\n key: z.string(),\n displayName: z.string(),\n});\n\nconst memoryContextSpaceInputSchema = z.object({\n type: memoryContextSpaceTypeSchema,\n key: z.string().min(1).max(512),\n displayName: z.string().min(1).max(300),\n});\n\nconst memoryLifecycleEntitySchema = z.object({\n id: z.string().uuid().nullable(),\n type: z.enum([\"person\", \"organization\", \"project\", \"channel\"]).nullable(),\n displayName: z.string().nullable(),\n});\n\nconst memoryLifecycleMemorySchema = z.object({\n id: z.string().uuid(),\n kind: memoryKindSchema,\n status: memoryStatusSchema,\n text: z.string(),\n confidence: z.number().int().min(0).max(100),\n sourceCount: z.number().int().nonnegative(),\n lastSeenAt: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n contextSpace: memoryContextSpaceSchema.nullable(),\n entity: memoryLifecycleEntitySchema,\n});\n\nexport const memoryListResponseSchema = z.object({\n memories: z.array(memoryLifecycleMemorySchema),\n pagination: z.object({\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n total: z.number().int().nonnegative(),\n totalPages: z.number().int().positive(),\n hasMore: z.boolean(),\n }),\n});\n\nexport const memoryCreateRequestSchema = z.object({\n text: z.string().min(1).max(4000),\n kind: memoryKindSchema.default(\"key_fact\"),\n confidence: z.number().int().min(0).max(100).default(90),\n contextSpace: memoryContextSpaceInputSchema.optional(),\n entityDisplayName: z.string().min(1).max(300).optional(),\n});\n\nexport const memoryUpdateRequestSchema = z.object({\n text: z.string().min(1).max(4000).optional(),\n kind: memoryKindSchema.optional(),\n confidence: z.number().int().min(0).max(100).optional(),\n contextSpace: memoryContextSpaceInputSchema.optional(),\n entityDisplayName: z.string().min(1).max(300).optional(),\n});\n\nexport const memoryLifecycleMemoryResponseSchema = z.object({\n memory: memoryLifecycleMemorySchema,\n});\n\nexport const memoryForgetRequestSchema = z.object({\n reason: z.string().min(1).max(500).optional(),\n});\n\nconst memoryForgetTargetKindSchema = z.enum([\"all\", \"memories\", \"documents\"]);\n\nexport const memoryForgetByPromptRequestSchema = z.object({\n prompt: z.string().min(1).max(500),\n targetKind: memoryForgetTargetKindSchema.default(\"all\"),\n provider: memorySourceProviderSchema.optional(),\n limit: z.number().int().min(1).max(10).default(5),\n reason: z.string().min(1).max(500).optional(),\n});\n\nconst memoryTombstoneSchema = z.object({\n id: z.string().uuid(),\n targetKind: memoryTombstoneTargetKindSchema,\n fingerprint: z.string(),\n reason: z.string().nullable(),\n prompt: z.string().nullable(),\n targetId: z.string().nullable(),\n targetTitle: z.string().nullable(),\n targetText: z.string().nullable(),\n contextSpace: memoryContextSpaceSchema.nullable(),\n createdAt: z.string(),\n});\n\nexport const memoryForgetResponseSchema = z.object({\n forgotten: z.array(memoryTombstoneSchema),\n});\n\nexport const memoryTombstoneListResponseSchema = z.object({\n forgotten: z.array(memoryTombstoneSchema),\n});\n\nconst memoryVersionSchema = z.object({\n id: z.string().uuid(),\n targetKind: memoryVersionTargetKindSchema,\n targetId: z.string().uuid(),\n version: z.number().int().positive(),\n contentHash: z.string(),\n operation: z.enum([\"create\", \"update\", \"forget\", \"derive\"]).nullable(),\n reason: z.string().nullable(),\n text: z.string().nullable(),\n title: z.string().nullable(),\n status: z.string().nullable(),\n confidence: z.number().int().min(0).max(100).nullable(),\n kind: z.string().nullable(),\n contextSpace: memoryContextSpaceSchema.nullable(),\n createdAt: z.string(),\n});\n\nexport const memoryHistoryResponseSchema = z.object({\n history: z.array(memoryVersionSchema),\n});\n\nconst memoryDocumentListItemSchema = z.object({\n id: z.string().uuid(),\n status: memoryDocumentStatusSchema,\n title: z.string().nullable(),\n provider: memorySourceProviderSchema,\n sourceType: memorySourceTypeSchema,\n externalId: z.string(),\n contentHash: z.string(),\n occurredAt: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n chunkCount: z.number().int().nonnegative(),\n contextSpace: memoryContextSpaceSchema,\n citationUrl: z.string().nullable(),\n});\n\nexport const memoryDocumentListResponseSchema = z.object({\n documents: z.array(memoryDocumentListItemSchema),\n pagination: z.object({\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n total: z.number().int().nonnegative(),\n totalPages: z.number().int().positive(),\n hasMore: z.boolean(),\n }),\n});\n\nconst memoryProfileListItemSchema = z.object({\n id: z.string().uuid(),\n section: z.string(),\n content: z.string(),\n sourceMemoryCount: z.number().int().nonnegative(),\n entity: memoryLifecycleEntitySchema,\n contextSpace: memoryContextSpaceSchema.nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const memoryProfileListResponseSchema = z.object({\n profiles: z.array(memoryProfileListItemSchema),\n});\n\nconst memoryInjectionItemSchema = z.object({\n id: z.string().uuid(),\n kind: memoryInjectionItemKindSchema,\n text: z.string(),\n confidence: z.number().int().min(0).max(100),\n lastSeenAt: z.string(),\n entity: z.object({\n id: z.string().uuid(),\n type: z.enum([\"person\", \"organization\", \"project\", \"channel\"]),\n displayName: z.string(),\n }),\n sources: z.array(memoryRecallSourceSchema),\n});\n\nexport const memoryInjectionPreviewRequestSchema = z.object({\n prompt: z.string().min(1).max(4000),\n});\n\nexport const memoryInjectionPreviewResponseSchema = z.object({\n prompt: z.string(),\n appendSystemPrompt: z.string(),\n profile: z.object({\n static: z.array(memoryInjectionItemSchema),\n dynamic: z.array(memoryInjectionItemSchema),\n }),\n queryMemories: z.array(memoryInjectionItemSchema),\n documentEvidence: z.array(memoryDocumentSearchResultSchema),\n stats: z.object({\n injectedCount: z.number().int().nonnegative(),\n omittedCount: z.number().int().nonnegative(),\n characterCount: z.number().int().nonnegative(),\n tokenCount: z.number().int().nonnegative(),\n profileTokenCount: z.number().int().nonnegative(),\n memoryTokenCount: z.number().int().nonnegative(),\n documentTokenCount: z.number().int().nonnegative(),\n }),\n});\n\nexport const memorySourceListResponseSchema = z.object({\n sources: z.array(memorySourceSchema),\n pagination: z.object({\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n total: z.number().int().nonnegative(),\n totalPages: z.number().int().positive(),\n hasMore: z.boolean(),\n }),\n});\n\nexport const slackMemoryBackfillStatusSchema = z.enum([\n \"idle\",\n \"pending\",\n \"running\",\n \"stopped\",\n \"done\",\n \"failed\",\n]);\n\nexport const slackMemoryBackfillSchema = z.object({\n status: slackMemoryBackfillStatusSchema,\n estimatedTotal: z.number().int().nonnegative().nullable(),\n scannedCount: z.number().int().nonnegative(),\n recordedCount: z.number().int().nonnegative(),\n lastError: z.string().nullable(),\n updatedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n});\n\nexport const slackMemoryStatusResponseSchema = z.object({\n provider: z.literal(\"slack\"),\n workspaceConnected: z.boolean(),\n userConnected: z.boolean(),\n workspaceName: z.string().nullable(),\n backfill: slackMemoryBackfillSchema,\n});\n\nexport const slackMemoryBackfillRequestSchema = z.object({\n days: z.union([z.literal(30), z.literal(90), z.literal(180), z.literal(365)]),\n includePublicChannels: z.boolean(),\n includePrivateChannels: z.boolean(),\n includeDirectMessages: z.boolean(),\n});\n\nconst sourceBackfillStatusSchema = z.enum([\n \"idle\",\n \"pending\",\n \"running\",\n \"stopped\",\n \"done\",\n \"failed\",\n]);\n\nconst sourceBackfillSchema = z.object({\n status: sourceBackfillStatusSchema,\n estimatedTotal: z.number().int().nonnegative().nullable(),\n scannedCount: z.number().int().nonnegative(),\n recordedCount: z.number().int().nonnegative(),\n lastError: z.string().nullable(),\n updatedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n});\n\nconst githubTrustedContributorSchema = z.object({\n githubUserId: z.string().optional(),\n login: z.string().optional(),\n email: z.string().email().optional(),\n});\n\nconst githubMemoryRepositoryConfigSchema = z.object({\n id: z.number().int().optional(),\n name: z.string().optional(),\n fullName: z.string().min(1),\n defaultBranch: z.string().nullable().optional(),\n selected: z.boolean(),\n includeIssues: z.boolean().default(true),\n includePullRequests: z.boolean().default(true),\n includeComments: z.boolean().default(true),\n trustedContributors: z.array(githubTrustedContributorSchema).default([]),\n});\n\nexport const githubMemoryConfigureRequestSchema = z.object({\n repositories: z.array(githubMemoryRepositoryConfigSchema).max(100),\n});\n\nexport const githubMemoryBackfillRequestSchema = z.object({\n days: z.union([z.literal(30), z.literal(90), z.literal(180), z.literal(365)]),\n});\n\nconst githubMemoryRepositoryResourceSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n fullName: z.string(),\n private: z.boolean(),\n defaultBranch: z.string().nullable(),\n selected: z.boolean(),\n includeIssues: z.boolean(),\n includePullRequests: z.boolean(),\n includeComments: z.boolean(),\n trustedContributors: z.array(githubTrustedContributorSchema),\n});\n\nconst githubMemoryContributorSchema = z.object({\n githubUserId: z.string(),\n login: z.string(),\n type: z.string().nullable(),\n contributions: z.number().int().nonnegative().nullable(),\n trusted: z.boolean(),\n});\n\nexport const githubMemoryRepositoriesResponseSchema = z.object({\n provider: z.literal(\"github\"),\n connected: z.boolean(),\n installationId: z.string().nullable(),\n targetName: z.string().nullable(),\n repositories: z.array(githubMemoryRepositoryResourceSchema),\n pagination: z.object({\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n hasMore: z.boolean(),\n }),\n});\n\nexport const githubMemoryContributorsResponseSchema = z.object({\n provider: z.literal(\"github\"),\n connected: z.boolean(),\n repository: z.string(),\n contributors: z.array(githubMemoryContributorSchema),\n pagination: z.object({\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n hasMore: z.boolean(),\n }),\n});\n\nexport const githubMemoryStatusResponseSchema = z.object({\n provider: z.literal(\"github\"),\n connected: z.boolean(),\n installationId: z.string().nullable(),\n targetName: z.string().nullable(),\n selectedRepositoryCount: z.number().int().nonnegative(),\n trustedContributorCount: z.number().int().nonnegative(),\n backfill: sourceBackfillSchema,\n});\n\nexport const notionMemoryBackfillRequestSchema = z.object({\n days: z.union([z.literal(30), z.literal(90), z.literal(180), z.literal(365)]),\n documentLimit: z.number().int().min(1).max(10_000),\n});\n\nexport const notionMemoryStatusResponseSchema = z.object({\n provider: z.literal(\"notion\"),\n connected: z.boolean(),\n workspaceName: z.string().nullable(),\n backfill: sourceBackfillSchema,\n});\n\n/**\n * Read-only view of the current user's \"memory\" artifact (latest version).\n *\n * `exists` is false when the user has never produced memory (no artifact yet);\n * in that case the lists are empty and `updatedAt` is null.\n */\nexport const memoryDetailResponseSchema = z.object({\n exists: z.boolean(),\n name: z.string(),\n size: z.number(),\n fileCount: z.number(),\n updatedAt: z.string().nullable(),\n files: z.array(memoryFileSchema),\n fileContents: z.array(memoryFileContentSchema),\n});\n\nexport type MemoryDetailResponse = z.infer<typeof memoryDetailResponseSchema>;\nexport type MemoryRecallItemKind = z.infer<typeof memoryRecallItemKindSchema>;\nexport type MemoryRecallItem = z.infer<typeof memoryRecallItemSchema>;\nexport type MemoryRecallResponse = z.infer<typeof memoryRecallResponseSchema>;\nexport type MemoryContextResponse = z.infer<typeof memoryContextResponseSchema>;\nexport type MemoryKind = z.infer<typeof memoryKindSchema>;\nexport type MemorySearchMode = z.infer<typeof memorySearchModeSchema>;\nexport type MemorySearchResponse = z.infer<typeof memorySearchResponseSchema>;\nexport type MemorySearchResult = MemorySearchResponse[\"results\"][number];\nexport type MemoryListResponse = z.infer<typeof memoryListResponseSchema>;\nexport type MemoryLifecycleMemory = z.infer<typeof memoryLifecycleMemorySchema>;\nexport type MemoryCreateRequest = z.infer<typeof memoryCreateRequestSchema>;\nexport type MemoryUpdateRequest = z.infer<typeof memoryUpdateRequestSchema>;\nexport type MemoryForgetRequest = z.infer<typeof memoryForgetRequestSchema>;\nexport type MemoryForgetByPromptRequest = z.infer<\n typeof memoryForgetByPromptRequestSchema\n>;\nexport type MemoryForgetResponse = z.infer<typeof memoryForgetResponseSchema>;\nexport type MemoryHistoryResponse = z.infer<typeof memoryHistoryResponseSchema>;\nexport type MemoryTombstoneListResponse = z.infer<\n typeof memoryTombstoneListResponseSchema\n>;\nexport type MemoryDocumentListResponse = z.infer<\n typeof memoryDocumentListResponseSchema\n>;\nexport type MemoryProfileListResponse = z.infer<\n typeof memoryProfileListResponseSchema\n>;\nexport type MemoryInjectionItemKind = z.infer<\n typeof memoryInjectionItemKindSchema\n>;\nexport type MemoryInjectionItem = z.infer<typeof memoryInjectionItemSchema>;\nexport type MemoryInjectionPreviewRequest = z.infer<\n typeof memoryInjectionPreviewRequestSchema\n>;\nexport type MemoryInjectionPreviewResponse = z.infer<\n typeof memoryInjectionPreviewResponseSchema\n>;\nexport type MemorySourceProvider = z.infer<typeof memorySourceProviderSchema>;\nexport type MemorySourceType = z.infer<typeof memorySourceTypeSchema>;\nexport type MemorySourceListResponse = z.infer<\n typeof memorySourceListResponseSchema\n>;\nexport type MemorySourceDetailResponse = z.infer<\n typeof memorySourceDetailResponseSchema\n>;\nexport type SlackMemoryStatusResponse = z.infer<\n typeof slackMemoryStatusResponseSchema\n>;\nexport type SlackMemoryBackfillRequest = z.infer<\n typeof slackMemoryBackfillRequestSchema\n>;\nexport type GithubMemoryConfigureRequest = z.infer<\n typeof githubMemoryConfigureRequestSchema\n>;\nexport type GithubMemoryBackfillRequest = z.infer<\n typeof githubMemoryBackfillRequestSchema\n>;\nexport type GithubMemoryStatusResponse = z.infer<\n typeof githubMemoryStatusResponseSchema\n>;\nexport type GithubMemoryRepositoriesResponse = z.infer<\n typeof githubMemoryRepositoriesResponseSchema\n>;\nexport type GithubMemoryContributorsResponse = z.infer<\n typeof githubMemoryContributorsResponseSchema\n>;\nexport type NotionMemoryBackfillRequest = z.infer<\n typeof notionMemoryBackfillRequestSchema\n>;\nexport type NotionMemoryStatusResponse = z.infer<\n typeof notionMemoryStatusResponseSchema\n>;\n\n/**\n * Zero memory contract for /api/zero/memory\n *\n * GET: Read the current user's memory artifact contents (latest version).\n */\nexport const zeroMemoryContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/memory\",\n headers: authHeadersSchema,\n responses: {\n 200: memoryDetailResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get the current user's memory artifact contents\",\n },\n recall: {\n method: \"GET\",\n path: \"/api/zero/memory/recall\",\n headers: authHeadersSchema,\n query: z.object({\n q: z.string().min(1).max(300),\n kind: memoryRecallItemKindSchema.optional(),\n limit: z.coerce.number().int().min(1).max(25).default(10),\n }),\n responses: {\n 200: memoryRecallResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Recall structured memories for the current user\",\n },\n search: {\n method: \"GET\",\n path: \"/api/zero/memory/search\",\n headers: authHeadersSchema,\n query: z.object({\n q: z.string().min(1).max(300),\n mode: memorySearchModeSchema.default(\"hybrid\"),\n provider: memorySourceProviderSchema.optional(),\n sourceType: memorySourceTypeSchema.optional(),\n contextSpaceType: memoryContextSpaceTypeSchema.optional(),\n contextSpaceKey: z.string().min(1).max(512).optional(),\n memoryKind: memoryKindSchema.optional(),\n occurredAfter: z.string().datetime().optional(),\n occurredBefore: z.string().datetime().optional(),\n limit: z.coerce.number().int().min(1).max(25).default(10),\n }),\n responses: {\n 200: memorySearchResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary:\n \"Search structured memories and document chunks for the current user\",\n },\n memories: {\n method: \"GET\",\n path: \"/api/zero/memory/memories\",\n headers: authHeadersSchema,\n query: z.object({\n status: memoryStatusSchema.default(\"active\"),\n kind: memoryKindSchema.optional(),\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: memoryListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List lifecycle-aware structured memories\",\n },\n createMemory: {\n method: \"POST\",\n path: \"/api/zero/memory/memories\",\n headers: authHeadersSchema,\n body: memoryCreateRequestSchema,\n responses: {\n 200: memoryLifecycleMemoryResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create a direct structured memory\",\n },\n updateMemory: {\n method: \"PATCH\",\n path: \"/api/zero/memory/memories/:memoryId\",\n pathParams: z.object({\n memoryId: z.string().uuid(),\n }),\n headers: authHeadersSchema,\n body: memoryUpdateRequestSchema,\n responses: {\n 200: memoryLifecycleMemoryResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update a structured memory and record a new version\",\n },\n forgetMemory: {\n method: \"POST\",\n path: \"/api/zero/memory/memories/:memoryId/forget\",\n pathParams: z.object({\n memoryId: z.string().uuid(),\n }),\n headers: authHeadersSchema,\n body: memoryForgetRequestSchema,\n responses: {\n 200: memoryForgetResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Forget a structured memory and record a tombstone\",\n },\n documents: {\n method: \"GET\",\n path: \"/api/zero/memory/documents\",\n headers: authHeadersSchema,\n query: z.object({\n status: memoryDocumentStatusSchema.default(\"active\"),\n provider: memorySourceProviderSchema.optional(),\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: memoryDocumentListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List indexed memory documents\",\n },\n forgetDocument: {\n method: \"POST\",\n path: \"/api/zero/memory/documents/:documentId/forget\",\n pathParams: z.object({\n documentId: z.string().uuid(),\n }),\n headers: authHeadersSchema,\n body: memoryForgetRequestSchema,\n responses: {\n 200: memoryForgetResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Forget a memory document and record a tombstone\",\n },\n forgetPrompt: {\n method: \"POST\",\n path: \"/api/zero/memory/forget\",\n headers: authHeadersSchema,\n body: memoryForgetByPromptRequestSchema,\n responses: {\n 200: memoryForgetResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Forget memories or documents matching a prompt\",\n },\n history: {\n method: \"GET\",\n path: \"/api/zero/memory/history\",\n headers: authHeadersSchema,\n query: z.object({\n targetKind: memoryVersionTargetKindSchema,\n targetId: z.string().uuid(),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: memoryHistoryResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List memory, document, or profile version history\",\n },\n forgotten: {\n method: \"GET\",\n path: \"/api/zero/memory/forgotten\",\n headers: authHeadersSchema,\n query: z.object({\n targetKind: memoryTombstoneTargetKindSchema.optional(),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: memoryTombstoneListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List forgotten memory tombstones\",\n },\n profiles: {\n method: \"GET\",\n path: \"/api/zero/memory/profiles\",\n headers: authHeadersSchema,\n query: z.object({\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: memoryProfileListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List derived memory profiles\",\n },\n context: {\n method: \"GET\",\n path: \"/api/zero/memory/context\",\n headers: authHeadersSchema,\n query: z.object({\n q: z.string().min(1).max(300).optional(),\n limit: z.coerce.number().int().min(1).max(30).default(12),\n }),\n responses: {\n 200: memoryContextResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get prompt-ready structured memory context for the current user\",\n },\n injectionPreview: {\n method: \"POST\",\n path: \"/api/zero/memory/injection-preview\",\n headers: authHeadersSchema,\n body: memoryInjectionPreviewRequestSchema,\n responses: {\n 200: memoryInjectionPreviewResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Preview relationship memory runtime system prompt injection\",\n },\n sources: {\n method: \"GET\",\n path: \"/api/zero/memory/sources\",\n headers: authHeadersSchema,\n query: z.object({\n provider: memorySourceProviderSchema.optional(),\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: memorySourceListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List structured memory sources for the current user\",\n },\n source: {\n method: \"GET\",\n path: \"/api/zero/memory/sources/:sourceId\",\n pathParams: z.object({\n sourceId: z.string().uuid(),\n }),\n headers: authHeadersSchema,\n responses: {\n 200: memorySourceDetailResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get structured memory source details for the current user\",\n },\n slackStatus: {\n method: \"GET\",\n path: \"/api/zero/memory/sources/slack/status\",\n headers: authHeadersSchema,\n responses: {\n 200: slackMemoryStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Read Slack memory source backfill status\",\n },\n slackBackfill: {\n method: \"POST\",\n path: \"/api/zero/memory/sources/slack/backfill\",\n headers: authHeadersSchema,\n body: slackMemoryBackfillRequestSchema,\n responses: {\n 200: slackMemoryStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Start or restart Slack memory source backfill\",\n },\n slackStopBackfill: {\n method: \"POST\",\n path: \"/api/zero/memory/sources/slack/backfill/stop\",\n headers: authHeadersSchema,\n responses: {\n 200: slackMemoryStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Stop the current Slack memory source backfill\",\n },\n githubStatus: {\n method: \"GET\",\n path: \"/api/zero/memory/sources/github/status\",\n headers: authHeadersSchema,\n responses: {\n 200: githubMemoryStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Read GitHub memory source configuration and backfill status\",\n },\n githubRepositories: {\n method: \"GET\",\n path: \"/api/zero/memory/sources/github/repositories\",\n headers: authHeadersSchema,\n query: z.object({\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: githubMemoryRepositoriesResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List GitHub repositories available for memory source sync\",\n },\n githubContributors: {\n method: \"GET\",\n path: \"/api/zero/memory/sources/github/contributors\",\n headers: authHeadersSchema,\n query: z.object({\n repository: z.string().min(1),\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(50),\n }),\n responses: {\n 200: githubMemoryContributorsResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List GitHub contributors for a repository memory allowlist\",\n },\n githubConfigure: {\n method: \"PUT\",\n path: \"/api/zero/memory/sources/github/config\",\n headers: authHeadersSchema,\n body: githubMemoryConfigureRequestSchema,\n responses: {\n 200: githubMemoryStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Configure selected GitHub repositories and trusted contributors\",\n },\n githubBackfill: {\n method: \"POST\",\n path: \"/api/zero/memory/sources/github/backfill\",\n headers: authHeadersSchema,\n body: githubMemoryBackfillRequestSchema,\n responses: {\n 200: githubMemoryStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Start or restart GitHub memory source backfill\",\n },\n githubStopBackfill: {\n method: \"POST\",\n path: \"/api/zero/memory/sources/github/backfill/stop\",\n headers: authHeadersSchema,\n responses: {\n 200: githubMemoryStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Stop the current GitHub memory source backfill\",\n },\n notionStatus: {\n method: \"GET\",\n path: \"/api/zero/memory/sources/notion/status\",\n headers: authHeadersSchema,\n responses: {\n 200: notionMemoryStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Read Notion memory source backfill status\",\n },\n notionBackfill: {\n method: \"POST\",\n path: \"/api/zero/memory/sources/notion/backfill\",\n headers: authHeadersSchema,\n body: notionMemoryBackfillRequestSchema,\n responses: {\n 200: notionMemoryStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Start or restart Notion workspace memory source backfill\",\n },\n notionStopBackfill: {\n method: \"POST\",\n path: \"/api/zero/memory/sources/notion/backfill/stop\",\n headers: authHeadersSchema,\n responses: {\n 200: notionMemoryStatusResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Stop the current Notion memory source backfill\",\n },\n});\n\nexport type ZeroMemoryContract = typeof zeroMemoryContract;\n","import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n runSystemLogContract,\n runMetricsContract,\n runAgentEventsContract,\n runNetworkLogsContract,\n logsSearchContract,\n type AgentEventsResponse,\n type LogsSearchResponse,\n type MetricsResponse,\n type NetworkLogsResponse,\n type SystemLogResponse,\n} from \"@vm0/api-contracts/contracts/runs\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n// Re-export types used by consumer commands (logs/index.ts, logs/search.ts)\nexport type {\n RunEvent,\n TelemetryMetric,\n NetworkLogEntry,\n LogsSearchResponse,\n} from \"@vm0/api-contracts/contracts/runs\";\n\ninterface LogPaginationOptions {\n readonly since?: number;\n readonly sinceTime?: number;\n readonly cursor?: string;\n readonly limit?: number;\n readonly order?: \"asc\" | \"desc\";\n}\n\nexport async function getSystemLog(\n runId: string,\n options?: LogPaginationOptions,\n): Promise<SystemLogResponse> {\n const config = await getClientConfig();\n const client = initClient(runSystemLogContract, config);\n\n const result = await client.getSystemLog({\n params: { id: runId },\n query: {\n since: options?.since,\n sinceTime: options?.sinceTime,\n cursor: options?.cursor,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch system log\");\n}\n\nexport async function getMetrics(\n runId: string,\n options?: LogPaginationOptions,\n): Promise<MetricsResponse> {\n const config = await getClientConfig();\n const client = initClient(runMetricsContract, config);\n\n const result = await client.getMetrics({\n params: { id: runId },\n query: {\n since: options?.since,\n sinceTime: options?.sinceTime,\n cursor: options?.cursor,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch metrics\");\n}\n\nexport async function getAgentEvents(\n runId: string,\n options?: LogPaginationOptions,\n): Promise<AgentEventsResponse> {\n const config = await getClientConfig();\n const client = initClient(runAgentEventsContract, config);\n\n const result = await client.getAgentEvents({\n params: { id: runId },\n query: {\n since: options?.since,\n sinceTime: options?.sinceTime,\n cursor: options?.cursor,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch agent events\");\n}\n\nexport async function getNetworkLogs(\n runId: string,\n options?: LogPaginationOptions,\n): Promise<NetworkLogsResponse> {\n const config = await getClientConfig();\n const client = initClient(runNetworkLogsContract, config);\n\n const result = await client.getNetworkLogs({\n params: { id: runId },\n query: {\n since: options?.since,\n sinceTime: options?.sinceTime,\n cursor: options?.cursor,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch network logs\");\n}\n\nexport async function searchLogs(options: {\n keyword: string;\n agentId?: string;\n runId?: string;\n since?: number;\n limit?: number;\n before?: number;\n after?: number;\n}): Promise<LogsSearchResponse> {\n const config = await getClientConfig();\n const client = initClient(logsSearchContract, config);\n\n const result = await client.searchLogs({\n query: {\n keyword: options.keyword,\n agentId: options.agentId,\n runId: options.runId,\n since: options.since,\n limit: options.limit,\n before: options.before,\n after: options.after,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to search logs\");\n}\n","import type {\n HostedSitePrepareRequest,\n HostedSitePrepareResponse,\n HostedSiteCompleteResponse,\n HostedSiteFilesResponse,\n} from \"@vm0/api-contracts/contracts/zero-host\";\nimport { ApiRequestError, getBaseUrl } from \"../core/client-factory\";\nimport { getActiveToken } from \"../config\";\nimport { headersWithCliClientHeaders } from \"../client-headers\";\n\nfunction authHeaders(\n token: string,\n options: { readonly json?: boolean } = {},\n): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n if (options.json) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return headers;\n}\n\nasync function parseErrorBody(\n response: Response,\n fallback: string,\n): Promise<{ message: string; code: string }> {\n let message = `${fallback} (HTTP ${response.status})`;\n let code = \"UNKNOWN\";\n try {\n const body = (await response.json()) as {\n error?: { message?: string; code?: string };\n };\n if (body.error?.message) message = body.error.message;\n if (body.error?.code) code = body.error.code;\n } catch {\n // keep fallback\n }\n return { message, code };\n}\n\nasync function getAuthContext(): Promise<{\n readonly baseUrl: string;\n readonly token: string;\n}> {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n return { baseUrl, token };\n}\n\nexport async function prepareHostedSite(\n body: HostedSitePrepareRequest,\n): Promise<HostedSitePrepareResponse> {\n const { baseUrl, token } = await getAuthContext();\n const response = await fetch(\n new URL(\"/api/zero/host/deployments/prepare\", baseUrl),\n {\n method: \"POST\",\n headers: headersWithCliClientHeaders(authHeaders(token, { json: true })),\n body: JSON.stringify(body),\n },\n );\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Failed to prepare hosted-site deployment\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n return (await response.json()) as HostedSitePrepareResponse;\n}\n\nexport async function completeHostedSite(\n deploymentId: string,\n): Promise<HostedSiteCompleteResponse> {\n const { baseUrl, token } = await getAuthContext();\n const response = await fetch(\n new URL(\n `/api/zero/host/deployments/${encodeURIComponent(deploymentId)}/complete`,\n baseUrl,\n ),\n {\n method: \"POST\",\n headers: headersWithCliClientHeaders(authHeaders(token, { json: true })),\n body: JSON.stringify({}),\n },\n );\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Failed to complete hosted-site deployment\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n return (await response.json()) as HostedSiteCompleteResponse;\n}\n\nexport async function getHostedSiteFiles(\n publicSlug: string,\n): Promise<HostedSiteFilesResponse> {\n const { baseUrl, token } = await getAuthContext();\n const response = await fetch(\n new URL(\n `/api/zero/host/sites/${encodeURIComponent(publicSlug)}/files`,\n baseUrl,\n ),\n {\n method: \"GET\",\n headers: headersWithCliClientHeaders(authHeaders(token)),\n },\n );\n if (!response.ok) {\n const { message, code } = await parseErrorBody(\n response,\n \"Failed to get hosted-site files\",\n );\n throw new ApiRequestError(message, code, response.status);\n }\n return (await response.json()) as HostedSiteFilesResponse;\n}\n"],"mappings":"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CX,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA,QAAQ,EAAE,MAAM,OAAO;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;;;AClDA;AAEA,IAAM,0BAA0B;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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A,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAA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","names":["c","c","c","c","c","c","c","c","c","c","c","c","segment","decoded","segment","suffixHasLtrLetter","endChar","segment","c","c","rejectBlankQueryNumber","cursor","order","c","c","c","c","c","c","c","c","c","c","c","c","c","c","firewallAwsSigv4AuthSchema","c","c","c","c","isRecord","authenticatedJsonHeaders","isRecord","parseErrorBody","c","c","c","volumeVersionsSnapshotSchema","artifactSnapshotsSchema","c","c","c","c","createWriteStream","Readable","pipeline","pipeline","Readable","createWriteStream","createWriteStream","Readable","pipeline","pipeline","Readable","createWriteStream","createWriteStream","Readable","pipeline","pipeline","Readable","createWriteStream","createWriteStream","Readable","pipeline","pipeline","Readable","createWriteStream","c","c","c","parseErrorBody"]}