/**
 * 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.<NAME>` 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 const INTEGRATIONS: Readonly<{
    SENTRY: "sentry";
    JIRA: "jira";
    GITHUB: "github";
    GITLAB: "gitlab";
    SLACK: "slack";
    LARK: "lark";
    OPENAI_BILLING: "openai_billing";
    ANTHROPIC_BILLING: "anthropic_billing";
    CURSOR_ADMIN: "cursor_admin";
    NOTION: "notion";
    GOOGLE: "google";
    PLANE: "plane";
    LINEAR: "linear";
    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 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;
    };
    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;
    };
    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;
    };
}>;
