@jami-studio/core 0.92.38 → 0.92.39

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