@agent-native/core 0.123.1 → 0.123.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.
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +8 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/deploy/build.ts +8 -0
- package/corpus/core/src/server/builder-browser.ts +76 -0
- package/corpus/core/src/server/core-routes-plugin.ts +15 -5
- package/corpus/templates/assets/app/global.css +0 -4
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +195 -167
- package/corpus/templates/assets/changelog/2026-07-23-drafts-preview-panel-now-fills-the-full-width-with-a-large-p.md +6 -0
- package/corpus/templates/content/actions/_builder-cms-source-adapter.ts +1 -0
- package/corpus/templates/content/actions/_builder-cms-write-client.ts +55 -9
- package/corpus/templates/content/actions/_database-source-utils.ts +756 -182
- package/corpus/templates/content/actions/change-content-database-source-role.ts +21 -20
- package/corpus/templates/content/actions/execute-builder-source-execution.ts +49 -8
- package/corpus/templates/content/actions/materialize-builder-required-fields.ts +42 -9
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +88 -90
- package/corpus/templates/content/actions/preview-builder-source-review.ts +4 -3
- package/corpus/templates/content/actions/refresh-content-database-source.ts +36 -9
- package/corpus/templates/content/actions/set-content-database-source-write-mode.ts +28 -24
- package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +62 -12
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +91 -16
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +15 -1
- package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +234 -44
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +194 -16
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +95 -42
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +4 -2
- package/corpus/templates/content/app/components/editor/extensions/CodeBlockNode.tsx +10 -166
- package/corpus/templates/content/app/components/editor/extensions/VideoBlock.tsx +32 -8
- package/corpus/templates/content/app/components/editor/extensions/VideoNode.ts +14 -0
- package/corpus/templates/content/app/components/editor/registrySlashItems.ts +5 -1
- package/corpus/templates/content/app/hooks/use-content-database.ts +59 -2
- package/corpus/templates/content/app/hooks/use-documents.ts +18 -26
- package/corpus/templates/content/app/root.tsx +1 -6
- package/corpus/templates/content/changelog/2026-07-24-builder-can-now-publish-approved-updates-to-entries-that-are.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-collection-loading-no-longer-restarts-from-the-begin.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-connections-now-complete-securely-from-netlify-deplo.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-draft-creation-now-scopes-execution-to-the-selected-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-review-now-distinguishes-preparing-a-safe-dry-run-from.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-source-imports-now-recover-from-a-transient-paginati.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-source-refresh-now-preserves-the-provider-bound-fiel.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-update-reviews-now-open-reliably-on-large-collection.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-builder-write-policy-controls-now-reflect-successful-changes.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-date-properties-now-save-reliably-when-selected-with-the-nat.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-editor-slash-search-now-keeps-multi-word-block-names-open.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-exact-editor-slash-commands-now-execute-on-enter-even-if-the.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-new-collaborative-pages-now-save-their-first-edits.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-new-local-builder-rows-no-longer-remain-locked-behind-a-none.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-opening-or-closing-a-collaborative-document-no-longer-lets-u.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-selected-text-now-opens-the-link-editor-with-command-k-or-co.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-slash-menu-block-choices-no-longer-stall-pointer-interaction.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-uploaded-and-embedded-media-now-stay-intact-while-collaborative-document-drafts-save.md +6 -0
- package/corpus/templates/content/changelog/2026-07-24-video-link-insertion-now-keeps-its-source-panel-open-while-t.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-builder-publishing-now-shows-safe-validation-details-instead.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-builder-reviews-stay-responsive-on-large-collections-and-pre.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-collaborative-documents-no-longer-flash-duplicated-recent-bl.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-corrected-builder-updates-are-now-reviewed-separately-from-f.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-documents-now-remain-read-only-until-their-live-collaborativ.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-slash-command-menus-now-stay-reachable-when-editing-near-the.md +6 -0
- package/corpus/templates/content/changelog/2026-07-26-the-slash-menu-now-shows-one-clear-callout-choice-instead-of.md +6 -0
- package/corpus/templates/content/shared/api.ts +1 -0
- package/corpus/templates/content/shared/builder-mdx.ts +73 -16
- package/corpus/toolkit/CHANGELOG.md +6 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/editor/useCollabReconcile.ts +14 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.js +6 -0
- package/dist/deploy/build.js.map +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/server/builder-browser.d.ts +13 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +59 -0
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +10 -5
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/package.json +2 -2
- package/src/deploy/build.ts +8 -0
- package/src/server/builder-browser.ts +76 -0
- package/src/server/core-routes-plugin.ts +15 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-routes-plugin.js","sourceRoot":"","sources":["../../src/server/core-routes-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assertBodySize,\n defineEventHandler,\n setResponseStatus,\n setResponseHeader,\n getMethod,\n getHeader,\n getCookie,\n setCookie,\n deleteCookie,\n getRequestURL,\n getRequestIP,\n readRawBody,\n} from \"h3\";\nimport type { H3Event } from \"h3\";\nimport { readMultipartFormData } from \"h3\";\n\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport { registerBuiltinEngines } from \"../agent/engine/builtin.js\";\nimport {\n OPENAI_BASE_URL_ENV_VAR,\n PROVIDER_ENV_META,\n} from \"../agent/engine/provider-env-vars.js\";\nimport type { AgentEngineEntry } from \"../agent/engine/registry.js\";\nimport {\n isAgentEngineSettingConfigured,\n getAgentEngineEntry,\n detectEngineFromEnv,\n detectEngineFromUserSecrets,\n isStoredEngineUsableForRequest,\n normalizeModelForEngine,\n} from \"../agent/engine/registry.js\";\nimport {\n canUpdateAgentLoopSettings,\n readAgentLoopSettings,\n resetAgentLoopSettings,\n validateMaxIterationsInput,\n writeAgentLoopSettings,\n} from \"../agent/loop-settings.js\";\nimport {\n getState,\n putState,\n deleteState,\n listComposeDrafts,\n getComposeDraft,\n putComposeDraft,\n deleteComposeDraft,\n deleteAllComposeDrafts,\n} from \"../application-state/handlers.js\";\nimport { mountBrowserSessionRoutes } from \"../browser-sessions/routes.js\";\nimport { mountDbAdminRoutes } from \"../db-admin/routes.js\";\nimport { getDbExec } from \"../db/client.js\";\nimport {\n getDatabaseRuntimeFingerprint,\n getRuntimeDebugFingerprint,\n runDatabaseSchemaHealthCheck,\n type DatabaseSchemaHealthResult,\n} from \"../db/runtime-diagnostics.js\";\nimport { ssrfSafeFetch } from \"../extensions/url-safety.js\";\nimport {\n uploadFile,\n getActiveFileUploadProviderForRequest,\n listFileUploadProviders,\n} from \"../file-upload/index.js\";\nimport { handleMcpConnect } from \"../mcp/connect-route.js\";\nimport {\n handleMcpOAuth,\n handleMcpOAuthAuthorizationServerMetadata,\n handleMcpOAuthProtectedResourceMetadata,\n} from \"../mcp/oauth-route.js\";\nimport { MCP_ROUTE_PREFIXES } from \"../mcp/route-paths.js\";\nimport { registerBuiltinNotificationChannels } from \"../notifications/channels.js\";\nimport { createNotificationsHandler } from \"../notifications/routes.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { createProgressHandler } from \"../progress/routes.js\";\nimport { registerFrameworkSecrets } from \"../secrets/register-framework-secrets.js\";\nimport {\n createListSecretsHandler,\n createWriteSecretHandler,\n createTestSecretHandler,\n createAdHocSecretHandler,\n} from \"../secrets/routes.js\";\nimport { getSetting, putSetting, deleteSetting } from \"../settings/store.js\";\nimport {\n getUserSetting,\n putUserSetting,\n deleteUserSetting,\n} from \"../settings/user-settings.js\";\nimport {\n EMPTY_SPECULATION_RULES,\n resolveSsrCacheHeaders,\n} from \"../shared/cache-control.js\";\nimport { EMBED_TARGET_HEADER } from \"../shared/embed-auth.js\";\nimport { llmConnectionTrackingProperties } from \"../shared/llm-connection.js\";\nimport {\n EMBED_TRANSPLANT_HEADER,\n isMcpEmbedCorsOrigin,\n MCP_EMBED_CORS_ALLOW_HEADERS,\n shouldAllowMcpEmbedCredentials,\n} from \"../shared/mcp-embed-headers.js\";\nimport { captureException } from \"../tracking/error-capture.js\";\nimport { track } from \"../tracking/index.js\";\nimport { registerBuiltinProviders } from \"../tracking/providers.js\";\nimport { validateTrackPayload } from \"../tracking/route.js\";\nimport { createAutomationsHandler } from \"../triggers/routes.js\";\nimport { createAgentEngineApiKeyHandler } from \"./agent-engine-api-key-route.js\";\nimport { getConfiguredAppBasePath, stripAppBasePath } from \"./app-base-path.js\";\nimport { getAppName } from \"./app-name.js\";\nimport { getSession, type AuthSession } from \"./auth.js\";\nimport {\n BUILDER_CONNECT_PARAM,\n BUILDER_CONNECT_OWNER_COOKIE,\n BUILDER_ENV_KEYS,\n BUILDER_OPENER_PARAM,\n BUILDER_RELAY_FLOW_HEADER,\n BUILDER_RELAY_SIGNATURE_HEADER,\n BUILDER_RELAY_STATE_PARAM,\n BUILDER_RELAY_TIMESTAMP_HEADER,\n BUILDER_STATE_PARAM,\n appendBuilderConnectToken,\n builderConnectTrackingProperties,\n buildBuilderCliAuthUrl,\n createBuilderBrowserCallbackErrorPage,\n createBuilderBrowserCallbackPage,\n createBuilderRelayRequest,\n getBuilderConnectTrackingParams,\n getBuilderCliAuthCallbackOriginForEvent,\n getBuilderBrowserOriginForEvent,\n resolveBuilderCallbackReturnUrl,\n getBuilderBrowserStatusForEvent,\n resolveBuilderBranchProjectId,\n resolveSafePreviewUrl,\n runBuilderAgent,\n signBuilderCallbackState,\n signBuilderPreviewRelayState,\n verifyBuilderRelayRequest,\n verifyBuilderPreviewRelayStateForCallback,\n verifyBuilderConnectTokenAndGetOwner,\n verifyBuilderCallbackStateAndGetOwner,\n signBuilderConnectToken,\n type BuilderConnectTrackingParams,\n type BuilderRelayCredentials,\n type BuilderPreviewRelayState,\n} from \"./builder-browser.js\";\nimport { captureError, registerErrorCaptureProvider } from \"./capture-error.js\";\nimport {\n getAllowedCorsOrigin,\n readCorsAllowedOrigins,\n} from \"./cors-origins.js\";\nimport type { EnvKeyConfig } from \"./create-server.js\";\nimport {\n canUseDeployCredentialFallbackForRequest,\n readDeployCredentialEnv,\n resolveSecret,\n} from \"./credential-provider.js\";\nimport { createEmbedStartRouteHandler } from \"./embed-route.js\";\nimport {\n getH3App,\n awaitBootstrap,\n markDefaultPluginProvided,\n trackPluginInit,\n} from \"./framework-request-handler.js\";\nimport { createGatewayAccessCheckHandler } from \"./gateway-access-check.js\";\nimport { getAppBasePath, getOrigin } from \"./google-oauth.js\";\nimport { createGoogleRealtimeSessionHandler } from \"./google-realtime-session.js\";\nimport {\n readBody,\n DEFAULT_UPLOAD_MAX_FILE_BYTES,\n isAllowedUploadMimeType,\n} from \"./h3-helpers.js\";\nimport { isIdentitySsoEnabled } from \"./identity-sso-store.js\";\nimport { handleIdentitySso } from \"./identity-sso.js\";\nimport { createOpenRouteHandler } from \"./open-route.js\";\nimport { createPollEventsHandler } from \"./poll-events.js\";\nimport { createPollHandler } from \"./poll.js\";\nimport { createRealtimeTokenHandler } from \"./realtime-token.js\";\nimport { runWithRequestContext } from \"./request-context.js\";\nimport {\n findUnsupportedScopedKeyNames,\n saveKeyValuesToScopedSecrets,\n ScopedKeyStorageError,\n type ScopedKeySaveRequestScope,\n} from \"./scoped-key-storage.js\";\nimport { createTranscribeVoiceHandler } from \"./transcribe-voice.js\";\nimport { createVoiceProvidersStatusHandler } from \"./voice-providers-status.js\";\nimport { createWorkspaceProviderOAuthHandler } from \"./workspace-provider-oauth.js\";\n\n/**\n * The base path prefix for all framework-level routes.\n * All agent-native core routes live under this namespace to avoid\n * collisions with template-specific `/api/*` routes.\n */\nexport const FRAMEWORK_ROUTE_PREFIX = \"/_agent-native\";\nexport const FRAMEWORK_EVENTS_ROUTE = `${FRAMEWORK_ROUTE_PREFIX}/events`;\nexport const LEGACY_FRAMEWORK_EVENTS_ROUTE = `${FRAMEWORK_ROUTE_PREFIX}/poll-events`;\n\nexport function normalizeAgentEngineStatusModel(\n entry:\n | { name: string; defaultModel: string; supportedModels: readonly string[] }\n | undefined,\n model: string | null | undefined,\n): string {\n if (!entry) return model ?? DEFAULT_MODEL;\n return normalizeModelForEngine(entry, model ?? entry.defaultModel);\n}\n\ntype AgentEngineStatusEntry = {\n name: string;\n defaultModel: string;\n supportedModels: readonly string[];\n requiredEnvVars: readonly string[];\n};\n\nexport interface AgentEngineStatusResult {\n configured: boolean;\n engine?: string;\n model?: string;\n source?: \"settings\" | \"env\" | \"app_secrets\";\n envVar?: string;\n openAiBaseUrlConfigured?: boolean;\n}\n\nexport interface AgentEngineStatusDeps<\n E extends AgentEngineStatusEntry = AgentEngineStatusEntry,\n> {\n readStoredEngine: () => Promise<{ engine?: string; model?: string } | null>;\n readOpenAiBaseUrlConfigured: () => boolean | Promise<boolean>;\n isStoredEngineUsable: (\n stored: unknown,\n entry: E,\n ) => boolean | Promise<boolean>;\n detectFromUserSecrets: () => Promise<E | null>;\n detectFromEnv: () => E | null | Promise<E | null>;\n lookupEntry?: (engine: string) => E | undefined;\n}\n\n/**\n * Resolve \"does this request have a usable AI provider\" for one identity.\n *\n * Every call site pays for these lookups on a user-visible path (the agent\n * composer blocks on the status probe), so the two identity-independent reads\n * start together and the expensive `app_secrets` sweep only runs when the\n * cheaper sources have not already answered.\n */\nexport async function resolveAgentEngineStatus<\n E extends AgentEngineStatusEntry,\n>(deps: AgentEngineStatusDeps<E>): Promise<AgentEngineStatusResult> {\n const lookupEntry = (deps.lookupEntry ?? getAgentEngineEntry) as (\n engine: string,\n ) => E | undefined;\n const [stored, openAiBaseUrlConfigured] = await Promise.all([\n deps.readStoredEngine(),\n deps.readOpenAiBaseUrlConfigured(),\n ]);\n\n if (isAgentEngineSettingConfigured(stored)) {\n const engine = (stored as { engine: string }).engine;\n const entry = lookupEntry(engine);\n return {\n configured: true,\n engine,\n model: normalizeAgentEngineStatusModel(entry, stored?.model),\n source: \"settings\",\n openAiBaseUrlConfigured,\n };\n }\n\n const envEntry = process.env.AGENT_ENGINE\n ? lookupEntry(process.env.AGENT_ENGINE)\n : undefined;\n if (envEntry) {\n if (!(await deps.isStoredEngineUsable({ engine: envEntry.name }, envEntry)))\n return { configured: false, openAiBaseUrlConfigured };\n return {\n configured: true,\n engine: envEntry.name,\n model: envEntry.defaultModel ?? DEFAULT_MODEL,\n source: \"env\",\n envVar: \"AGENT_ENGINE\",\n openAiBaseUrlConfigured,\n };\n }\n\n // Stored provider selections win over an existing Builder connection, so\n // this is checked before the app_secrets sweep — and the sweep is skipped\n // entirely when it answers.\n if (stored && typeof stored.engine === \"string\") {\n const entry = lookupEntry(stored.engine);\n if (entry && (await deps.isStoredEngineUsable(stored, entry))) {\n return {\n configured: true,\n engine: stored.engine,\n model: normalizeAgentEngineStatusModel(entry, stored.model),\n source: \"env\",\n envVar: entry.requiredEnvVars[0],\n openAiBaseUrlConfigured,\n };\n }\n }\n\n // Per-user app_secrets — a user who connected Builder (or pasted their own\n // provider key) may not have any deploy-level env vars set.\n const detectedFromUser = await deps.detectFromUserSecrets();\n if (detectedFromUser) {\n return {\n configured: true,\n engine: detectedFromUser.name,\n model: detectedFromUser.defaultModel ?? DEFAULT_MODEL,\n source: \"app_secrets\",\n envVar: detectedFromUser.requiredEnvVars[0],\n openAiBaseUrlConfigured,\n };\n }\n\n const detected = await deps.detectFromEnv();\n if (detected) {\n return {\n configured: true,\n engine: detected.name,\n model: detected.defaultModel ?? DEFAULT_MODEL,\n source: \"env\",\n envVar: detected.requiredEnvVars[0],\n openAiBaseUrlConfigured,\n };\n }\n\n return { configured: false, openAiBaseUrlConfigured };\n}\n\nconst _agentEngineStatusInFlight = new Map<\n string,\n Promise<AgentEngineStatusResult>\n>();\n\n/**\n * Share one in-flight status resolution between concurrent probes of the same\n * identity. Several client surfaces probe this route on mount and the client\n * retries after its own timeout; without this each probe re-ran the whole\n * credential sweep. The entry is dropped as soon as the lookup settles, so a\n * joiner never sees an answer older than one lookup — no TTL, nothing to\n * invalidate when a provider is added or removed. The key carries the identity\n * that decides the answer, so no tenant can read another's result.\n */\nexport function shareAgentEngineStatusLookup(\n identityKey: string,\n compute: () => Promise<AgentEngineStatusResult>,\n): Promise<AgentEngineStatusResult> {\n const existing = _agentEngineStatusInFlight.get(identityKey);\n if (existing) return existing;\n const started = compute().finally(() => {\n _agentEngineStatusInFlight.delete(identityKey);\n });\n _agentEngineStatusInFlight.set(identityKey, started);\n return started;\n}\n\nexport function agentEngineStatusIdentityKey(\n userEmail: string | undefined,\n orgId: string | undefined,\n): string {\n return `${userEmail ?? \"\"}\\u0000${orgId ?? \"\"}`;\n}\n\nfunction requestAgentEngineStatusDeps(): AgentEngineStatusDeps<AgentEngineEntry> {\n return {\n readStoredEngine: async () =>\n (await getSetting(\"agent-engine\")) as {\n engine?: string;\n model?: string;\n } | null,\n readOpenAiBaseUrlConfigured: async () => {\n try {\n if (await resolveSecret(OPENAI_BASE_URL_ENV_VAR)) return true;\n } catch {\n /* fall through to deployment env when allowed */\n }\n return (\n canUseDeployCredentialFallbackForRequest(OPENAI_BASE_URL_ENV_VAR) &&\n !!readDeployCredentialEnv(OPENAI_BASE_URL_ENV_VAR)\n );\n },\n isStoredEngineUsable: isStoredEngineUsableForRequest,\n detectFromUserSecrets: detectEngineFromUserSecrets,\n detectFromEnv: detectEngineFromEnv,\n };\n}\n\n/**\n * Resolve the identity the status answer depends on. Both lookups memoize per\n * request inside their own helpers, so repeating them here stays cheap.\n */\nasync function resolveAgentEngineStatusIdentity(\n event: H3Event,\n): Promise<{ userEmail: string | undefined; orgId: string | undefined }> {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n if (!userEmail) return { userEmail: undefined, orgId: undefined };\n try {\n const orgCtx = await getOrgContext(event);\n return { userEmail, orgId: orgCtx.orgId ?? undefined };\n } catch {\n /* org module not present in this template */\n return { userEmail, orgId: undefined };\n }\n}\n\nexport function getFrameworkEnvKeys(): EnvKeyConfig[] {\n return [\n { key: \"ENABLE_BUILDER\", label: \"Enable Builder.io features\" },\n {\n key: \"AGENT_ENGINE_PREFER_BYO_KEY\",\n label:\n \"Prefer BYO LLM key over Builder gateway (default: false — gateway wins)\",\n },\n {\n key: \"RESEND_API_KEY\",\n label: \"Resend API key\",\n helpText:\n \"Enables transactional email, including password resets, invitations, share notifications, and dashboard reports.\",\n },\n {\n key: \"SENDGRID_API_KEY\",\n label: \"SendGrid API key\",\n helpText:\n \"Enables transactional email, including password resets, invitations, share notifications, and dashboard reports.\",\n },\n {\n key: \"EMAIL_FROM\",\n label: \"Email from address\",\n helpText:\n \"Sender address for transactional email. Required when using SendGrid.\",\n },\n ...Object.values(PROVIDER_ENV_META).map(({ envVar, label }) => ({\n key: envVar,\n label,\n })),\n ];\n}\n\n/** Result of the `/_agent-native/health` liveness + DB-warmup probe. */\nexport interface DbHealthProbeResult {\n /** The serverless function is live and served the request. */\n ok: true;\n /** Database + optional schema readiness for stricter production monitors. */\n ready: boolean;\n /** A trivial `SELECT 1` reached the database (false = no DB or unreachable). */\n db: boolean;\n /** Round-trip time of the probe in milliseconds. */\n ms: number;\n /** Redacted database routing details useful for deploy/runtime checks. */\n database: {\n configured: boolean;\n source: string;\n dialect: string;\n urlHash?: string;\n appName?: string;\n authTokenConfigured: boolean;\n netlifyDatabaseUrlConfigured: boolean;\n };\n /** Optional metadata-only schema compatibility check. */\n schema?: DatabaseSchemaHealthResult;\n}\n\n/**\n * Run a trivial `SELECT 1` to confirm the database is reachable and, as a side\n * effect, keep a scale-to-zero serverless database (e.g. Neon) warm. Touching\n * the DB on a schedule prevents the multi-second cold-start that otherwise\n * stalls the next real user request.\n *\n * Always resolves: an app with no database (or a momentarily unreachable one)\n * is still live, so the probe reports `db: false` rather than throwing. The\n * `exec` parameter is injectable purely for tests.\n */\nexport async function runDbHealthProbe(\n exec: () => { execute: (sql: string) => Promise<unknown> } = getDbExec,\n options: { schema?: boolean } = {},\n): Promise<DbHealthProbeResult> {\n const startedAt = Date.now();\n let db = false;\n let schema: DatabaseSchemaHealthResult | undefined;\n const dbExec = exec();\n try {\n await dbExec.execute(\"SELECT 1\");\n db = true;\n } catch {\n // Live even when the DB is unreachable or the app has no database.\n }\n if (db && options.schema) {\n schema = await runDatabaseSchemaHealthCheck({\n exec: dbExec as ReturnType<typeof getDbExec>,\n });\n }\n const database = getDatabaseRuntimeFingerprint();\n return {\n ok: true,\n ready: db && (!schema || schema.ok),\n db,\n ms: Date.now() - startedAt,\n database: {\n configured: database.configured,\n source: database.source,\n dialect: database.dialect,\n urlHash: database.urlHash,\n appName: database.appName,\n authTokenConfigured: database.authTokenConfigured,\n netlifyDatabaseUrlConfigured: database.netlifyDatabaseUrlConfigured,\n },\n ...(schema ? { schema } : {}),\n };\n}\nconst DEFAULT_BUILDER_WAITLIST_FORM_ID = \"DYTHuM0jlV\";\nconst DEFAULT_BUILDER_WAITLIST_FORMS_ORIGIN = \"https://forms.agent-native.com\";\nconst BUILDER_WAITLIST_FORM_SOURCE = \"connect_builder_card\";\nconst BUILDER_WAITLIST_DEFAULT_USE_CASE = \"builder_agent_background_coding\";\nconst BUILDER_WAITLIST_USE_CASES = new Set([\n BUILDER_WAITLIST_DEFAULT_USE_CASE,\n \"design_publish_app\",\n \"docs_build_online_waitlist\",\n \"docs_edit_online_waitlist\",\n]);\nconst BUILDER_WAITLIST_FORM_TIMEOUT_MS = 8000;\nconst BUILDER_WAITLIST_TEXT_LIMIT = 4000;\nconst BUILDER_WAITLIST_RATE_LIMIT_WINDOW_MS = 60_000;\nconst BUILDER_WAITLIST_RATE_LIMIT_MAX = 5;\nconst builderWaitlistRateLimitHits = new Map<\n string,\n { count: number; resetAt: number }\n>();\n\ninterface BuilderWaitlistFormTarget {\n formId: string;\n formsOrigin: string;\n}\n\nexport interface BuilderWaitlistBody {\n email?: unknown;\n prompt?: unknown;\n orgName?: unknown;\n appUrl?: unknown;\n pageUrl?: unknown;\n source?: unknown;\n template?: unknown;\n useCase?: unknown;\n}\n\nexport function resolveFrameworkSseRoutes(sseRoute?: string): string[] {\n return Array.from(\n new Set([\n sseRoute ?? FRAMEWORK_EVENTS_ROUTE,\n FRAMEWORK_EVENTS_ROUTE,\n LEGACY_FRAMEWORK_EVENTS_ROUTE,\n ]),\n );\n}\n\nexport const BUILDER_STATUS_ROUTE_SUFFIXES = [\n \"/builder/status\",\n \"/connection-status/builder\",\n] as const;\n\nexport function mountBuilderStatusRouteAliases<T>(\n mount: (path: string, handler: T) => void,\n prefix: string,\n handler: T,\n): void {\n for (const routeSuffix of BUILDER_STATUS_ROUTE_SUFFIXES) {\n mount(`${prefix}${routeSuffix}`, handler);\n }\n}\n\nregisterBuiltinEngines();\n\nfunction cleanBuilderWaitlistText(\n value: unknown,\n maxLength = BUILDER_WAITLIST_TEXT_LIMIT,\n): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n return trimmed.slice(0, maxLength);\n}\n\nfunction normalizeBuilderWaitlistUseCase(value: unknown): string {\n const useCase = cleanBuilderWaitlistText(value, 100);\n return useCase && BUILDER_WAITLIST_USE_CASES.has(useCase)\n ? useCase\n : BUILDER_WAITLIST_DEFAULT_USE_CASE;\n}\n\nfunction normalizeBuilderWaitlistTemplate(value: unknown): string | undefined {\n const template = cleanBuilderWaitlistText(value, 100);\n return template && /^[a-z0-9][a-z0-9-]{0,99}$/.test(template)\n ? template\n : undefined;\n}\n\nfunction isValidWaitlistEmail(email: string): boolean {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n}\n\nexport function isAnonymousWaitlistSessionEmail(email: string): boolean {\n return email.startsWith(\"anon-\") && email.endsWith(\"@agent-native.com\");\n}\n\nexport function resolveWaitlistEmail(\n sessionEmail: string | undefined,\n bodyEmail: unknown,\n): string | null {\n const provided = cleanBuilderWaitlistText(bodyEmail, 320);\n if (provided && isValidWaitlistEmail(provided)) return provided;\n if (sessionEmail && !isAnonymousWaitlistSessionEmail(sessionEmail)) {\n return sessionEmail;\n }\n return null;\n}\n\nfunction normalizeWaitlistRateLimitPart(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction getBuilderWaitlistClientIp(event: H3Event): string | undefined {\n const trusted =\n getHeader(event, \"x-nf-client-connection-ip\") ??\n getHeader(event, \"cf-connecting-ip\") ??\n getHeader(event, \"true-client-ip\") ??\n getHeader(event, \"x-real-ip\");\n if (trusted && trusted.trim()) return trusted.trim();\n\n const forwardedFor = getHeader(event, \"x-forwarded-for\");\n const forwardedClientIp = forwardedFor?.split(\",\")[0]?.trim();\n if (forwardedClientIp) return forwardedClientIp;\n\n try {\n return getRequestIP(event) ?? undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction getBuilderWaitlistRateLimitKeys(\n event: H3Event,\n email: string,\n): string[] {\n const clientIp = getBuilderWaitlistClientIp(event);\n return [\n `email:${normalizeWaitlistRateLimitPart(email)}`,\n `ip:${normalizeWaitlistRateLimitPart(clientIp ?? \"unknown\")}`,\n ];\n}\n\nexport function checkBuilderWaitlistRateLimit(\n event: H3Event,\n email: string,\n now = Date.now(),\n): { ok: true } | { ok: false; retryAfterSeconds: number } {\n const keys = getBuilderWaitlistRateLimitKeys(event, email);\n let retryAfterMs = 0;\n\n for (const key of keys) {\n const entry = builderWaitlistRateLimitHits.get(key);\n if (!entry) continue;\n if (entry.resetAt <= now) {\n builderWaitlistRateLimitHits.delete(key);\n continue;\n }\n if (entry.count >= BUILDER_WAITLIST_RATE_LIMIT_MAX) {\n retryAfterMs = Math.max(retryAfterMs, entry.resetAt - now);\n }\n }\n\n if (retryAfterMs > 0) {\n return {\n ok: false,\n retryAfterSeconds: Math.max(1, Math.ceil(retryAfterMs / 1000)),\n };\n }\n\n for (const key of keys) {\n const entry = builderWaitlistRateLimitHits.get(key);\n if (!entry || entry.resetAt <= now) {\n builderWaitlistRateLimitHits.set(key, {\n count: 1,\n resetAt: now + BUILDER_WAITLIST_RATE_LIMIT_WINDOW_MS,\n });\n } else {\n entry.count += 1;\n }\n }\n\n return { ok: true };\n}\n\nexport function resetBuilderWaitlistRateLimitForTests() {\n builderWaitlistRateLimitHits.clear();\n}\n\nfunction normalizeHttpOrigin(value: string): string | null {\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n return url.origin;\n } catch {\n return null;\n }\n}\n\nfunction isAgentNativeHostedRequest(event: H3Event): boolean {\n const hostname = getRequestURL(event).hostname.toLowerCase();\n return (\n hostname === \"agent-native.com\" || hostname.endsWith(\".agent-native.com\")\n );\n}\n\nexport function resolveBuilderWaitlistFormTargetForRequest(\n event: H3Event,\n): BuilderWaitlistFormTarget | null {\n if (process.env.AGENT_NATIVE_DISABLE_BUILDER_WAITLIST_FORM === \"1\") {\n return null;\n }\n\n const envFormId = process.env.AGENT_NATIVE_BUILDER_WAITLIST_FORM_ID?.trim();\n const envFormsOrigin =\n process.env.AGENT_NATIVE_BUILDER_WAITLIST_FORMS_ORIGIN?.trim();\n const hasExplicitTarget = Boolean(envFormId || envFormsOrigin);\n if (!hasExplicitTarget && !isAgentNativeHostedRequest(event)) {\n return null;\n }\n\n const formId = envFormId || DEFAULT_BUILDER_WAITLIST_FORM_ID;\n const formsOrigin = normalizeHttpOrigin(\n envFormsOrigin || DEFAULT_BUILDER_WAITLIST_FORMS_ORIGIN,\n );\n if (!formsOrigin) {\n throw new Error(\"Invalid Builder waitlist Forms origin\");\n }\n\n return { formId, formsOrigin };\n}\n\nexport function buildBuilderWaitlistFormPayload(\n event: H3Event,\n sessionEmail: string,\n body: BuilderWaitlistBody,\n) {\n const appUrl =\n cleanBuilderWaitlistText(body.pageUrl ?? body.appUrl, 2000) ??\n cleanBuilderWaitlistText(getHeader(event, \"referer\"), 2000) ??\n getOrigin(event);\n const source =\n cleanBuilderWaitlistText(body.source, 100) ?? BUILDER_WAITLIST_FORM_SOURCE;\n const template = normalizeBuilderWaitlistTemplate(body.template);\n const useCase = normalizeBuilderWaitlistUseCase(body.useCase);\n\n return {\n data: {\n email: sessionEmail,\n orgName: cleanBuilderWaitlistText(body.orgName, 500),\n appUrl,\n prompt: cleanBuilderWaitlistText(body.prompt),\n source,\n template,\n useCase,\n },\n _hp: \"\",\n _meta: {\n submitterEmail: sessionEmail,\n pageUrl: appUrl,\n source,\n template,\n useCase,\n },\n };\n}\n\nasync function submitBuilderWaitlistForm(\n event: H3Event,\n sessionEmail: string,\n body: BuilderWaitlistBody,\n): Promise<{ submitted: boolean; formId?: string }> {\n const target = resolveBuilderWaitlistFormTargetForRequest(event);\n if (!target) return { submitted: false };\n\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n BUILDER_WAITLIST_FORM_TIMEOUT_MS,\n );\n\n try {\n const res = await fetch(\n `${target.formsOrigin}/api/submit/${encodeURIComponent(target.formId)}`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(\n buildBuilderWaitlistFormPayload(event, sessionEmail, body),\n ),\n signal: controller.signal,\n },\n );\n if (!res.ok) {\n throw new Error(`Forms waitlist submission failed (${res.status})`);\n }\n return { submitted: true, formId: target.formId };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction parseBuilderCallbackBoolean(\n value: string | null | undefined,\n): boolean | null {\n if (value == null || value === \"\") return null;\n return /^(1|true)$/i.test(value);\n}\n\n// Raster-only data-URI allowlist for avatar writes. SVG is deliberately absent:\n// data:image/svg+xml payloads can carry inline <script> and event-handler\n// attributes that execute when the browser renders them as an <img> src or\n// inlines them in the DOM. Mirrors SAFE_DATA_IMAGE in sanitize-html.ts.\nexport const AVATAR_RASTER_MIME = /^data:image\\/(png|jpe?g|gif|webp);/i;\n\nexport function resolveAvatarEmailParam(\n pathname: string,\n appBasePath = \"\",\n): string {\n const base = appBasePath.replace(/\\/+$/, \"\");\n const avatarPaths = Array.from(\n new Set([`${base}/_agent-native/avatar/`, \"/_agent-native/avatar/\"]),\n );\n\n for (const avatarPath of avatarPaths) {\n const avatarIndex = pathname.indexOf(avatarPath);\n if (avatarIndex >= 0) {\n return pathname\n .slice(avatarIndex + avatarPath.length)\n .replace(/^\\/+/, \"\")\n .split(\"/\")[0];\n }\n }\n\n const firstSegment = pathname.replace(/^\\/+/, \"\").split(\"/\")[0] ?? \"\";\n if (!firstSegment || firstSegment === \"_agent-native\") return \"\";\n if (base && firstSegment === base.replace(/^\\/+/, \"\")) return \"\";\n return firstSegment;\n}\n\nasync function detectUsageEngineName(\n event: H3Event,\n userEmail: string | undefined,\n): Promise<string | null> {\n try {\n const orgId = userEmail\n ? (await resolveAgentEngineStatusIdentity(event)).orgId\n : undefined;\n const status = await runWithRequestContext({ userEmail, orgId }, () =>\n resolveAgentEngineStatus({\n ...requestAgentEngineStatusDeps(),\n // Tracking only needs the engine name; skip the base-URL secret read.\n readOpenAiBaseUrlConfigured: () => false,\n }),\n );\n return status.engine ?? null;\n } catch {\n return null;\n }\n}\n\nasync function trackBuilderLifecycle(\n event: H3Event,\n name: string,\n userEmail: string | undefined | null,\n properties: Record<string, unknown> = {},\n): Promise<void> {\n if (!userEmail) return;\n const engine = await detectUsageEngineName(event, userEmail);\n track(\n name,\n {\n feature: \"builder\",\n ...llmConnectionTrackingProperties({\n configured: Boolean(engine),\n engine,\n }),\n ...properties,\n },\n { userId: userEmail },\n );\n}\n\nfunction getBuilderConnectOwnerCookiePath(): string {\n return getAppBasePath() || \"/\";\n}\n\nfunction readBuilderConnectOwnerCookie(event: H3Event): string | null {\n return verifyBuilderConnectTokenAndGetOwner(\n getCookie(event, BUILDER_CONNECT_OWNER_COOKIE),\n );\n}\n\nfunction setBuilderConnectOwnerCookie(\n event: H3Event,\n ownerEmail: string,\n): void {\n setCookie(\n event,\n BUILDER_CONNECT_OWNER_COOKIE,\n signBuilderConnectToken(ownerEmail),\n {\n httpOnly: true,\n sameSite: \"lax\",\n secure: getOrigin(event).startsWith(\"https://\"),\n path: getBuilderConnectOwnerCookiePath(),\n maxAge: 10 * 60,\n },\n );\n}\n\nfunction clearBuilderConnectOwnerCookie(event: H3Event): void {\n deleteCookie(event, BUILDER_CONNECT_OWNER_COOKIE, {\n path: getBuilderConnectOwnerCookiePath(),\n });\n}\n\nfunction isAgentNativeAnonymousOwner(email: string | undefined): boolean {\n return /^anon-[^@]+@agent-native\\.com$/i.test(email ?? \"\");\n}\n\ntype BuilderAnonymousOwnerResolver = (\n event: H3Event,\n) => string | null | Promise<string | null>;\n\nexport type BuilderOwnerContext = {\n email: string | undefined;\n session: AuthSession | null;\n anonymous: boolean;\n};\n\nexport async function resolveBuilderOwnerContextForRequest(\n event: H3Event,\n options: {\n anonymousOwner?: BuilderAnonymousOwnerResolver;\n getSessionForEvent?: (event: H3Event) => Promise<AuthSession | null>;\n } = {},\n mode?: \"connect\" | \"callback\",\n): Promise<BuilderOwnerContext> {\n const searchParams = getRequestURL(event).searchParams;\n const signedOwner =\n mode === \"connect\"\n ? verifyBuilderConnectTokenAndGetOwner(\n searchParams.get(BUILDER_CONNECT_PARAM),\n )\n : mode === \"callback\"\n ? verifyBuilderCallbackStateAndGetOwner(\n searchParams.get(BUILDER_STATE_PARAM),\n )\n : null;\n const cookieOwner =\n mode === \"callback\" ? readBuilderConnectOwnerCookie(event) : null;\n const session = await (options.getSessionForEvent ?? getSession)(event).catch(\n () => null,\n );\n if (session?.email) {\n if (\n signedOwner &&\n (signedOwner === session.email ||\n (isAgentNativeAnonymousOwner(signedOwner) &&\n isAgentNativeAnonymousOwner(session.email)))\n ) {\n // Public docs/app surfaces can mint a new anonymous session inside the\n // popup when cookies do not round-trip. Keep the signed flow owner in\n // that anonymous-only case, but do not override a real user session.\n return {\n email: signedOwner,\n session: signedOwner === session.email ? session : null,\n anonymous: isAgentNativeAnonymousOwner(signedOwner),\n };\n }\n return { email: session.email, session, anonymous: false };\n }\n\n if (signedOwner) {\n return {\n email: signedOwner,\n session: null,\n anonymous: isAgentNativeAnonymousOwner(signedOwner),\n };\n }\n\n if (cookieOwner) {\n return { email: cookieOwner, session: null, anonymous: false };\n }\n\n const anonymousOwner = await options.anonymousOwner?.(event);\n if (anonymousOwner) {\n return { email: anonymousOwner, session: null, anonymous: true };\n }\n\n return { email: undefined, session: null, anonymous: false };\n}\n\n/**\n * Resolves the page-level legacy `/tools` → `/extensions` redirect target.\n *\n * Returns the absolute path (with optional query string) to redirect to,\n * or `null` if the request should fall through to the SPA / next handler.\n *\n * Skips:\n * - Framework API namespace (`/_agent-native/tools/*` is handled separately\n * as a legacy alias and intentionally stays mounted as `tools`).\n * - Anything that isn't `/tools` or a `/tools/...` page navigation, after\n * the configured app base path is stripped off.\n *\n * Exported for tests; the runtime middleware below is a thin wrapper.\n */\nexport function resolveLegacyToolsRedirect(\n rawPath: string,\n search: string,\n): string | null {\n if (rawPath === \"/_agent-native\" || rawPath.startsWith(\"/_agent-native/\")) {\n return null;\n }\n const pathname = stripAppBasePath(rawPath);\n if (pathname !== \"/tools\" && !pathname.startsWith(\"/tools/\")) return null;\n const suffix = pathname === \"/tools\" ? \"\" : pathname.slice(\"/tools\".length);\n const basePath = getConfiguredAppBasePath();\n return `${basePath}/extensions${suffix}${search}`;\n}\n\nexport function getFrameworkRouteRequestUrl(event: H3Event): URL {\n const url = getRequestURL(event);\n if (url.search) return url;\n\n // In some mounted Nitro/H3 paths, `event.url` is normalized while the raw\n // Node request URL still has the query string. Builder callbacks carry the\n // signed `_an_state` there, so preserve it before validating the flow.\n const rawUrl =\n event.node?.req?.url ??\n (typeof event.path === \"string\" ? event.path : undefined);\n const queryStart = rawUrl?.indexOf(\"?\") ?? -1;\n if (queryStart < 0) return url;\n url.search = rawUrl!.slice(queryStart);\n return url;\n}\n\nexport interface BuilderRelayPendingRecord {\n ownerEmail: string;\n orgId: string | null;\n role: string | null;\n targetOrigin: string;\n basePath: string;\n expiresAt: number;\n tracking?: BuilderConnectTrackingParams;\n}\n\nexport interface ConsumeBuilderRelayDependencies {\n getPending: (key: string) => Promise<Record<string, unknown> | null>;\n deletePending: (key: string) => Promise<boolean>;\n writeCredentials: (\n ownerEmail: string,\n credentials: BuilderRelayCredentials,\n scope: { orgId: string | null; role: string | null },\n ) => Promise<unknown>;\n}\n\nfunction builderRelayPendingKey(flowId: string): string {\n return `builder-pending-relay:${flowId}`;\n}\n\nfunction parseBuilderRelayPendingRecord(\n value: Record<string, unknown> | null,\n): BuilderRelayPendingRecord | null {\n if (\n !value ||\n typeof value.ownerEmail !== \"string\" ||\n typeof value.targetOrigin !== \"string\" ||\n typeof value.basePath !== \"string\" ||\n typeof value.expiresAt !== \"number\"\n ) {\n return null;\n }\n return {\n ownerEmail: value.ownerEmail,\n orgId: typeof value.orgId === \"string\" ? value.orgId : null,\n role: typeof value.role === \"string\" ? value.role : null,\n targetOrigin: value.targetOrigin,\n basePath: value.basePath,\n expiresAt: value.expiresAt,\n tracking:\n value.tracking && typeof value.tracking === \"object\"\n ? (value.tracking as BuilderConnectTrackingParams)\n : undefined,\n };\n}\n\n/**\n * Authenticated one-shot receiver for the second hop of Builder preview auth.\n * Owner and org scope always come from the preview's pending record; the\n * corporate callback cannot choose them in its POST body.\n */\nexport async function consumeBuilderRelayRequest(\n input: {\n rawBody: string;\n timestamp: string | null | undefined;\n flowId: string | null | undefined;\n signature: string | null | undefined;\n requestOrigin: string;\n requestBasePath: string;\n now?: number;\n },\n dependencies: ConsumeBuilderRelayDependencies,\n): Promise<{ ok: true } | { ok: false; status: number; error: string }> {\n if (input.rawBody.length > 64 * 1024) {\n return {\n ok: false,\n status: 413,\n error: \"Builder relay request is too large\",\n };\n }\n let verified: ReturnType<typeof verifyBuilderRelayRequest>;\n try {\n verified = verifyBuilderRelayRequest({\n body: input.rawBody,\n timestamp: input.timestamp,\n flowId: input.flowId,\n signature: input.signature,\n requestOrigin: input.requestOrigin,\n requestBasePath: input.requestBasePath,\n now: input.now,\n });\n } catch {\n return { ok: false, status: 503, error: \"Builder relay is not configured\" };\n }\n if (!verified) {\n return { ok: false, status: 401, error: \"Invalid Builder relay request\" };\n }\n const pendingKey = builderRelayPendingKey(verified.payload.flowId);\n const pending = parseBuilderRelayPendingRecord(\n await dependencies.getPending(pendingKey).catch(() => null),\n );\n const now = input.now ?? Date.now();\n if (\n !pending ||\n pending.expiresAt < now ||\n pending.ownerEmail !== verified.payload.ownerEmail ||\n pending.targetOrigin !== verified.payload.targetOrigin ||\n pending.basePath !== verified.payload.basePath\n ) {\n return { ok: false, status: 403, error: \"No active Builder relay flow\" };\n }\n\n // A successful delete, not merely a resolved promise, is the one-shot gate.\n // It happens before credential persistence so replay is impossible even if\n // the downstream write fails and the human has to start a fresh flow.\n const consumed = await dependencies\n .deletePending(pendingKey)\n .catch(() => false);\n if (consumed !== true) {\n return {\n ok: false,\n status: 409,\n error: \"Builder relay flow was already consumed\",\n };\n }\n\n await dependencies.writeCredentials(\n pending.ownerEmail,\n verified.body.credentials,\n { orgId: pending.orgId, role: pending.role },\n );\n return { ok: true };\n}\n\nexport async function readBuilderRelayRequestBody(\n event: H3Event,\n): Promise<string> {\n await assertBodySize(event, 64 * 1024);\n return (await readRawBody(event, \"utf8\")) ?? \"\";\n}\n\nfunction redactValues(text: string, values: Array<string | null | undefined>) {\n let out = text;\n for (const value of values) {\n if (value) out = out.split(value).join(\"[redacted]\");\n }\n return out;\n}\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nexport interface CoreRoutesPluginOptions {\n /** Route path for the SSE endpoint. Default: \"/_agent-native/events\" */\n sseRoute?: string;\n /** Disable the SSE endpoint entirely. */\n disableSSE?: boolean;\n /** Disable the /_agent-native/ping health check. */\n disablePing?: boolean;\n /** Disable the /_agent-native/health DB liveness + warmup probe. */\n disableHealth?: boolean;\n /** Disable the /_agent-native/application-state routes. */\n disableAppState?: boolean;\n /** Disable the /_agent-native/open deep-link route. */\n disableOpenRoute?: boolean;\n /** Disable the /_agent-native/embed/start iframe session launcher. */\n disableEmbedRoute?: boolean;\n /**\n * Disable the /mcp/connect routes (browser Connect page + CLI device-code\n * flow that mints per-user, revocable MCP tokens) and the standard remote-MCP\n * OAuth endpoints under /mcp/oauth. The legacy /_agent-native/mcp aliases\n * are disabled at the same time.\n * Enabled by default — the routes are session-gated where they approve user\n * access; token endpoints are protected by single-use codes / refresh\n * tokens.\n */\n disableMcpConnect?: boolean;\n /** Canonical app id (e.g. `mail`) for the MCP connect server name. */\n mcpConnectAppId?: string;\n /** Explicit MCP server id for copyable config/device-flow grants. */\n mcpConnectServerName?: string;\n /** Human app name shown on the MCP connect page. */\n mcpConnectAppName?: string;\n /** Per-template override mapping deep-link params → client SPA path.\n * See `createOpenRouteHandler`. */\n resolveOpenPath?: import(\"./open-route.js\").OpenRouteOptions[\"resolveOpenPath\"];\n /** Per-template allowlist for open-route targets that may redirect without\n * a browser session. See `createOpenRouteHandler`. */\n allowUnauthenticatedOpen?: import(\"./open-route.js\").OpenRouteOptions[\"allowUnauthenticatedOpen\"];\n /** Env key configuration. Enables env-status and env-vars routes. */\n envKeys?: EnvKeyConfig[];\n /**\n * Optional owner resolver for narrowly-scoped public routes. Used by public\n * pages that let anonymous viewers connect Builder credentials for their\n * own browser-scoped agent session.\n */\n anonymousOwner?: BuilderAnonymousOwnerResolver;\n}\n\ninterface LegacyCoreRouteInitSettings {\n persistedEnvVars: Record<string, string> | null;\n builderDisconnected: { at?: number } | null;\n}\n\ntype CoreRouteSettingReader = (\n key: string,\n) => Promise<Record<string, unknown> | null>;\n\nexport async function readLegacyCoreRouteInitSettings(\n readSetting: CoreRouteSettingReader = getSetting,\n): Promise<LegacyCoreRouteInitSettings> {\n const readOrNull = async (key: string) => {\n try {\n return await readSetting(key);\n } catch {\n return null;\n }\n };\n const [persistedEnvVars, builderDisconnected] = await Promise.all([\n readOrNull(\"persisted-env-vars\"),\n readOrNull(\"builder-disconnected\"),\n ]);\n return {\n persistedEnvVars: persistedEnvVars as Record<string, string> | null,\n builderDisconnected: builderDisconnected as { at?: number } | null,\n };\n}\n\n/**\n * Creates a Nitro plugin that mounts all standard agent-native framework routes.\n *\n * All routes are mounted under `/_agent-native/` to avoid collisions\n * with template-specific routes.\n *\n * Routes:\n * GET /_agent-native/poll — polling endpoint for change detection\n * GET /_agent-native/events (or custom) — SSE endpoint for real-time sync\n * GET /_agent-native/ping — health check\n * GET /_agent-native/health — DB liveness probe + scale-to-zero warmup\n * GET /_agent-native/env-status — env key configuration status (when envKeys provided)\n * POST /_agent-native/env-vars — compatibility route that saves keys to scoped DB secrets\n * GET /_agent-native/application-state/:key — read application state\n * PUT /_agent-native/application-state/:key — write application state\n * DELETE /_agent-native/application-state/:key — delete application state\n * GET /_agent-native/application-state/compose — list compose drafts\n * DELETE /_agent-native/application-state/compose — delete all compose drafts\n * GET /_agent-native/application-state/compose/:id — get compose draft\n * PUT /_agent-native/application-state/compose/:id — upsert compose draft\n * DELETE /_agent-native/application-state/compose/:id — delete compose draft\n */\nexport function createCoreRoutesPlugin(\n options: CoreRoutesPluginOptions = {},\n): NitroPluginDef {\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"core-routes\");\n // No-op when called from inside the bootstrap (auto-mount path).\n // Otherwise wait so other default plugins finish mounting first.\n let resolveInit: () => void = () => {};\n let rejectInit: (error: unknown) => void = () => {};\n const initPromise = new Promise<void>((resolve, reject) => {\n resolveInit = resolve;\n rejectInit = reject;\n });\n trackPluginInit(nitroApp, initPromise, {\n paths: [FRAMEWORK_ROUTE_PREFIX, \"/mcp\", \"/.well-known\"],\n });\n try {\n await awaitBootstrap(nitroApp);\n\n const { persistedEnvVars, builderDisconnected } =\n await readLegacyCoreRouteInitSettings();\n\n // Legacy cleanup: key saves now go to scoped app_secrets rows. Do not\n // rehydrate the old deployment-global `persisted-env-vars` row into\n // process.env; keep only the Builder scrub so stale leaked keys self-heal.\n try {\n if (persistedEnvVars) {\n const builderKeys = new Set<string>(BUILDER_ENV_KEYS);\n let scrubbed = 0;\n for (const k of Object.keys(persistedEnvVars)) {\n if (builderKeys.has(k)) {\n scrubbed++;\n }\n }\n if (scrubbed > 0) {\n try {\n const cleaned: Record<string, string> = {};\n for (const [k, v] of Object.entries(persistedEnvVars)) {\n if (!builderKeys.has(k)) cleaned[k] = v;\n }\n await putSetting(\"persisted-env-vars\", cleaned);\n console.warn(\n `[core] Removed ${scrubbed} legacy BUILDER_* key(s) from persisted-env-vars (cross-tenant leak fix).`,\n );\n } catch {\n // Couldn't rewrite the row — the skip-on-rehydrate above\n // is the load-bearing protection. We'll try again next boot.\n }\n }\n }\n } catch {\n // DB not ready yet — skip\n }\n\n // Honor Builder disconnect. Nitro's dev env-runner preserves\n // `process.env` across `.env` file reloads inside the same worker, so\n // deleting BUILDER_PRIVATE_KEY in the disconnect handler can bleed\n // back through an env-runner restart. We persist a\n // `builder-disconnected` flag in SQL and scrub BUILDER_* on every\n // plugin init while the flag is set. The flag is cleared by the\n // Builder cli-auth callback when the user re-connects.\n try {\n if (builderDisconnected) {\n for (const key of BUILDER_ENV_KEYS) {\n delete process.env[key];\n }\n }\n } catch {\n // DB not ready — skip; the disconnect flag will be enforced on the\n // next plugin boot once the settings table is reachable.\n }\n\n // Register framework-level secrets (OPENAI_API_KEY for composer voice\n // transcription, etc.). Each registration is guarded so templates that\n // already registered the same key win.\n registerFrameworkSecrets();\n registerBuiltinProviders();\n registerErrorCaptureProvider(\"agent-native-analytics\", (error, context) =>\n captureException(error, {\n ...context,\n handled: false,\n runtime: \"node\",\n source: \"server\",\n }),\n );\n registerBuiltinNotificationChannels();\n\n try {\n const { createObservabilityHandler } =\n await import(\"../observability/routes.js\");\n const { ensureObservabilityTables } =\n await import(\"../observability/store.js\");\n ensureObservabilityTables().catch(() => {});\n getH3App(nitroApp).use(\n `${FRAMEWORK_ROUTE_PREFIX}/observability`,\n createObservabilityHandler(),\n );\n } catch {\n // Observability module not available — skip\n }\n\n // Audit log — durable, append-only record of who mutated what app data,\n // when, and (for the agent) in which run. Capture is automatic at the\n // action seam; here we just ensure the table exists and start the\n // retention purge. Best-effort so a missing DB never crashes boot.\n try {\n const { ensureAuditTables } = await import(\"../audit/store.js\");\n const { startAuditCleanupJob } =\n await import(\"../audit/cleanup-job.js\");\n ensureAuditTables().catch(() => {});\n startAuditCleanupJob();\n } catch {\n // Audit module not available — skip\n }\n\n const P = FRAMEWORK_ROUTE_PREFIX;\n\n for (const provider of [\n \"figma\",\n \"google_drive\",\n \"github\",\n \"hubspot\",\n \"salesforce\",\n \"jira\",\n \"sentry\",\n \"notion\",\n ] as const) {\n getH3App(nitroApp).use(\n `${P}/connections/oauth/${provider}/start`,\n createWorkspaceProviderOAuthHandler(provider, \"start\"),\n );\n getH3App(nitroApp).use(\n `${P}/connections/oauth/${provider}/callback`,\n createWorkspaceProviderOAuthHandler(provider, \"callback\"),\n );\n }\n\n // Security response headers — emitted on every framework response.\n // Mounted before route handlers so 4xx/5xx error pages also carry the\n // headers. Routes that need to tighten a specific header override via\n // setResponseHeader.\n const { createSecurityHeadersMiddleware } =\n await import(\"./security-headers.js\");\n getH3App(nitroApp).use(createSecurityHeadersMiddleware());\n\n // CORS for framework routes. Desktop tray apps (Tauri/Electron) run on\n // their own dev origin (e.g. localhost:1420) and make credentialed\n // requests against the template's server at a different port. We echo\n // the exact origin + Allow-Credentials so same-site localhost ports\n // can cross-send cookies.\n const allowlist = readCorsAllowedOrigins();\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const pathname = stripAppBasePath(\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0],\n );\n if (!pathname.startsWith(P) && !pathname.startsWith(\"/api/\")) return;\n const readRequestHeader = (name: string): string | undefined => {\n const lower = name.toLowerCase();\n const raw =\n (event as any).node?.req?.headers?.[lower] ??\n (event as any).node?.req?.headers?.[name];\n if (Array.isArray(raw)) return raw[0];\n if (typeof raw === \"string\") return raw;\n return getHeader(event, name) ?? undefined;\n };\n const origin = readRequestHeader(\"origin\");\n const method = getMethod(event);\n const requestedHeaders = readRequestHeader(\n \"access-control-request-headers\",\n );\n const requestedHeaderNames = String(requestedHeaders ?? \"\")\n .toLowerCase()\n .split(\",\")\n .map((header) => header.trim());\n const mcpEmbedCorsRequest =\n isMcpEmbedCorsOrigin(origin) &&\n (requestedHeaderNames.includes(EMBED_TARGET_HEADER.toLowerCase()) ||\n requestedHeaderNames.includes(EMBED_TRANSPLANT_HEADER) ||\n Boolean(readRequestHeader(EMBED_TARGET_HEADER)) ||\n Boolean(readRequestHeader(EMBED_TRANSPLANT_HEADER)) ||\n Boolean(readRequestHeader(\"authorization\")));\n\n // Decide whether this origin is allowed. We never fall back to the\n // first allowlist entry — that previously echoed `Access-Control-\n // Allow-Origin: <unrelated-allowed-origin>` for disallowed callers,\n // which is permissive enough that some clients followed through.\n const allowedOrigin = mcpEmbedCorsRequest\n ? origin\n : getAllowedCorsOrigin(origin, {\n allowedOrigins: allowlist,\n allowAnyOriginWhenNoAllowlist: false,\n allowLocalhostWhenNoAllowlist: true,\n });\n\n // Reject preflights from disallowed cross-origin callers BEFORE\n // returning 204. Previously the OPTIONS short-circuit returned 204\n // with no ACAO header, which the browser then treats as a CORS\n // failure — but also short-circuited any further checks. Now we\n // explicitly 403 disallowed cross-origin preflights.\n if (method === \"OPTIONS\") {\n if (origin && !allowedOrigin) {\n setResponseStatus(event, 403);\n return \"\";\n }\n if (allowedOrigin) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Origin\",\n allowedOrigin,\n );\n setResponseHeader(event, \"Vary\", \"Origin\");\n if (shouldAllowMcpEmbedCredentials(allowedOrigin)) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Credentials\",\n \"true\",\n );\n }\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n MCP_EMBED_CORS_ALLOW_HEADERS,\n );\n }\n setResponseStatus(event, 204);\n return \"\";\n }\n\n // Non-preflight requests: only set CORS response headers when we\n // have an allowed origin. Same-origin / no-origin requests fall\n // through without explicit CORS headers (browser treats them as\n // same-origin by default).\n if (!allowedOrigin) return;\n setResponseHeader(\n event,\n \"Access-Control-Allow-Origin\",\n allowedOrigin,\n );\n setResponseHeader(event, \"Vary\", \"Origin\");\n if (shouldAllowMcpEmbedCredentials(allowedOrigin)) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Credentials\",\n \"true\",\n );\n }\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n MCP_EMBED_CORS_ALLOW_HEADERS,\n );\n }),\n );\n\n // Defense-in-depth CSRF check for state-changing /_agent-native/* routes\n // (see `csrf.ts` for the threat model and allowlist) is registered by\n // `getH3App()` itself (framework-request-handler.ts), synchronously, on\n // the very first call to `getH3App(nitroApp)` for this process — NOT\n // here. Registering it inside this plugin's own async init chain would\n // race against agent-chat-plugin's action-route registration (a\n // SEPARATE, independently-async-initialized Nitro plugin file in real\n // deployments): whichever plugin's `getH3App(nitroApp).use(...)` call\n // happened to resolve first would win the position in the middleware\n // array, and CSRF losing that race would let an action route match and\n // run before the CSRF check ever saw the request. Centralizing the\n // registration in `getH3App()`'s one-time bootstrap makes it the first\n // middleware any plugin's route can possibly land behind, regardless of\n // plugin init ordering.\n\n // Agent discovery primitive — shared by headless CLI/A2A surfaces and\n // UI shells that need to show connected peer apps without depending on\n // the chat route namespace.\n getH3App(nitroApp).use(\n `${P}/agents`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const query = getRequestURL(event).searchParams;\n const selfAppId = query.get(\"selfAppId\") ?? undefined;\n const { discoverAgents } = await import(\"./agent-discovery.js\");\n const agents = await discoverAgents(selfAppId);\n return { agents };\n }),\n );\n\n // Polling\n getH3App(nitroApp).use(`${P}/poll`, createPollHandler());\n\n // Realtime subscribe-token mint (hosted gateway path)\n getH3App(nitroApp).use(\n `${P}/realtime-token`,\n createRealtimeTokenHandler(),\n );\n // Sharee visibility check for the hosted gateway\n getH3App(nitroApp).use(`${P}/can-see`, createGatewayAccessCheckHandler());\n\n // SSE\n if (!options.disableSSE) {\n for (const route of resolveFrameworkSseRoutes(options.sseRoute)) {\n getH3App(nitroApp).use(route, createPollEventsHandler());\n }\n }\n\n // Ping\n if (!options.disablePing) {\n getH3App(nitroApp).use(\n `${P}/ping`,\n defineEventHandler(() => ({\n message: process.env.PING_MESSAGE ?? \"pong\",\n })),\n );\n }\n\n // ─── Durable sandbox execution processor ─────────────────────────\n // Self-fired by run-code's background queue (see\n // coding-tools/sandbox/background.ts): the enqueueing request POSTs here\n // so the code executes in a FRESH invocation with its own budget instead\n // of riding the ~40s agent-loop wall. Authenticity is verified via the\n // shared HMAC internal-token scheme (same as the A2A / integration /\n // agent-teams processors) plus the atomic SQL claim inside\n // processQueuedSandboxExecution, which prevents double execution.\n getH3App(nitroApp).use(\n `${P}/sandbox/_process-execution`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = (await readBody(event).catch(() => null)) as {\n executionId?: unknown;\n taskId?: unknown;\n } | null;\n const executionId =\n body && typeof body.executionId === \"string\" && body.executionId\n ? body.executionId\n : body && typeof body.taskId === \"string\"\n ? body.taskId\n : \"\";\n if (!executionId) {\n setResponseStatus(event, 400);\n return { error: \"executionId required\" };\n }\n\n const {\n hasConfiguredA2ASecret,\n isLoopbackAddress,\n isTrustedLocalRuntime,\n } = await import(\"../a2a/auth-policy.js\");\n if (hasConfiguredA2ASecret()) {\n const { verifyInternalToken, extractBearerToken } =\n await import(\"../integrations/internal-token.js\");\n const token = extractBearerToken(getHeader(event, \"authorization\"));\n if (!verifyInternalToken(executionId, token ?? \"\")) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired processor token\" };\n }\n } else {\n const loopback = isLoopbackAddress(\n getRequestIP(event, { xForwardedFor: false }),\n );\n if (!isTrustedLocalRuntime({ loopback })) {\n setResponseStatus(event, 503);\n return {\n error:\n \"Sandbox execution processor not configured — set A2A_SECRET on this deployment (or A2A_ALLOW_UNSIGNED_INTERNAL=1 for trusted local dev).\",\n };\n }\n }\n\n try {\n const { processQueuedSandboxExecution } =\n await import(\"../coding-tools/sandbox/background.js\");\n const result = await processQueuedSandboxExecution(executionId);\n return { ok: true, ...result };\n } catch (err) {\n console.error(\"[sandbox] _process-execution failed:\", err);\n setResponseStatus(event, 500);\n return { error: \"process-execution failed\" };\n }\n }),\n );\n\n // ─── Durable sandbox execution sweep ──────────────────────────────\n // Backstop for lost dispatches and dead executors: re-drives queued rows\n // whose enqueue-time dispatch never landed and reclaims/reaps running\n // rows whose lease expired. Cheap (one indexed query per 2-min window;\n // a missing table short-circuits to a no-op) and best-effort — the\n // poll-time drain in run-code covers deployments where warm-instance\n // timers rarely fire.\n (() => {\n let lastSweep = 0;\n const SWEEP_INTERVAL_MS = 2 * 60 * 1000;\n\n setTimeout(() => {\n setInterval(() => {\n const now = Date.now();\n if (now - lastSweep < SWEEP_INTERVAL_MS) return;\n lastSweep = now;\n\n (async () => {\n const { drainDueSandboxExecutions } =\n await import(\"../coding-tools/sandbox/background.js\");\n await drainDueSandboxExecutions({ limit: 5 });\n })().catch(() => {\n // best-effort — never break the server\n });\n }, 30_000); // Check every 30s but only sweep once per 2min\n }, 25_000); // Start 25s after init (after the agent sweeps)\n })();\n\n // Health + DB warmup — liveness probe that touches the database so\n // uptime monitors and the keep-warm cron prevent a scale-to-zero\n // serverless DB (e.g. Neon) from cold-starting on the next real\n // request. Public, side-effect free, and never cached. Add ?schema=1\n // for metadata-only schema checks, and ?strict=1 to turn a not-ready\n // DB/schema probe into a failing HTTP status for monitors.\n if (!options.disableHealth) {\n getH3App(nitroApp).use(\n `${P}/health`,\n defineEventHandler(async (event) => {\n setResponseHeader(event, \"cache-control\", \"no-store\");\n const schema =\n event.url?.searchParams.get(\"schema\") === \"1\" ||\n event.url?.searchParams.get(\"schema\") === \"true\";\n const strict =\n event.url?.searchParams.get(\"strict\") === \"1\" ||\n event.url?.searchParams.get(\"strict\") === \"true\" ||\n process.env.AGENT_NATIVE_HEALTH_STRICT_SCHEMA === \"true\";\n const result = await runDbHealthProbe(getDbExec, { schema });\n if (strict && !result.ready) setResponseStatus(event, 503);\n return result;\n }),\n );\n }\n\n getH3App(nitroApp).use(\n `${P}/debug/runtime`,\n defineEventHandler(async (event) => {\n setResponseHeader(event, \"cache-control\", \"no-store\");\n const session = await getSession(event).catch(() => null);\n const productionLike =\n process.env.NODE_ENV === \"production\" ||\n process.env.NETLIFY === \"true\" ||\n process.env.VERCEL === \"1\";\n if (!session?.email && productionLike) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const schema = await runDatabaseSchemaHealthCheck().catch((err) => ({\n ok: false,\n checked: false,\n dialect: getDatabaseRuntimeFingerprint().dialect,\n missingTables: [],\n missingColumns: [],\n error: err instanceof Error ? err.message : String(err),\n }));\n return {\n ok: true,\n runtime: getRuntimeDebugFingerprint(),\n schema,\n };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/speculation-rules.json`,\n defineEventHandler((event) => {\n // `createH3SSRHandler` points the Speculation-Rules response header\n // here to prevent Cloudflare Speed Brain from injecting its own\n // edge prefetch rules. Keep this route public and side-effect free:\n // browsers may request it while parsing any SSR HTML document.\n setResponseHeader(\n event,\n \"content-type\",\n \"application/speculationrules+json; charset=utf-8\",\n );\n for (const [name, value] of Object.entries(\n resolveSsrCacheHeaders(),\n )) {\n setResponseHeader(event, name, value);\n }\n return EMPTY_SPECULATION_RULES;\n }),\n );\n\n {\n const { createAgentNativeOgImageHandler } =\n await import(\"./social-og-image.js\");\n getH3App(nitroApp).use(\n `${P}/og-image.png`,\n createAgentNativeOgImageHandler(),\n );\n }\n\n // Signed, content-only recap PNG images. POST (authenticated with the\n // same `agent-native connect` bearer token the action surface accepts)\n // stores a PNG and returns a public image URL; GET <token>.png serves\n // the opaque bytes anonymously so GitHub's camo proxy can inline a recap\n // screenshot into a private-repo PR comment. Mounted as a prefix so it\n // owns both `/_agent-native/recap-image` (POST) and\n // `/_agent-native/recap-image/<token>.png` (GET).\n {\n const { createRecapImageHandler } =\n await import(\"./recap-image-route.js\");\n getH3App(nitroApp).use(`${P}/recap-image`, createRecapImageHandler());\n }\n\n mountBrowserSessionRoutes(nitroApp, { routePrefix: P });\n\n // Dev-mode DB admin (Supabase-Studio-like). Mounted unconditionally; every\n // handler self-gates on dev + localhost (the authoritative gate lives in\n // db-admin/routes.ts), so on a deployed / production app it always 403s.\n mountDbAdminRoutes(nitroApp, { routePrefix: P });\n\n const resolveBuilderOwnerContext = async (\n event: H3Event,\n mode?: \"connect\" | \"callback\",\n ): Promise<BuilderOwnerContext> =>\n resolveBuilderOwnerContextForRequest(\n event,\n { anonymousOwner: options.anonymousOwner },\n mode,\n );\n\n const builderStatusHandler = defineEventHandler(async (event) => {\n const envStatus = getBuilderBrowserStatusForEvent(event);\n const ownerContext = await resolveBuilderOwnerContext(event);\n const userEmail = ownerContext.email;\n const withConnectToken = <T extends { connectUrl: string }>(\n status: T,\n ): T & { cliAuthUrl?: string } => {\n if (!userEmail) return status;\n const previewOrigin = getBuilderBrowserOriginForEvent(event);\n const callbackOrigin = getBuilderCliAuthCallbackOriginForEvent(event);\n const statusWithConnectToken = {\n ...status,\n connectUrl: appendBuilderConnectToken(status.connectUrl, userEmail),\n } as T & { cliAuthUrl?: string };\n // Direct cli-auth only works when the callback lands on the same\n // deployment that minted the signed state. Builder/Fusion previews\n // often need a gateway callback origin; in that case use the\n // /builder/connect trampoline so it can write the pending-connect\n // row that the gateway callback validates against.\n if (\n previewOrigin.replace(/\\/+$/, \"\") !==\n callbackOrigin.replace(/\\/+$/, \"\")\n ) {\n return statusWithConnectToken;\n }\n const cliAuthUrl = buildBuilderCliAuthUrl(\n callbackOrigin,\n signBuilderCallbackState(userEmail),\n { previewOrigin },\n );\n return {\n ...statusWithConnectToken,\n cliAuthUrl,\n };\n };\n\n // Pass the user's active orgId so status reads can fall back to\n // org-scoped credentials and branch project IDs. Without it, an\n // admin's org-scope OAuth result is invisible to every other org\n // member's status poller and the UI would show \"not connected\" forever\n // even though the chat actually resolves the org-shared credential.\n let orgId: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n }\n\n return runWithRequestContext(\n { userEmail, orgId: orgId ?? undefined },\n async () => {\n const projectId = await resolveBuilderBranchProjectId();\n const requestStatus = {\n ...envStatus,\n builderEnabled: !!projectId,\n branchProjectIdConfigured: !!projectId,\n branchProjectId: projectId || undefined,\n };\n\n // Surface a recent OAuth callback failure before reporting a\n // deployment fallback as \"connected\"; otherwise a failed personal\n // connect attempt on a deploy that also has BUILDER_PRIVATE_KEY set\n // looks successful even though the user's credentials were not saved.\n try {\n if (userEmail) {\n const errKey = `builder-connect-error:${userEmail}`;\n const errRow = await getSetting(errKey);\n if (errRow && typeof errRow.message === \"string\") {\n await deleteSetting(errKey).catch(() => {});\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n connectError: {\n message: errRow.message as string,\n at:\n typeof errRow.at === \"number\"\n ? (errRow.at as number)\n : Date.now(),\n },\n });\n }\n }\n } catch {\n // settings store unavailable — fall through\n }\n\n // Read request-scoped Builder credentials first; deploy env is only\n // the fallback. This keeps a root/local BUILDER_PRIVATE_KEY from\n // blocking a user from connecting their own Builder account.\n try {\n const {\n resolveBuilderCredentials,\n resolveBuilderCredentialSource,\n getBuilderCredentialAuthFailure,\n } = await import(\"./credential-provider.js\");\n const [creds, credentialSource] = await Promise.all([\n resolveBuilderCredentials(),\n resolveBuilderCredentialSource(),\n ]);\n const authFailure = await getBuilderCredentialAuthFailure(creds);\n if (authFailure) {\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n credentialSource: credentialSource ?? undefined,\n // Surface durable credential rejection separately from\n // one-shot cli-auth callback failures. The reconnect UI keeps\n // polling through authError while the user chooses a new\n // Builder space; connectError means the active callback itself\n // failed and should stop the flow.\n authError: {\n message: authFailure.message,\n at: authFailure.at,\n },\n });\n }\n if (creds.privateKey && creds.publicKey) {\n // Best-effort: surface the real space name(s) from Builder's\n // Admin API. Stay NON-BLOCKING — return whatever is cached now\n // and refresh in the background for the next poll. Falls back\n // to orgName until the cache warms.\n let spaces: Array<{ id: string; name: string }> | undefined;\n try {\n const { getCachedBuilderSpaces, listBuilderSpaces } =\n await import(\"./builder-space.js\");\n const privateKey = creds.privateKey;\n const cachedSpaces = getCachedBuilderSpaces(privateKey);\n if (cachedSpaces && cachedSpaces.length > 0) {\n spaces = cachedSpaces;\n }\n if (!cachedSpaces) {\n // Warm the cache without blocking this response.\n void listBuilderSpaces(privateKey).catch(() => {});\n }\n } catch {\n // Admin API helper unavailable — leave spaces undefined.\n }\n return withConnectToken({\n ...requestStatus,\n configured: true,\n privateKeyConfigured: true,\n publicKeyConfigured: !!creds.publicKey,\n userId: creds.userId || envStatus.userId,\n orgName: creds.orgName || envStatus.orgName,\n spaces,\n orgKind: creds.orgKind || envStatus.orgKind,\n subscription:\n creds.subscription || envStatus.subscription || undefined,\n subscriptionLevel:\n creds.subscriptionLevel ||\n envStatus.subscriptionLevel ||\n undefined,\n subscriptionName:\n creds.subscriptionName ||\n envStatus.subscriptionName ||\n undefined,\n isEnterprise:\n creds.isEnterprise ?? envStatus.isEnterprise ?? undefined,\n isFreeAccount:\n creds.isFreeAccount ?? envStatus.isFreeAccount ?? undefined,\n credentialSource: credentialSource ?? undefined,\n });\n }\n } catch {\n // Secrets table not ready — fall through to env status\n }\n\n // Honor legacy disconnect flag for existing deployments.\n try {\n const disconnected = await getSetting(\"builder-disconnected\");\n if (disconnected) {\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n });\n }\n } catch {\n // DB not reachable\n }\n // No env, no per-user creds → not configured. Both authenticated\n // and unauthenticated callers see \"not connected\" so they can\n // run through the OAuth flow.\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n });\n },\n );\n });\n mountBuilderStatusRouteAliases(\n (path, handler) => getH3App(nitroApp).use(path, handler),\n P,\n builderStatusHandler,\n );\n\n // How long a pending-connect row is valid. Must be long enough for\n // the user to complete the Builder CLI-auth flow, but short enough\n // that a stale row from an abandoned attempt doesn't accept a new\n // callback minutes later.\n const BUILDER_CONNECT_PENDING_TTL_MS = 10 * 60 * 1000; // 10 min\n\n // Decide whether a /builder/connect navigation originated from this\n // app's own UI (allowed) or from a foreign origin (cross-site CSRF\n // attempt — rejected). Sec-Fetch-Site is the modern signal:\n // - \"same-origin\": user clicked Connect from our own pages — allow\n // - \"none\": typed in URL bar / bookmark / browser extension — allow\n // - \"same-site\" / \"cross-site\" / missing-but-with-foreign-Origin\n // all map to reject.\n // For older browsers without Sec-Fetch-* we fall back to Origin and\n // then Referer, comparing against the request's resolved origin.\n function isSameOriginConnect(event: H3Event): boolean {\n const fetchSite = getHeader(event, \"sec-fetch-site\");\n if (fetchSite === \"same-origin\" || fetchSite === \"none\") return true;\n if (fetchSite) return false; // browser told us it's cross-site/same-site\n const expected = getBuilderBrowserOriginForEvent(event).replace(\n /\\/+$/,\n \"\",\n );\n const origin = getHeader(event, \"origin\");\n if (origin) return origin.replace(/\\/+$/, \"\") === expected;\n const referer = getHeader(event, \"referer\");\n if (referer) {\n try {\n return new URL(referer).origin === expected;\n } catch {\n return false;\n }\n }\n // No Sec-Fetch-Site, no Origin, no Referer — pre-2020 browser\n // making a top-level navigation. Allow; cookies are still\n // session-bound so the worst case degrades to the prior behavior.\n return true;\n }\n\n // Lightweight 302 to the Builder CLI-auth URL. Lets clients do\n // `window.open('/_agent-native/builder/connect', '_blank')` synchronously\n // inside a click handler, avoiding the popup-blocker downgrade that\n // happens when an await sits before window.open.\n //\n // CSRF protection here is layered because session cookies are\n // SameSite=None;Secure (so the editor iframe can ride along) — that\n // means a session cookie alone does NOT prevent cross-origin\n // window.open from initiating a connect flow on the victim's behalf:\n // 1. Signed connect token from /builder/status — proves the opener\n // could read same-origin JSON, which cross-site attackers cannot.\n // This covers local/embedded browsers that conservatively label a\n // legitimate popup navigation as same-site/cross-site.\n // 2. Sec-Fetch-Site header fallback — modern browsers stamp every\n // request with the navigation context. We allow `same-origin` or\n // `none` (typed/bookmark/extension); cross-site / same-site without\n // a valid connect token are rejected.\n // 3. Pending row keyed by session email + bound nonce — the callback\n // requires both a valid session and a one-time row that this\n // handler wrote during the same flow. Without the same-origin\n // gate or connect token above, an attacker could prime the row from\n // cross-site and then trick the victim into hitting a callback URL\n // with attacker-controlled p-key/api-key, hijacking the victim's\n // account.\n getH3App(nitroApp).use(\n `${P}/builder/connect`,\n defineEventHandler(async (event) => {\n const ownerContext = await resolveBuilderOwnerContext(\n event,\n \"connect\",\n );\n const ownerEmail = ownerContext.email;\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n const requestUrl = getFrameworkRouteRequestUrl(event);\n const connectToken = requestUrl.searchParams.get(\n BUILDER_CONNECT_PARAM,\n );\n const connectTokenOwner =\n verifyBuilderConnectTokenAndGetOwner(connectToken);\n const connectTracking = getBuilderConnectTrackingParams(\n requestUrl.searchParams,\n );\n // The token must both be well-formed AND minted for the current\n // session owner. Without the owner check, an attacker holding any\n // valid signed token could trick a victim into hitting this route\n // with that token to bypass the cross-origin gate.\n const hasValidConnectToken =\n Boolean(connectTokenOwner) && connectTokenOwner === ownerEmail;\n\n // Same-origin gate. Sec-Fetch-Site remains the fast path; the signed\n // connect token is the compatibility path for legitimate embedded or\n // local desktop popups stamped as same-site/cross-site by the browser.\n if (!isSameOriginConnect(event) && !hasValidConnectToken) {\n const crossOriginMessage = connectToken\n ? \"This Builder connect link is expired or belongs to a different deployment. Close this popup and click Connect account again.\"\n : \"Builder connect opened without a fresh signed link. Close this popup and click Connect account again.\";\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"cross_origin\",\n stage: \"connect\",\n has_connect_token: Boolean(connectToken),\n has_valid_connect_token: false,\n connect_token_owner_matches_context: false,\n sec_fetch_site: getHeader(event, \"sec-fetch-site\") ?? null,\n },\n );\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: crossOriginMessage,\n at: Date.now(),\n }).catch(() => {});\n console.warn(\"[builder-connect] rejected cross-origin connect\", {\n hasConnectToken: Boolean(connectToken),\n secFetchSite: getHeader(event, \"sec-fetch-site\") ?? null,\n origin: getHeader(event, \"origin\") ?? null,\n referer: getHeader(event, \"referer\") ?? null,\n });\n setResponseStatus(event, 403);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(crossOriginMessage, {\n title: \"Couldn't start Builder connection\",\n body: \"The connect popup did not include a valid signed link for this app.\",\n closeHint:\n \"Close this popup, refresh the app, and try Connect account again.\",\n parentOrigin: getBuilderBrowserOriginForEvent(event),\n });\n }\n\n // Clear any prior failure row from a previous attempt — otherwise\n // useBuilderStatus polling sees the stale error and aborts the\n // new attempt before it can complete.\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewOrigin = getBuilderBrowserOriginForEvent(event).replace(\n /\\/+$/,\n \"\",\n );\n const callbackOrigin = getBuilderCliAuthCallbackOriginForEvent(\n event,\n ).replace(/\\/+$/, \"\");\n let relay:\n | { state: string; payload: BuilderPreviewRelayState }\n | undefined;\n if (previewOrigin !== callbackOrigin) {\n try {\n relay = signBuilderPreviewRelayState({\n ownerEmail,\n targetOrigin: previewOrigin,\n basePath: getAppBasePath(),\n });\n } catch (err) {\n const msg =\n err instanceof Error\n ? err.message\n : \"Builder preview relay is not configured.\";\n setResponseStatus(event, 503);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n title: \"Builder preview connection isn't configured\",\n body: \"This preview needs its secure Builder callback relay configured before authorization can start.\",\n closeHint:\n \"Close this popup and ask the preview owner to finish Builder relay setup.\",\n parentOrigin: previewOrigin,\n });\n }\n }\n\n let pendingOrgId: string | null = null;\n let pendingRole: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const orgContext = await getOrgContext(event);\n pendingOrgId = orgContext.orgId ?? null;\n pendingRole = orgContext.role ?? null;\n } catch {\n // The pending owner remains user-scoped when org context is absent.\n }\n }\n\n // Store a short-lived pending row. If the DB is unavailable we\n // surface a popup-renderable error page that signals the parent\n // via BroadcastChannel, rather than letting the popup show raw\n // JSON and the parent poll for 5 minutes.\n try {\n if (relay) {\n await putSetting(builderRelayPendingKey(relay.payload.flowId), {\n ownerEmail,\n orgId: pendingOrgId,\n role: pendingRole,\n targetOrigin: relay.payload.targetOrigin,\n basePath: relay.payload.basePath,\n expiresAt: relay.payload.exp,\n tracking: connectTracking,\n });\n } else {\n await putSetting(`builder-pending-connect:${ownerEmail}`, {\n expiresAt: Date.now() + BUILDER_CONNECT_PENDING_TTL_MS,\n tracking: connectTracking,\n });\n }\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"pending_storage_unavailable\",\n stage: \"connect\",\n },\n );\n const msg =\n \"Could not initiate Builder connect — storage unavailable. Try again.\";\n console.error(\n \"[builder] Could not store pending-connect state:\",\n (err as Error)?.message ?? err,\n );\n // Best-effort: also write the error row so the parent's\n // /builder/status poll picks it up if BroadcastChannel doesn't.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: getBuilderBrowserOriginForEvent(event),\n });\n }\n await trackBuilderLifecycle(\n event,\n \"builder connect started\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n stage: \"connect\",\n connect_token_owner_matches_context:\n !connectTokenOwner || connectTokenOwner === ownerEmail,\n },\n );\n setBuilderConnectOwnerCookie(event, ownerEmail);\n // The primary UI now opens the signed Builder /cli-auth URL directly\n // from /builder/status. Keep this legacy trampoline working for older\n // clients, but still send it to Builder immediately and include signed\n // callback state so the callback does not depend on popup cookies.\n const cliAuthUrl = buildBuilderCliAuthUrl(\n callbackOrigin,\n signBuilderCallbackState(ownerEmail),\n {\n previewOrigin,\n relayState: relay?.state,\n tracking: connectTracking,\n },\n );\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", cliAuthUrl);\n return \"\";\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = await readBody(event).catch(() => ({}) as any);\n const prompt = typeof body?.prompt === \"string\" ? body.prompt : \"\";\n if (!prompt.trim()) {\n setResponseStatus(event, 400);\n return { error: \"prompt is required\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const userEmail = session.email;\n\n let orgId: string | null = null;\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n\n // Wrap in runWithRequestContext so resolveBuilderCredential() inside\n // runBuilderAgent() resolves per-user app_secrets rather than falling\n // through to process.env — the same pattern the /builder/status endpoint\n // uses. Without this, per-user Builder keys stored in app_secrets are\n // invisible to the run path and the call throws \"Builder keys are not\n // configured\" even though the status endpoint correctly reports configured=true.\n return runWithRequestContext(\n { userEmail, orgId: orgId ?? undefined },\n async () => {\n const projectId = await resolveBuilderBranchProjectId();\n if (!projectId) {\n setResponseStatus(event, 403);\n return {\n error:\n \"Builder branch creation is not available for this organization yet.\",\n };\n }\n\n const { resolveBuilderCredential: resolveBuilderCred } =\n await import(\"./credential-provider.js\");\n const builderUserId =\n (await resolveBuilderCred(\"BUILDER_USER_ID\")) || undefined;\n // Server-controlled projectId — don't let clients target arbitrary\n // Builder projects with our private key. When this feature graduates\n // past the hardcoded preview, the projectId will come from\n // workspace/org config, still resolved server-side.\n try {\n const result = await runBuilderAgent({\n prompt,\n projectId,\n branchName:\n typeof body?.branchName === \"string\"\n ? body.branchName\n : undefined,\n userEmail,\n userId: builderUserId,\n });\n return result;\n } catch (e) {\n setResponseStatus(event, 500);\n return {\n error: e instanceof Error ? e.message : \"Builder run failed\",\n };\n }\n },\n );\n }),\n );\n\n // Branch-creation waitlist signup. Used by ConnectBuilderCard when the\n // current request has no Builder branch project configured. Hosted\n // Agent Native deployments submit into the Builder-org Forms waitlist;\n // local/self-hosted deployments keep the analytics signal without\n // sending private workspace data to Agent Native.\n getH3App(nitroApp).use(\n `${P}/builder/branch-waitlist`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n const body = ((await readBody(event).catch(() => ({}))) ??\n {}) as BuilderWaitlistBody;\n const waitlistEmail = resolveWaitlistEmail(\n session?.email,\n body.email,\n );\n if (!waitlistEmail) {\n setResponseStatus(event, 400);\n return { error: \"Valid email required\" };\n }\n const waitlistRateLimit = checkBuilderWaitlistRateLimit(\n event,\n waitlistEmail,\n );\n if (!waitlistRateLimit.ok) {\n setResponseStatus(event, 429);\n setResponseHeader(\n event,\n \"Retry-After\",\n String(waitlistRateLimit.retryAfterSeconds),\n );\n return {\n error:\n \"Too many waitlist requests. Please try again in a minute.\",\n };\n }\n const waitlistPayload = buildBuilderWaitlistFormPayload(\n event,\n waitlistEmail,\n body,\n );\n const waitlistSource = waitlistPayload.data.source;\n const waitlistTemplate = waitlistPayload.data.template;\n const waitlistUseCase = waitlistPayload.data.useCase;\n let formSubmission: { submitted: boolean; formId?: string };\n try {\n formSubmission = await submitBuilderWaitlistForm(\n event,\n waitlistEmail,\n body,\n );\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder branch waitlist form failed\",\n waitlistEmail,\n {\n reason:\n err instanceof Error ? err.message : \"unknown_waitlist_error\",\n source: waitlistSource,\n stage: \"waitlist\",\n template: waitlistTemplate ?? null,\n useCase: waitlistUseCase,\n },\n );\n setResponseStatus(event, 502);\n return {\n error:\n \"Couldn't join the waitlist. Please try again in a moment.\",\n };\n }\n await trackBuilderLifecycle(\n event,\n \"builder branch waitlist joined\",\n waitlistEmail,\n {\n formId: formSubmission.formId ?? null,\n formSubmitted: formSubmission.submitted,\n source: waitlistSource,\n stage: \"waitlist\",\n template: waitlistTemplate ?? null,\n useCase: waitlistUseCase,\n },\n );\n return { ok: true, formSubmitted: formSubmission.submitted };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/relay`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const rawBody = await readBuilderRelayRequestBody(event);\n const result = await consumeBuilderRelayRequest(\n {\n rawBody,\n timestamp: getHeader(event, BUILDER_RELAY_TIMESTAMP_HEADER),\n flowId: getHeader(event, BUILDER_RELAY_FLOW_HEADER),\n signature: getHeader(event, BUILDER_RELAY_SIGNATURE_HEADER),\n requestOrigin: getBuilderBrowserOriginForEvent(event),\n requestBasePath: getAppBasePath(),\n },\n {\n getPending: getSetting,\n deletePending: deleteSetting,\n writeCredentials: async (ownerEmail, credentials, scope) => {\n const { writeBuilderCredentials } =\n await import(\"./credential-provider.js\");\n await writeBuilderCredentials(ownerEmail, credentials, scope);\n await Promise.all([\n deleteSetting(\"builder-disconnected\").catch(() => false),\n deleteSetting(`builder-connect-error:${ownerEmail}`).catch(\n () => false,\n ),\n ]);\n },\n },\n ).catch(() => ({\n ok: false as const,\n status: 500,\n error: \"Builder relay credential persistence failed\",\n }));\n if (!result.ok) {\n setResponseStatus(event, result.status);\n return { error: result.error };\n }\n return { ok: true };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/callback`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n // Builder's provider contract puts credentials on this first-hop\n // URL. Keep the response out of caches and suppress referrer\n // propagation even though the second hop carries secrets only in\n // its authenticated POST body.\n setResponseHeader(event, \"Cache-Control\", \"no-store\");\n setResponseHeader(event, \"Referrer-Policy\", \"no-referrer\");\n\n const requestUrl = getFrameworkRouteRequestUrl(event);\n const relayStateRaw = requestUrl.searchParams.get(\n BUILDER_RELAY_STATE_PARAM,\n );\n if (relayStateRaw) {\n let relayPayload: BuilderPreviewRelayState | null = null;\n try {\n relayPayload =\n verifyBuilderPreviewRelayStateForCallback(relayStateRaw);\n } catch {\n // A preview relay must fail closed when its dedicated shared\n // secret is absent on the corporate callback deployment.\n }\n if (!relayPayload) {\n setResponseStatus(event, 403);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(\n \"Builder preview relay state is invalid or expired.\",\n );\n }\n\n const privateKey = requestUrl.searchParams.get(\"p-key\");\n const publicKey = requestUrl.searchParams.get(\"api-key\");\n if (!privateKey || !publicKey) {\n setResponseStatus(event, 400);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(\n \"Builder didn't return credentials. Restart the connect flow from settings.\",\n { parentOrigin: relayPayload.targetOrigin },\n );\n }\n\n const credentials: BuilderRelayCredentials = {\n privateKey,\n publicKey,\n userId: requestUrl.searchParams.get(\"user-id\"),\n orgName: requestUrl.searchParams.get(\"org-name\"),\n orgKind: requestUrl.searchParams.get(\"kind\"),\n subscription: requestUrl.searchParams.get(\"subscription\"),\n subscriptionLevel:\n requestUrl.searchParams.get(\"subscription-level\"),\n subscriptionName:\n requestUrl.searchParams.get(\"subscription-name\"),\n isEnterprise: parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-enterprise\"),\n ),\n isFreeAccount: parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-free-account\"),\n ),\n };\n\n try {\n const relayRequest = createBuilderRelayRequest(\n relayStateRaw,\n credentials,\n );\n const response = await ssrfSafeFetch(\n relayRequest.url,\n {\n method: \"POST\",\n headers: relayRequest.headers,\n body: relayRequest.body,\n },\n { maxRedirects: 0, httpsOnly: true },\n );\n if (!response.ok) {\n throw new Error(\n `Preview relay rejected the callback (${response.status}).`,\n );\n }\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : \"Builder preview relay failed.\";\n // Never log the first-hop URL or relay body: both contain\n // credentials. The popup gets a bounded, credential-free error.\n setResponseStatus(event, 502);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(message, {\n parentOrigin: relayPayload.targetOrigin,\n });\n }\n\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackPage(\n `${relayPayload.targetOrigin}${relayPayload.basePath || \"/\"}`,\n { parentOrigin: relayPayload.targetOrigin },\n );\n }\n\n // A real session or a template-approved anonymous owner is required;\n // the pending-row check below (combined with the same-origin gate on\n // /builder/connect) blocks CSRF and callback replay.\n const ownerContext = await resolveBuilderOwnerContext(\n event,\n \"callback\",\n );\n const ownerEmail = ownerContext.email;\n // Diagnostic: log the resolver's inputs for debugging \"No active\n // connect flow found\" reports. Reveals session-vs-state owner\n // mismatches and missing/forged _an_state without leaking the\n // signed token itself.\n try {\n const debugSearch = getFrameworkRouteRequestUrl(event).searchParams;\n const stateRaw = debugSearch.get(BUILDER_STATE_PARAM);\n const stateOwnerProbe =\n verifyBuilderCallbackStateAndGetOwner(stateRaw);\n const session = await getSession(event).catch(() => null);\n console.log(\n `[builder-callback] resolved-owner=${ownerEmail ?? \"(none)\"} session-email=${session?.email ?? \"(none)\"} state-owner=${stateOwnerProbe ?? \"(none)\"} state-present=${Boolean(stateRaw)} anon=${ownerContext.anonymous} host=${getHeader(event, \"host\") ?? \"(none)\"} sec-fetch-site=${getHeader(event, \"sec-fetch-site\") ?? \"(none)\"} origin=${getHeader(event, \"origin\") ?? \"(none)\"} referer=${getHeader(event, \"referer\") ?? \"(none)\"}`,\n );\n } catch {\n // Diagnostic logging is best-effort; do not break the callback.\n }\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n clearBuilderConnectOwnerCookie(event);\n\n let connectTracking = getBuilderConnectTrackingParams(\n requestUrl.searchParams,\n );\n // postMessage from the callback success/error pages must target the\n // original preview opener, not the callback server. On the fallback\n // path the callback is served from the env-configured gateway while\n // the opener lives on the preview origin. Three sources of opener\n // origin, in priority order:\n // 1. `_an_opener` — written into the callback URL's query by\n // buildBuilderCliAuthUrl when cli-auth's allow-list forced\n // preview_url onto the gateway. Survives Builder's redirect\n // verbatim (Builder preserves redirect_url's query string).\n // 2. `preview-url` — Builder echoes the top-level preview_url back\n // as a query param on the callback. Reflects the gateway on\n // the fallback path, but matches the opener on the happy path.\n // 3. The event's own origin — last-resort fallback.\n const openerOriginFromQuery =\n requestUrl.searchParams.get(BUILDER_OPENER_PARAM);\n const callbackParentOrigin =\n resolveSafePreviewUrl(openerOriginFromQuery, event) ||\n resolveSafePreviewUrl(\n requestUrl.searchParams.get(\"preview-url\"),\n event,\n ) ||\n getBuilderBrowserOriginForEvent(event);\n const callbackStateOwner = verifyBuilderCallbackStateAndGetOwner(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n );\n const hasValidCallbackState = callbackStateOwner === ownerEmail;\n\n // Verify either:\n // 1. the signed callback state embedded in redirect_url by\n // /builder/status (primary flow), or\n // 2. the server-side pending-connect row written by the legacy\n // /builder/connect trampoline.\n //\n // For the pending-row path, delete must succeed before we proceed;\n // otherwise a DB blip\n // leaves the row in place and the same callback URL can be\n // replayed against the same session for up to 10 minutes (the\n // TTL window). Treat a delete failure as a hard failure: the\n // user retries, the next /builder/connect call rewrites the\n // pending row.\n let pendingValid = hasValidCallbackState;\n let pendingError: string | null = null;\n try {\n const pending = (await getSetting(\n `builder-pending-connect:${ownerEmail}`,\n )) as {\n expiresAt?: number;\n tracking?: BuilderConnectTrackingParams;\n } | null;\n if (pending?.tracking) {\n connectTracking = {\n signupSource:\n connectTracking.signupSource ?? pending.tracking.signupSource,\n agentNativeFlow:\n connectTracking.agentNativeFlow ??\n pending.tracking.agentNativeFlow,\n agentNativeConnectSource:\n connectTracking.agentNativeConnectSource ??\n pending.tracking.agentNativeConnectSource,\n agentNativeApp:\n connectTracking.agentNativeApp ??\n pending.tracking.agentNativeApp,\n agentNativeTemplate:\n connectTracking.agentNativeTemplate ??\n pending.tracking.agentNativeTemplate,\n };\n }\n if (\n pending &&\n typeof pending.expiresAt === \"number\" &&\n Date.now() < pending.expiresAt\n ) {\n try {\n await deleteSetting(`builder-pending-connect:${ownerEmail}`);\n pendingValid = true;\n } catch (err) {\n if (!hasValidCallbackState) {\n pendingError =\n \"Could not consume pending-connect token (storage error). Please retry.\";\n console.error(\n \"[builder] deleteSetting failed for pending-connect — refusing to proceed (replay risk):\",\n (err as Error)?.message ?? err,\n );\n }\n }\n }\n } catch {\n // DB temporarily unavailable — treat as missing.\n }\n\n if (pendingError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"pending_consume_storage_error\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to the parent's poll loop, then render the\n // popup-friendly error page so the BroadcastChannel notify fires.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: pendingError,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(pendingError, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n if (!pendingValid) {\n // Diagnostic: log the exact reason pendingValid is false so we can\n // distinguish \"state didn't validate\" from \"no pending row\" in\n // production \"No active connect flow found\" reports.\n console.warn(\n `[builder-callback] pending-invalid owner=${ownerEmail} has-state-param=${Boolean(requestUrl.searchParams.get(BUILDER_STATE_PARAM))} state-validated=${hasValidCallbackState} pending-error=${pendingError ?? \"(none)\"}`,\n );\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: hasValidCallbackState\n ? \"callback_state_unexpectedly_rejected\"\n : \"missing_pending_connect\",\n stage: \"callback\",\n has_callback_state: Boolean(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n ),\n },\n );\n const msg =\n \"No active connect flow found. Restart the Builder connect flow from Settings.\";\n // Write an error signal so the polling loop in the parent tab\n // terminates quickly instead of waiting 5 minutes for the timeout.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n });\n } catch {\n // DB unavailable — parent will time out naturally.\n }\n setResponseStatus(event, 403);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n const privateKey = requestUrl.searchParams.get(\"p-key\");\n const publicKey = requestUrl.searchParams.get(\"api-key\");\n\n if (!privateKey || !publicKey) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"missing_credentials\",\n stage: \"callback\",\n },\n );\n // Render the popup-friendly error page (and write a status row)\n // instead of bare JSON, so the parent tab's poll loop terminates\n // immediately via BroadcastChannel rather than hanging until the\n // 5-minute timeout.\n const msg =\n \"Builder didn't return credentials. Restart the connect flow from settings.\";\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 400);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n const userId = requestUrl.searchParams.get(\"user-id\");\n const orgName = requestUrl.searchParams.get(\"org-name\");\n const orgKind = requestUrl.searchParams.get(\"kind\");\n const subscription = requestUrl.searchParams.get(\"subscription\");\n const subscriptionLevel =\n requestUrl.searchParams.get(\"subscription-level\");\n const subscriptionName =\n requestUrl.searchParams.get(\"subscription-name\");\n const isEnterprise = parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-enterprise\"),\n );\n const isFreeAccount = parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-free-account\"),\n );\n\n // Store per-user in app_secrets so each user's Builder connection\n // is independent. No more shared env vars that the last connector\n // overwrites.\n //\n // Failure handling: a silent catch here (returning the success page\n // anyway) was Midhun's bug on 2026-04-28 — popup said \"yay\", parent\n // window polled `/builder/status` for 5 minutes seeing\n // configured:false, never got a real error. Now we surface the\n // failure two ways: (a) a settings row that the next /builder/status\n // poll picks up, and (b) postMessage from the error page itself,\n // wired into the popup HTML, so the parent stops polling immediately.\n let writeError: string | null = null;\n try {\n const { writeBuilderCredentials } =\n await import(\"./credential-provider.js\");\n // Resolve the user's active org / role so the credentials land\n // at org scope when an owner/admin is connecting (everyone in\n // the org auto-resolves them on next chat call). Members and\n // users with no active org silently fall back to user scope.\n // Failure to read org context is non-fatal — we just keep the\n // legacy per-user behaviour for that connection.\n let orgId: string | null = null;\n let role: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present in this template — keep user scope */\n }\n }\n const target = await writeBuilderCredentials(\n ownerEmail,\n {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n },\n { orgId, role },\n );\n console.log(\n `[builder-connect] wrote credentials email=${ownerEmail} requestOrgId=${orgId ?? \"(none)\"} role=${role ?? \"(none)\"} scope=${target.scope} scopeId=${target.scopeId}`,\n );\n } catch (err) {\n writeError = (err as Error)?.message ?? String(err);\n console.error(\n \"[builder] Failed to persist Builder credentials:\",\n writeError,\n );\n }\n\n if (writeError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"credential_write_failed\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to /builder/status. If putSetting also fails\n // (entire DB unreachable) the popup's postMessage still notifies\n // the parent. If both fail the parent times out at 5min as today.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: writeError,\n at: Date.now(),\n });\n } catch (settingsErr) {\n console.error(\n \"[builder] Couldn't even record connect-error to settings:\",\n (settingsErr as Error)?.message ?? settingsErr,\n );\n }\n setResponseStatus(event, 500);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(writeError, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n // Clear any legacy disconnect flag and any prior connect-error row\n // (so a successful retry doesn't surface the previous failure).\n try {\n await deleteSetting(\"builder-disconnected\");\n } catch {\n // DB not ready — proceed\n }\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewUrl = resolveBuilderCallbackReturnUrl({\n event,\n openerOrigin: openerOriginFromQuery,\n previewUrl: requestUrl.searchParams.get(\"preview-url\"),\n });\n await trackBuilderLifecycle(\n event,\n \"builder connect succeeded\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n stage: \"callback\",\n has_preview_url: Boolean(previewUrl),\n org_kind: orgKind || undefined,\n subscription: subscription || undefined,\n subscription_level: subscriptionLevel || undefined,\n subscription_name: subscriptionName || undefined,\n is_enterprise: isEnterprise ?? undefined,\n is_free_account: isFreeAccount ?? undefined,\n },\n );\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n // The parent (opener) is the original preview surface that started the\n // connect flow, NOT the callback server's own origin — when the\n // env-configured gateway is used as the callback fallback (because\n // Builder rejects the preview host), the callback server and the\n // opener live on different origins, and postMessage to the gateway\n // origin would be dropped by the preview opener. callbackParentOrigin\n // is the precomputed best-available opener origin (`_an_opener` →\n // `preview-url` → event origin).\n return createBuilderBrowserCallbackPage(previewUrl, {\n parentOrigin: callbackParentOrigin,\n });\n }),\n );\n\n // POST /_agent-native/builder/disconnect — revoke the user's per-user\n // or org-scoped Builder credentials in app_secrets. Deploy-level env\n // credentials are never mutated here; if env is configured it remains as\n // the fallback after request-scoped credentials are removed.\n getH3App(nitroApp).use(\n `${P}/builder/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const { deleteBuilderCredentials } =\n await import(\"./credential-provider.js\");\n\n // Mirror the connect-side scope decision so disconnect undoes\n // exactly what connect wrote: owner/admin connections land at\n // org scope and tear down at org scope; member or no-org\n // connections stay user-scoped on both ends. Symmetric, so a\n // single Disconnect press always reverses what the same user's\n // Connect press did.\n let orgId: string | null = null;\n let role: string | null = null;\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present — keep user scope */\n }\n\n try {\n await deleteBuilderCredentials(session.email, { orgId, role });\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder disconnect failed\",\n session.email,\n {\n reason: \"credential_delete_failed\",\n },\n );\n setResponseStatus(event, 500);\n return {\n ok: false,\n error:\n \"Could not remove Builder credentials — your connection is unchanged. Please retry.\",\n cause: err instanceof Error ? err.message : String(err),\n };\n }\n\n await trackBuilderLifecycle(\n event,\n \"builder disconnect succeeded\",\n session.email,\n );\n return { ok: true };\n }),\n );\n\n // Proxy to Builder's agents-run API for background code changes.\n getH3App(nitroApp).use(\n `${P}/builder/agents-run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n return runWithRequestContext(\n { userEmail: session.email, orgId: session.orgId ?? undefined },\n async () => {\n const { resolveBuilderCredentials: resolveCreds } =\n await import(\"./credential-provider.js\");\n const creds = await resolveCreds();\n if (!creds.privateKey || !creds.publicKey) {\n setResponseStatus(event, 400);\n return {\n error:\n \"Builder not connected. Connect Builder in Setup to use background agent.\",\n };\n }\n const body = (await readBody(event)) as {\n userMessage?: string;\n branchName?: string;\n projectUrl?: string;\n };\n if (!body?.userMessage) {\n setResponseStatus(event, 400);\n return { error: \"userMessage is required\" };\n }\n const apiHost =\n process.env.BUILDER_API_HOST || \"https://api.builder.io\";\n try {\n const res = await fetch(\n `${apiHost}/agents/run?apiKey=${encodeURIComponent(creds.publicKey)}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.privateKey}`,\n },\n body: JSON.stringify({\n userMessage: {\n userPrompt: body.userMessage,\n },\n branchName: body.branchName,\n }),\n },\n );\n if (!res.ok) {\n const err = await res.text().catch(() => \"Unknown error\");\n setResponseStatus(event, res.status);\n return {\n error: redactValues(err, [\n creds.privateKey,\n creds.publicKey,\n ]),\n };\n }\n return await res.json();\n } catch (err: any) {\n setResponseStatus(event, 500);\n return {\n error: redactValues(\n err?.message || \"Failed to reach Builder agents-run API\",\n [creds.privateKey, creds.publicKey],\n ),\n };\n }\n },\n );\n }),\n );\n\n // Env key management — framework keys are always included\n const frameworkEnvKeys = getFrameworkEnvKeys();\n {\n const envKeys = [...frameworkEnvKeys, ...(options.envKeys ?? [])];\n const allowedEnvKeyNames = envKeys.map(({ key }) => key);\n\n getH3App(nitroApp).use(\n `${P}/env-status`,\n defineEventHandler(async (event) => {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n return Promise.all(\n envKeys.map(async (cfg) => {\n const configured = await runWithRequestContext(\n { userEmail, orgId },\n () => resolveSecret(cfg.key).then(Boolean),\n );\n return {\n key: cfg.key,\n label: cfg.label,\n required: cfg.required ?? false,\n configured,\n ...(cfg.helpText ? { helpText: cfg.helpText } : {}),\n };\n }),\n );\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/env-vars`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = await readBody(event);\n const { vars, scope } = body as {\n vars?: Array<{ key: string; value: string }>;\n scope?: ScopedKeySaveRequestScope;\n };\n const unsupportedKeys = findUnsupportedScopedKeyNames(\n vars,\n allowedEnvKeyNames,\n );\n if (unsupportedKeys.length > 0) {\n setResponseStatus(event, 400);\n return {\n error: `Unsupported env key${unsupportedKeys.length === 1 ? \"\" : \"s\"}: ${unsupportedKeys.join(\", \")}`,\n };\n }\n\n try {\n const result = await saveKeyValuesToScopedSecrets(\n event,\n vars,\n scope,\n );\n return { saved: result.saved, storage: \"scoped-secrets\" };\n } catch (err) {\n if (err instanceof ScopedKeyStorageError) {\n setResponseStatus(event, err.statusCode);\n return { error: err.message };\n }\n setResponseStatus(event, 500);\n return { error: \"Failed to save keys\" };\n }\n }),\n );\n }\n\n getH3App(nitroApp).use(\n `${P}/agent-engine/api-key`,\n createAgentEngineApiKeyHandler(),\n );\n\n // GET /_agent-native/agent-engine/status — reports whether an engine\n // is configured (settings row, settings+env, or auto-detected from env).\n // The agent-chat UI uses this to skip the onboarding gate for providers\n // not in the env-status list (OpenRouter, Groq, Ollama, …).\n getH3App(nitroApp).use(\n `${P}/agent-engine/status`,\n defineEventHandler(async (event) => {\n try {\n const { userEmail, orgId } =\n await resolveAgentEngineStatusIdentity(event);\n return await shareAgentEngineStatusLookup(\n agentEngineStatusIdentityKey(userEmail, orgId),\n () =>\n Promise.resolve(\n runWithRequestContext({ userEmail, orgId }, () =>\n resolveAgentEngineStatus(requestAgentEngineStatusDeps()),\n ),\n ),\n );\n } catch (err) {\n // NOT `{ configured: false }`. A 200 saying \"not configured\" is an\n // authoritative answer to the client, so a DB blip here renders as\n // \"connect an AI provider\" and gates the composer. 503 is the only\n // response the client can tell apart from a real answer — it maps\n // to `unavailable`, which keeps the composer usable and retries.\n console.error(\"[agent-engine/status] lookup failed\", err);\n setResponseStatus(event, 503);\n return { error: \"Could not read the agent engine configuration.\" };\n }\n }),\n );\n\n // POST /_agent-native/track — client-originated analytics events.\n // The browser `track()` helper POSTs `{ name, properties }` here so app\n // code can fan out to the SAME server-side providers (PostHog/Mixpanel/\n // etc.) that server `track()` reaches. Authenticated + first-party only:\n // the CSRF middleware above (mounted before route handlers) already\n // requires the X-Agent-Native-CSRF marker the client helper sends, and we\n // require a resolved session so this can't become an open relay. Events\n // are attributed to the resolved user/org — never a client-supplied id.\n // Best-effort: invalid bodies 400, everything else returns 204 and\n // provider errors are swallowed by the server `track()`.\n getH3App(nitroApp).use(\n `${P}/track`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n if (!userEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const body = await readBody(event).catch(() => undefined);\n const validation = validateTrackPayload(body);\n if (!validation.ok) {\n setResponseStatus(event, 400);\n return { error: validation.error ?? \"Invalid tracking payload.\" };\n }\n\n // Attribute to the active org when the template uses orgs. The\n // registry's `track()` only carries `userId` in meta, so org context\n // rides along in properties — every built-in provider forwards\n // `properties` verbatim. Client-supplied properties never override\n // the server-resolved `org_id`.\n let orgId: string | null = null;\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n\n const properties: Record<string, unknown> = {\n ...(validation.properties ?? {}),\n source: \"client\",\n };\n if (orgId) properties.org_id = orgId;\n\n // Best-effort — server `track()` swallows provider errors. We still\n // guard here so an unexpected throw can't surface to the browser.\n try {\n track(validation.name as string, properties, {\n userId: userEmail,\n });\n } catch {\n // best-effort\n }\n setResponseStatus(event, 204);\n return \"\";\n }),\n );\n\n // POST /_agent-native/agent-engine/disconnect — clear the agent-engine\n // setting. Env vars are left alone so the next chat turn falls back to\n // resolveEngine's env/default resolution.\n getH3App(nitroApp).use(\n `${P}/agent-engine/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n try {\n await deleteSetting(\"agent-engine\");\n return { ok: true };\n } catch (err) {\n setResponseStatus(event, 500);\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }),\n );\n\n // GET/PUT/DELETE /_agent-native/agent-loop-settings — org/user-scoped\n // ceiling for tool-calling loop iterations before the agent asks whether\n // it should keep going.\n getH3App(nitroApp).use(\n `${P}/agent-loop-settings`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const orgCtx = await getOrgContext(event).catch(() => null);\n const orgId = orgCtx?.orgId ?? session.orgId ?? null;\n const ctx = { userEmail: session.email, orgId };\n const canUpdate = await canUpdateAgentLoopSettings(\n session.email,\n orgId,\n );\n\n const withContext = async () => ({\n ...(await readAgentLoopSettings(ctx)),\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n });\n\n const method = getMethod(event);\n if (method === \"GET\") {\n return withContext();\n }\n\n if (method === \"PUT\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can change the agent step limit.\"\n : \"You cannot change the agent step limit.\",\n };\n }\n const body = await readBody(event).catch(() => ({}));\n const validation = validateMaxIterationsInput(\n (body as any)?.maxIterations,\n );\n if (validation.ok === false) {\n setResponseStatus(event, 400);\n return { error: validation.error };\n }\n const updated = await writeAgentLoopSettings(ctx, validation.value);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n if (method === \"DELETE\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can reset the agent step limit.\"\n : \"You cannot reset the agent step limit.\",\n };\n }\n const updated = await resetAgentLoopSettings(ctx);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Usage & cost summary ────────────────────────────────────────\n // GET /_agent-native/usage?sinceDays=30\n // Returns spend broken down by label, model, app, and day for the\n // current user. Powers the Usage section in the agent settings panel.\n getH3App(nitroApp).use(\n `${P}/usage`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const sinceDaysParam = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n \"http://x\",\n ).searchParams.get(\"sinceDays\");\n const sinceDays = Math.max(\n 1,\n Math.min(365, Number(sinceDaysParam) || 30),\n );\n const { getUsageSummary, usageBillingForEngine } =\n await import(\"../usage/store.js\");\n const [summary, engineName] = await Promise.all([\n getUsageSummary({\n ownerEmail: session.email,\n sinceMs: Date.now() - sinceDays * 86_400_000,\n }),\n detectUsageEngineName(event, session.email),\n ]);\n return {\n ...summary,\n billing: usageBillingForEngine(engineName),\n };\n }),\n );\n\n // ─── File upload primitive ──────────────────────────────────────\n // GET /_agent-native/file-upload/status — report active provider\n // POST /_agent-native/file-upload — upload a file, return { url }\n getH3App(nitroApp).use(\n `${P}/file-upload/status`,\n defineEventHandler(async (event) => {\n // resolveBuilderPrivateKey() reads per-user credentials from app_secrets\n // (DB), which requires request context (AsyncLocalStorage) to know which\n // user to scope by. Without runWithRequestContext() the ALS store is empty\n // and it falls back to process.env only — missing OAuth-connected users.\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n const resolveStatus = async () => {\n const active = await getActiveFileUploadProviderForRequest();\n let builderConfigured = !!process.env.BUILDER_PRIVATE_KEY;\n try {\n const { resolveBuilderPrivateKey } =\n await import(\"./credential-provider.js\");\n builderConfigured = await resolveBuilderPrivateKey().then(\n (k) => !!k,\n );\n } catch {\n // fall back to env check above\n }\n\n const providers = await Promise.all(\n listFileUploadProviders().map(async (p) => {\n const scopedConfigured = p.isConfiguredForRequest\n ? await p.isConfiguredForRequest().catch(() => false)\n : false;\n return {\n id: p.id,\n name: p.name,\n configured: p.isConfigured() || scopedConfigured,\n };\n }),\n );\n\n // When the builder builtin is selected via env var, its sync\n // isConfigured() doesn't reflect per-user OAuth credentials. Use\n // builderConfigured so status reflects this specific request.\n const isBuilderEnvActive = active?.id === \"builder\";\n const configured = isBuilderEnvActive\n ? builderConfigured\n : !!active || builderConfigured;\n const activeProvider = isBuilderEnvActive\n ? builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null\n : active\n ? { id: active.id, name: active.name }\n : builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null;\n\n return {\n configured,\n activeProvider,\n providers,\n builderConfigured,\n };\n };\n\n return userEmail\n ? runWithRequestContext(\n { userEmail, orgId: session?.orgId },\n resolveStatus,\n )\n : resolveStatus();\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/file-upload`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const parts = await readMultipartFormData(event);\n const filePart = parts?.find((p) => p.name === \"file\");\n if (!filePart?.data) {\n setResponseStatus(event, 400);\n return { error: \"No file uploaded\" };\n }\n\n // Reject files that exceed the upload size ceiling.\n if (filePart.data.length > DEFAULT_UPLOAD_MAX_FILE_BYTES) {\n setResponseStatus(event, 413);\n return {\n error: `File too large (max ${Math.round(DEFAULT_UPLOAD_MAX_FILE_BYTES / 1024 / 1024)} MB)`,\n };\n }\n\n // Reject executable/script MIME types.\n if (filePart.type && !isAllowedUploadMimeType(filePart.type)) {\n setResponseStatus(event, 415);\n return {\n error: `Unsupported file type: ${filePart.type}`,\n };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Unauthorized\" };\n }\n const userEmail = session.email;\n const result = await runWithRequestContext(\n { userEmail, orgId: session.orgId },\n () =>\n uploadFile({\n data: filePart.data,\n filename: filePart.filename,\n mimeType: filePart.type,\n ownerEmail: userEmail,\n }),\n );\n\n if (result) {\n setResponseStatus(event, 201);\n return result;\n }\n\n setResponseStatus(event, 503);\n return {\n error:\n \"No file upload provider configured. Connect Builder.io in Settings → File uploads, or register a provider.\",\n };\n }),\n );\n\n // ─── Voice transcription (Whisper) ───────────────────────────────\n // POST /_agent-native/transcribe-voice — multipart audio → text\n getH3App(nitroApp).use(\n `${P}/transcribe-voice`,\n createTranscribeVoiceHandler(),\n );\n\n // ─── Google realtime transcription session bridge ───────────────\n // POST /_agent-native/transcribe-stream/session — resolve the user's\n // Google service-account credential server-side, mint an opaque managed\n // streaming session in ai-services, and return the websocket URL.\n getH3App(nitroApp).use(\n `${P}/transcribe-stream/session`,\n createGoogleRealtimeSessionHandler(),\n );\n\n // ─── Voice provider status ───────────────────────────────────────\n // GET /_agent-native/voice-providers/status — which providers are\n // configured for the current user (powers the Settings UI pills).\n getH3App(nitroApp).use(\n `${P}/voice-providers/status`,\n createVoiceProvidersStatusHandler(),\n );\n\n // ─── Ad-hoc secrets (user-created keys) ────────────────────────────\n // Must mount before the generic /secrets handler to avoid shadowing.\n const adHocSecretHandler = createAdHocSecretHandler();\n getH3App(nitroApp).use(`${P}/secrets/adhoc`, adHocSecretHandler);\n\n // ─── Secrets registry ────────────────────────────────────────────\n // GET /_agent-native/secrets — list registered secrets + status\n // POST /_agent-native/secrets/:key — write a secret value\n // DELETE /_agent-native/secrets/:key — remove a secret value\n // POST /_agent-native/secrets/:key/test — re-run the validator\n const listSecretsHandler = createListSecretsHandler();\n const writeSecretHandler = createWriteSecretHandler();\n const testSecretHandler = createTestSecretHandler();\n\n getH3App(nitroApp).use(\n `${P}/secrets`,\n defineEventHandler(async (event: H3Event) => {\n const pathname = (event.url?.pathname || \"\")\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n const parts = pathname ? pathname.split(\"/\") : [];\n\n // Collection root — list handler.\n if (parts.length === 0) {\n return listSecretsHandler(event);\n }\n\n // /:key/test — re-validate stored value.\n if (parts.length === 2 && parts[1] === \"test\") {\n return testSecretHandler(event);\n }\n\n // /:key — write / delete a specific secret.\n if (parts.length === 1) {\n return writeSecretHandler(event);\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Notifications inbox ──────────────────────────────────────────\n // GET /_agent-native/notifications[?unread&limit&before]\n // GET /_agent-native/notifications/count\n // POST /_agent-native/notifications/:id/read\n // POST /_agent-native/notifications/read-all\n // DELETE /_agent-native/notifications/:id\n getH3App(nitroApp).use(\n `${P}/notifications`,\n createNotificationsHandler(),\n );\n\n // ─── Extensions (sandboxed mini-app runtime + proxy) ────────────────\n try {\n const { ensureExtensionsTables, registerExtensionsShareable } =\n await import(\"../extensions/store.js\");\n const { createExtensionsHandler } =\n await import(\"../extensions/routes.js\");\n ensureExtensionsTables().catch(() => {});\n registerExtensionsShareable();\n const extensionsHandler = createExtensionsHandler();\n getH3App(nitroApp).use(`${P}/extensions`, extensionsHandler);\n // Legacy alias — the previous public API was /_agent-native/tools/*.\n // Mounted in addition to /extensions/* so any deployed iframes mid-flight\n // (or external integrations bookmarked the old path) keep working.\n getH3App(nitroApp).use(`${P}/tools`, extensionsHandler);\n\n // Extension-point slots — sub-system of extensions.\n const { ensureSlotTables } =\n await import(\"../extensions/slots/store.js\");\n const { createSlotsHandler } =\n await import(\"../extensions/slots/routes.js\");\n ensureSlotTables().catch(() => {});\n getH3App(nitroApp).use(`${P}/slots`, createSlotsHandler());\n } catch {\n // Extensions module not available — skip\n }\n\n // ─── Data programs (stored server-side JS scripts + run cache) ─────\n try {\n const { ensureDataProgramTables, registerDataProgramsShareable } =\n await import(\"../data-programs/store.js\");\n ensureDataProgramTables().catch(() => {});\n registerDataProgramsShareable();\n } catch {\n // Data programs module not available — skip\n }\n\n // ─── Page-level legacy redirect: /tools → /extensions ──────────────\n // Catches direct browser navigation / bookmarks for the old page route\n // (`/tools`, `/tools/:id`) and 302s to the renamed equivalent under\n // `/extensions`. The framework API alias above (`/_agent-native/tools/*`)\n // is intentionally untouched — it stays mounted in parallel.\n //\n // Mounted with no path so the helper can do its own base-path stripping\n // (h3 mount-matching only allows base-path stripping for `/_agent-native`\n // and `/.well-known`). Returns undefined to fall through for anything\n // that isn't a `/tools` page navigation.\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"HEAD\") return;\n const rawPath =\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0];\n const search = event.url?.search ?? \"\";\n const target = resolveLegacyToolsRedirect(rawPath, search);\n if (!target) return;\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", target);\n return \"\";\n }),\n );\n\n // ─── Agent run progress ───────────────────────────────────────────\n // GET /_agent-native/runs[?active&limit]\n // GET /_agent-native/runs/:id\n // DELETE /_agent-native/runs/:id\n getH3App(nitroApp).use(`${P}/runs`, createProgressHandler());\n\n // ─── Automations API ──────────────────────────────────────────────\n // GET /_agent-native/automations — list all automations (parsed triggers)\n // PATCH /_agent-native/automations — enable/disable a jobs/*.md automation\n // POST /_agent-native/automations/fire-test — emit test.event.fired\n getH3App(nitroApp).use(`${P}/automations`, createAutomationsHandler());\n\n // ─── Application State CRUD ──────────────────────────────────────\n // Auto-mounted so templates don't need boilerplate route files.\n\n // ─── User-scoped settings store ────────────────────────────────────\n // GET /_agent-native/settings/:key — read current user's value\n // PUT /_agent-native/settings/:key — write current user's value\n // DELETE /_agent-native/settings/:key — clear current user's value\n //\n // Keys are auto-prefixed with `u:<email>:` so each user gets their\n // own row — no leakage between sessions sharing the same DB.\n getH3App(nitroApp).use(\n `${P}/settings`,\n defineEventHandler(async (event: H3Event) => {\n const rawKey =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n const key = rawKey.replace(/[^a-zA-Z0-9_-]/g, \"\");\n if (!key) {\n setResponseStatus(event, 404);\n return { error: \"Settings key required\" };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const method = getMethod(event);\n const requestSource =\n (event.node?.req?.headers?.[\"x-request-source\"] as\n | string\n | undefined) || undefined;\n\n if (method === \"GET\") {\n const value = await getUserSetting(session.email, key);\n if (!value) {\n setResponseStatus(event, 404);\n return { error: `No setting for ${key}` };\n }\n return value;\n }\n\n if (method === \"PUT\") {\n const body = await readBody(event);\n await putUserSetting(session.email, key, body, { requestSource });\n return body;\n }\n\n if (method === \"DELETE\") {\n await deleteUserSetting(session.email, key, { requestSource });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Avatar routes ──────────────────────────────────────────────────\n // GET /_agent-native/avatar/:email — fetch any user's avatar (public)\n // PUT /_agent-native/avatar — update current user's avatar (auth required)\n //\n // Only raster MIME types are accepted on write; SVG carries scripting risk\n // (data:image/svg+xml payloads can execute JS when rendered by browsers),\n // so it is explicitly excluded. Mirrors the SAFE_DATA_IMAGE allowlist in\n // packages/core/src/client/blocks/library/sanitize-html.ts.\n getH3App(nitroApp).use(\n `${P}/avatar`,\n defineEventHandler(async (event: H3Event) => {\n const method = getMethod(event);\n const emailParam = resolveAvatarEmailParam(\n event.url?.pathname || \"\",\n getConfiguredAppBasePath(),\n );\n\n if (method === \"GET\") {\n if (!emailParam) {\n setResponseStatus(event, 400);\n return { error: \"email required\" };\n }\n const data = await getSetting(\n `avatar:${decodeURIComponent(emailParam)}`,\n );\n return { image: (data as any)?.image ?? null };\n }\n\n if (method === \"PUT\") {\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const body = await readBody(event);\n const { image } = body as { image?: string };\n if (!image || !AVATAR_RASTER_MIME.test(image)) {\n setResponseStatus(event, 400);\n return {\n error:\n \"image must be a data URI with a raster MIME type (png, jpeg, gif, or webp)\",\n };\n }\n await putSetting(`avatar:${session.email}`, { image });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n if (!options.disableMcpConnect) {\n getH3App(nitroApp).use(\n \"/.well-known/oauth-protected-resource\",\n defineEventHandler((event: H3Event) =>\n handleMcpOAuthProtectedResourceMetadata(event),\n ),\n );\n getH3App(nitroApp).use(\n \"/.well-known/oauth-authorization-server\",\n defineEventHandler((event: H3Event) =>\n handleMcpOAuthAuthorizationServerMetadata(event),\n ),\n );\n getH3App(nitroApp).use(\n \"/.well-known/openid-configuration\",\n defineEventHandler((event: H3Event) =>\n handleMcpOAuthAuthorizationServerMetadata(event),\n ),\n );\n for (const mcpRoutePrefix of MCP_ROUTE_PREFIXES) {\n getH3App(nitroApp).use(\n `${mcpRoutePrefix}/oauth`,\n defineEventHandler(async (event: H3Event) => {\n const subpath = event.url?.pathname || \"\";\n return handleMcpOAuth(event, subpath, {\n appId: options.mcpConnectAppId,\n appName: options.mcpConnectAppName ?? getAppName(),\n });\n }),\n );\n }\n\n // Frictionless external-agent connection. A logged-in user mints a\n // per-user, scoped, revocable MCP bearer token here — via the browser\n // Connect page or the OAuth-style device-code flow a CLI drives — so\n // they never copy a shared deployment secret. The handler resolves the\n // browser session itself and serves its own login form (like /open)\n // for the page + unauth device endpoints; the /token, /device/authorize,\n // /tokens, /tokens/revoke subpaths require a session and 401 without it.\n // The auth guard bypasses ONLY the page + device/start + device/poll\n // (see createAuthGuardFn in auth.ts).\n const mcpConnectOpts = {\n appId: options.mcpConnectAppId,\n appName: options.mcpConnectAppName ?? getAppName(),\n serverName: options.mcpConnectServerName,\n };\n for (const mcpRoutePrefix of MCP_ROUTE_PREFIXES) {\n getH3App(nitroApp).use(\n `${mcpRoutePrefix}/connect`,\n defineEventHandler(async (event: H3Event) => {\n // The framework strips the mount prefix from event.url.pathname,\n // so what remains is the subpath after `/connect` (e.g. `/token`,\n // `/device/start`, or `` for the page itself).\n const subpath = event.url?.pathname || \"\";\n return handleMcpConnect(event, subpath, mcpConnectOpts);\n }),\n );\n }\n }\n\n // Cross-app SSO (\"Sign in with Agent-Native\") — CLIENT side. Mounted\n // ONLY when `AGENT_NATIVE_IDENTITY_HUB_URL` is set, so an unset env var\n // means the route is never even registered: zero new surface, existing\n // auth byte-for-byte unchanged. `/login` 302s to the identity hub;\n // `/callback` verifies the hub-issued A2A-signed identity JWT and JIT-\n // links the verified email into this app's local Better Auth store. The\n // handler 404s if disabled (defence in depth). The auth guard bypasses\n // these two exact paths under the same env gate.\n if (isIdentitySsoEnabled()) {\n getH3App(nitroApp).use(\n `${P}/identity`,\n defineEventHandler(async (event: H3Event) => {\n // Framework strips the mount prefix; what remains is the subpath\n // after `/identity` (e.g. `/login`, `/callback`).\n const subpath = event.url?.pathname || \"\";\n return handleIdentitySso(event, subpath);\n }),\n );\n }\n\n if (!options.disableOpenRoute) {\n // Stable deep-link route. External agents (MCP/A2A) surface\n // `/_agent-native/open?app=…&view=…&<recordId>=…` links; this resolves\n // the browser session, writes the one-shot `navigate` app-state command\n // the UI already drains, and 302s to the rendered SPA view. The auth\n // guard bypasses this exact path so it can serve its own login form.\n getH3App(nitroApp).use(\n `${P}/open`,\n createOpenRouteHandler({\n resolveOpenPath: options.resolveOpenPath,\n allowUnauthenticatedOpen: options.allowUnauthenticatedOpen,\n }),\n );\n }\n\n if (!options.disableEmbedRoute) {\n // One-time ticket launcher for MCP Apps that embed the full React app.\n // The ticket is minted by an authenticated MCP tool call and exchanged\n // here for a short-lived browser session cookie + bearer fallback.\n getH3App(nitroApp).use(\n `${P}/embed/start`,\n createEmbedStartRouteHandler({ getExistingSession: getSession }),\n );\n\n // POST /_agent-native/mcp/embed-error — telemetry sink for MCP App\n // embed shells. The shell runs in a sandboxed, opaque-origin iframe\n // (Codex, Cursor, ChatGPT, Claude) with no session cookie or CSRF\n // token, so this endpoint is intentionally unauthenticated and\n // CORS-open to the SAME sandbox origins as /embed/start. It forwards a\n // small, bounded diagnostic payload to Sentry via captureError so we\n // can see *why* an inline embed failed (handshake timeout, transplant\n // fetch status/CORS, auth, CSP) per host. Best-effort: always 204,\n // never throws, body capped, no client-trusted identity.\n getH3App(nitroApp).use(\n `${P}/mcp/embed-error`,\n defineEventHandler(async (event: H3Event) => {\n const origin = getHeader(event, \"origin\");\n if (origin && isMcpEmbedCorsOrigin(origin)) {\n setResponseHeader(event, \"Access-Control-Allow-Origin\", origin);\n setResponseHeader(event, \"Vary\", \"Origin\");\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"POST,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n MCP_EMBED_CORS_ALLOW_HEADERS,\n );\n }\n const method = getMethod(event);\n if (method === \"OPTIONS\") {\n setResponseStatus(event, 204);\n return \"\";\n }\n if (method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = await readBody(event).catch(() => undefined);\n const rec =\n body && typeof body === \"object\" && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const str = (value: unknown, max: number): string | undefined =>\n typeof value === \"string\" && value\n ? value.slice(0, max)\n : undefined;\n const message = str(rec.message, 500) ?? \"MCP embed failed\";\n try {\n captureError(new Error(message), {\n route: `${P}/mcp/embed-error`,\n method: \"POST\",\n userAgent:\n str(rec.userAgent, 300) ?? getHeader(event, \"user-agent\"),\n tags: {\n source: \"mcp-embed-shell\",\n embed_stage: str(rec.stage, 60),\n embed_render_mode: str(rec.renderMode, 40),\n embed_host: str(rec.host, 160),\n embed_bridge: str(rec.bridge, 40),\n },\n extra: {\n embedUrl: str(rec.url, 600),\n httpStatus:\n typeof rec.status === \"number\"\n ? rec.status\n : str(rec.status, 40),\n detail: str(rec.detail, 1200),\n origin,\n },\n });\n } catch {\n // Observability must never throw back into the request path.\n }\n setResponseStatus(event, 204);\n return \"\";\n }),\n );\n }\n\n if (!options.disableAppState) {\n // Compose draft routes (more specific path, mounted first so the\n // generic app-state matcher below doesn't shadow them). The framework\n // strips the mount prefix from event.url.pathname before calling us,\n // so we just see e.g. `/abc-123` (id) or `/` (collection root).\n getH3App(nitroApp).use(\n `${P}/application-state/compose`,\n defineEventHandler(async (event: H3Event) => {\n const id =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] ||\n \"\";\n if (event.context) {\n event.context.params = { ...event.context.params, id };\n }\n const method = getMethod(event);\n if (!id) {\n if (method === \"GET\") return listComposeDrafts(event);\n if (method === \"DELETE\") return deleteAllComposeDrafts(event);\n } else {\n if (method === \"GET\") return getComposeDraft(event);\n if (method === \"PUT\") return putComposeDraft(event);\n if (method === \"DELETE\") return deleteComposeDraft(event);\n }\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // Generic application state — match `/application-state/:key` only\n // (NOT `/application-state/compose/...` which the handler above owns).\n getH3App(nitroApp).use(\n `${P}/application-state`,\n defineEventHandler(async (event: H3Event) => {\n const key =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] ||\n \"\";\n // Skip — compose handler above already handled it\n if (key === \"compose\" || key === \"\") return;\n if (event.context) {\n event.context.params = { ...event.context.params, key };\n }\n const method = getMethod(event);\n if (method === \"GET\") return getState(event);\n if (method === \"PUT\") return putState(event);\n if (method === \"DELETE\") return deleteState(event);\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n }\n resolveInit();\n } catch (error) {\n rejectInit(error);\n throw error;\n }\n };\n}\n\n/**\n * Default core routes plugin — mount with no configuration needed.\n *\n * Usage in templates:\n * ```ts\n * // server/plugins/core-routes.ts\n * export { defaultCoreRoutesPlugin as default } from \"@agent-native/core/server\";\n * ```\n */\nexport const defaultCoreRoutesPlugin: NitroPluginDef = createCoreRoutesPlugin();\n"]}
|
|
1
|
+
{"version":3,"file":"core-routes-plugin.js","sourceRoot":"","sources":["../../src/server/core-routes-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assertBodySize,\n defineEventHandler,\n setResponseStatus,\n setResponseHeader,\n getMethod,\n getHeader,\n getCookie,\n setCookie,\n deleteCookie,\n getRequestURL,\n getRequestIP,\n readRawBody,\n} from \"h3\";\nimport type { H3Event } from \"h3\";\nimport { readMultipartFormData } from \"h3\";\n\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport { registerBuiltinEngines } from \"../agent/engine/builtin.js\";\nimport {\n OPENAI_BASE_URL_ENV_VAR,\n PROVIDER_ENV_META,\n} from \"../agent/engine/provider-env-vars.js\";\nimport type { AgentEngineEntry } from \"../agent/engine/registry.js\";\nimport {\n isAgentEngineSettingConfigured,\n getAgentEngineEntry,\n detectEngineFromEnv,\n detectEngineFromUserSecrets,\n isStoredEngineUsableForRequest,\n normalizeModelForEngine,\n} from \"../agent/engine/registry.js\";\nimport {\n canUpdateAgentLoopSettings,\n readAgentLoopSettings,\n resetAgentLoopSettings,\n validateMaxIterationsInput,\n writeAgentLoopSettings,\n} from \"../agent/loop-settings.js\";\nimport {\n getState,\n putState,\n deleteState,\n listComposeDrafts,\n getComposeDraft,\n putComposeDraft,\n deleteComposeDraft,\n deleteAllComposeDrafts,\n} from \"../application-state/handlers.js\";\nimport { mountBrowserSessionRoutes } from \"../browser-sessions/routes.js\";\nimport { mountDbAdminRoutes } from \"../db-admin/routes.js\";\nimport { getDbExec } from \"../db/client.js\";\nimport {\n getDatabaseRuntimeFingerprint,\n getRuntimeDebugFingerprint,\n runDatabaseSchemaHealthCheck,\n type DatabaseSchemaHealthResult,\n} from \"../db/runtime-diagnostics.js\";\nimport { ssrfSafeFetch } from \"../extensions/url-safety.js\";\nimport {\n uploadFile,\n getActiveFileUploadProviderForRequest,\n listFileUploadProviders,\n} from \"../file-upload/index.js\";\nimport { handleMcpConnect } from \"../mcp/connect-route.js\";\nimport {\n handleMcpOAuth,\n handleMcpOAuthAuthorizationServerMetadata,\n handleMcpOAuthProtectedResourceMetadata,\n} from \"../mcp/oauth-route.js\";\nimport { MCP_ROUTE_PREFIXES } from \"../mcp/route-paths.js\";\nimport { registerBuiltinNotificationChannels } from \"../notifications/channels.js\";\nimport { createNotificationsHandler } from \"../notifications/routes.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { createProgressHandler } from \"../progress/routes.js\";\nimport { registerFrameworkSecrets } from \"../secrets/register-framework-secrets.js\";\nimport {\n createListSecretsHandler,\n createWriteSecretHandler,\n createTestSecretHandler,\n createAdHocSecretHandler,\n} from \"../secrets/routes.js\";\nimport { getSetting, putSetting, deleteSetting } from \"../settings/store.js\";\nimport {\n getUserSetting,\n putUserSetting,\n deleteUserSetting,\n} from \"../settings/user-settings.js\";\nimport {\n EMPTY_SPECULATION_RULES,\n resolveSsrCacheHeaders,\n} from \"../shared/cache-control.js\";\nimport { EMBED_TARGET_HEADER } from \"../shared/embed-auth.js\";\nimport { llmConnectionTrackingProperties } from \"../shared/llm-connection.js\";\nimport {\n EMBED_TRANSPLANT_HEADER,\n isMcpEmbedCorsOrigin,\n MCP_EMBED_CORS_ALLOW_HEADERS,\n shouldAllowMcpEmbedCredentials,\n} from \"../shared/mcp-embed-headers.js\";\nimport { captureException } from \"../tracking/error-capture.js\";\nimport { track } from \"../tracking/index.js\";\nimport { registerBuiltinProviders } from \"../tracking/providers.js\";\nimport { validateTrackPayload } from \"../tracking/route.js\";\nimport { createAutomationsHandler } from \"../triggers/routes.js\";\nimport { createAgentEngineApiKeyHandler } from \"./agent-engine-api-key-route.js\";\nimport { getConfiguredAppBasePath, stripAppBasePath } from \"./app-base-path.js\";\nimport { getAppName } from \"./app-name.js\";\nimport { getSession, type AuthSession } from \"./auth.js\";\nimport {\n BUILDER_CONNECT_PARAM,\n BUILDER_CONNECT_OWNER_COOKIE,\n BUILDER_ENV_KEYS,\n BUILDER_OPENER_PARAM,\n BUILDER_RELAY_FLOW_HEADER,\n BUILDER_RELAY_SIGNATURE_HEADER,\n BUILDER_RELAY_STATE_PARAM,\n BUILDER_RELAY_TIMESTAMP_HEADER,\n BUILDER_STATE_PARAM,\n appendBuilderConnectToken,\n builderConnectTrackingProperties,\n buildBuilderCliAuthUrl,\n createBuilderBrowserCallbackErrorPage,\n createBuilderBrowserCallbackPage,\n createBuilderRelayRequest,\n getBuilderConnectTrackingParams,\n getBuilderCliAuthCallbackOriginForEvent,\n getBuilderBrowserOriginForEvent,\n resolveBuilderCallbackReturnUrl,\n getBuilderBrowserStatusForEvent,\n resolveBuilderBranchProjectId,\n resolveBuilderPreviewRelayParentOrigin,\n resolveBuilderPreviewRelayTargetOrigin,\n resolveSafePreviewUrl,\n runBuilderAgent,\n signBuilderCallbackState,\n signBuilderPreviewRelayState,\n verifyBuilderRelayRequest,\n verifyBuilderPreviewRelayStateForCallback,\n verifyBuilderConnectTokenAndGetOwner,\n verifyBuilderCallbackStateAndGetOwner,\n signBuilderConnectToken,\n type BuilderConnectTrackingParams,\n type BuilderRelayCredentials,\n type BuilderPreviewRelayState,\n} from \"./builder-browser.js\";\nimport { captureError, registerErrorCaptureProvider } from \"./capture-error.js\";\nimport {\n getAllowedCorsOrigin,\n readCorsAllowedOrigins,\n} from \"./cors-origins.js\";\nimport type { EnvKeyConfig } from \"./create-server.js\";\nimport {\n canUseDeployCredentialFallbackForRequest,\n readDeployCredentialEnv,\n resolveSecret,\n} from \"./credential-provider.js\";\nimport { createEmbedStartRouteHandler } from \"./embed-route.js\";\nimport {\n getH3App,\n awaitBootstrap,\n markDefaultPluginProvided,\n trackPluginInit,\n} from \"./framework-request-handler.js\";\nimport { createGatewayAccessCheckHandler } from \"./gateway-access-check.js\";\nimport { getAppBasePath, getOrigin } from \"./google-oauth.js\";\nimport { createGoogleRealtimeSessionHandler } from \"./google-realtime-session.js\";\nimport {\n readBody,\n DEFAULT_UPLOAD_MAX_FILE_BYTES,\n isAllowedUploadMimeType,\n} from \"./h3-helpers.js\";\nimport { isIdentitySsoEnabled } from \"./identity-sso-store.js\";\nimport { handleIdentitySso } from \"./identity-sso.js\";\nimport { createOpenRouteHandler } from \"./open-route.js\";\nimport { createPollEventsHandler } from \"./poll-events.js\";\nimport { createPollHandler } from \"./poll.js\";\nimport { createRealtimeTokenHandler } from \"./realtime-token.js\";\nimport { runWithRequestContext } from \"./request-context.js\";\nimport {\n findUnsupportedScopedKeyNames,\n saveKeyValuesToScopedSecrets,\n ScopedKeyStorageError,\n type ScopedKeySaveRequestScope,\n} from \"./scoped-key-storage.js\";\nimport { createTranscribeVoiceHandler } from \"./transcribe-voice.js\";\nimport { createVoiceProvidersStatusHandler } from \"./voice-providers-status.js\";\nimport { createWorkspaceProviderOAuthHandler } from \"./workspace-provider-oauth.js\";\n\n/**\n * The base path prefix for all framework-level routes.\n * All agent-native core routes live under this namespace to avoid\n * collisions with template-specific `/api/*` routes.\n */\nexport const FRAMEWORK_ROUTE_PREFIX = \"/_agent-native\";\nexport const FRAMEWORK_EVENTS_ROUTE = `${FRAMEWORK_ROUTE_PREFIX}/events`;\nexport const LEGACY_FRAMEWORK_EVENTS_ROUTE = `${FRAMEWORK_ROUTE_PREFIX}/poll-events`;\n\nexport function normalizeAgentEngineStatusModel(\n entry:\n | { name: string; defaultModel: string; supportedModels: readonly string[] }\n | undefined,\n model: string | null | undefined,\n): string {\n if (!entry) return model ?? DEFAULT_MODEL;\n return normalizeModelForEngine(entry, model ?? entry.defaultModel);\n}\n\ntype AgentEngineStatusEntry = {\n name: string;\n defaultModel: string;\n supportedModels: readonly string[];\n requiredEnvVars: readonly string[];\n};\n\nexport interface AgentEngineStatusResult {\n configured: boolean;\n engine?: string;\n model?: string;\n source?: \"settings\" | \"env\" | \"app_secrets\";\n envVar?: string;\n openAiBaseUrlConfigured?: boolean;\n}\n\nexport interface AgentEngineStatusDeps<\n E extends AgentEngineStatusEntry = AgentEngineStatusEntry,\n> {\n readStoredEngine: () => Promise<{ engine?: string; model?: string } | null>;\n readOpenAiBaseUrlConfigured: () => boolean | Promise<boolean>;\n isStoredEngineUsable: (\n stored: unknown,\n entry: E,\n ) => boolean | Promise<boolean>;\n detectFromUserSecrets: () => Promise<E | null>;\n detectFromEnv: () => E | null | Promise<E | null>;\n lookupEntry?: (engine: string) => E | undefined;\n}\n\n/**\n * Resolve \"does this request have a usable AI provider\" for one identity.\n *\n * Every call site pays for these lookups on a user-visible path (the agent\n * composer blocks on the status probe), so the two identity-independent reads\n * start together and the expensive `app_secrets` sweep only runs when the\n * cheaper sources have not already answered.\n */\nexport async function resolveAgentEngineStatus<\n E extends AgentEngineStatusEntry,\n>(deps: AgentEngineStatusDeps<E>): Promise<AgentEngineStatusResult> {\n const lookupEntry = (deps.lookupEntry ?? getAgentEngineEntry) as (\n engine: string,\n ) => E | undefined;\n const [stored, openAiBaseUrlConfigured] = await Promise.all([\n deps.readStoredEngine(),\n deps.readOpenAiBaseUrlConfigured(),\n ]);\n\n if (isAgentEngineSettingConfigured(stored)) {\n const engine = (stored as { engine: string }).engine;\n const entry = lookupEntry(engine);\n return {\n configured: true,\n engine,\n model: normalizeAgentEngineStatusModel(entry, stored?.model),\n source: \"settings\",\n openAiBaseUrlConfigured,\n };\n }\n\n const envEntry = process.env.AGENT_ENGINE\n ? lookupEntry(process.env.AGENT_ENGINE)\n : undefined;\n if (envEntry) {\n if (!(await deps.isStoredEngineUsable({ engine: envEntry.name }, envEntry)))\n return { configured: false, openAiBaseUrlConfigured };\n return {\n configured: true,\n engine: envEntry.name,\n model: envEntry.defaultModel ?? DEFAULT_MODEL,\n source: \"env\",\n envVar: \"AGENT_ENGINE\",\n openAiBaseUrlConfigured,\n };\n }\n\n // Stored provider selections win over an existing Builder connection, so\n // this is checked before the app_secrets sweep — and the sweep is skipped\n // entirely when it answers.\n if (stored && typeof stored.engine === \"string\") {\n const entry = lookupEntry(stored.engine);\n if (entry && (await deps.isStoredEngineUsable(stored, entry))) {\n return {\n configured: true,\n engine: stored.engine,\n model: normalizeAgentEngineStatusModel(entry, stored.model),\n source: \"env\",\n envVar: entry.requiredEnvVars[0],\n openAiBaseUrlConfigured,\n };\n }\n }\n\n // Per-user app_secrets — a user who connected Builder (or pasted their own\n // provider key) may not have any deploy-level env vars set.\n const detectedFromUser = await deps.detectFromUserSecrets();\n if (detectedFromUser) {\n return {\n configured: true,\n engine: detectedFromUser.name,\n model: detectedFromUser.defaultModel ?? DEFAULT_MODEL,\n source: \"app_secrets\",\n envVar: detectedFromUser.requiredEnvVars[0],\n openAiBaseUrlConfigured,\n };\n }\n\n const detected = await deps.detectFromEnv();\n if (detected) {\n return {\n configured: true,\n engine: detected.name,\n model: detected.defaultModel ?? DEFAULT_MODEL,\n source: \"env\",\n envVar: detected.requiredEnvVars[0],\n openAiBaseUrlConfigured,\n };\n }\n\n return { configured: false, openAiBaseUrlConfigured };\n}\n\nconst _agentEngineStatusInFlight = new Map<\n string,\n Promise<AgentEngineStatusResult>\n>();\n\n/**\n * Share one in-flight status resolution between concurrent probes of the same\n * identity. Several client surfaces probe this route on mount and the client\n * retries after its own timeout; without this each probe re-ran the whole\n * credential sweep. The entry is dropped as soon as the lookup settles, so a\n * joiner never sees an answer older than one lookup — no TTL, nothing to\n * invalidate when a provider is added or removed. The key carries the identity\n * that decides the answer, so no tenant can read another's result.\n */\nexport function shareAgentEngineStatusLookup(\n identityKey: string,\n compute: () => Promise<AgentEngineStatusResult>,\n): Promise<AgentEngineStatusResult> {\n const existing = _agentEngineStatusInFlight.get(identityKey);\n if (existing) return existing;\n const started = compute().finally(() => {\n _agentEngineStatusInFlight.delete(identityKey);\n });\n _agentEngineStatusInFlight.set(identityKey, started);\n return started;\n}\n\nexport function agentEngineStatusIdentityKey(\n userEmail: string | undefined,\n orgId: string | undefined,\n): string {\n return `${userEmail ?? \"\"}\\u0000${orgId ?? \"\"}`;\n}\n\nfunction requestAgentEngineStatusDeps(): AgentEngineStatusDeps<AgentEngineEntry> {\n return {\n readStoredEngine: async () =>\n (await getSetting(\"agent-engine\")) as {\n engine?: string;\n model?: string;\n } | null,\n readOpenAiBaseUrlConfigured: async () => {\n try {\n if (await resolveSecret(OPENAI_BASE_URL_ENV_VAR)) return true;\n } catch {\n /* fall through to deployment env when allowed */\n }\n return (\n canUseDeployCredentialFallbackForRequest(OPENAI_BASE_URL_ENV_VAR) &&\n !!readDeployCredentialEnv(OPENAI_BASE_URL_ENV_VAR)\n );\n },\n isStoredEngineUsable: isStoredEngineUsableForRequest,\n detectFromUserSecrets: detectEngineFromUserSecrets,\n detectFromEnv: detectEngineFromEnv,\n };\n}\n\n/**\n * Resolve the identity the status answer depends on. Both lookups memoize per\n * request inside their own helpers, so repeating them here stays cheap.\n */\nasync function resolveAgentEngineStatusIdentity(\n event: H3Event,\n): Promise<{ userEmail: string | undefined; orgId: string | undefined }> {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n if (!userEmail) return { userEmail: undefined, orgId: undefined };\n try {\n const orgCtx = await getOrgContext(event);\n return { userEmail, orgId: orgCtx.orgId ?? undefined };\n } catch {\n /* org module not present in this template */\n return { userEmail, orgId: undefined };\n }\n}\n\nexport function getFrameworkEnvKeys(): EnvKeyConfig[] {\n return [\n { key: \"ENABLE_BUILDER\", label: \"Enable Builder.io features\" },\n {\n key: \"AGENT_ENGINE_PREFER_BYO_KEY\",\n label:\n \"Prefer BYO LLM key over Builder gateway (default: false — gateway wins)\",\n },\n {\n key: \"RESEND_API_KEY\",\n label: \"Resend API key\",\n helpText:\n \"Enables transactional email, including password resets, invitations, share notifications, and dashboard reports.\",\n },\n {\n key: \"SENDGRID_API_KEY\",\n label: \"SendGrid API key\",\n helpText:\n \"Enables transactional email, including password resets, invitations, share notifications, and dashboard reports.\",\n },\n {\n key: \"EMAIL_FROM\",\n label: \"Email from address\",\n helpText:\n \"Sender address for transactional email. Required when using SendGrid.\",\n },\n ...Object.values(PROVIDER_ENV_META).map(({ envVar, label }) => ({\n key: envVar,\n label,\n })),\n ];\n}\n\n/** Result of the `/_agent-native/health` liveness + DB-warmup probe. */\nexport interface DbHealthProbeResult {\n /** The serverless function is live and served the request. */\n ok: true;\n /** Database + optional schema readiness for stricter production monitors. */\n ready: boolean;\n /** A trivial `SELECT 1` reached the database (false = no DB or unreachable). */\n db: boolean;\n /** Round-trip time of the probe in milliseconds. */\n ms: number;\n /** Redacted database routing details useful for deploy/runtime checks. */\n database: {\n configured: boolean;\n source: string;\n dialect: string;\n urlHash?: string;\n appName?: string;\n authTokenConfigured: boolean;\n netlifyDatabaseUrlConfigured: boolean;\n };\n /** Optional metadata-only schema compatibility check. */\n schema?: DatabaseSchemaHealthResult;\n}\n\n/**\n * Run a trivial `SELECT 1` to confirm the database is reachable and, as a side\n * effect, keep a scale-to-zero serverless database (e.g. Neon) warm. Touching\n * the DB on a schedule prevents the multi-second cold-start that otherwise\n * stalls the next real user request.\n *\n * Always resolves: an app with no database (or a momentarily unreachable one)\n * is still live, so the probe reports `db: false` rather than throwing. The\n * `exec` parameter is injectable purely for tests.\n */\nexport async function runDbHealthProbe(\n exec: () => { execute: (sql: string) => Promise<unknown> } = getDbExec,\n options: { schema?: boolean } = {},\n): Promise<DbHealthProbeResult> {\n const startedAt = Date.now();\n let db = false;\n let schema: DatabaseSchemaHealthResult | undefined;\n const dbExec = exec();\n try {\n await dbExec.execute(\"SELECT 1\");\n db = true;\n } catch {\n // Live even when the DB is unreachable or the app has no database.\n }\n if (db && options.schema) {\n schema = await runDatabaseSchemaHealthCheck({\n exec: dbExec as ReturnType<typeof getDbExec>,\n });\n }\n const database = getDatabaseRuntimeFingerprint();\n return {\n ok: true,\n ready: db && (!schema || schema.ok),\n db,\n ms: Date.now() - startedAt,\n database: {\n configured: database.configured,\n source: database.source,\n dialect: database.dialect,\n urlHash: database.urlHash,\n appName: database.appName,\n authTokenConfigured: database.authTokenConfigured,\n netlifyDatabaseUrlConfigured: database.netlifyDatabaseUrlConfigured,\n },\n ...(schema ? { schema } : {}),\n };\n}\nconst DEFAULT_BUILDER_WAITLIST_FORM_ID = \"DYTHuM0jlV\";\nconst DEFAULT_BUILDER_WAITLIST_FORMS_ORIGIN = \"https://forms.agent-native.com\";\nconst BUILDER_WAITLIST_FORM_SOURCE = \"connect_builder_card\";\nconst BUILDER_WAITLIST_DEFAULT_USE_CASE = \"builder_agent_background_coding\";\nconst BUILDER_WAITLIST_USE_CASES = new Set([\n BUILDER_WAITLIST_DEFAULT_USE_CASE,\n \"design_publish_app\",\n \"docs_build_online_waitlist\",\n \"docs_edit_online_waitlist\",\n]);\nconst BUILDER_WAITLIST_FORM_TIMEOUT_MS = 8000;\nconst BUILDER_WAITLIST_TEXT_LIMIT = 4000;\nconst BUILDER_WAITLIST_RATE_LIMIT_WINDOW_MS = 60_000;\nconst BUILDER_WAITLIST_RATE_LIMIT_MAX = 5;\nconst builderWaitlistRateLimitHits = new Map<\n string,\n { count: number; resetAt: number }\n>();\n\ninterface BuilderWaitlistFormTarget {\n formId: string;\n formsOrigin: string;\n}\n\nexport interface BuilderWaitlistBody {\n email?: unknown;\n prompt?: unknown;\n orgName?: unknown;\n appUrl?: unknown;\n pageUrl?: unknown;\n source?: unknown;\n template?: unknown;\n useCase?: unknown;\n}\n\nexport function resolveFrameworkSseRoutes(sseRoute?: string): string[] {\n return Array.from(\n new Set([\n sseRoute ?? FRAMEWORK_EVENTS_ROUTE,\n FRAMEWORK_EVENTS_ROUTE,\n LEGACY_FRAMEWORK_EVENTS_ROUTE,\n ]),\n );\n}\n\nexport const BUILDER_STATUS_ROUTE_SUFFIXES = [\n \"/builder/status\",\n \"/connection-status/builder\",\n] as const;\n\nexport function mountBuilderStatusRouteAliases<T>(\n mount: (path: string, handler: T) => void,\n prefix: string,\n handler: T,\n): void {\n for (const routeSuffix of BUILDER_STATUS_ROUTE_SUFFIXES) {\n mount(`${prefix}${routeSuffix}`, handler);\n }\n}\n\nregisterBuiltinEngines();\n\nfunction cleanBuilderWaitlistText(\n value: unknown,\n maxLength = BUILDER_WAITLIST_TEXT_LIMIT,\n): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n return trimmed.slice(0, maxLength);\n}\n\nfunction normalizeBuilderWaitlistUseCase(value: unknown): string {\n const useCase = cleanBuilderWaitlistText(value, 100);\n return useCase && BUILDER_WAITLIST_USE_CASES.has(useCase)\n ? useCase\n : BUILDER_WAITLIST_DEFAULT_USE_CASE;\n}\n\nfunction normalizeBuilderWaitlistTemplate(value: unknown): string | undefined {\n const template = cleanBuilderWaitlistText(value, 100);\n return template && /^[a-z0-9][a-z0-9-]{0,99}$/.test(template)\n ? template\n : undefined;\n}\n\nfunction isValidWaitlistEmail(email: string): boolean {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n}\n\nexport function isAnonymousWaitlistSessionEmail(email: string): boolean {\n return email.startsWith(\"anon-\") && email.endsWith(\"@agent-native.com\");\n}\n\nexport function resolveWaitlistEmail(\n sessionEmail: string | undefined,\n bodyEmail: unknown,\n): string | null {\n const provided = cleanBuilderWaitlistText(bodyEmail, 320);\n if (provided && isValidWaitlistEmail(provided)) return provided;\n if (sessionEmail && !isAnonymousWaitlistSessionEmail(sessionEmail)) {\n return sessionEmail;\n }\n return null;\n}\n\nfunction normalizeWaitlistRateLimitPart(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction getBuilderWaitlistClientIp(event: H3Event): string | undefined {\n const trusted =\n getHeader(event, \"x-nf-client-connection-ip\") ??\n getHeader(event, \"cf-connecting-ip\") ??\n getHeader(event, \"true-client-ip\") ??\n getHeader(event, \"x-real-ip\");\n if (trusted && trusted.trim()) return trusted.trim();\n\n const forwardedFor = getHeader(event, \"x-forwarded-for\");\n const forwardedClientIp = forwardedFor?.split(\",\")[0]?.trim();\n if (forwardedClientIp) return forwardedClientIp;\n\n try {\n return getRequestIP(event) ?? undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction getBuilderWaitlistRateLimitKeys(\n event: H3Event,\n email: string,\n): string[] {\n const clientIp = getBuilderWaitlistClientIp(event);\n return [\n `email:${normalizeWaitlistRateLimitPart(email)}`,\n `ip:${normalizeWaitlistRateLimitPart(clientIp ?? \"unknown\")}`,\n ];\n}\n\nexport function checkBuilderWaitlistRateLimit(\n event: H3Event,\n email: string,\n now = Date.now(),\n): { ok: true } | { ok: false; retryAfterSeconds: number } {\n const keys = getBuilderWaitlistRateLimitKeys(event, email);\n let retryAfterMs = 0;\n\n for (const key of keys) {\n const entry = builderWaitlistRateLimitHits.get(key);\n if (!entry) continue;\n if (entry.resetAt <= now) {\n builderWaitlistRateLimitHits.delete(key);\n continue;\n }\n if (entry.count >= BUILDER_WAITLIST_RATE_LIMIT_MAX) {\n retryAfterMs = Math.max(retryAfterMs, entry.resetAt - now);\n }\n }\n\n if (retryAfterMs > 0) {\n return {\n ok: false,\n retryAfterSeconds: Math.max(1, Math.ceil(retryAfterMs / 1000)),\n };\n }\n\n for (const key of keys) {\n const entry = builderWaitlistRateLimitHits.get(key);\n if (!entry || entry.resetAt <= now) {\n builderWaitlistRateLimitHits.set(key, {\n count: 1,\n resetAt: now + BUILDER_WAITLIST_RATE_LIMIT_WINDOW_MS,\n });\n } else {\n entry.count += 1;\n }\n }\n\n return { ok: true };\n}\n\nexport function resetBuilderWaitlistRateLimitForTests() {\n builderWaitlistRateLimitHits.clear();\n}\n\nfunction normalizeHttpOrigin(value: string): string | null {\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n return url.origin;\n } catch {\n return null;\n }\n}\n\nfunction isAgentNativeHostedRequest(event: H3Event): boolean {\n const hostname = getRequestURL(event).hostname.toLowerCase();\n return (\n hostname === \"agent-native.com\" || hostname.endsWith(\".agent-native.com\")\n );\n}\n\nexport function resolveBuilderWaitlistFormTargetForRequest(\n event: H3Event,\n): BuilderWaitlistFormTarget | null {\n if (process.env.AGENT_NATIVE_DISABLE_BUILDER_WAITLIST_FORM === \"1\") {\n return null;\n }\n\n const envFormId = process.env.AGENT_NATIVE_BUILDER_WAITLIST_FORM_ID?.trim();\n const envFormsOrigin =\n process.env.AGENT_NATIVE_BUILDER_WAITLIST_FORMS_ORIGIN?.trim();\n const hasExplicitTarget = Boolean(envFormId || envFormsOrigin);\n if (!hasExplicitTarget && !isAgentNativeHostedRequest(event)) {\n return null;\n }\n\n const formId = envFormId || DEFAULT_BUILDER_WAITLIST_FORM_ID;\n const formsOrigin = normalizeHttpOrigin(\n envFormsOrigin || DEFAULT_BUILDER_WAITLIST_FORMS_ORIGIN,\n );\n if (!formsOrigin) {\n throw new Error(\"Invalid Builder waitlist Forms origin\");\n }\n\n return { formId, formsOrigin };\n}\n\nexport function buildBuilderWaitlistFormPayload(\n event: H3Event,\n sessionEmail: string,\n body: BuilderWaitlistBody,\n) {\n const appUrl =\n cleanBuilderWaitlistText(body.pageUrl ?? body.appUrl, 2000) ??\n cleanBuilderWaitlistText(getHeader(event, \"referer\"), 2000) ??\n getOrigin(event);\n const source =\n cleanBuilderWaitlistText(body.source, 100) ?? BUILDER_WAITLIST_FORM_SOURCE;\n const template = normalizeBuilderWaitlistTemplate(body.template);\n const useCase = normalizeBuilderWaitlistUseCase(body.useCase);\n\n return {\n data: {\n email: sessionEmail,\n orgName: cleanBuilderWaitlistText(body.orgName, 500),\n appUrl,\n prompt: cleanBuilderWaitlistText(body.prompt),\n source,\n template,\n useCase,\n },\n _hp: \"\",\n _meta: {\n submitterEmail: sessionEmail,\n pageUrl: appUrl,\n source,\n template,\n useCase,\n },\n };\n}\n\nasync function submitBuilderWaitlistForm(\n event: H3Event,\n sessionEmail: string,\n body: BuilderWaitlistBody,\n): Promise<{ submitted: boolean; formId?: string }> {\n const target = resolveBuilderWaitlistFormTargetForRequest(event);\n if (!target) return { submitted: false };\n\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n BUILDER_WAITLIST_FORM_TIMEOUT_MS,\n );\n\n try {\n const res = await fetch(\n `${target.formsOrigin}/api/submit/${encodeURIComponent(target.formId)}`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(\n buildBuilderWaitlistFormPayload(event, sessionEmail, body),\n ),\n signal: controller.signal,\n },\n );\n if (!res.ok) {\n throw new Error(`Forms waitlist submission failed (${res.status})`);\n }\n return { submitted: true, formId: target.formId };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction parseBuilderCallbackBoolean(\n value: string | null | undefined,\n): boolean | null {\n if (value == null || value === \"\") return null;\n return /^(1|true)$/i.test(value);\n}\n\n// Raster-only data-URI allowlist for avatar writes. SVG is deliberately absent:\n// data:image/svg+xml payloads can carry inline <script> and event-handler\n// attributes that execute when the browser renders them as an <img> src or\n// inlines them in the DOM. Mirrors SAFE_DATA_IMAGE in sanitize-html.ts.\nexport const AVATAR_RASTER_MIME = /^data:image\\/(png|jpe?g|gif|webp);/i;\n\nexport function resolveAvatarEmailParam(\n pathname: string,\n appBasePath = \"\",\n): string {\n const base = appBasePath.replace(/\\/+$/, \"\");\n const avatarPaths = Array.from(\n new Set([`${base}/_agent-native/avatar/`, \"/_agent-native/avatar/\"]),\n );\n\n for (const avatarPath of avatarPaths) {\n const avatarIndex = pathname.indexOf(avatarPath);\n if (avatarIndex >= 0) {\n return pathname\n .slice(avatarIndex + avatarPath.length)\n .replace(/^\\/+/, \"\")\n .split(\"/\")[0];\n }\n }\n\n const firstSegment = pathname.replace(/^\\/+/, \"\").split(\"/\")[0] ?? \"\";\n if (!firstSegment || firstSegment === \"_agent-native\") return \"\";\n if (base && firstSegment === base.replace(/^\\/+/, \"\")) return \"\";\n return firstSegment;\n}\n\nasync function detectUsageEngineName(\n event: H3Event,\n userEmail: string | undefined,\n): Promise<string | null> {\n try {\n const orgId = userEmail\n ? (await resolveAgentEngineStatusIdentity(event)).orgId\n : undefined;\n const status = await runWithRequestContext({ userEmail, orgId }, () =>\n resolveAgentEngineStatus({\n ...requestAgentEngineStatusDeps(),\n // Tracking only needs the engine name; skip the base-URL secret read.\n readOpenAiBaseUrlConfigured: () => false,\n }),\n );\n return status.engine ?? null;\n } catch {\n return null;\n }\n}\n\nasync function trackBuilderLifecycle(\n event: H3Event,\n name: string,\n userEmail: string | undefined | null,\n properties: Record<string, unknown> = {},\n): Promise<void> {\n if (!userEmail) return;\n const engine = await detectUsageEngineName(event, userEmail);\n track(\n name,\n {\n feature: \"builder\",\n ...llmConnectionTrackingProperties({\n configured: Boolean(engine),\n engine,\n }),\n ...properties,\n },\n { userId: userEmail },\n );\n}\n\nfunction getBuilderConnectOwnerCookiePath(): string {\n return getAppBasePath() || \"/\";\n}\n\nfunction readBuilderConnectOwnerCookie(event: H3Event): string | null {\n return verifyBuilderConnectTokenAndGetOwner(\n getCookie(event, BUILDER_CONNECT_OWNER_COOKIE),\n );\n}\n\nfunction setBuilderConnectOwnerCookie(\n event: H3Event,\n ownerEmail: string,\n): void {\n setCookie(\n event,\n BUILDER_CONNECT_OWNER_COOKIE,\n signBuilderConnectToken(ownerEmail),\n {\n httpOnly: true,\n sameSite: \"lax\",\n secure: getOrigin(event).startsWith(\"https://\"),\n path: getBuilderConnectOwnerCookiePath(),\n maxAge: 10 * 60,\n },\n );\n}\n\nfunction clearBuilderConnectOwnerCookie(event: H3Event): void {\n deleteCookie(event, BUILDER_CONNECT_OWNER_COOKIE, {\n path: getBuilderConnectOwnerCookiePath(),\n });\n}\n\nfunction isAgentNativeAnonymousOwner(email: string | undefined): boolean {\n return /^anon-[^@]+@agent-native\\.com$/i.test(email ?? \"\");\n}\n\ntype BuilderAnonymousOwnerResolver = (\n event: H3Event,\n) => string | null | Promise<string | null>;\n\nexport type BuilderOwnerContext = {\n email: string | undefined;\n session: AuthSession | null;\n anonymous: boolean;\n};\n\nexport async function resolveBuilderOwnerContextForRequest(\n event: H3Event,\n options: {\n anonymousOwner?: BuilderAnonymousOwnerResolver;\n getSessionForEvent?: (event: H3Event) => Promise<AuthSession | null>;\n } = {},\n mode?: \"connect\" | \"callback\",\n): Promise<BuilderOwnerContext> {\n const searchParams = getRequestURL(event).searchParams;\n const signedOwner =\n mode === \"connect\"\n ? verifyBuilderConnectTokenAndGetOwner(\n searchParams.get(BUILDER_CONNECT_PARAM),\n )\n : mode === \"callback\"\n ? verifyBuilderCallbackStateAndGetOwner(\n searchParams.get(BUILDER_STATE_PARAM),\n )\n : null;\n const cookieOwner =\n mode === \"callback\" ? readBuilderConnectOwnerCookie(event) : null;\n const session = await (options.getSessionForEvent ?? getSession)(event).catch(\n () => null,\n );\n if (session?.email) {\n if (\n signedOwner &&\n (signedOwner === session.email ||\n (isAgentNativeAnonymousOwner(signedOwner) &&\n isAgentNativeAnonymousOwner(session.email)))\n ) {\n // Public docs/app surfaces can mint a new anonymous session inside the\n // popup when cookies do not round-trip. Keep the signed flow owner in\n // that anonymous-only case, but do not override a real user session.\n return {\n email: signedOwner,\n session: signedOwner === session.email ? session : null,\n anonymous: isAgentNativeAnonymousOwner(signedOwner),\n };\n }\n return { email: session.email, session, anonymous: false };\n }\n\n if (signedOwner) {\n return {\n email: signedOwner,\n session: null,\n anonymous: isAgentNativeAnonymousOwner(signedOwner),\n };\n }\n\n if (cookieOwner) {\n return { email: cookieOwner, session: null, anonymous: false };\n }\n\n const anonymousOwner = await options.anonymousOwner?.(event);\n if (anonymousOwner) {\n return { email: anonymousOwner, session: null, anonymous: true };\n }\n\n return { email: undefined, session: null, anonymous: false };\n}\n\n/**\n * Resolves the page-level legacy `/tools` → `/extensions` redirect target.\n *\n * Returns the absolute path (with optional query string) to redirect to,\n * or `null` if the request should fall through to the SPA / next handler.\n *\n * Skips:\n * - Framework API namespace (`/_agent-native/tools/*` is handled separately\n * as a legacy alias and intentionally stays mounted as `tools`).\n * - Anything that isn't `/tools` or a `/tools/...` page navigation, after\n * the configured app base path is stripped off.\n *\n * Exported for tests; the runtime middleware below is a thin wrapper.\n */\nexport function resolveLegacyToolsRedirect(\n rawPath: string,\n search: string,\n): string | null {\n if (rawPath === \"/_agent-native\" || rawPath.startsWith(\"/_agent-native/\")) {\n return null;\n }\n const pathname = stripAppBasePath(rawPath);\n if (pathname !== \"/tools\" && !pathname.startsWith(\"/tools/\")) return null;\n const suffix = pathname === \"/tools\" ? \"\" : pathname.slice(\"/tools\".length);\n const basePath = getConfiguredAppBasePath();\n return `${basePath}/extensions${suffix}${search}`;\n}\n\nexport function getFrameworkRouteRequestUrl(event: H3Event): URL {\n const url = getRequestURL(event);\n if (url.search) return url;\n\n // In some mounted Nitro/H3 paths, `event.url` is normalized while the raw\n // Node request URL still has the query string. Builder callbacks carry the\n // signed `_an_state` there, so preserve it before validating the flow.\n const rawUrl =\n event.node?.req?.url ??\n (typeof event.path === \"string\" ? event.path : undefined);\n const queryStart = rawUrl?.indexOf(\"?\") ?? -1;\n if (queryStart < 0) return url;\n url.search = rawUrl!.slice(queryStart);\n return url;\n}\n\nexport interface BuilderRelayPendingRecord {\n ownerEmail: string;\n orgId: string | null;\n role: string | null;\n targetOrigin: string;\n basePath: string;\n expiresAt: number;\n tracking?: BuilderConnectTrackingParams;\n}\n\nexport interface ConsumeBuilderRelayDependencies {\n getPending: (key: string) => Promise<Record<string, unknown> | null>;\n deletePending: (key: string) => Promise<boolean>;\n writeCredentials: (\n ownerEmail: string,\n credentials: BuilderRelayCredentials,\n scope: { orgId: string | null; role: string | null },\n ) => Promise<unknown>;\n}\n\nfunction builderRelayPendingKey(flowId: string): string {\n return `builder-pending-relay:${flowId}`;\n}\n\nfunction parseBuilderRelayPendingRecord(\n value: Record<string, unknown> | null,\n): BuilderRelayPendingRecord | null {\n if (\n !value ||\n typeof value.ownerEmail !== \"string\" ||\n typeof value.targetOrigin !== \"string\" ||\n typeof value.basePath !== \"string\" ||\n typeof value.expiresAt !== \"number\"\n ) {\n return null;\n }\n return {\n ownerEmail: value.ownerEmail,\n orgId: typeof value.orgId === \"string\" ? value.orgId : null,\n role: typeof value.role === \"string\" ? value.role : null,\n targetOrigin: value.targetOrigin,\n basePath: value.basePath,\n expiresAt: value.expiresAt,\n tracking:\n value.tracking && typeof value.tracking === \"object\"\n ? (value.tracking as BuilderConnectTrackingParams)\n : undefined,\n };\n}\n\n/**\n * Authenticated one-shot receiver for the second hop of Builder preview auth.\n * Owner and org scope always come from the preview's pending record; the\n * corporate callback cannot choose them in its POST body.\n */\nexport async function consumeBuilderRelayRequest(\n input: {\n rawBody: string;\n timestamp: string | null | undefined;\n flowId: string | null | undefined;\n signature: string | null | undefined;\n requestOrigin: string;\n requestBasePath: string;\n now?: number;\n },\n dependencies: ConsumeBuilderRelayDependencies,\n): Promise<{ ok: true } | { ok: false; status: number; error: string }> {\n if (input.rawBody.length > 64 * 1024) {\n return {\n ok: false,\n status: 413,\n error: \"Builder relay request is too large\",\n };\n }\n let verified: ReturnType<typeof verifyBuilderRelayRequest>;\n try {\n verified = verifyBuilderRelayRequest({\n body: input.rawBody,\n timestamp: input.timestamp,\n flowId: input.flowId,\n signature: input.signature,\n requestOrigin: input.requestOrigin,\n requestBasePath: input.requestBasePath,\n now: input.now,\n });\n } catch {\n return { ok: false, status: 503, error: \"Builder relay is not configured\" };\n }\n if (!verified) {\n return { ok: false, status: 401, error: \"Invalid Builder relay request\" };\n }\n const pendingKey = builderRelayPendingKey(verified.payload.flowId);\n const pending = parseBuilderRelayPendingRecord(\n await dependencies.getPending(pendingKey).catch(() => null),\n );\n const now = input.now ?? Date.now();\n if (\n !pending ||\n pending.expiresAt < now ||\n pending.ownerEmail !== verified.payload.ownerEmail ||\n pending.targetOrigin !== verified.payload.targetOrigin ||\n pending.basePath !== verified.payload.basePath\n ) {\n return { ok: false, status: 403, error: \"No active Builder relay flow\" };\n }\n\n // A successful delete, not merely a resolved promise, is the one-shot gate.\n // It happens before credential persistence so replay is impossible even if\n // the downstream write fails and the human has to start a fresh flow.\n const consumed = await dependencies\n .deletePending(pendingKey)\n .catch(() => false);\n if (consumed !== true) {\n return {\n ok: false,\n status: 409,\n error: \"Builder relay flow was already consumed\",\n };\n }\n\n await dependencies.writeCredentials(\n pending.ownerEmail,\n verified.body.credentials,\n { orgId: pending.orgId, role: pending.role },\n );\n return { ok: true };\n}\n\nexport async function readBuilderRelayRequestBody(\n event: H3Event,\n): Promise<string> {\n await assertBodySize(event, 64 * 1024);\n return (await readRawBody(event, \"utf8\")) ?? \"\";\n}\n\nfunction redactValues(text: string, values: Array<string | null | undefined>) {\n let out = text;\n for (const value of values) {\n if (value) out = out.split(value).join(\"[redacted]\");\n }\n return out;\n}\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nexport interface CoreRoutesPluginOptions {\n /** Route path for the SSE endpoint. Default: \"/_agent-native/events\" */\n sseRoute?: string;\n /** Disable the SSE endpoint entirely. */\n disableSSE?: boolean;\n /** Disable the /_agent-native/ping health check. */\n disablePing?: boolean;\n /** Disable the /_agent-native/health DB liveness + warmup probe. */\n disableHealth?: boolean;\n /** Disable the /_agent-native/application-state routes. */\n disableAppState?: boolean;\n /** Disable the /_agent-native/open deep-link route. */\n disableOpenRoute?: boolean;\n /** Disable the /_agent-native/embed/start iframe session launcher. */\n disableEmbedRoute?: boolean;\n /**\n * Disable the /mcp/connect routes (browser Connect page + CLI device-code\n * flow that mints per-user, revocable MCP tokens) and the standard remote-MCP\n * OAuth endpoints under /mcp/oauth. The legacy /_agent-native/mcp aliases\n * are disabled at the same time.\n * Enabled by default — the routes are session-gated where they approve user\n * access; token endpoints are protected by single-use codes / refresh\n * tokens.\n */\n disableMcpConnect?: boolean;\n /** Canonical app id (e.g. `mail`) for the MCP connect server name. */\n mcpConnectAppId?: string;\n /** Explicit MCP server id for copyable config/device-flow grants. */\n mcpConnectServerName?: string;\n /** Human app name shown on the MCP connect page. */\n mcpConnectAppName?: string;\n /** Per-template override mapping deep-link params → client SPA path.\n * See `createOpenRouteHandler`. */\n resolveOpenPath?: import(\"./open-route.js\").OpenRouteOptions[\"resolveOpenPath\"];\n /** Per-template allowlist for open-route targets that may redirect without\n * a browser session. See `createOpenRouteHandler`. */\n allowUnauthenticatedOpen?: import(\"./open-route.js\").OpenRouteOptions[\"allowUnauthenticatedOpen\"];\n /** Env key configuration. Enables env-status and env-vars routes. */\n envKeys?: EnvKeyConfig[];\n /**\n * Optional owner resolver for narrowly-scoped public routes. Used by public\n * pages that let anonymous viewers connect Builder credentials for their\n * own browser-scoped agent session.\n */\n anonymousOwner?: BuilderAnonymousOwnerResolver;\n}\n\ninterface LegacyCoreRouteInitSettings {\n persistedEnvVars: Record<string, string> | null;\n builderDisconnected: { at?: number } | null;\n}\n\ntype CoreRouteSettingReader = (\n key: string,\n) => Promise<Record<string, unknown> | null>;\n\nexport async function readLegacyCoreRouteInitSettings(\n readSetting: CoreRouteSettingReader = getSetting,\n): Promise<LegacyCoreRouteInitSettings> {\n const readOrNull = async (key: string) => {\n try {\n return await readSetting(key);\n } catch {\n return null;\n }\n };\n const [persistedEnvVars, builderDisconnected] = await Promise.all([\n readOrNull(\"persisted-env-vars\"),\n readOrNull(\"builder-disconnected\"),\n ]);\n return {\n persistedEnvVars: persistedEnvVars as Record<string, string> | null,\n builderDisconnected: builderDisconnected as { at?: number } | null,\n };\n}\n\n/**\n * Creates a Nitro plugin that mounts all standard agent-native framework routes.\n *\n * All routes are mounted under `/_agent-native/` to avoid collisions\n * with template-specific routes.\n *\n * Routes:\n * GET /_agent-native/poll — polling endpoint for change detection\n * GET /_agent-native/events (or custom) — SSE endpoint for real-time sync\n * GET /_agent-native/ping — health check\n * GET /_agent-native/health — DB liveness probe + scale-to-zero warmup\n * GET /_agent-native/env-status — env key configuration status (when envKeys provided)\n * POST /_agent-native/env-vars — compatibility route that saves keys to scoped DB secrets\n * GET /_agent-native/application-state/:key — read application state\n * PUT /_agent-native/application-state/:key — write application state\n * DELETE /_agent-native/application-state/:key — delete application state\n * GET /_agent-native/application-state/compose — list compose drafts\n * DELETE /_agent-native/application-state/compose — delete all compose drafts\n * GET /_agent-native/application-state/compose/:id — get compose draft\n * PUT /_agent-native/application-state/compose/:id — upsert compose draft\n * DELETE /_agent-native/application-state/compose/:id — delete compose draft\n */\nexport function createCoreRoutesPlugin(\n options: CoreRoutesPluginOptions = {},\n): NitroPluginDef {\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"core-routes\");\n // No-op when called from inside the bootstrap (auto-mount path).\n // Otherwise wait so other default plugins finish mounting first.\n let resolveInit: () => void = () => {};\n let rejectInit: (error: unknown) => void = () => {};\n const initPromise = new Promise<void>((resolve, reject) => {\n resolveInit = resolve;\n rejectInit = reject;\n });\n trackPluginInit(nitroApp, initPromise, {\n paths: [FRAMEWORK_ROUTE_PREFIX, \"/mcp\", \"/.well-known\"],\n });\n try {\n await awaitBootstrap(nitroApp);\n\n const { persistedEnvVars, builderDisconnected } =\n await readLegacyCoreRouteInitSettings();\n\n // Legacy cleanup: key saves now go to scoped app_secrets rows. Do not\n // rehydrate the old deployment-global `persisted-env-vars` row into\n // process.env; keep only the Builder scrub so stale leaked keys self-heal.\n try {\n if (persistedEnvVars) {\n const builderKeys = new Set<string>(BUILDER_ENV_KEYS);\n let scrubbed = 0;\n for (const k of Object.keys(persistedEnvVars)) {\n if (builderKeys.has(k)) {\n scrubbed++;\n }\n }\n if (scrubbed > 0) {\n try {\n const cleaned: Record<string, string> = {};\n for (const [k, v] of Object.entries(persistedEnvVars)) {\n if (!builderKeys.has(k)) cleaned[k] = v;\n }\n await putSetting(\"persisted-env-vars\", cleaned);\n console.warn(\n `[core] Removed ${scrubbed} legacy BUILDER_* key(s) from persisted-env-vars (cross-tenant leak fix).`,\n );\n } catch {\n // Couldn't rewrite the row — the skip-on-rehydrate above\n // is the load-bearing protection. We'll try again next boot.\n }\n }\n }\n } catch {\n // DB not ready yet — skip\n }\n\n // Honor Builder disconnect. Nitro's dev env-runner preserves\n // `process.env` across `.env` file reloads inside the same worker, so\n // deleting BUILDER_PRIVATE_KEY in the disconnect handler can bleed\n // back through an env-runner restart. We persist a\n // `builder-disconnected` flag in SQL and scrub BUILDER_* on every\n // plugin init while the flag is set. The flag is cleared by the\n // Builder cli-auth callback when the user re-connects.\n try {\n if (builderDisconnected) {\n for (const key of BUILDER_ENV_KEYS) {\n delete process.env[key];\n }\n }\n } catch {\n // DB not ready — skip; the disconnect flag will be enforced on the\n // next plugin boot once the settings table is reachable.\n }\n\n // Register framework-level secrets (OPENAI_API_KEY for composer voice\n // transcription, etc.). Each registration is guarded so templates that\n // already registered the same key win.\n registerFrameworkSecrets();\n registerBuiltinProviders();\n registerErrorCaptureProvider(\"agent-native-analytics\", (error, context) =>\n captureException(error, {\n ...context,\n handled: false,\n runtime: \"node\",\n source: \"server\",\n }),\n );\n registerBuiltinNotificationChannels();\n\n try {\n const { createObservabilityHandler } =\n await import(\"../observability/routes.js\");\n const { ensureObservabilityTables } =\n await import(\"../observability/store.js\");\n ensureObservabilityTables().catch(() => {});\n getH3App(nitroApp).use(\n `${FRAMEWORK_ROUTE_PREFIX}/observability`,\n createObservabilityHandler(),\n );\n } catch {\n // Observability module not available — skip\n }\n\n // Audit log — durable, append-only record of who mutated what app data,\n // when, and (for the agent) in which run. Capture is automatic at the\n // action seam; here we just ensure the table exists and start the\n // retention purge. Best-effort so a missing DB never crashes boot.\n try {\n const { ensureAuditTables } = await import(\"../audit/store.js\");\n const { startAuditCleanupJob } =\n await import(\"../audit/cleanup-job.js\");\n ensureAuditTables().catch(() => {});\n startAuditCleanupJob();\n } catch {\n // Audit module not available — skip\n }\n\n const P = FRAMEWORK_ROUTE_PREFIX;\n\n for (const provider of [\n \"figma\",\n \"google_drive\",\n \"github\",\n \"hubspot\",\n \"salesforce\",\n \"jira\",\n \"sentry\",\n \"notion\",\n ] as const) {\n getH3App(nitroApp).use(\n `${P}/connections/oauth/${provider}/start`,\n createWorkspaceProviderOAuthHandler(provider, \"start\"),\n );\n getH3App(nitroApp).use(\n `${P}/connections/oauth/${provider}/callback`,\n createWorkspaceProviderOAuthHandler(provider, \"callback\"),\n );\n }\n\n // Security response headers — emitted on every framework response.\n // Mounted before route handlers so 4xx/5xx error pages also carry the\n // headers. Routes that need to tighten a specific header override via\n // setResponseHeader.\n const { createSecurityHeadersMiddleware } =\n await import(\"./security-headers.js\");\n getH3App(nitroApp).use(createSecurityHeadersMiddleware());\n\n // CORS for framework routes. Desktop tray apps (Tauri/Electron) run on\n // their own dev origin (e.g. localhost:1420) and make credentialed\n // requests against the template's server at a different port. We echo\n // the exact origin + Allow-Credentials so same-site localhost ports\n // can cross-send cookies.\n const allowlist = readCorsAllowedOrigins();\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const pathname = stripAppBasePath(\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0],\n );\n if (!pathname.startsWith(P) && !pathname.startsWith(\"/api/\")) return;\n const readRequestHeader = (name: string): string | undefined => {\n const lower = name.toLowerCase();\n const raw =\n (event as any).node?.req?.headers?.[lower] ??\n (event as any).node?.req?.headers?.[name];\n if (Array.isArray(raw)) return raw[0];\n if (typeof raw === \"string\") return raw;\n return getHeader(event, name) ?? undefined;\n };\n const origin = readRequestHeader(\"origin\");\n const method = getMethod(event);\n const requestedHeaders = readRequestHeader(\n \"access-control-request-headers\",\n );\n const requestedHeaderNames = String(requestedHeaders ?? \"\")\n .toLowerCase()\n .split(\",\")\n .map((header) => header.trim());\n const mcpEmbedCorsRequest =\n isMcpEmbedCorsOrigin(origin) &&\n (requestedHeaderNames.includes(EMBED_TARGET_HEADER.toLowerCase()) ||\n requestedHeaderNames.includes(EMBED_TRANSPLANT_HEADER) ||\n Boolean(readRequestHeader(EMBED_TARGET_HEADER)) ||\n Boolean(readRequestHeader(EMBED_TRANSPLANT_HEADER)) ||\n Boolean(readRequestHeader(\"authorization\")));\n\n // Decide whether this origin is allowed. We never fall back to the\n // first allowlist entry — that previously echoed `Access-Control-\n // Allow-Origin: <unrelated-allowed-origin>` for disallowed callers,\n // which is permissive enough that some clients followed through.\n const allowedOrigin = mcpEmbedCorsRequest\n ? origin\n : getAllowedCorsOrigin(origin, {\n allowedOrigins: allowlist,\n allowAnyOriginWhenNoAllowlist: false,\n allowLocalhostWhenNoAllowlist: true,\n });\n\n // Reject preflights from disallowed cross-origin callers BEFORE\n // returning 204. Previously the OPTIONS short-circuit returned 204\n // with no ACAO header, which the browser then treats as a CORS\n // failure — but also short-circuited any further checks. Now we\n // explicitly 403 disallowed cross-origin preflights.\n if (method === \"OPTIONS\") {\n if (origin && !allowedOrigin) {\n setResponseStatus(event, 403);\n return \"\";\n }\n if (allowedOrigin) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Origin\",\n allowedOrigin,\n );\n setResponseHeader(event, \"Vary\", \"Origin\");\n if (shouldAllowMcpEmbedCredentials(allowedOrigin)) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Credentials\",\n \"true\",\n );\n }\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n MCP_EMBED_CORS_ALLOW_HEADERS,\n );\n }\n setResponseStatus(event, 204);\n return \"\";\n }\n\n // Non-preflight requests: only set CORS response headers when we\n // have an allowed origin. Same-origin / no-origin requests fall\n // through without explicit CORS headers (browser treats them as\n // same-origin by default).\n if (!allowedOrigin) return;\n setResponseHeader(\n event,\n \"Access-Control-Allow-Origin\",\n allowedOrigin,\n );\n setResponseHeader(event, \"Vary\", \"Origin\");\n if (shouldAllowMcpEmbedCredentials(allowedOrigin)) {\n setResponseHeader(\n event,\n \"Access-Control-Allow-Credentials\",\n \"true\",\n );\n }\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n MCP_EMBED_CORS_ALLOW_HEADERS,\n );\n }),\n );\n\n // Defense-in-depth CSRF check for state-changing /_agent-native/* routes\n // (see `csrf.ts` for the threat model and allowlist) is registered by\n // `getH3App()` itself (framework-request-handler.ts), synchronously, on\n // the very first call to `getH3App(nitroApp)` for this process — NOT\n // here. Registering it inside this plugin's own async init chain would\n // race against agent-chat-plugin's action-route registration (a\n // SEPARATE, independently-async-initialized Nitro plugin file in real\n // deployments): whichever plugin's `getH3App(nitroApp).use(...)` call\n // happened to resolve first would win the position in the middleware\n // array, and CSRF losing that race would let an action route match and\n // run before the CSRF check ever saw the request. Centralizing the\n // registration in `getH3App()`'s one-time bootstrap makes it the first\n // middleware any plugin's route can possibly land behind, regardless of\n // plugin init ordering.\n\n // Agent discovery primitive — shared by headless CLI/A2A surfaces and\n // UI shells that need to show connected peer apps without depending on\n // the chat route namespace.\n getH3App(nitroApp).use(\n `${P}/agents`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const query = getRequestURL(event).searchParams;\n const selfAppId = query.get(\"selfAppId\") ?? undefined;\n const { discoverAgents } = await import(\"./agent-discovery.js\");\n const agents = await discoverAgents(selfAppId);\n return { agents };\n }),\n );\n\n // Polling\n getH3App(nitroApp).use(`${P}/poll`, createPollHandler());\n\n // Realtime subscribe-token mint (hosted gateway path)\n getH3App(nitroApp).use(\n `${P}/realtime-token`,\n createRealtimeTokenHandler(),\n );\n // Sharee visibility check for the hosted gateway\n getH3App(nitroApp).use(`${P}/can-see`, createGatewayAccessCheckHandler());\n\n // SSE\n if (!options.disableSSE) {\n for (const route of resolveFrameworkSseRoutes(options.sseRoute)) {\n getH3App(nitroApp).use(route, createPollEventsHandler());\n }\n }\n\n // Ping\n if (!options.disablePing) {\n getH3App(nitroApp).use(\n `${P}/ping`,\n defineEventHandler(() => ({\n message: process.env.PING_MESSAGE ?? \"pong\",\n })),\n );\n }\n\n // ─── Durable sandbox execution processor ─────────────────────────\n // Self-fired by run-code's background queue (see\n // coding-tools/sandbox/background.ts): the enqueueing request POSTs here\n // so the code executes in a FRESH invocation with its own budget instead\n // of riding the ~40s agent-loop wall. Authenticity is verified via the\n // shared HMAC internal-token scheme (same as the A2A / integration /\n // agent-teams processors) plus the atomic SQL claim inside\n // processQueuedSandboxExecution, which prevents double execution.\n getH3App(nitroApp).use(\n `${P}/sandbox/_process-execution`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = (await readBody(event).catch(() => null)) as {\n executionId?: unknown;\n taskId?: unknown;\n } | null;\n const executionId =\n body && typeof body.executionId === \"string\" && body.executionId\n ? body.executionId\n : body && typeof body.taskId === \"string\"\n ? body.taskId\n : \"\";\n if (!executionId) {\n setResponseStatus(event, 400);\n return { error: \"executionId required\" };\n }\n\n const {\n hasConfiguredA2ASecret,\n isLoopbackAddress,\n isTrustedLocalRuntime,\n } = await import(\"../a2a/auth-policy.js\");\n if (hasConfiguredA2ASecret()) {\n const { verifyInternalToken, extractBearerToken } =\n await import(\"../integrations/internal-token.js\");\n const token = extractBearerToken(getHeader(event, \"authorization\"));\n if (!verifyInternalToken(executionId, token ?? \"\")) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired processor token\" };\n }\n } else {\n const loopback = isLoopbackAddress(\n getRequestIP(event, { xForwardedFor: false }),\n );\n if (!isTrustedLocalRuntime({ loopback })) {\n setResponseStatus(event, 503);\n return {\n error:\n \"Sandbox execution processor not configured — set A2A_SECRET on this deployment (or A2A_ALLOW_UNSIGNED_INTERNAL=1 for trusted local dev).\",\n };\n }\n }\n\n try {\n const { processQueuedSandboxExecution } =\n await import(\"../coding-tools/sandbox/background.js\");\n const result = await processQueuedSandboxExecution(executionId);\n return { ok: true, ...result };\n } catch (err) {\n console.error(\"[sandbox] _process-execution failed:\", err);\n setResponseStatus(event, 500);\n return { error: \"process-execution failed\" };\n }\n }),\n );\n\n // ─── Durable sandbox execution sweep ──────────────────────────────\n // Backstop for lost dispatches and dead executors: re-drives queued rows\n // whose enqueue-time dispatch never landed and reclaims/reaps running\n // rows whose lease expired. Cheap (one indexed query per 2-min window;\n // a missing table short-circuits to a no-op) and best-effort — the\n // poll-time drain in run-code covers deployments where warm-instance\n // timers rarely fire.\n (() => {\n let lastSweep = 0;\n const SWEEP_INTERVAL_MS = 2 * 60 * 1000;\n\n setTimeout(() => {\n setInterval(() => {\n const now = Date.now();\n if (now - lastSweep < SWEEP_INTERVAL_MS) return;\n lastSweep = now;\n\n (async () => {\n const { drainDueSandboxExecutions } =\n await import(\"../coding-tools/sandbox/background.js\");\n await drainDueSandboxExecutions({ limit: 5 });\n })().catch(() => {\n // best-effort — never break the server\n });\n }, 30_000); // Check every 30s but only sweep once per 2min\n }, 25_000); // Start 25s after init (after the agent sweeps)\n })();\n\n // Health + DB warmup — liveness probe that touches the database so\n // uptime monitors and the keep-warm cron prevent a scale-to-zero\n // serverless DB (e.g. Neon) from cold-starting on the next real\n // request. Public, side-effect free, and never cached. Add ?schema=1\n // for metadata-only schema checks, and ?strict=1 to turn a not-ready\n // DB/schema probe into a failing HTTP status for monitors.\n if (!options.disableHealth) {\n getH3App(nitroApp).use(\n `${P}/health`,\n defineEventHandler(async (event) => {\n setResponseHeader(event, \"cache-control\", \"no-store\");\n const schema =\n event.url?.searchParams.get(\"schema\") === \"1\" ||\n event.url?.searchParams.get(\"schema\") === \"true\";\n const strict =\n event.url?.searchParams.get(\"strict\") === \"1\" ||\n event.url?.searchParams.get(\"strict\") === \"true\" ||\n process.env.AGENT_NATIVE_HEALTH_STRICT_SCHEMA === \"true\";\n const result = await runDbHealthProbe(getDbExec, { schema });\n if (strict && !result.ready) setResponseStatus(event, 503);\n return result;\n }),\n );\n }\n\n getH3App(nitroApp).use(\n `${P}/debug/runtime`,\n defineEventHandler(async (event) => {\n setResponseHeader(event, \"cache-control\", \"no-store\");\n const session = await getSession(event).catch(() => null);\n const productionLike =\n process.env.NODE_ENV === \"production\" ||\n process.env.NETLIFY === \"true\" ||\n process.env.VERCEL === \"1\";\n if (!session?.email && productionLike) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const schema = await runDatabaseSchemaHealthCheck().catch((err) => ({\n ok: false,\n checked: false,\n dialect: getDatabaseRuntimeFingerprint().dialect,\n missingTables: [],\n missingColumns: [],\n error: err instanceof Error ? err.message : String(err),\n }));\n return {\n ok: true,\n runtime: getRuntimeDebugFingerprint(),\n schema,\n };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/speculation-rules.json`,\n defineEventHandler((event) => {\n // `createH3SSRHandler` points the Speculation-Rules response header\n // here to prevent Cloudflare Speed Brain from injecting its own\n // edge prefetch rules. Keep this route public and side-effect free:\n // browsers may request it while parsing any SSR HTML document.\n setResponseHeader(\n event,\n \"content-type\",\n \"application/speculationrules+json; charset=utf-8\",\n );\n for (const [name, value] of Object.entries(\n resolveSsrCacheHeaders(),\n )) {\n setResponseHeader(event, name, value);\n }\n return EMPTY_SPECULATION_RULES;\n }),\n );\n\n {\n const { createAgentNativeOgImageHandler } =\n await import(\"./social-og-image.js\");\n getH3App(nitroApp).use(\n `${P}/og-image.png`,\n createAgentNativeOgImageHandler(),\n );\n }\n\n // Signed, content-only recap PNG images. POST (authenticated with the\n // same `agent-native connect` bearer token the action surface accepts)\n // stores a PNG and returns a public image URL; GET <token>.png serves\n // the opaque bytes anonymously so GitHub's camo proxy can inline a recap\n // screenshot into a private-repo PR comment. Mounted as a prefix so it\n // owns both `/_agent-native/recap-image` (POST) and\n // `/_agent-native/recap-image/<token>.png` (GET).\n {\n const { createRecapImageHandler } =\n await import(\"./recap-image-route.js\");\n getH3App(nitroApp).use(`${P}/recap-image`, createRecapImageHandler());\n }\n\n mountBrowserSessionRoutes(nitroApp, { routePrefix: P });\n\n // Dev-mode DB admin (Supabase-Studio-like). Mounted unconditionally; every\n // handler self-gates on dev + localhost (the authoritative gate lives in\n // db-admin/routes.ts), so on a deployed / production app it always 403s.\n mountDbAdminRoutes(nitroApp, { routePrefix: P });\n\n const resolveBuilderOwnerContext = async (\n event: H3Event,\n mode?: \"connect\" | \"callback\",\n ): Promise<BuilderOwnerContext> =>\n resolveBuilderOwnerContextForRequest(\n event,\n { anonymousOwner: options.anonymousOwner },\n mode,\n );\n\n const builderStatusHandler = defineEventHandler(async (event) => {\n const envStatus = getBuilderBrowserStatusForEvent(event);\n const ownerContext = await resolveBuilderOwnerContext(event);\n const userEmail = ownerContext.email;\n const withConnectToken = <T extends { connectUrl: string }>(\n status: T,\n ): T & { cliAuthUrl?: string } => {\n if (!userEmail) return status;\n const previewOrigin = getBuilderBrowserOriginForEvent(event);\n const callbackOrigin = getBuilderCliAuthCallbackOriginForEvent(event);\n const statusWithConnectToken = {\n ...status,\n connectUrl: appendBuilderConnectToken(status.connectUrl, userEmail),\n } as T & { cliAuthUrl?: string };\n // Direct cli-auth only works when the callback lands on the same\n // deployment that minted the signed state. Builder/Fusion previews\n // often need a gateway callback origin; in that case use the\n // /builder/connect trampoline so it can write the pending-connect\n // row that the gateway callback validates against.\n if (\n previewOrigin.replace(/\\/+$/, \"\") !==\n callbackOrigin.replace(/\\/+$/, \"\")\n ) {\n return statusWithConnectToken;\n }\n const cliAuthUrl = buildBuilderCliAuthUrl(\n callbackOrigin,\n signBuilderCallbackState(userEmail),\n { previewOrigin },\n );\n return {\n ...statusWithConnectToken,\n cliAuthUrl,\n };\n };\n\n // Pass the user's active orgId so status reads can fall back to\n // org-scoped credentials and branch project IDs. Without it, an\n // admin's org-scope OAuth result is invisible to every other org\n // member's status poller and the UI would show \"not connected\" forever\n // even though the chat actually resolves the org-shared credential.\n let orgId: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n }\n\n return runWithRequestContext(\n { userEmail, orgId: orgId ?? undefined },\n async () => {\n const projectId = await resolveBuilderBranchProjectId();\n const requestStatus = {\n ...envStatus,\n builderEnabled: !!projectId,\n branchProjectIdConfigured: !!projectId,\n branchProjectId: projectId || undefined,\n };\n\n // Surface a recent OAuth callback failure before reporting a\n // deployment fallback as \"connected\"; otherwise a failed personal\n // connect attempt on a deploy that also has BUILDER_PRIVATE_KEY set\n // looks successful even though the user's credentials were not saved.\n try {\n if (userEmail) {\n const errKey = `builder-connect-error:${userEmail}`;\n const errRow = await getSetting(errKey);\n if (errRow && typeof errRow.message === \"string\") {\n await deleteSetting(errKey).catch(() => {});\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n connectError: {\n message: errRow.message as string,\n at:\n typeof errRow.at === \"number\"\n ? (errRow.at as number)\n : Date.now(),\n },\n });\n }\n }\n } catch {\n // settings store unavailable — fall through\n }\n\n // Read request-scoped Builder credentials first; deploy env is only\n // the fallback. This keeps a root/local BUILDER_PRIVATE_KEY from\n // blocking a user from connecting their own Builder account.\n try {\n const {\n resolveBuilderCredentials,\n resolveBuilderCredentialSource,\n getBuilderCredentialAuthFailure,\n } = await import(\"./credential-provider.js\");\n const [creds, credentialSource] = await Promise.all([\n resolveBuilderCredentials(),\n resolveBuilderCredentialSource(),\n ]);\n const authFailure = await getBuilderCredentialAuthFailure(creds);\n if (authFailure) {\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n credentialSource: credentialSource ?? undefined,\n // Surface durable credential rejection separately from\n // one-shot cli-auth callback failures. The reconnect UI keeps\n // polling through authError while the user chooses a new\n // Builder space; connectError means the active callback itself\n // failed and should stop the flow.\n authError: {\n message: authFailure.message,\n at: authFailure.at,\n },\n });\n }\n if (creds.privateKey && creds.publicKey) {\n // Best-effort: surface the real space name(s) from Builder's\n // Admin API. Stay NON-BLOCKING — return whatever is cached now\n // and refresh in the background for the next poll. Falls back\n // to orgName until the cache warms.\n let spaces: Array<{ id: string; name: string }> | undefined;\n try {\n const { getCachedBuilderSpaces, listBuilderSpaces } =\n await import(\"./builder-space.js\");\n const privateKey = creds.privateKey;\n const cachedSpaces = getCachedBuilderSpaces(privateKey);\n if (cachedSpaces && cachedSpaces.length > 0) {\n spaces = cachedSpaces;\n }\n if (!cachedSpaces) {\n // Warm the cache without blocking this response.\n void listBuilderSpaces(privateKey).catch(() => {});\n }\n } catch {\n // Admin API helper unavailable — leave spaces undefined.\n }\n return withConnectToken({\n ...requestStatus,\n configured: true,\n privateKeyConfigured: true,\n publicKeyConfigured: !!creds.publicKey,\n userId: creds.userId || envStatus.userId,\n orgName: creds.orgName || envStatus.orgName,\n spaces,\n orgKind: creds.orgKind || envStatus.orgKind,\n subscription:\n creds.subscription || envStatus.subscription || undefined,\n subscriptionLevel:\n creds.subscriptionLevel ||\n envStatus.subscriptionLevel ||\n undefined,\n subscriptionName:\n creds.subscriptionName ||\n envStatus.subscriptionName ||\n undefined,\n isEnterprise:\n creds.isEnterprise ?? envStatus.isEnterprise ?? undefined,\n isFreeAccount:\n creds.isFreeAccount ?? envStatus.isFreeAccount ?? undefined,\n credentialSource: credentialSource ?? undefined,\n });\n }\n } catch {\n // Secrets table not ready — fall through to env status\n }\n\n // Honor legacy disconnect flag for existing deployments.\n try {\n const disconnected = await getSetting(\"builder-disconnected\");\n if (disconnected) {\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n });\n }\n } catch {\n // DB not reachable\n }\n // No env, no per-user creds → not configured. Both authenticated\n // and unauthenticated callers see \"not connected\" so they can\n // run through the OAuth flow.\n return withConnectToken({\n ...requestStatus,\n configured: false,\n privateKeyConfigured: false,\n publicKeyConfigured: false,\n userId: undefined,\n orgName: undefined,\n orgKind: undefined,\n subscription: undefined,\n subscriptionLevel: undefined,\n subscriptionName: undefined,\n isEnterprise: undefined,\n isFreeAccount: undefined,\n });\n },\n );\n });\n mountBuilderStatusRouteAliases(\n (path, handler) => getH3App(nitroApp).use(path, handler),\n P,\n builderStatusHandler,\n );\n\n // How long a pending-connect row is valid. Must be long enough for\n // the user to complete the Builder CLI-auth flow, but short enough\n // that a stale row from an abandoned attempt doesn't accept a new\n // callback minutes later.\n const BUILDER_CONNECT_PENDING_TTL_MS = 10 * 60 * 1000; // 10 min\n\n // Decide whether a /builder/connect navigation originated from this\n // app's own UI (allowed) or from a foreign origin (cross-site CSRF\n // attempt — rejected). Sec-Fetch-Site is the modern signal:\n // - \"same-origin\": user clicked Connect from our own pages — allow\n // - \"none\": typed in URL bar / bookmark / browser extension — allow\n // - \"same-site\" / \"cross-site\" / missing-but-with-foreign-Origin\n // all map to reject.\n // For older browsers without Sec-Fetch-* we fall back to Origin and\n // then Referer, comparing against the request's resolved origin.\n function isSameOriginConnect(event: H3Event): boolean {\n const fetchSite = getHeader(event, \"sec-fetch-site\");\n if (fetchSite === \"same-origin\" || fetchSite === \"none\") return true;\n if (fetchSite) return false; // browser told us it's cross-site/same-site\n const expected = getBuilderBrowserOriginForEvent(event).replace(\n /\\/+$/,\n \"\",\n );\n const origin = getHeader(event, \"origin\");\n if (origin) return origin.replace(/\\/+$/, \"\") === expected;\n const referer = getHeader(event, \"referer\");\n if (referer) {\n try {\n return new URL(referer).origin === expected;\n } catch {\n return false;\n }\n }\n // No Sec-Fetch-Site, no Origin, no Referer — pre-2020 browser\n // making a top-level navigation. Allow; cookies are still\n // session-bound so the worst case degrades to the prior behavior.\n return true;\n }\n\n // Lightweight 302 to the Builder CLI-auth URL. Lets clients do\n // `window.open('/_agent-native/builder/connect', '_blank')` synchronously\n // inside a click handler, avoiding the popup-blocker downgrade that\n // happens when an await sits before window.open.\n //\n // CSRF protection here is layered because session cookies are\n // SameSite=None;Secure (so the editor iframe can ride along) — that\n // means a session cookie alone does NOT prevent cross-origin\n // window.open from initiating a connect flow on the victim's behalf:\n // 1. Signed connect token from /builder/status — proves the opener\n // could read same-origin JSON, which cross-site attackers cannot.\n // This covers local/embedded browsers that conservatively label a\n // legitimate popup navigation as same-site/cross-site.\n // 2. Sec-Fetch-Site header fallback — modern browsers stamp every\n // request with the navigation context. We allow `same-origin` or\n // `none` (typed/bookmark/extension); cross-site / same-site without\n // a valid connect token are rejected.\n // 3. Pending row keyed by session email + bound nonce — the callback\n // requires both a valid session and a one-time row that this\n // handler wrote during the same flow. Without the same-origin\n // gate or connect token above, an attacker could prime the row from\n // cross-site and then trick the victim into hitting a callback URL\n // with attacker-controlled p-key/api-key, hijacking the victim's\n // account.\n getH3App(nitroApp).use(\n `${P}/builder/connect`,\n defineEventHandler(async (event) => {\n const ownerContext = await resolveBuilderOwnerContext(\n event,\n \"connect\",\n );\n const ownerEmail = ownerContext.email;\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n\n const requestUrl = getFrameworkRouteRequestUrl(event);\n const connectToken = requestUrl.searchParams.get(\n BUILDER_CONNECT_PARAM,\n );\n const connectTokenOwner =\n verifyBuilderConnectTokenAndGetOwner(connectToken);\n const connectTracking = getBuilderConnectTrackingParams(\n requestUrl.searchParams,\n );\n // The token must both be well-formed AND minted for the current\n // session owner. Without the owner check, an attacker holding any\n // valid signed token could trick a victim into hitting this route\n // with that token to bypass the cross-origin gate.\n const hasValidConnectToken =\n Boolean(connectTokenOwner) && connectTokenOwner === ownerEmail;\n\n // Same-origin gate. Sec-Fetch-Site remains the fast path; the signed\n // connect token is the compatibility path for legitimate embedded or\n // local desktop popups stamped as same-site/cross-site by the browser.\n if (!isSameOriginConnect(event) && !hasValidConnectToken) {\n const crossOriginMessage = connectToken\n ? \"This Builder connect link is expired or belongs to a different deployment. Close this popup and click Connect account again.\"\n : \"Builder connect opened without a fresh signed link. Close this popup and click Connect account again.\";\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"cross_origin\",\n stage: \"connect\",\n has_connect_token: Boolean(connectToken),\n has_valid_connect_token: false,\n connect_token_owner_matches_context: false,\n sec_fetch_site: getHeader(event, \"sec-fetch-site\") ?? null,\n },\n );\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: crossOriginMessage,\n at: Date.now(),\n }).catch(() => {});\n console.warn(\"[builder-connect] rejected cross-origin connect\", {\n hasConnectToken: Boolean(connectToken),\n secFetchSite: getHeader(event, \"sec-fetch-site\") ?? null,\n origin: getHeader(event, \"origin\") ?? null,\n referer: getHeader(event, \"referer\") ?? null,\n });\n setResponseStatus(event, 403);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(crossOriginMessage, {\n title: \"Couldn't start Builder connection\",\n body: \"The connect popup did not include a valid signed link for this app.\",\n closeHint:\n \"Close this popup, refresh the app, and try Connect account again.\",\n parentOrigin: getBuilderBrowserOriginForEvent(event),\n });\n }\n\n // Clear any prior failure row from a previous attempt — otherwise\n // useBuilderStatus polling sees the stale error and aborts the\n // new attempt before it can complete.\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewOrigin = getBuilderBrowserOriginForEvent(event).replace(\n /\\/+$/,\n \"\",\n );\n const callbackOrigin = getBuilderCliAuthCallbackOriginForEvent(\n event,\n ).replace(/\\/+$/, \"\");\n let relay:\n | { state: string; payload: BuilderPreviewRelayState }\n | undefined;\n if (previewOrigin !== callbackOrigin) {\n try {\n relay = signBuilderPreviewRelayState({\n ownerEmail,\n targetOrigin:\n resolveBuilderPreviewRelayTargetOrigin(previewOrigin),\n basePath: getAppBasePath(),\n });\n } catch (err) {\n const msg =\n err instanceof Error\n ? err.message\n : \"Builder preview relay is not configured.\";\n setResponseStatus(event, 503);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n title: \"Builder preview connection isn't configured\",\n body: \"This preview needs its secure Builder callback relay configured before authorization can start.\",\n closeHint:\n \"Close this popup and ask the preview owner to finish Builder relay setup.\",\n parentOrigin: previewOrigin,\n });\n }\n }\n\n let pendingOrgId: string | null = null;\n let pendingRole: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const orgContext = await getOrgContext(event);\n pendingOrgId = orgContext.orgId ?? null;\n pendingRole = orgContext.role ?? null;\n } catch {\n // The pending owner remains user-scoped when org context is absent.\n }\n }\n\n // Store a short-lived pending row. If the DB is unavailable we\n // surface a popup-renderable error page that signals the parent\n // via BroadcastChannel, rather than letting the popup show raw\n // JSON and the parent poll for 5 minutes.\n try {\n if (relay) {\n await putSetting(builderRelayPendingKey(relay.payload.flowId), {\n ownerEmail,\n orgId: pendingOrgId,\n role: pendingRole,\n targetOrigin: relay.payload.targetOrigin,\n basePath: relay.payload.basePath,\n expiresAt: relay.payload.exp,\n tracking: connectTracking,\n });\n } else {\n await putSetting(`builder-pending-connect:${ownerEmail}`, {\n expiresAt: Date.now() + BUILDER_CONNECT_PENDING_TTL_MS,\n tracking: connectTracking,\n });\n }\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"pending_storage_unavailable\",\n stage: \"connect\",\n },\n );\n const msg =\n \"Could not initiate Builder connect — storage unavailable. Try again.\";\n console.error(\n \"[builder] Could not store pending-connect state:\",\n (err as Error)?.message ?? err,\n );\n // Best-effort: also write the error row so the parent's\n // /builder/status poll picks it up if BroadcastChannel doesn't.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: getBuilderBrowserOriginForEvent(event),\n });\n }\n await trackBuilderLifecycle(\n event,\n \"builder connect started\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n stage: \"connect\",\n connect_token_owner_matches_context:\n !connectTokenOwner || connectTokenOwner === ownerEmail,\n },\n );\n setBuilderConnectOwnerCookie(event, ownerEmail);\n // The primary UI now opens the signed Builder /cli-auth URL directly\n // from /builder/status. Keep this legacy trampoline working for older\n // clients, but still send it to Builder immediately and include signed\n // callback state so the callback does not depend on popup cookies.\n const cliAuthUrl = buildBuilderCliAuthUrl(\n callbackOrigin,\n signBuilderCallbackState(ownerEmail),\n {\n previewOrigin,\n relayState: relay?.state,\n tracking: connectTracking,\n },\n );\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", cliAuthUrl);\n return \"\";\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = await readBody(event).catch(() => ({}) as any);\n const prompt = typeof body?.prompt === \"string\" ? body.prompt : \"\";\n if (!prompt.trim()) {\n setResponseStatus(event, 400);\n return { error: \"prompt is required\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const userEmail = session.email;\n\n let orgId: string | null = null;\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n\n // Wrap in runWithRequestContext so resolveBuilderCredential() inside\n // runBuilderAgent() resolves per-user app_secrets rather than falling\n // through to process.env — the same pattern the /builder/status endpoint\n // uses. Without this, per-user Builder keys stored in app_secrets are\n // invisible to the run path and the call throws \"Builder keys are not\n // configured\" even though the status endpoint correctly reports configured=true.\n return runWithRequestContext(\n { userEmail, orgId: orgId ?? undefined },\n async () => {\n const projectId = await resolveBuilderBranchProjectId();\n if (!projectId) {\n setResponseStatus(event, 403);\n return {\n error:\n \"Builder branch creation is not available for this organization yet.\",\n };\n }\n\n const { resolveBuilderCredential: resolveBuilderCred } =\n await import(\"./credential-provider.js\");\n const builderUserId =\n (await resolveBuilderCred(\"BUILDER_USER_ID\")) || undefined;\n // Server-controlled projectId — don't let clients target arbitrary\n // Builder projects with our private key. When this feature graduates\n // past the hardcoded preview, the projectId will come from\n // workspace/org config, still resolved server-side.\n try {\n const result = await runBuilderAgent({\n prompt,\n projectId,\n branchName:\n typeof body?.branchName === \"string\"\n ? body.branchName\n : undefined,\n userEmail,\n userId: builderUserId,\n });\n return result;\n } catch (e) {\n setResponseStatus(event, 500);\n return {\n error: e instanceof Error ? e.message : \"Builder run failed\",\n };\n }\n },\n );\n }),\n );\n\n // Branch-creation waitlist signup. Used by ConnectBuilderCard when the\n // current request has no Builder branch project configured. Hosted\n // Agent Native deployments submit into the Builder-org Forms waitlist;\n // local/self-hosted deployments keep the analytics signal without\n // sending private workspace data to Agent Native.\n getH3App(nitroApp).use(\n `${P}/builder/branch-waitlist`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n const body = ((await readBody(event).catch(() => ({}))) ??\n {}) as BuilderWaitlistBody;\n const waitlistEmail = resolveWaitlistEmail(\n session?.email,\n body.email,\n );\n if (!waitlistEmail) {\n setResponseStatus(event, 400);\n return { error: \"Valid email required\" };\n }\n const waitlistRateLimit = checkBuilderWaitlistRateLimit(\n event,\n waitlistEmail,\n );\n if (!waitlistRateLimit.ok) {\n setResponseStatus(event, 429);\n setResponseHeader(\n event,\n \"Retry-After\",\n String(waitlistRateLimit.retryAfterSeconds),\n );\n return {\n error:\n \"Too many waitlist requests. Please try again in a minute.\",\n };\n }\n const waitlistPayload = buildBuilderWaitlistFormPayload(\n event,\n waitlistEmail,\n body,\n );\n const waitlistSource = waitlistPayload.data.source;\n const waitlistTemplate = waitlistPayload.data.template;\n const waitlistUseCase = waitlistPayload.data.useCase;\n let formSubmission: { submitted: boolean; formId?: string };\n try {\n formSubmission = await submitBuilderWaitlistForm(\n event,\n waitlistEmail,\n body,\n );\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder branch waitlist form failed\",\n waitlistEmail,\n {\n reason:\n err instanceof Error ? err.message : \"unknown_waitlist_error\",\n source: waitlistSource,\n stage: \"waitlist\",\n template: waitlistTemplate ?? null,\n useCase: waitlistUseCase,\n },\n );\n setResponseStatus(event, 502);\n return {\n error:\n \"Couldn't join the waitlist. Please try again in a moment.\",\n };\n }\n await trackBuilderLifecycle(\n event,\n \"builder branch waitlist joined\",\n waitlistEmail,\n {\n formId: formSubmission.formId ?? null,\n formSubmitted: formSubmission.submitted,\n source: waitlistSource,\n stage: \"waitlist\",\n template: waitlistTemplate ?? null,\n useCase: waitlistUseCase,\n },\n );\n return { ok: true, formSubmitted: formSubmission.submitted };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/relay`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const rawBody = await readBuilderRelayRequestBody(event);\n const result = await consumeBuilderRelayRequest(\n {\n rawBody,\n timestamp: getHeader(event, BUILDER_RELAY_TIMESTAMP_HEADER),\n flowId: getHeader(event, BUILDER_RELAY_FLOW_HEADER),\n signature: getHeader(event, BUILDER_RELAY_SIGNATURE_HEADER),\n requestOrigin: getBuilderBrowserOriginForEvent(event),\n requestBasePath: getAppBasePath(),\n },\n {\n getPending: getSetting,\n deletePending: deleteSetting,\n writeCredentials: async (ownerEmail, credentials, scope) => {\n const { writeBuilderCredentials } =\n await import(\"./credential-provider.js\");\n await writeBuilderCredentials(ownerEmail, credentials, scope);\n await Promise.all([\n deleteSetting(\"builder-disconnected\").catch(() => false),\n deleteSetting(`builder-connect-error:${ownerEmail}`).catch(\n () => false,\n ),\n ]);\n },\n },\n ).catch(() => ({\n ok: false as const,\n status: 500,\n error: \"Builder relay credential persistence failed\",\n }));\n if (!result.ok) {\n setResponseStatus(event, result.status);\n return { error: result.error };\n }\n return { ok: true };\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/builder/callback`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n // Builder's provider contract puts credentials on this first-hop\n // URL. Keep the response out of caches and suppress referrer\n // propagation even though the second hop carries secrets only in\n // its authenticated POST body.\n setResponseHeader(event, \"Cache-Control\", \"no-store\");\n setResponseHeader(event, \"Referrer-Policy\", \"no-referrer\");\n\n const requestUrl = getFrameworkRouteRequestUrl(event);\n const relayStateRaw = requestUrl.searchParams.get(\n BUILDER_RELAY_STATE_PARAM,\n );\n if (relayStateRaw) {\n let relayPayload: BuilderPreviewRelayState | null = null;\n try {\n relayPayload =\n verifyBuilderPreviewRelayStateForCallback(relayStateRaw);\n } catch {\n // A preview relay must fail closed when its dedicated shared\n // secret is absent on the corporate callback deployment.\n }\n if (!relayPayload) {\n setResponseStatus(event, 403);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(\n \"Builder preview relay state is invalid or expired.\",\n );\n }\n\n const relayOpenerOrigin =\n requestUrl.searchParams.get(BUILDER_OPENER_PARAM);\n const relayParentOrigin = resolveBuilderPreviewRelayParentOrigin({\n openerOrigin: relayOpenerOrigin,\n targetOrigin: relayPayload.targetOrigin,\n });\n\n const privateKey = requestUrl.searchParams.get(\"p-key\");\n const publicKey = requestUrl.searchParams.get(\"api-key\");\n if (!privateKey || !publicKey) {\n setResponseStatus(event, 400);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(\n \"Builder didn't return credentials. Restart the connect flow from settings.\",\n { parentOrigin: relayParentOrigin },\n );\n }\n\n const credentials: BuilderRelayCredentials = {\n privateKey,\n publicKey,\n userId: requestUrl.searchParams.get(\"user-id\"),\n orgName: requestUrl.searchParams.get(\"org-name\"),\n orgKind: requestUrl.searchParams.get(\"kind\"),\n subscription: requestUrl.searchParams.get(\"subscription\"),\n subscriptionLevel:\n requestUrl.searchParams.get(\"subscription-level\"),\n subscriptionName:\n requestUrl.searchParams.get(\"subscription-name\"),\n isEnterprise: parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-enterprise\"),\n ),\n isFreeAccount: parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-free-account\"),\n ),\n };\n\n try {\n const relayRequest = createBuilderRelayRequest(\n relayStateRaw,\n credentials,\n );\n const response = await ssrfSafeFetch(\n relayRequest.url,\n {\n method: \"POST\",\n headers: relayRequest.headers,\n body: relayRequest.body,\n },\n { maxRedirects: 0, httpsOnly: true },\n );\n if (!response.ok) {\n throw new Error(\n `Preview relay rejected the callback (${response.status}).`,\n );\n }\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : \"Builder preview relay failed.\";\n // Never log the first-hop URL or relay body: both contain\n // credentials. The popup gets a bounded, credential-free error.\n setResponseStatus(event, 502);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(message, {\n parentOrigin: relayParentOrigin,\n });\n }\n\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackPage(\n `${relayParentOrigin}${relayPayload.basePath || \"/\"}`,\n { parentOrigin: relayParentOrigin },\n );\n }\n\n // A real session or a template-approved anonymous owner is required;\n // the pending-row check below (combined with the same-origin gate on\n // /builder/connect) blocks CSRF and callback replay.\n const ownerContext = await resolveBuilderOwnerContext(\n event,\n \"callback\",\n );\n const ownerEmail = ownerContext.email;\n // Diagnostic: log the resolver's inputs for debugging \"No active\n // connect flow found\" reports. Reveals session-vs-state owner\n // mismatches and missing/forged _an_state without leaking the\n // signed token itself.\n try {\n const debugSearch = getFrameworkRouteRequestUrl(event).searchParams;\n const stateRaw = debugSearch.get(BUILDER_STATE_PARAM);\n const stateOwnerProbe =\n verifyBuilderCallbackStateAndGetOwner(stateRaw);\n const session = await getSession(event).catch(() => null);\n console.log(\n `[builder-callback] resolved-owner=${ownerEmail ?? \"(none)\"} session-email=${session?.email ?? \"(none)\"} state-owner=${stateOwnerProbe ?? \"(none)\"} state-present=${Boolean(stateRaw)} anon=${ownerContext.anonymous} host=${getHeader(event, \"host\") ?? \"(none)\"} sec-fetch-site=${getHeader(event, \"sec-fetch-site\") ?? \"(none)\"} origin=${getHeader(event, \"origin\") ?? \"(none)\"} referer=${getHeader(event, \"referer\") ?? \"(none)\"}`,\n );\n } catch {\n // Diagnostic logging is best-effort; do not break the callback.\n }\n if (!ownerEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n clearBuilderConnectOwnerCookie(event);\n\n let connectTracking = getBuilderConnectTrackingParams(\n requestUrl.searchParams,\n );\n // postMessage from the callback success/error pages must target the\n // original preview opener, not the callback server. On the fallback\n // path the callback is served from the env-configured gateway while\n // the opener lives on the preview origin. Three sources of opener\n // origin, in priority order:\n // 1. `_an_opener` — written into the callback URL's query by\n // buildBuilderCliAuthUrl when cli-auth's allow-list forced\n // preview_url onto the gateway. Survives Builder's redirect\n // verbatim (Builder preserves redirect_url's query string).\n // 2. `preview-url` — Builder echoes the top-level preview_url back\n // as a query param on the callback. Reflects the gateway on\n // the fallback path, but matches the opener on the happy path.\n // 3. The event's own origin — last-resort fallback.\n const openerOriginFromQuery =\n requestUrl.searchParams.get(BUILDER_OPENER_PARAM);\n const callbackParentOrigin =\n resolveSafePreviewUrl(openerOriginFromQuery, event) ||\n resolveSafePreviewUrl(\n requestUrl.searchParams.get(\"preview-url\"),\n event,\n ) ||\n getBuilderBrowserOriginForEvent(event);\n const callbackStateOwner = verifyBuilderCallbackStateAndGetOwner(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n );\n const hasValidCallbackState = callbackStateOwner === ownerEmail;\n\n // Verify either:\n // 1. the signed callback state embedded in redirect_url by\n // /builder/status (primary flow), or\n // 2. the server-side pending-connect row written by the legacy\n // /builder/connect trampoline.\n //\n // For the pending-row path, delete must succeed before we proceed;\n // otherwise a DB blip\n // leaves the row in place and the same callback URL can be\n // replayed against the same session for up to 10 minutes (the\n // TTL window). Treat a delete failure as a hard failure: the\n // user retries, the next /builder/connect call rewrites the\n // pending row.\n let pendingValid = hasValidCallbackState;\n let pendingError: string | null = null;\n try {\n const pending = (await getSetting(\n `builder-pending-connect:${ownerEmail}`,\n )) as {\n expiresAt?: number;\n tracking?: BuilderConnectTrackingParams;\n } | null;\n if (pending?.tracking) {\n connectTracking = {\n signupSource:\n connectTracking.signupSource ?? pending.tracking.signupSource,\n agentNativeFlow:\n connectTracking.agentNativeFlow ??\n pending.tracking.agentNativeFlow,\n agentNativeConnectSource:\n connectTracking.agentNativeConnectSource ??\n pending.tracking.agentNativeConnectSource,\n agentNativeApp:\n connectTracking.agentNativeApp ??\n pending.tracking.agentNativeApp,\n agentNativeTemplate:\n connectTracking.agentNativeTemplate ??\n pending.tracking.agentNativeTemplate,\n };\n }\n if (\n pending &&\n typeof pending.expiresAt === \"number\" &&\n Date.now() < pending.expiresAt\n ) {\n try {\n await deleteSetting(`builder-pending-connect:${ownerEmail}`);\n pendingValid = true;\n } catch (err) {\n if (!hasValidCallbackState) {\n pendingError =\n \"Could not consume pending-connect token (storage error). Please retry.\";\n console.error(\n \"[builder] deleteSetting failed for pending-connect — refusing to proceed (replay risk):\",\n (err as Error)?.message ?? err,\n );\n }\n }\n }\n } catch {\n // DB temporarily unavailable — treat as missing.\n }\n\n if (pendingError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"pending_consume_storage_error\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to the parent's poll loop, then render the\n // popup-friendly error page so the BroadcastChannel notify fires.\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: pendingError,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 503);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(pendingError, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n if (!pendingValid) {\n // Diagnostic: log the exact reason pendingValid is false so we can\n // distinguish \"state didn't validate\" from \"no pending row\" in\n // production \"No active connect flow found\" reports.\n console.warn(\n `[builder-callback] pending-invalid owner=${ownerEmail} has-state-param=${Boolean(requestUrl.searchParams.get(BUILDER_STATE_PARAM))} state-validated=${hasValidCallbackState} pending-error=${pendingError ?? \"(none)\"}`,\n );\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: hasValidCallbackState\n ? \"callback_state_unexpectedly_rejected\"\n : \"missing_pending_connect\",\n stage: \"callback\",\n has_callback_state: Boolean(\n requestUrl.searchParams.get(BUILDER_STATE_PARAM),\n ),\n },\n );\n const msg =\n \"No active connect flow found. Restart the Builder connect flow from Settings.\";\n // Write an error signal so the polling loop in the parent tab\n // terminates quickly instead of waiting 5 minutes for the timeout.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n });\n } catch {\n // DB unavailable — parent will time out naturally.\n }\n setResponseStatus(event, 403);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n const privateKey = requestUrl.searchParams.get(\"p-key\");\n const publicKey = requestUrl.searchParams.get(\"api-key\");\n\n if (!privateKey || !publicKey) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"missing_credentials\",\n stage: \"callback\",\n },\n );\n // Render the popup-friendly error page (and write a status row)\n // instead of bare JSON, so the parent tab's poll loop terminates\n // immediately via BroadcastChannel rather than hanging until the\n // 5-minute timeout.\n const msg =\n \"Builder didn't return credentials. Restart the connect flow from settings.\";\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: msg,\n at: Date.now(),\n }).catch(() => {});\n setResponseStatus(event, 400);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(msg, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n const userId = requestUrl.searchParams.get(\"user-id\");\n const orgName = requestUrl.searchParams.get(\"org-name\");\n const orgKind = requestUrl.searchParams.get(\"kind\");\n const subscription = requestUrl.searchParams.get(\"subscription\");\n const subscriptionLevel =\n requestUrl.searchParams.get(\"subscription-level\");\n const subscriptionName =\n requestUrl.searchParams.get(\"subscription-name\");\n const isEnterprise = parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-enterprise\"),\n );\n const isFreeAccount = parseBuilderCallbackBoolean(\n requestUrl.searchParams.get(\"is-free-account\"),\n );\n\n // Store per-user in app_secrets so each user's Builder connection\n // is independent. No more shared env vars that the last connector\n // overwrites.\n //\n // Failure handling: a silent catch here (returning the success page\n // anyway) was Midhun's bug on 2026-04-28 — popup said \"yay\", parent\n // window polled `/builder/status` for 5 minutes seeing\n // configured:false, never got a real error. Now we surface the\n // failure two ways: (a) a settings row that the next /builder/status\n // poll picks up, and (b) postMessage from the error page itself,\n // wired into the popup HTML, so the parent stops polling immediately.\n let writeError: string | null = null;\n try {\n const { writeBuilderCredentials } =\n await import(\"./credential-provider.js\");\n // Resolve the user's active org / role so the credentials land\n // at org scope when an owner/admin is connecting (everyone in\n // the org auto-resolves them on next chat call). Members and\n // users with no active org silently fall back to user scope.\n // Failure to read org context is non-fatal — we just keep the\n // legacy per-user behaviour for that connection.\n let orgId: string | null = null;\n let role: string | null = null;\n if (!ownerContext.anonymous) {\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present in this template — keep user scope */\n }\n }\n const target = await writeBuilderCredentials(\n ownerEmail,\n {\n privateKey,\n publicKey,\n userId,\n orgName,\n orgKind,\n subscription,\n subscriptionLevel,\n subscriptionName,\n isEnterprise,\n isFreeAccount,\n },\n { orgId, role },\n );\n console.log(\n `[builder-connect] wrote credentials email=${ownerEmail} requestOrgId=${orgId ?? \"(none)\"} role=${role ?? \"(none)\"} scope=${target.scope} scopeId=${target.scopeId}`,\n );\n } catch (err) {\n writeError = (err as Error)?.message ?? String(err);\n console.error(\n \"[builder] Failed to persist Builder credentials:\",\n writeError,\n );\n }\n\n if (writeError) {\n await trackBuilderLifecycle(\n event,\n \"builder connect failed\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n reason: \"credential_write_failed\",\n stage: \"callback\",\n },\n );\n // Best-effort signal to /builder/status. If putSetting also fails\n // (entire DB unreachable) the popup's postMessage still notifies\n // the parent. If both fail the parent times out at 5min as today.\n try {\n await putSetting(`builder-connect-error:${ownerEmail}`, {\n message: writeError,\n at: Date.now(),\n });\n } catch (settingsErr) {\n console.error(\n \"[builder] Couldn't even record connect-error to settings:\",\n (settingsErr as Error)?.message ?? settingsErr,\n );\n }\n setResponseStatus(event, 500);\n setResponseHeader(\n event,\n \"Content-Type\",\n \"text/html; charset=utf-8\",\n );\n return createBuilderBrowserCallbackErrorPage(writeError, {\n parentOrigin: callbackParentOrigin,\n });\n }\n\n // Clear any legacy disconnect flag and any prior connect-error row\n // (so a successful retry doesn't surface the previous failure).\n try {\n await deleteSetting(\"builder-disconnected\");\n } catch {\n // DB not ready — proceed\n }\n try {\n await deleteSetting(`builder-connect-error:${ownerEmail}`);\n } catch {\n // No prior error row — fine\n }\n\n const previewUrl = resolveBuilderCallbackReturnUrl({\n event,\n openerOrigin: openerOriginFromQuery,\n previewUrl: requestUrl.searchParams.get(\"preview-url\"),\n });\n await trackBuilderLifecycle(\n event,\n \"builder connect succeeded\",\n ownerEmail,\n {\n ...builderConnectTrackingProperties(connectTracking),\n stage: \"callback\",\n has_preview_url: Boolean(previewUrl),\n org_kind: orgKind || undefined,\n subscription: subscription || undefined,\n subscription_level: subscriptionLevel || undefined,\n subscription_name: subscriptionName || undefined,\n is_enterprise: isEnterprise ?? undefined,\n is_free_account: isFreeAccount ?? undefined,\n },\n );\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n // The parent (opener) is the original preview surface that started the\n // connect flow, NOT the callback server's own origin — when the\n // env-configured gateway is used as the callback fallback (because\n // Builder rejects the preview host), the callback server and the\n // opener live on different origins, and postMessage to the gateway\n // origin would be dropped by the preview opener. callbackParentOrigin\n // is the precomputed best-available opener origin (`_an_opener` →\n // `preview-url` → event origin).\n return createBuilderBrowserCallbackPage(previewUrl, {\n parentOrigin: callbackParentOrigin,\n });\n }),\n );\n\n // POST /_agent-native/builder/disconnect — revoke the user's per-user\n // or org-scoped Builder credentials in app_secrets. Deploy-level env\n // credentials are never mutated here; if env is configured it remains as\n // the fallback after request-scoped credentials are removed.\n getH3App(nitroApp).use(\n `${P}/builder/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const { deleteBuilderCredentials } =\n await import(\"./credential-provider.js\");\n\n // Mirror the connect-side scope decision so disconnect undoes\n // exactly what connect wrote: owner/admin connections land at\n // org scope and tear down at org scope; member or no-org\n // connections stay user-scoped on both ends. Symmetric, so a\n // single Disconnect press always reverses what the same user's\n // Connect press did.\n let orgId: string | null = null;\n let role: string | null = null;\n try {\n const { getOrgContext } = await import(\"../org/context.js\");\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n role = orgCtx.role ?? null;\n } catch {\n /* org module not present — keep user scope */\n }\n\n try {\n await deleteBuilderCredentials(session.email, { orgId, role });\n } catch (err) {\n await trackBuilderLifecycle(\n event,\n \"builder disconnect failed\",\n session.email,\n {\n reason: \"credential_delete_failed\",\n },\n );\n setResponseStatus(event, 500);\n return {\n ok: false,\n error:\n \"Could not remove Builder credentials — your connection is unchanged. Please retry.\",\n cause: err instanceof Error ? err.message : String(err),\n };\n }\n\n await trackBuilderLifecycle(\n event,\n \"builder disconnect succeeded\",\n session.email,\n );\n return { ok: true };\n }),\n );\n\n // Proxy to Builder's agents-run API for background code changes.\n getH3App(nitroApp).use(\n `${P}/builder/agents-run`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n return runWithRequestContext(\n { userEmail: session.email, orgId: session.orgId ?? undefined },\n async () => {\n const { resolveBuilderCredentials: resolveCreds } =\n await import(\"./credential-provider.js\");\n const creds = await resolveCreds();\n if (!creds.privateKey || !creds.publicKey) {\n setResponseStatus(event, 400);\n return {\n error:\n \"Builder not connected. Connect Builder in Setup to use background agent.\",\n };\n }\n const body = (await readBody(event)) as {\n userMessage?: string;\n branchName?: string;\n projectUrl?: string;\n };\n if (!body?.userMessage) {\n setResponseStatus(event, 400);\n return { error: \"userMessage is required\" };\n }\n const apiHost =\n process.env.BUILDER_API_HOST || \"https://api.builder.io\";\n try {\n const res = await fetch(\n `${apiHost}/agents/run?apiKey=${encodeURIComponent(creds.publicKey)}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.privateKey}`,\n },\n body: JSON.stringify({\n userMessage: {\n userPrompt: body.userMessage,\n },\n branchName: body.branchName,\n }),\n },\n );\n if (!res.ok) {\n const err = await res.text().catch(() => \"Unknown error\");\n setResponseStatus(event, res.status);\n return {\n error: redactValues(err, [\n creds.privateKey,\n creds.publicKey,\n ]),\n };\n }\n return await res.json();\n } catch (err: any) {\n setResponseStatus(event, 500);\n return {\n error: redactValues(\n err?.message || \"Failed to reach Builder agents-run API\",\n [creds.privateKey, creds.publicKey],\n ),\n };\n }\n },\n );\n }),\n );\n\n // Env key management — framework keys are always included\n const frameworkEnvKeys = getFrameworkEnvKeys();\n {\n const envKeys = [...frameworkEnvKeys, ...(options.envKeys ?? [])];\n const allowedEnvKeyNames = envKeys.map(({ key }) => key);\n\n getH3App(nitroApp).use(\n `${P}/env-status`,\n defineEventHandler(async (event) => {\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n let orgId: string | undefined;\n if (userEmail) {\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? undefined;\n } catch {\n /* org module not present in this template */\n }\n }\n return Promise.all(\n envKeys.map(async (cfg) => {\n const configured = await runWithRequestContext(\n { userEmail, orgId },\n () => resolveSecret(cfg.key).then(Boolean),\n );\n return {\n key: cfg.key,\n label: cfg.label,\n required: cfg.required ?? false,\n configured,\n ...(cfg.helpText ? { helpText: cfg.helpText } : {}),\n };\n }),\n );\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/env-vars`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = await readBody(event);\n const { vars, scope } = body as {\n vars?: Array<{ key: string; value: string }>;\n scope?: ScopedKeySaveRequestScope;\n };\n const unsupportedKeys = findUnsupportedScopedKeyNames(\n vars,\n allowedEnvKeyNames,\n );\n if (unsupportedKeys.length > 0) {\n setResponseStatus(event, 400);\n return {\n error: `Unsupported env key${unsupportedKeys.length === 1 ? \"\" : \"s\"}: ${unsupportedKeys.join(\", \")}`,\n };\n }\n\n try {\n const result = await saveKeyValuesToScopedSecrets(\n event,\n vars,\n scope,\n );\n return { saved: result.saved, storage: \"scoped-secrets\" };\n } catch (err) {\n if (err instanceof ScopedKeyStorageError) {\n setResponseStatus(event, err.statusCode);\n return { error: err.message };\n }\n setResponseStatus(event, 500);\n return { error: \"Failed to save keys\" };\n }\n }),\n );\n }\n\n getH3App(nitroApp).use(\n `${P}/agent-engine/api-key`,\n createAgentEngineApiKeyHandler(),\n );\n\n // GET /_agent-native/agent-engine/status — reports whether an engine\n // is configured (settings row, settings+env, or auto-detected from env).\n // The agent-chat UI uses this to skip the onboarding gate for providers\n // not in the env-status list (OpenRouter, Groq, Ollama, …).\n getH3App(nitroApp).use(\n `${P}/agent-engine/status`,\n defineEventHandler(async (event) => {\n try {\n const { userEmail, orgId } =\n await resolveAgentEngineStatusIdentity(event);\n return await shareAgentEngineStatusLookup(\n agentEngineStatusIdentityKey(userEmail, orgId),\n () =>\n Promise.resolve(\n runWithRequestContext({ userEmail, orgId }, () =>\n resolveAgentEngineStatus(requestAgentEngineStatusDeps()),\n ),\n ),\n );\n } catch (err) {\n // NOT `{ configured: false }`. A 200 saying \"not configured\" is an\n // authoritative answer to the client, so a DB blip here renders as\n // \"connect an AI provider\" and gates the composer. 503 is the only\n // response the client can tell apart from a real answer — it maps\n // to `unavailable`, which keeps the composer usable and retries.\n console.error(\"[agent-engine/status] lookup failed\", err);\n setResponseStatus(event, 503);\n return { error: \"Could not read the agent engine configuration.\" };\n }\n }),\n );\n\n // POST /_agent-native/track — client-originated analytics events.\n // The browser `track()` helper POSTs `{ name, properties }` here so app\n // code can fan out to the SAME server-side providers (PostHog/Mixpanel/\n // etc.) that server `track()` reaches. Authenticated + first-party only:\n // the CSRF middleware above (mounted before route handlers) already\n // requires the X-Agent-Native-CSRF marker the client helper sends, and we\n // require a resolved session so this can't become an open relay. Events\n // are attributed to the resolved user/org — never a client-supplied id.\n // Best-effort: invalid bodies 400, everything else returns 204 and\n // provider errors are swallowed by the server `track()`.\n getH3App(nitroApp).use(\n `${P}/track`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n if (!userEmail) {\n setResponseStatus(event, 401);\n return { error: \"Authentication required\" };\n }\n const body = await readBody(event).catch(() => undefined);\n const validation = validateTrackPayload(body);\n if (!validation.ok) {\n setResponseStatus(event, 400);\n return { error: validation.error ?? \"Invalid tracking payload.\" };\n }\n\n // Attribute to the active org when the template uses orgs. The\n // registry's `track()` only carries `userId` in meta, so org context\n // rides along in properties — every built-in provider forwards\n // `properties` verbatim. Client-supplied properties never override\n // the server-resolved `org_id`.\n let orgId: string | null = null;\n try {\n const orgCtx = await getOrgContext(event);\n orgId = orgCtx.orgId ?? null;\n } catch {\n /* org module not present in this template — keep userEmail-only */\n }\n\n const properties: Record<string, unknown> = {\n ...(validation.properties ?? {}),\n source: \"client\",\n };\n if (orgId) properties.org_id = orgId;\n\n // Best-effort — server `track()` swallows provider errors. We still\n // guard here so an unexpected throw can't surface to the browser.\n try {\n track(validation.name as string, properties, {\n userId: userEmail,\n });\n } catch {\n // best-effort\n }\n setResponseStatus(event, 204);\n return \"\";\n }),\n );\n\n // POST /_agent-native/agent-engine/disconnect — clear the agent-engine\n // setting. Env vars are left alone so the next chat turn falls back to\n // resolveEngine's env/default resolution.\n getH3App(nitroApp).use(\n `${P}/agent-engine/disconnect`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n try {\n await deleteSetting(\"agent-engine\");\n return { ok: true };\n } catch (err) {\n setResponseStatus(event, 500);\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }),\n );\n\n // GET/PUT/DELETE /_agent-native/agent-loop-settings — org/user-scoped\n // ceiling for tool-calling loop iterations before the agent asks whether\n // it should keep going.\n getH3App(nitroApp).use(\n `${P}/agent-loop-settings`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const orgCtx = await getOrgContext(event).catch(() => null);\n const orgId = orgCtx?.orgId ?? session.orgId ?? null;\n const ctx = { userEmail: session.email, orgId };\n const canUpdate = await canUpdateAgentLoopSettings(\n session.email,\n orgId,\n );\n\n const withContext = async () => ({\n ...(await readAgentLoopSettings(ctx)),\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n });\n\n const method = getMethod(event);\n if (method === \"GET\") {\n return withContext();\n }\n\n if (method === \"PUT\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can change the agent step limit.\"\n : \"You cannot change the agent step limit.\",\n };\n }\n const body = await readBody(event).catch(() => ({}));\n const validation = validateMaxIterationsInput(\n (body as any)?.maxIterations,\n );\n if (validation.ok === false) {\n setResponseStatus(event, 400);\n return { error: validation.error };\n }\n const updated = await writeAgentLoopSettings(ctx, validation.value);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n if (method === \"DELETE\") {\n if (!canUpdate) {\n setResponseStatus(event, 403);\n return {\n error: orgId\n ? \"Only organization owners and admins can reset the agent step limit.\"\n : \"You cannot reset the agent step limit.\",\n };\n }\n const updated = await resetAgentLoopSettings(ctx);\n return {\n ...updated,\n canUpdate,\n orgId,\n orgName: orgCtx?.orgName ?? null,\n role: orgCtx?.role ?? null,\n };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Usage & cost summary ────────────────────────────────────────\n // GET /_agent-native/usage?sinceDays=30\n // Returns spend broken down by label, model, app, and day for the\n // current user. Powers the Usage section in the agent settings panel.\n getH3App(nitroApp).use(\n `${P}/usage`,\n defineEventHandler(async (event: H3Event) => {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const sinceDaysParam = new URL(\n `${event.url?.pathname || \"/\"}${event.url?.search || \"\"}`,\n \"http://x\",\n ).searchParams.get(\"sinceDays\");\n const sinceDays = Math.max(\n 1,\n Math.min(365, Number(sinceDaysParam) || 30),\n );\n const { getUsageSummary, usageBillingForEngine } =\n await import(\"../usage/store.js\");\n const [summary, engineName] = await Promise.all([\n getUsageSummary({\n ownerEmail: session.email,\n sinceMs: Date.now() - sinceDays * 86_400_000,\n }),\n detectUsageEngineName(event, session.email),\n ]);\n return {\n ...summary,\n billing: usageBillingForEngine(engineName),\n };\n }),\n );\n\n // ─── File upload primitive ──────────────────────────────────────\n // GET /_agent-native/file-upload/status — report active provider\n // POST /_agent-native/file-upload — upload a file, return { url }\n getH3App(nitroApp).use(\n `${P}/file-upload/status`,\n defineEventHandler(async (event) => {\n // resolveBuilderPrivateKey() reads per-user credentials from app_secrets\n // (DB), which requires request context (AsyncLocalStorage) to know which\n // user to scope by. Without runWithRequestContext() the ALS store is empty\n // and it falls back to process.env only — missing OAuth-connected users.\n const session = await getSession(event).catch(() => null);\n const userEmail = session?.email;\n const resolveStatus = async () => {\n const active = await getActiveFileUploadProviderForRequest();\n let builderConfigured = !!process.env.BUILDER_PRIVATE_KEY;\n try {\n const { resolveBuilderPrivateKey } =\n await import(\"./credential-provider.js\");\n builderConfigured = await resolveBuilderPrivateKey().then(\n (k) => !!k,\n );\n } catch {\n // fall back to env check above\n }\n\n const providers = await Promise.all(\n listFileUploadProviders().map(async (p) => {\n const scopedConfigured = p.isConfiguredForRequest\n ? await p.isConfiguredForRequest().catch(() => false)\n : false;\n return {\n id: p.id,\n name: p.name,\n configured: p.isConfigured() || scopedConfigured,\n };\n }),\n );\n\n // When the builder builtin is selected via env var, its sync\n // isConfigured() doesn't reflect per-user OAuth credentials. Use\n // builderConfigured so status reflects this specific request.\n const isBuilderEnvActive = active?.id === \"builder\";\n const configured = isBuilderEnvActive\n ? builderConfigured\n : !!active || builderConfigured;\n const activeProvider = isBuilderEnvActive\n ? builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null\n : active\n ? { id: active.id, name: active.name }\n : builderConfigured\n ? { id: \"builder\", name: \"Builder.io\" }\n : null;\n\n return {\n configured,\n activeProvider,\n providers,\n builderConfigured,\n };\n };\n\n return userEmail\n ? runWithRequestContext(\n { userEmail, orgId: session?.orgId },\n resolveStatus,\n )\n : resolveStatus();\n }),\n );\n\n getH3App(nitroApp).use(\n `${P}/file-upload`,\n defineEventHandler(async (event: H3Event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const parts = await readMultipartFormData(event);\n const filePart = parts?.find((p) => p.name === \"file\");\n if (!filePart?.data) {\n setResponseStatus(event, 400);\n return { error: \"No file uploaded\" };\n }\n\n // Reject files that exceed the upload size ceiling.\n if (filePart.data.length > DEFAULT_UPLOAD_MAX_FILE_BYTES) {\n setResponseStatus(event, 413);\n return {\n error: `File too large (max ${Math.round(DEFAULT_UPLOAD_MAX_FILE_BYTES / 1024 / 1024)} MB)`,\n };\n }\n\n // Reject executable/script MIME types.\n if (filePart.type && !isAllowedUploadMimeType(filePart.type)) {\n setResponseStatus(event, 415);\n return {\n error: `Unsupported file type: ${filePart.type}`,\n };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"Unauthorized\" };\n }\n const userEmail = session.email;\n const result = await runWithRequestContext(\n { userEmail, orgId: session.orgId },\n () =>\n uploadFile({\n data: filePart.data,\n filename: filePart.filename,\n mimeType: filePart.type,\n ownerEmail: userEmail,\n }),\n );\n\n if (result) {\n setResponseStatus(event, 201);\n return result;\n }\n\n setResponseStatus(event, 503);\n return {\n error:\n \"No file upload provider configured. Connect Builder.io in Settings → File uploads, or register a provider.\",\n };\n }),\n );\n\n // ─── Voice transcription (Whisper) ───────────────────────────────\n // POST /_agent-native/transcribe-voice — multipart audio → text\n getH3App(nitroApp).use(\n `${P}/transcribe-voice`,\n createTranscribeVoiceHandler(),\n );\n\n // ─── Google realtime transcription session bridge ───────────────\n // POST /_agent-native/transcribe-stream/session — resolve the user's\n // Google service-account credential server-side, mint an opaque managed\n // streaming session in ai-services, and return the websocket URL.\n getH3App(nitroApp).use(\n `${P}/transcribe-stream/session`,\n createGoogleRealtimeSessionHandler(),\n );\n\n // ─── Voice provider status ───────────────────────────────────────\n // GET /_agent-native/voice-providers/status — which providers are\n // configured for the current user (powers the Settings UI pills).\n getH3App(nitroApp).use(\n `${P}/voice-providers/status`,\n createVoiceProvidersStatusHandler(),\n );\n\n // ─── Ad-hoc secrets (user-created keys) ────────────────────────────\n // Must mount before the generic /secrets handler to avoid shadowing.\n const adHocSecretHandler = createAdHocSecretHandler();\n getH3App(nitroApp).use(`${P}/secrets/adhoc`, adHocSecretHandler);\n\n // ─── Secrets registry ────────────────────────────────────────────\n // GET /_agent-native/secrets — list registered secrets + status\n // POST /_agent-native/secrets/:key — write a secret value\n // DELETE /_agent-native/secrets/:key — remove a secret value\n // POST /_agent-native/secrets/:key/test — re-run the validator\n const listSecretsHandler = createListSecretsHandler();\n const writeSecretHandler = createWriteSecretHandler();\n const testSecretHandler = createTestSecretHandler();\n\n getH3App(nitroApp).use(\n `${P}/secrets`,\n defineEventHandler(async (event: H3Event) => {\n const pathname = (event.url?.pathname || \"\")\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n const parts = pathname ? pathname.split(\"/\") : [];\n\n // Collection root — list handler.\n if (parts.length === 0) {\n return listSecretsHandler(event);\n }\n\n // /:key/test — re-validate stored value.\n if (parts.length === 2 && parts[1] === \"test\") {\n return testSecretHandler(event);\n }\n\n // /:key — write / delete a specific secret.\n if (parts.length === 1) {\n return writeSecretHandler(event);\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Notifications inbox ──────────────────────────────────────────\n // GET /_agent-native/notifications[?unread&limit&before]\n // GET /_agent-native/notifications/count\n // POST /_agent-native/notifications/:id/read\n // POST /_agent-native/notifications/read-all\n // DELETE /_agent-native/notifications/:id\n getH3App(nitroApp).use(\n `${P}/notifications`,\n createNotificationsHandler(),\n );\n\n // ─── Extensions (sandboxed mini-app runtime + proxy) ────────────────\n try {\n const { ensureExtensionsTables, registerExtensionsShareable } =\n await import(\"../extensions/store.js\");\n const { createExtensionsHandler } =\n await import(\"../extensions/routes.js\");\n ensureExtensionsTables().catch(() => {});\n registerExtensionsShareable();\n const extensionsHandler = createExtensionsHandler();\n getH3App(nitroApp).use(`${P}/extensions`, extensionsHandler);\n // Legacy alias — the previous public API was /_agent-native/tools/*.\n // Mounted in addition to /extensions/* so any deployed iframes mid-flight\n // (or external integrations bookmarked the old path) keep working.\n getH3App(nitroApp).use(`${P}/tools`, extensionsHandler);\n\n // Extension-point slots — sub-system of extensions.\n const { ensureSlotTables } =\n await import(\"../extensions/slots/store.js\");\n const { createSlotsHandler } =\n await import(\"../extensions/slots/routes.js\");\n ensureSlotTables().catch(() => {});\n getH3App(nitroApp).use(`${P}/slots`, createSlotsHandler());\n } catch {\n // Extensions module not available — skip\n }\n\n // ─── Data programs (stored server-side JS scripts + run cache) ─────\n try {\n const { ensureDataProgramTables, registerDataProgramsShareable } =\n await import(\"../data-programs/store.js\");\n ensureDataProgramTables().catch(() => {});\n registerDataProgramsShareable();\n } catch {\n // Data programs module not available — skip\n }\n\n // ─── Page-level legacy redirect: /tools → /extensions ──────────────\n // Catches direct browser navigation / bookmarks for the old page route\n // (`/tools`, `/tools/:id`) and 302s to the renamed equivalent under\n // `/extensions`. The framework API alias above (`/_agent-native/tools/*`)\n // is intentionally untouched — it stays mounted in parallel.\n //\n // Mounted with no path so the helper can do its own base-path stripping\n // (h3 mount-matching only allows base-path stripping for `/_agent-native`\n // and `/.well-known`). Returns undefined to fall through for anything\n // that isn't a `/tools` page navigation.\n getH3App(nitroApp).use(\n defineEventHandler((event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"HEAD\") return;\n const rawPath =\n event.url?.pathname ??\n String(event.node?.req?.url ?? event.path ?? \"/\").split(\"?\")[0];\n const search = event.url?.search ?? \"\";\n const target = resolveLegacyToolsRedirect(rawPath, search);\n if (!target) return;\n setResponseStatus(event, 302);\n setResponseHeader(event, \"Location\", target);\n return \"\";\n }),\n );\n\n // ─── Agent run progress ───────────────────────────────────────────\n // GET /_agent-native/runs[?active&limit]\n // GET /_agent-native/runs/:id\n // DELETE /_agent-native/runs/:id\n getH3App(nitroApp).use(`${P}/runs`, createProgressHandler());\n\n // ─── Automations API ──────────────────────────────────────────────\n // GET /_agent-native/automations — list all automations (parsed triggers)\n // PATCH /_agent-native/automations — enable/disable a jobs/*.md automation\n // POST /_agent-native/automations/fire-test — emit test.event.fired\n getH3App(nitroApp).use(`${P}/automations`, createAutomationsHandler());\n\n // ─── Application State CRUD ──────────────────────────────────────\n // Auto-mounted so templates don't need boilerplate route files.\n\n // ─── User-scoped settings store ────────────────────────────────────\n // GET /_agent-native/settings/:key — read current user's value\n // PUT /_agent-native/settings/:key — write current user's value\n // DELETE /_agent-native/settings/:key — clear current user's value\n //\n // Keys are auto-prefixed with `u:<email>:` so each user gets their\n // own row — no leakage between sessions sharing the same DB.\n getH3App(nitroApp).use(\n `${P}/settings`,\n defineEventHandler(async (event: H3Event) => {\n const rawKey =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] || \"\";\n const key = rawKey.replace(/[^a-zA-Z0-9_-]/g, \"\");\n if (!key) {\n setResponseStatus(event, 404);\n return { error: \"Settings key required\" };\n }\n\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n\n const method = getMethod(event);\n const requestSource =\n (event.node?.req?.headers?.[\"x-request-source\"] as\n | string\n | undefined) || undefined;\n\n if (method === \"GET\") {\n const value = await getUserSetting(session.email, key);\n if (!value) {\n setResponseStatus(event, 404);\n return { error: `No setting for ${key}` };\n }\n return value;\n }\n\n if (method === \"PUT\") {\n const body = await readBody(event);\n await putUserSetting(session.email, key, body, { requestSource });\n return body;\n }\n\n if (method === \"DELETE\") {\n await deleteUserSetting(session.email, key, { requestSource });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // ─── Avatar routes ──────────────────────────────────────────────────\n // GET /_agent-native/avatar/:email — fetch any user's avatar (public)\n // PUT /_agent-native/avatar — update current user's avatar (auth required)\n //\n // Only raster MIME types are accepted on write; SVG carries scripting risk\n // (data:image/svg+xml payloads can execute JS when rendered by browsers),\n // so it is explicitly excluded. Mirrors the SAFE_DATA_IMAGE allowlist in\n // packages/core/src/client/blocks/library/sanitize-html.ts.\n getH3App(nitroApp).use(\n `${P}/avatar`,\n defineEventHandler(async (event: H3Event) => {\n const method = getMethod(event);\n const emailParam = resolveAvatarEmailParam(\n event.url?.pathname || \"\",\n getConfiguredAppBasePath(),\n );\n\n if (method === \"GET\") {\n if (!emailParam) {\n setResponseStatus(event, 400);\n return { error: \"email required\" };\n }\n const data = await getSetting(\n `avatar:${decodeURIComponent(emailParam)}`,\n );\n return { image: (data as any)?.image ?? null };\n }\n\n if (method === \"PUT\") {\n const session = await getSession(event);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { error: \"unauthorized\" };\n }\n const body = await readBody(event);\n const { image } = body as { image?: string };\n if (!image || !AVATAR_RASTER_MIME.test(image)) {\n setResponseStatus(event, 400);\n return {\n error:\n \"image must be a data URI with a raster MIME type (png, jpeg, gif, or webp)\",\n };\n }\n await putSetting(`avatar:${session.email}`, { image });\n return { ok: true };\n }\n\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n if (!options.disableMcpConnect) {\n getH3App(nitroApp).use(\n \"/.well-known/oauth-protected-resource\",\n defineEventHandler((event: H3Event) =>\n handleMcpOAuthProtectedResourceMetadata(event),\n ),\n );\n getH3App(nitroApp).use(\n \"/.well-known/oauth-authorization-server\",\n defineEventHandler((event: H3Event) =>\n handleMcpOAuthAuthorizationServerMetadata(event),\n ),\n );\n getH3App(nitroApp).use(\n \"/.well-known/openid-configuration\",\n defineEventHandler((event: H3Event) =>\n handleMcpOAuthAuthorizationServerMetadata(event),\n ),\n );\n for (const mcpRoutePrefix of MCP_ROUTE_PREFIXES) {\n getH3App(nitroApp).use(\n `${mcpRoutePrefix}/oauth`,\n defineEventHandler(async (event: H3Event) => {\n const subpath = event.url?.pathname || \"\";\n return handleMcpOAuth(event, subpath, {\n appId: options.mcpConnectAppId,\n appName: options.mcpConnectAppName ?? getAppName(),\n });\n }),\n );\n }\n\n // Frictionless external-agent connection. A logged-in user mints a\n // per-user, scoped, revocable MCP bearer token here — via the browser\n // Connect page or the OAuth-style device-code flow a CLI drives — so\n // they never copy a shared deployment secret. The handler resolves the\n // browser session itself and serves its own login form (like /open)\n // for the page + unauth device endpoints; the /token, /device/authorize,\n // /tokens, /tokens/revoke subpaths require a session and 401 without it.\n // The auth guard bypasses ONLY the page + device/start + device/poll\n // (see createAuthGuardFn in auth.ts).\n const mcpConnectOpts = {\n appId: options.mcpConnectAppId,\n appName: options.mcpConnectAppName ?? getAppName(),\n serverName: options.mcpConnectServerName,\n };\n for (const mcpRoutePrefix of MCP_ROUTE_PREFIXES) {\n getH3App(nitroApp).use(\n `${mcpRoutePrefix}/connect`,\n defineEventHandler(async (event: H3Event) => {\n // The framework strips the mount prefix from event.url.pathname,\n // so what remains is the subpath after `/connect` (e.g. `/token`,\n // `/device/start`, or `` for the page itself).\n const subpath = event.url?.pathname || \"\";\n return handleMcpConnect(event, subpath, mcpConnectOpts);\n }),\n );\n }\n }\n\n // Cross-app SSO (\"Sign in with Agent-Native\") — CLIENT side. Mounted\n // ONLY when `AGENT_NATIVE_IDENTITY_HUB_URL` is set, so an unset env var\n // means the route is never even registered: zero new surface, existing\n // auth byte-for-byte unchanged. `/login` 302s to the identity hub;\n // `/callback` verifies the hub-issued A2A-signed identity JWT and JIT-\n // links the verified email into this app's local Better Auth store. The\n // handler 404s if disabled (defence in depth). The auth guard bypasses\n // these two exact paths under the same env gate.\n if (isIdentitySsoEnabled()) {\n getH3App(nitroApp).use(\n `${P}/identity`,\n defineEventHandler(async (event: H3Event) => {\n // Framework strips the mount prefix; what remains is the subpath\n // after `/identity` (e.g. `/login`, `/callback`).\n const subpath = event.url?.pathname || \"\";\n return handleIdentitySso(event, subpath);\n }),\n );\n }\n\n if (!options.disableOpenRoute) {\n // Stable deep-link route. External agents (MCP/A2A) surface\n // `/_agent-native/open?app=…&view=…&<recordId>=…` links; this resolves\n // the browser session, writes the one-shot `navigate` app-state command\n // the UI already drains, and 302s to the rendered SPA view. The auth\n // guard bypasses this exact path so it can serve its own login form.\n getH3App(nitroApp).use(\n `${P}/open`,\n createOpenRouteHandler({\n resolveOpenPath: options.resolveOpenPath,\n allowUnauthenticatedOpen: options.allowUnauthenticatedOpen,\n }),\n );\n }\n\n if (!options.disableEmbedRoute) {\n // One-time ticket launcher for MCP Apps that embed the full React app.\n // The ticket is minted by an authenticated MCP tool call and exchanged\n // here for a short-lived browser session cookie + bearer fallback.\n getH3App(nitroApp).use(\n `${P}/embed/start`,\n createEmbedStartRouteHandler({ getExistingSession: getSession }),\n );\n\n // POST /_agent-native/mcp/embed-error — telemetry sink for MCP App\n // embed shells. The shell runs in a sandboxed, opaque-origin iframe\n // (Codex, Cursor, ChatGPT, Claude) with no session cookie or CSRF\n // token, so this endpoint is intentionally unauthenticated and\n // CORS-open to the SAME sandbox origins as /embed/start. It forwards a\n // small, bounded diagnostic payload to Sentry via captureError so we\n // can see *why* an inline embed failed (handshake timeout, transplant\n // fetch status/CORS, auth, CSP) per host. Best-effort: always 204,\n // never throws, body capped, no client-trusted identity.\n getH3App(nitroApp).use(\n `${P}/mcp/embed-error`,\n defineEventHandler(async (event: H3Event) => {\n const origin = getHeader(event, \"origin\");\n if (origin && isMcpEmbedCorsOrigin(origin)) {\n setResponseHeader(event, \"Access-Control-Allow-Origin\", origin);\n setResponseHeader(event, \"Vary\", \"Origin\");\n setResponseHeader(\n event,\n \"Access-Control-Allow-Methods\",\n \"POST,OPTIONS\",\n );\n setResponseHeader(\n event,\n \"Access-Control-Allow-Headers\",\n MCP_EMBED_CORS_ALLOW_HEADERS,\n );\n }\n const method = getMethod(event);\n if (method === \"OPTIONS\") {\n setResponseStatus(event, 204);\n return \"\";\n }\n if (method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const body = await readBody(event).catch(() => undefined);\n const rec =\n body && typeof body === \"object\" && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n const str = (value: unknown, max: number): string | undefined =>\n typeof value === \"string\" && value\n ? value.slice(0, max)\n : undefined;\n const message = str(rec.message, 500) ?? \"MCP embed failed\";\n try {\n captureError(new Error(message), {\n route: `${P}/mcp/embed-error`,\n method: \"POST\",\n userAgent:\n str(rec.userAgent, 300) ?? getHeader(event, \"user-agent\"),\n tags: {\n source: \"mcp-embed-shell\",\n embed_stage: str(rec.stage, 60),\n embed_render_mode: str(rec.renderMode, 40),\n embed_host: str(rec.host, 160),\n embed_bridge: str(rec.bridge, 40),\n },\n extra: {\n embedUrl: str(rec.url, 600),\n httpStatus:\n typeof rec.status === \"number\"\n ? rec.status\n : str(rec.status, 40),\n detail: str(rec.detail, 1200),\n origin,\n },\n });\n } catch {\n // Observability must never throw back into the request path.\n }\n setResponseStatus(event, 204);\n return \"\";\n }),\n );\n }\n\n if (!options.disableAppState) {\n // Compose draft routes (more specific path, mounted first so the\n // generic app-state matcher below doesn't shadow them). The framework\n // strips the mount prefix from event.url.pathname before calling us,\n // so we just see e.g. `/abc-123` (id) or `/` (collection root).\n getH3App(nitroApp).use(\n `${P}/application-state/compose`,\n defineEventHandler(async (event: H3Event) => {\n const id =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] ||\n \"\";\n if (event.context) {\n event.context.params = { ...event.context.params, id };\n }\n const method = getMethod(event);\n if (!id) {\n if (method === \"GET\") return listComposeDrafts(event);\n if (method === \"DELETE\") return deleteAllComposeDrafts(event);\n } else {\n if (method === \"GET\") return getComposeDraft(event);\n if (method === \"PUT\") return putComposeDraft(event);\n if (method === \"DELETE\") return deleteComposeDraft(event);\n }\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n\n // Generic application state — match `/application-state/:key` only\n // (NOT `/application-state/compose/...` which the handler above owns).\n getH3App(nitroApp).use(\n `${P}/application-state`,\n defineEventHandler(async (event: H3Event) => {\n const key =\n (event.url?.pathname || \"\").replace(/^\\/+/, \"\").split(\"/\")[0] ||\n \"\";\n // Skip — compose handler above already handled it\n if (key === \"compose\" || key === \"\") return;\n if (event.context) {\n event.context.params = { ...event.context.params, key };\n }\n const method = getMethod(event);\n if (method === \"GET\") return getState(event);\n if (method === \"PUT\") return putState(event);\n if (method === \"DELETE\") return deleteState(event);\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }),\n );\n }\n resolveInit();\n } catch (error) {\n rejectInit(error);\n throw error;\n }\n };\n}\n\n/**\n * Default core routes plugin — mount with no configuration needed.\n *\n * Usage in templates:\n * ```ts\n * // server/plugins/core-routes.ts\n * export { defaultCoreRoutesPlugin as default } from \"@agent-native/core/server\";\n * ```\n */\nexport const defaultCoreRoutesPlugin: NitroPluginDef = createCoreRoutesPlugin();\n"]}
|