/** * Integration registry — the closed set of OAuth/credentialed external * services a Zibby skill can declare a dependency on. * * Why this exists: * Skills hand-off authentication to the backend's resolveIntegrationToken() * (see packages/skills/src/jira.js, sentry.js, etc.). At deploy time we * want to know "does THIS workflow need Slack connected before it can * run?" without re-grepping handler source. Skills declare it explicitly * via `requiresIntegration: INTEGRATIONS.` and the backend * workflow-bundler derives `workflow.requiredIntegrations` from the * union of every node's skill list. Same pattern as npm peer-deps, * Helm `requires`, Terraform `required_providers`. * * Source of truth for IDs lives here (Object.freeze) — both backend * (`backend/src/services/skill-integrations.js`) and frontend (settings * UI) reference these string constants. Backend mirrors the skill→ * integration mapping locally because @zibby/skills is NOT bundled into * the Lambda layer (per CLAUDE.md: lambda-layer/nodejs/package.json must * stay under 262MB and only carries production runtime deps). */ export declare const INTEGRATIONS: Readonly<{ SENTRY: "sentry"; JIRA: "jira"; GITHUB: "github"; GITLAB: "gitlab"; SLACK: "slack"; LARK: "lark"; LARK_DOCS: "lark_docs"; OPENAI_BILLING: "openai_billing"; ANTHROPIC_BILLING: "anthropic_billing"; CURSOR_ADMIN: "cursor_admin"; NOTION: "notion"; GOOGLE: "google"; PLANE: "plane"; LINEAR: "linear"; VIKUNJA: "vikunja"; FIGMA: "figma"; HUBSPOT: "hubspot"; OPEN_DESIGN: "open_design"; LINKEDIN_PERSONAL: "linkedin_personal"; LINKEDIN_BUSINESS: "linkedin_business"; DISCORD: "discord"; }>; /** * Display metadata. Surface this to humans (modal copy, missing-list * rendering) — backend joins this with the user's connected list and * returns it from GET /workflows/{uuid}/integrations/status. * * `connectPath` points to the existing frontend Integrations page — * verified against frontend/src/App.js (route `/integrations`) and * frontend/src/pages/IntegrationsPage/IntegrationsPage.js (single page * handles all six providers). We pass the provider name as a query * param so the UI can highlight / scroll the relevant card; the page * gracefully ignores the param if not handled yet. NO per-provider * sub-routes exist (`/integrations/jira` etc. would 404 today). */ export declare const INTEGRATION_REGISTRY: Readonly<{ sentry: { id: string; name: string; connectPath: string; }; jira: { id: string; name: string; connectPath: string; }; github: { id: string; name: string; connectPath: string; }; gitlab: { id: string; name: string; connectPath: string; }; slack: { id: string; name: string; connectPath: string; }; lark: { id: string; name: string; connectPath: string; }; lark_docs: { id: string; name: string; connectPath: string; }; openai_billing: { id: string; name: string; connectPath: string; }; anthropic_billing: { id: string; name: string; connectPath: string; }; cursor_admin: { id: string; name: string; connectPath: string; }; notion: { id: string; name: string; connectPath: string; }; google: { id: string; name: string; connectPath: string; }; plane: { id: string; name: string; connectPath: string; }; linear: { id: string; name: string; connectPath: string; }; vikunja: { id: string; name: string; connectPath: string; }; figma: { id: string; name: string; connectPath: string; }; hubspot: { id: string; name: string; connectPath: string; }; open_design: { id: string; name: string; connectPath: string; }; linkedin_personal: { id: string; name: string; connectPath: string; }; linkedin_business: { id: string; name: string; connectPath: string; }; discord: { id: string; name: string; connectPath: string; }; }>;