mitra-interactions-sdk 1.0.60-beta.2 → 1.0.60-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth-legacy.ts","../src/auth-new.ts","../src/auth.ts","../src/chat.ts","../src/password-reset.ts","../src/client.ts","../src/services.ts","../src/agent-attachments.ts","../src/agent-task-session.ts","../src/agent-chat.ts","../src/agent-credentials.ts","../src/instance.ts","../src/config.ts"],"names":["resolveLoginOptions","autoConfigureFromLogin","text","getOriginFromUrl","loginWithEmailMitra","loginWithGoogleMitra","loginWithMicrosoftMitra","loginMitra","emailLoginMitra","emailSignupMitra","emailVerifyCodeMitra","emailResendCodeMitra","_refreshPromise","refreshTokenSilently","isNewWorld","getFetch","resolveProjectId","transport","formatToken","handleResponse","tryRefreshToken","_a","fetchWithRefresh"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Mitra Interactions SDK - Autenticação\r\n *\r\n * Login via popup seguro hospedado no domínio Mitra.\r\n * Credenciais nunca passam pelo código do desenvolvedor.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse,\r\n EmailSignupOptions,\r\n EmailLoginOptions,\r\n EmailVerifyCodeOptions,\r\n EmailResendCodeOptions\r\n} from './types';\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────────\r\n\r\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\r\nconst POPUP_WIDTH = 420;\r\nconst POPUP_HEIGHT = 520;\r\n\r\n/**\r\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\r\n */\r\nfunction getOriginFromUrl(url: string): string {\r\n try {\r\n const parsed = new URL(url);\r\n return parsed.origin;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Abre popup de autenticação e aguarda o resultado via postMessage.\r\n * Valida que a mensagem veio do origin da authUrl.\r\n */\r\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\r\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n url,\r\n 'mitra-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n\r\n function onMessage(event: MessageEvent) {\r\n // Ignora mensagens de outros origins\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n // Detecta se o popup foi fechado sem completar\r\n const pollTimer = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário'));\r\n }\r\n }, 500);\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearInterval(pollTimer);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/**\r\n * Auto-configura o SDK a partir da resposta de login.\r\n * Preserva authUrl e projectId usados no login para chamadas subsequentes.\r\n */\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number | string): void {\r\n if (!response.baseURL) return;\r\n\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * Monta a URL do popup/redirect de autenticação.\r\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\r\n */\r\nfunction buildAuthUrl(\r\n authUrl: string,\r\n method: string,\r\n projectId: number | string,\r\n opts?: { returnTo?: string; create?: boolean; title?: string }\r\n): string {\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n const separator = base.includes('?') ? '&' : '?';\r\n let url = `${base}${separator}method=${method}&projectId=${encodeURIComponent(projectId)}`;\r\n if (opts?.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;\r\n if (opts?.create) url += `&create=true`;\r\n if (opts?.title) url += `&title=${encodeURIComponent(opts.title)}`;\r\n // Passa a URL completa de origem — document.referrer cross-origin perde path/query\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n return url;\r\n}\r\n\r\n// ── Resolução de opções ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number | string } {\r\n const config = isConfigured() ? getConfig() : null;\r\n\r\n const authUrl = options?.authUrl || config?.authUrl;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n return { authUrl, projectId };\r\n}\r\n\r\n// ── Helpers de redirect ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Converte returnTo relativo para absoluto. Se não informado, usa a URL atual.\r\n */\r\nfunction resolveReturnTo(returnTo?: string): string {\r\n if (typeof window === 'undefined') return returnTo || '';\r\n if (!returnTo) return window.location.href;\r\n if (/^https?:\\/\\//.test(returnTo)) return returnTo;\r\n // Caminho relativo → absoluto\r\n return new URL(returnTo, window.location.origin).href;\r\n}\r\n\r\n// ── Funções de Login ────────────────────────────────────────────────────\r\n\r\n/**\r\n * Função central de login: decide popup vs redirect, monta URL com opts extras.\r\n */\r\nasync function doLogin(method: string, options?: LoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const mode = options?.mode || 'popup';\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, method, projectId, {\r\n returnTo: mode === 'redirect' ? resolveReturnTo(options?.returnTo) : undefined,\r\n create: options?.create,\r\n title: options?.title\r\n });\r\n\r\n if (mode === 'redirect') {\r\n window.location.href = url;\r\n // Nunca resolve — o navegador navega para fora\r\n return new Promise(() => {});\r\n }\r\n\r\n const response = await openAuthPopup(url, origin);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Login com email e senha via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('email', options);\r\n}\r\n\r\n/**\r\n * Login com Google via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('google', options);\r\n}\r\n\r\n/**\r\n * Login com Microsoft via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('microsoft', options);\r\n}\r\n\r\n/**\r\n * Login genérico via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin(method, options);\r\n}\r\n\r\n// ── Token Refresh Silencioso ─────────────────────────────────────────\r\n\r\nconst REFRESH_TIMEOUT_MS = 15000;\r\n\r\n/** Promise do refresh em andamento (deduplicação — evita múltiplos iframes) */\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\n/**\r\n * Cria iframe invisível para renovar o token silenciosamente.\r\n * O sdk-auth detecta a sessão existente (cookie do provider) e retorna\r\n * um novo token via postMessage, sem interação do usuário.\r\n */\r\nfunction openAuthIframe(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n iframe.src = url;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Token refresh timeout'));\r\n }, REFRESH_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro no refresh do token'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Renova o token silenciosamente via iframe invisível.\r\n * Se já houver um refresh em andamento, reaproveita a mesma promise.\r\n */\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number | string): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, 'refresh', projectId);\r\n const response = await openAuthIframe(url, origin);\r\n return response;\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n\r\n// ── Email Auth via iframe silencioso ──────────────────────────────\r\n\r\nconst SILENT_TIMEOUT_MS = 20000;\r\nconst AUTH_READY_TYPE = 'mitra-auth-ready';\r\nconst AUTH_CREDENTIALS_TYPE = 'mitra-auth-credentials';\r\n\r\n/**\r\n * Cria iframe invisível no modo silent e envia credenciais via postMessage.\r\n * O HTML de auth faz a chamada à API (sem CORS) e devolve o resultado.\r\n */\r\nfunction openSilentAuthIframe(\r\n authUrl: string,\r\n projectId: number | string,\r\n credentials: Record<string, unknown>\r\n): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const origin = getOriginFromUrl(authUrl);\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n const separator = base.includes('?') ? '&' : '?';\r\n let url = `${base}${separator}mode=silent&projectId=${encodeURIComponent(projectId)}`;\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Timeout na autenticação silenciosa'));\r\n }, SILENT_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== origin) return;\r\n\r\n // Passo 1: HTML avisou que está pronto → envia credenciais\r\n if (event.data?.type === AUTH_READY_TYPE) {\r\n iframe.contentWindow?.postMessage({\r\n type: AUTH_CREDENTIALS_TYPE,\r\n ...credentials\r\n }, origin);\r\n return;\r\n }\r\n\r\n // Passo 2: Resultado da autenticação\r\n if (event.data?.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n iframe.src = url;\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Cria conta via email usando iframe silencioso.\r\n * Após sucesso, o usuário recebe um código de verificação por email.\r\n * Fluxo: emailSignupMitra → emailVerifyCodeMitra → emailLoginMitra\r\n */\r\nexport async function emailSignupMitra(options: EmailSignupOptions): Promise<void> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n const result = await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'signup',\r\n name: options.name,\r\n email: options.email,\r\n password: options.password\r\n });\r\n\r\n // Signup retorna { needsVerification: true } — não configura SDK\r\n if (!(result as any).needsVerification) {\r\n throw new Error('Resposta inesperada do signup');\r\n }\r\n}\r\n\r\n/**\r\n * Verifica o código de 6 dígitos enviado por email após signup.\r\n * Após verificação, faz login automático e retorna LoginResponse.\r\n * Auto-configura o SDK após sucesso.\r\n */\r\nexport async function emailVerifyCodeMitra(options: EmailVerifyCodeOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n const response = await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'verifyCode',\r\n email: options.email,\r\n code: options.code,\r\n password: options.password\r\n });\r\n\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Reenvia o código de verificação para o email.\r\n */\r\nexport async function emailResendCodeMitra(options: EmailResendCodeOptions): Promise<void> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'resendCode',\r\n email: options.email\r\n });\r\n}\r\n\r\n/**\r\n * Login via email e senha usando iframe silencioso.\r\n * O HTML de auth faz a chamada à API e resolve as credenciais do projeto.\r\n * Retorna LoginResponse com token, baseURL e integrationURL.\r\n * Auto-configura o SDK após sucesso.\r\n */\r\nexport async function emailLoginMitra(options: EmailLoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n const response = await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'login',\r\n email: options.email,\r\n password: options.password\r\n });\r\n\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Autenticação (Novo Mitra)\r\n *\r\n * Implementação do auth para o novo Mitra (Kong gateway).\r\n * - Email login/signup/refresh: via BFF (mitra-legacy-bff), POST {gateway}/auth/*.\r\n * O BFF resolve projectId->appId, chama o mitra-iam e já devolve o envelope\r\n * { token, baseURL, integrationURL } que a SDK consome.\r\n * - SSO (Google/Microsoft): EXCEÇÃO — fala direto com o IAM\r\n * ({gateway}/iam/api/v1/auth/*) + página atravessadora, pois o BFF ainda não\r\n * expõe esses endpoints.\r\n * Sem iframe, sem postMessage, sem sdk-auth.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse,\r\n EmailSignupOptions,\r\n EmailLoginOptions,\r\n EmailVerifyCodeOptions,\r\n EmailResendCodeOptions\r\n} from './types';\r\n\r\n// ── Tipos internos ──────────────────────────────────────────────────\r\n\r\ninterface NewAuthTokenResponse {\r\n accessToken: string;\r\n refreshToken: string;\r\n tokenType: string;\r\n}\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\n// SSO (exceção): IAM direto. Kong resolve /iam/* pro IAM service.\r\nfunction buildEndpoint(authUrl: string, path: string): string {\r\n const base = authUrl.replace(/\\/+$/, '');\r\n return `${base}/iam/api/v1/auth${path}`;\r\n}\r\n\r\n// BFF (mitra-legacy-bff): mesmo gateway do baseURL, prefixo /auth. Espelha como o\r\n// resto do SDK alcança o BFF ({baseURL}/interactions/...); o gateway roteia pro BFF.\r\nfunction buildBffAuthEndpoint(gateway: string, path: string): string {\r\n const base = gateway.replace(/\\/+$/, '');\r\n return `${base}/auth${path}`;\r\n}\r\n\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number | string } {\r\n const config = isConfigured() ? getConfig() : null;\r\n // No novo Mitra, authUrl e baseURL apontam pro mesmo gateway. authUrl é mantido\r\n // por compat com a API legacy; se não vier, cai pro baseURL configurado.\r\n const authUrl = options?.authUrl || config?.authUrl || config?.baseURL;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl/baseURL é obrigatório. Configure via configureSdkMitra({ baseURL }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n return { authUrl, projectId };\r\n}\r\n\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number | string): void {\r\n if (!response.baseURL) return;\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.refreshToken ? { refreshToken: response.refreshToken } : {}),\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\nasync function postNewAuth(url: string, body: unknown): Promise<NewAuthTokenResponse> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => '');\r\n let parsed: any = null;\r\n try { parsed = text ? JSON.parse(text) : null; } catch { /* ignore */ }\r\n const msg = parsed?.message || parsed?.error || `HTTP ${response.status}`;\r\n throw { message: msg, status: response.status, details: parsed };\r\n }\r\n\r\n return response.json();\r\n}\r\n\r\n/**\r\n * POST pro BFF. Mesmo tratamento de erro do postNewAuth, mas tolera corpo vazio\r\n * (signup retorna void) e devolve o JSON cru (envelope { token, baseURL, ... }).\r\n */\r\nasync function postBffAuth(url: string, body: unknown): Promise<any> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => '');\r\n let parsed: any = null;\r\n try { parsed = text ? JSON.parse(text) : null; } catch { /* ignore */ }\r\n const msg = parsed?.message || parsed?.error || `HTTP ${response.status}`;\r\n throw { message: msg, status: response.status, details: parsed };\r\n }\r\n\r\n const text = await response.text().catch(() => '');\r\n return text ? JSON.parse(text) : null;\r\n}\r\n\r\nfunction normalizeResponse(tokens: NewAuthTokenResponse, authUrl: string): LoginResponse {\r\n // No novo Mitra, baseURL = authUrl (Kong gateway)\r\n return {\r\n token: tokens.accessToken,\r\n refreshToken: tokens.refreshToken,\r\n baseURL: authUrl\r\n };\r\n}\r\n\r\nconst NOT_SUPPORTED_POPUP = 'Login via popup (loginWithEmailMitra/loginMitra com method \"email\" ou \"mitra\") ainda não suportado no novo Mitra. Use emailLoginMitra({ email, password }).';\r\nconst NOT_SUPPORTED_VERIFY = 'emailVerifyCodeMitra não existe no novo Mitra (signup é direto, sem código de verificação).';\r\nconst NOT_SUPPORTED_RESEND = 'emailResendCodeMitra não existe no novo Mitra.';\r\nconst NOT_SUPPORTED_REDIRECT = 'mode \"redirect\" ainda não suportado no novo Mitra para SSO. Use mode \"popup\" (default).';\r\n\r\n// ── OAuth (Google / Microsoft) ──────────────────────────────────────\r\n// Fluxo (SDK não conhece provider, só conversa com a página atravessadora):\r\n// 0. DISCOVERY: por ora a URL da página (front) vem MOCKADA no SDK\r\n// (SSO_AUTH_PAGE_URL). Quando o back expor GET /iam/api/v1/auth/sso/config\r\n// → { authPageUrl }, voltamos a descobrir lá.\r\n// 1. SDK abre popup em <authPageUrl>?provider=&state=&appId=&apiUrl=.\r\n// 2. Página atravessadora busca branding (/iam/branding/{appId}), monta a URL\r\n// OAuth do provider com redirect_uri=<authPageUrl> e redireciona.\r\n// 3. Provider autentica e redireciona o popup de volta pro authPageUrl com ?code=&state=.\r\n// 4. A página faz postMessage({type:'mitra-oauth-result',success,code,state,error})\r\n// pro opener e fecha sozinha.\r\n// 5. SDK valida origin (== origin do authPageUrl, NÃO do baseURL) + state (CSRF),\r\n// troca o code por token no IAM via\r\n// POST <baseURL>/iam/api/v1/auth/{google|microsoft} { code, redirectUri, appId }.\r\n//\r\n// authPageUrl é tratado como opaco: usado cru (sem normalizar) como redirectUri,\r\n// porque o provider valida redirect_uri byte a byte. Client IDs e config OAuth\r\n// ficam na página, não no SDK.\r\n// ────────────────────────────────────────────────────────────────────\r\n\r\nconst OAUTH_RESULT_TYPE = 'mitra-oauth-result';\r\nconst POPUP_W = 480;\r\nconst POPUP_H = 600;\r\nconst POPUP_TIMEOUT_MS = 5 * 60 * 1000;\r\n\r\n// TEMP: o discovery /sso/config ainda não existe no back. Em vez de descobrir a\r\n// URL da página atravessadora, retornamos a URL conhecida do front (CloudFront)\r\n// mockada. Trocar de volta pelo fetch ao /sso/config quando o back subir.\r\nconst SSO_AUTH_PAGE_URL = 'https://d2by6yrxhbu2rl.cloudfront.net/sdk-auth.html';\r\n\r\n/**\r\n * Retorna a URL da página de auth (front). Mockado por ora — ver SSO_AUTH_PAGE_URL.\r\n * Mantido async + assinatura pra não mexer nos call sites (e facilitar voltar ao\r\n * discovery no back depois).\r\n */\r\nasync function fetchSsoAuthPageUrl(_baseURL: string): Promise<string> {\r\n return SSO_AUTH_PAGE_URL;\r\n}\r\n\r\nfunction buildStartUrl(\r\n authPageUrl: string,\r\n provider: 'google' | 'microsoft',\r\n state: string,\r\n appId: string,\r\n apiUrl: string\r\n): string {\r\n const sep = authPageUrl.includes('?') ? '&' : '?';\r\n return authPageUrl + sep + new URLSearchParams({ provider, state, appId, apiUrl }).toString();\r\n}\r\n\r\nfunction getOriginFromUrl(url: string): string {\r\n try { return new URL(url).origin; } catch { return ''; }\r\n}\r\n\r\nfunction generateState(): string {\r\n if (typeof crypto === 'undefined' || typeof crypto.getRandomValues !== 'function') {\r\n throw new Error('crypto.getRandomValues não disponível neste ambiente.');\r\n }\r\n const bytes = new Uint8Array(16);\r\n crypto.getRandomValues(bytes);\r\n return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');\r\n}\r\n\r\nfunction openOAuthPopup(\r\n providerUrl: string,\r\n expectedOrigin: string,\r\n expectedState: string\r\n): Promise<{ code: string }> {\r\n return new Promise((resolve, reject) => {\r\n const outerW = window.outerWidth || screen.width;\r\n const outerH = window.outerHeight || screen.height;\r\n const left = Math.max(0, (window.screenX || 0) + (outerW - POPUP_W) / 2);\r\n const top = Math.max(0, (window.screenY || 0) + (outerH - POPUP_H) / 2);\r\n\r\n const popup = window.open(\r\n providerUrl,\r\n 'mitra-oauth',\r\n `width=${POPUP_W},height=${POPUP_H},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n const popupRef: Window = popup;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Timeout na autenticação OAuth.'));\r\n }, POPUP_TIMEOUT_MS);\r\n\r\n const poll = setInterval(() => {\r\n if (popupRef.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário.'));\r\n }\r\n }, 500);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== OAUTH_RESULT_TYPE) return;\r\n const data = event.data as { success?: boolean; code?: string; state?: string; error?: string };\r\n\r\n if (data.state !== expectedState) {\r\n cleanup();\r\n reject(new Error('State inválido (possível CSRF).'));\r\n return;\r\n }\r\n\r\n cleanup();\r\n\r\n if (!data.success) {\r\n reject(new Error(data.error || 'Erro na autenticação OAuth.'));\r\n return;\r\n }\r\n if (!data.code) {\r\n reject(new Error('Resposta OAuth sem code.'));\r\n return;\r\n }\r\n resolve({ code: data.code });\r\n }\r\n\r\n function cleanup() {\r\n clearTimeout(timer);\r\n clearInterval(poll);\r\n window.removeEventListener('message', onMessage);\r\n if (!popupRef.closed) popupRef.close();\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/** Promise de OAuth em andamento — dedup de clicks duplicados / React StrictMode. */\r\nlet _oauthInFlight: Promise<LoginResponse> | null = null;\r\n\r\nasync function loginWithProvider(\r\n provider: 'google' | 'microsoft',\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n if (_oauthInFlight) return _oauthInFlight;\r\n\r\n if (typeof window === 'undefined') {\r\n throw new Error('SSO só funciona em ambiente browser.');\r\n }\r\n if (options?.mode === 'redirect') {\r\n throw new Error(NOT_SUPPORTED_REDIRECT);\r\n }\r\n\r\n _oauthInFlight = (async () => {\r\n try {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const state = generateState();\r\n const appId = String(projectId);\r\n\r\n // 0. DISCOVERY: descobre a URL da página de auth (front) no back.\r\n const authPageUrl = await fetchSsoAuthPageUrl(authUrl);\r\n // Origin do FRONT (página) — é contra ele que validamos o postMessage,\r\n // NÃO contra o baseURL/gateway.\r\n const pageOrigin = getOriginFromUrl(authPageUrl);\r\n // redirectUri = authPageUrl cru (sem normalizar): o provider valida byte a byte.\r\n const redirectUri = authPageUrl;\r\n const startUrl = buildStartUrl(authPageUrl, provider, state, appId, authUrl);\r\n\r\n const { code } = await openOAuthPopup(startUrl, pageOrigin, state);\r\n\r\n const tokens = await postNewAuth(buildEndpoint(authUrl, `/${provider}`), {\r\n code,\r\n redirectUri,\r\n appId\r\n });\r\n\r\n const response = normalizeResponse(tokens, authUrl);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n } finally {\r\n _oauthInFlight = null;\r\n }\r\n })();\r\n\r\n return _oauthInFlight;\r\n}\r\n\r\n// ── Login (popup-style) ─────────────────────────────────────────────\r\n\r\nexport async function loginWithEmailMitra(_options?: LoginOptions): Promise<LoginResponse> {\r\n throw new Error(NOT_SUPPORTED_POPUP);\r\n}\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('google', options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('microsoft', options);\r\n}\r\n\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n if (method === 'google') return loginWithProvider('google', options);\r\n if (method === 'microsoft') return loginWithProvider('microsoft', options);\r\n throw new Error(NOT_SUPPORTED_POPUP);\r\n}\r\n\r\n// ── Email API direta ────────────────────────────────────────────────\r\n\r\nexport async function emailLoginMitra(options: EmailLoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n // Via BFF: POST {gateway}/auth/email/login. O BFF resolve projectId->appId,\r\n // chama o mitra-iam e já devolve o envelope { token, baseURL, integrationURL }.\r\n const data = await postBffAuth(buildBffAuthEndpoint(authUrl, '/email/login'), {\r\n projectId: String(projectId),\r\n email: options.email,\r\n password: options.password\r\n });\r\n\r\n const response: LoginResponse = {\r\n token: data.token,\r\n baseURL: data.baseURL || authUrl,\r\n ...(data.integrationURL ? { integrationURL: data.integrationURL } : {})\r\n };\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\nexport async function emailSignupMitra(options: EmailSignupOptions): Promise<void> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n // Via BFF: POST {gateway}/auth/email/signup. Retorna void (sem auto-signin),\r\n // igual à semântica legacy — o usuário chama emailLoginMitra em seguida.\r\n await postBffAuth(buildBffAuthEndpoint(authUrl, '/email/signup'), {\r\n projectId: String(projectId),\r\n name: options.name,\r\n email: options.email,\r\n password: options.password\r\n });\r\n}\r\n\r\nexport async function emailVerifyCodeMitra(_options: EmailVerifyCodeOptions): Promise<LoginResponse> {\r\n throw new Error(NOT_SUPPORTED_VERIFY);\r\n}\r\n\r\nexport async function emailResendCodeMitra(_options: EmailResendCodeOptions): Promise<void> {\r\n throw new Error(NOT_SUPPORTED_RESEND);\r\n}\r\n\r\n// ── Refresh ─────────────────────────────────────────────────────────\r\n\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\nexport async function refreshTokenSilently(authUrl: string, _projectId: number | string): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const config = isConfigured() ? getConfig() : null;\r\n const refreshToken = config?.refreshToken;\r\n if (!refreshToken) {\r\n throw new Error('refreshToken não disponível para renovação no novo Mitra. Faça login novamente.');\r\n }\r\n const tokens = await postNewAuth(buildEndpoint(authUrl, '/refresh-token'), { refreshToken });\r\n return normalizeResponse(tokens, authUrl);\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Autenticação (Router)\r\n *\r\n * Roteia chamadas de auth para a implementação correta com base no `authUrl`:\r\n * - URLs legadas (`coder.mitralab.io/sdk-auth/`, `agent.mitralab.io/sdk-auth/`) → auth-legacy.ts\r\n * - Qualquer outro authUrl → auth-new.ts (novo Mitra: Kong gateway + IAM service)\r\n *\r\n * A API pública é idêntica à legacy. Consumers não precisam alterar código.\r\n */\r\n\r\nimport { isConfigured, getConfig } from './config';\r\nimport * as legacy from './auth-legacy';\r\nimport * as fresh from './auth-new';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse,\r\n EmailSignupOptions,\r\n EmailLoginOptions,\r\n EmailVerifyCodeOptions,\r\n EmailResendCodeOptions\r\n} from './types';\r\n\r\n// ── Detecção de mundo ───────────────────────────────────────────────\r\n\r\nconst LEGACY_AUTH_URLS = [\r\n 'https://coder.mitralab.io/sdk-auth/',\r\n 'https://agent.mitralab.io/sdk-auth/'\r\n];\r\n\r\nfunction normalize(url: string): string {\r\n // Remove query string e fragment, garante trailing slash\r\n const stripped = url.split('?')[0].split('#')[0];\r\n return stripped.endsWith('/') ? stripped : stripped + '/';\r\n}\r\n\r\nexport function isLegacyAuthUrl(authUrl: string | undefined): boolean {\r\n if (!authUrl) return false;\r\n return LEGACY_AUTH_URLS.includes(normalize(authUrl));\r\n}\r\n\r\n/**\r\n * Retorna true se o contexto atual é o novo mundo (authUrl configurado não é\r\n * legacy). Usado por features que ainda não têm suporte no novo Mitra.\r\n */\r\nexport function isNewWorld(authUrl?: string): boolean {\r\n const resolved = authUrl ?? (isConfigured() ? getConfig().authUrl : undefined);\r\n // Sem authUrl não dá pra afirmar que é novo mundo — assume legacy (não bloqueia).\r\n if (!resolved) return false;\r\n return !isLegacyAuthUrl(resolved);\r\n}\r\n\r\nfunction resolveAuthUrlFromOptions(options?: { authUrl?: string }): string | undefined {\r\n if (options?.authUrl) return options.authUrl;\r\n if (isConfigured()) return getConfig().authUrl;\r\n return undefined;\r\n}\r\n\r\n// ── Roteamento ──────────────────────────────────────────────────────\r\n\r\nexport async function loginMitra(\r\n method: 'email' | 'google' | 'microsoft' | 'mitra',\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginMitra(method, options)\r\n : fresh.loginMitra(method, options);\r\n}\r\n\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithEmailMitra(options)\r\n : fresh.loginWithEmailMitra(options);\r\n}\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithGoogleMitra(options)\r\n : fresh.loginWithGoogleMitra(options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithMicrosoftMitra(options)\r\n : fresh.loginWithMicrosoftMitra(options);\r\n}\r\n\r\nexport async function emailSignupMitra(options: EmailSignupOptions): Promise<void> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailSignupMitra(options)\r\n : fresh.emailSignupMitra(options);\r\n}\r\n\r\nexport async function emailLoginMitra(options: EmailLoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailLoginMitra(options)\r\n : fresh.emailLoginMitra(options);\r\n}\r\n\r\nexport async function emailVerifyCodeMitra(options: EmailVerifyCodeOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailVerifyCodeMitra(options)\r\n : fresh.emailVerifyCodeMitra(options);\r\n}\r\n\r\nexport async function emailResendCodeMitra(options: EmailResendCodeOptions): Promise<void> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailResendCodeMitra(options)\r\n : fresh.emailResendCodeMitra(options);\r\n}\r\n\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number | string): Promise<LoginResponse> {\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.refreshTokenSilently(authUrl, projectId)\r\n : fresh.refreshTokenSilently(authUrl, projectId);\r\n}\r\n","/**\n * Mitra Interactions SDK - Chat Integration\n *\n * Integrates with the __mitraChat object injected by the build-proxy\n * in published apps. Chat is initialized automatically by configureSdkMitra().\n */\n\n/**\n * Opens the Mitra Chat sidebar.\n * If chat is still loading, polls until ready (max 15s).\n */\nexport function openChatMitra(): void {\n if (typeof window === 'undefined') return;\n\n const chat = (window as any).__mitraChat;\n if (!chat) return;\n\n if (chat.isReady) {\n chat.open();\n } else {\n const iv = setInterval(() => {\n if (chat.isReady) { clearInterval(iv); chat.open(); }\n }, 200);\n setTimeout(() => clearInterval(iv), 15000);\n }\n}\n\n/**\n * Closes the Mitra Chat sidebar.\n */\nexport function closeChatMitra(): void {\n if (typeof window === 'undefined') return;\n (window as any).__mitraChat?.close();\n}\n","/**\r\n * Mitra Interactions SDK - Password Reset (legacy backend)\r\n *\r\n * Endpoints públicos (sem auth) para fluxo de \"esqueci minha senha\".\r\n * Usa um backend separado (porta 1005 ou 4133 dependendo do ambiente),\r\n * resolvido a partir do `authUrl` configurado.\r\n */\r\n\r\nimport { isConfigured, getConfig } from './config';\r\nimport type {\r\n SendPasswordResetCodeOptions,\r\n ValidatePasswordResetCodeOptions,\r\n ResetPasswordOptions\r\n} from './types';\r\n\r\n// ── Mapeamento authUrl → auth API base ──────────────────────────────\r\n\r\nconst AUTH_API_BY_AUTH_URL: Record<string, string> = {\r\n 'https://coder.mitralab.io/sdk-auth/': 'https://api0.mitraecp.com:1005',\r\n 'https://agent.mitralab.io/sdk-auth/': 'https://api2.mitrasheet.com:4133'\r\n};\r\n\r\nfunction normalizeAuthUrl(url: string): string {\r\n const stripped = url.split('?')[0].split('#')[0];\r\n return stripped.endsWith('/') ? stripped : stripped + '/';\r\n}\r\n\r\n// ── Mundo novo ainda não suportado ──────────────────────────────────\r\n\r\nconst NOT_SUPPORTED_SEND = 'sendPasswordResetCodeMitra ainda não suportado no novo Mitra.';\r\nconst NOT_SUPPORTED_VALIDATE = 'validatePasswordResetCodeMitra ainda não suportado no novo Mitra.';\r\nconst NOT_SUPPORTED_RESET = 'resetPasswordMitra ainda não suportado no novo Mitra.';\r\n\r\n/** Retorna true se o authUrl resolvido é do mundo novo (não-legacy) e não há override explícito. */\r\nfunction isNewWorld(opts: { authUrl?: string; authApiURL?: string }): boolean {\r\n if (opts.authApiURL) return false;\r\n if (typeof window !== 'undefined' && (window as any).__mitraEnv?.apiBaseURL) return false;\r\n const authUrl = opts.authUrl || (isConfigured() ? getConfig().authUrl : undefined);\r\n if (!authUrl) return false;\r\n return !(normalizeAuthUrl(authUrl) in AUTH_API_BY_AUTH_URL);\r\n}\r\n\r\nfunction resolveProjectId(opts: { projectId?: number | string }): number | string {\r\n if (opts.projectId != null) return opts.projectId;\r\n if (isConfigured()) {\r\n const pid = getConfig().projectId;\r\n if (pid != null) return pid;\r\n }\r\n throw new Error(\r\n 'projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).'\r\n );\r\n}\r\n\r\nfunction resolveAuthApiURL(opts: { authUrl?: string; authApiURL?: string }): string {\r\n // 1. Override explícito (testes / staging)\r\n if (opts.authApiURL) return opts.authApiURL.replace(/\\/+$/, '');\r\n\r\n // 2. Build-proxy injecta `window.__mitraEnv = { apiBaseURL: '...' }` antes do bundle\r\n if (typeof window !== 'undefined') {\r\n const injected = (window as any).__mitraEnv?.apiBaseURL;\r\n if (typeof injected === 'string' && injected.length > 0) {\r\n return injected.replace(/\\/+$/, '');\r\n }\r\n }\r\n\r\n // 3. Fallback: deriva do authUrl conhecido (dev local sem proxy)\r\n const authUrl = opts.authUrl || (isConfigured() ? getConfig().authUrl : undefined);\r\n if (authUrl) {\r\n const apiURL = AUTH_API_BY_AUTH_URL[normalizeAuthUrl(authUrl)];\r\n if (apiURL) return apiURL;\r\n }\r\n\r\n // 4. Sem nada\r\n throw new Error(\r\n 'Não foi possível resolver a API base. Configure window.__mitraEnv.apiBaseURL via build-proxy, ' +\r\n 'passe authApiURL nas options, ou use um authUrl conhecido (coder.mitralab.io ou agent.mitralab.io).'\r\n );\r\n}\r\n\r\n// ── Fetch helper ────────────────────────────────────────────────────\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\nasync function callAuthApi<T>(url: string, method: 'POST' | 'PUT', body: unknown): Promise<T> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method,\r\n headers: { 'Content-Type': 'application/json', accept: 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n const text = await response.text();\r\n let data: any = null;\r\n try { data = text ? JSON.parse(text) : null; } catch { /* keep null */ }\r\n\r\n if (!response.ok) {\r\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\r\n throw { message: msg, status: response.status, details: data };\r\n }\r\n\r\n return data as T;\r\n}\r\n\r\n// ── API pública ─────────────────────────────────────────────────────\r\n\r\n/**\r\n * POST /mitraspace/auth/resetPassword\r\n * Envia um código de verificação por email para iniciar o fluxo de reset de senha.\r\n */\r\nexport async function sendPasswordResetCodeMitra(\r\n options: SendPasswordResetCodeOptions\r\n): Promise<Record<string, unknown>> {\r\n if (isNewWorld(options)) throw new Error(NOT_SUPPORTED_SEND);\r\n const apiURL = resolveAuthApiURL(options);\r\n const projectId = resolveProjectId(options);\r\n return callAuthApi(`${apiURL}/mitraspace/auth/resetPassword`, 'POST', {\r\n email: options.email,\r\n projectId\r\n });\r\n}\r\n\r\n/**\r\n * POST /mitraspace/auth/resetPassword/validateCode\r\n * Valida o código recebido por email (sem trocar a senha ainda).\r\n */\r\nexport async function validatePasswordResetCodeMitra(\r\n options: ValidatePasswordResetCodeOptions\r\n): Promise<Record<string, unknown>> {\r\n if (isNewWorld(options)) throw new Error(NOT_SUPPORTED_VALIDATE);\r\n const apiURL = resolveAuthApiURL(options);\r\n const projectId = resolveProjectId(options);\r\n return callAuthApi(`${apiURL}/mitraspace/auth/resetPassword/validateCode`, 'POST', {\r\n email: options.email,\r\n code: options.code,\r\n projectId\r\n });\r\n}\r\n\r\n/**\r\n * PUT /mitraspace/auth/resetPassword\r\n * Troca a senha usando email + código + nova senha.\r\n */\r\nexport async function resetPasswordMitra(\r\n options: ResetPasswordOptions\r\n): Promise<Record<string, unknown>> {\r\n if (isNewWorld(options)) throw new Error(NOT_SUPPORTED_RESET);\r\n const apiURL = resolveAuthApiURL(options);\r\n const projectId = resolveProjectId(options);\r\n return callAuthApi(`${apiURL}/mitraspace/auth/resetPassword`, 'PUT', {\r\n email: options.email,\r\n code: options.code,\r\n newPassword: options.newPassword,\r\n projectId\r\n });\r\n}\r\n","/**\r\n * Mitra Interactions SDK - HTTP Client\r\n */\r\n\r\nimport { getConfig, updateGlobalToken, stripBearer } from './config';\r\nimport { refreshTokenSilently } from './auth';\r\nimport type { LoginResponse } from './types';\r\n\r\n/**\r\n * Obtém a função fetch\r\n */\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') {\r\n return globalThis.fetch;\r\n }\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\n/**\r\n * Formata o token para Authorization\r\n */\r\nfunction formatToken(token: string): string {\r\n return `Bearer ${stripBearer(token)}`;\r\n}\r\n\r\n/**\r\n * Constrói os headers\r\n */\r\nfunction buildHeaders(): Record<string, string> {\r\n const config = getConfig();\r\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\r\n if (config.token) headers['Authorization'] = formatToken(config.token);\r\n return headers;\r\n}\r\n\r\n/**\r\n * Constrói a URL com query params opcionais\r\n */\r\nfunction buildUrl(endpoint: string, params?: Record<string, unknown>): string {\r\n const config = getConfig();\r\n let url = `${config.baseURL}${endpoint}`;\r\n if (params) {\r\n const query = Object.entries(params)\r\n .filter(([, v]) => v !== undefined && v !== null)\r\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\r\n .join('&');\r\n if (query) url += `?${query}`;\r\n }\r\n return url;\r\n}\r\n\r\n/**\r\n * Tenta renovar o token diretamente via API (sem iframe/HTML).\r\n * Usa o token atual pra chamar refreshedToken e obter um novo token scoped.\r\n * Se falhar (token expirado de verdade), tenta o fallback via iframe.\r\n */\r\nasync function tryRefreshToken(): Promise<boolean> {\r\n const config = getConfig();\r\n\r\n if (!config.token || config.projectId == null) return false;\r\n\r\n // 1. Tenta refresh direto via API (sem HTML)\r\n try {\r\n const baseURL = config.baseURL.replace(/\\/+$/, '');\r\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${config.projectId}`, {\r\n method: 'GET',\r\n headers: { 'Authorization': formatToken(config.token) }\r\n });\r\n\r\n if (resp.ok) {\r\n const data = await resp.json();\r\n if (data.token) {\r\n const newToken = `Bearer ${stripBearer(data.token)}`;\r\n const session: LoginResponse = {\r\n token: newToken,\r\n baseURL: data.merge?.backURL || config.baseURL,\r\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\r\n };\r\n updateGlobalToken(session.token);\r\n if (config.onTokenRefresh) config.onTokenRefresh(session);\r\n return true;\r\n }\r\n }\r\n } catch {\r\n // Falhou — tenta fallback via iframe (legacy) ou refresh-token API (novo Mitra)\r\n }\r\n\r\n // 2. Fallback: refreshTokenSilently (router decide entre iframe legacy ou API novo Mitra)\r\n if (!config.authUrl || typeof window === 'undefined') return false;\r\n\r\n try {\r\n const session: LoginResponse = await refreshTokenSilently(config.authUrl, config.projectId);\r\n updateGlobalToken(session.token, session.refreshToken);\r\n if (config.onTokenRefresh) config.onTokenRefresh(session);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Cliente HTTP\r\n */\r\nasync function handleResponse<T>(response: Response): Promise<T> {\r\n const text = await response.text();\r\n const data = text ? JSON.parse(text) : null;\r\n\r\n if (!response.ok) {\r\n const base = data?.message || data?.error || `HTTP ${response.status}`;\r\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\r\n throw {\r\n message: msg,\r\n status: response.status,\r\n details: data\r\n };\r\n }\r\n\r\n return data as T;\r\n}\r\n\r\n/**\r\n * Executa um fetch. Se retornar AUTH_EXPIRED_STATUS, tenta refresh e retenta uma vez.\r\n */\r\nasync function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, init);\r\n\r\n if (response.status === 403) {\r\n const refreshed = await tryRefreshToken();\r\n if (refreshed) {\r\n // Retenta com o novo token\r\n const newHeaders = { ...buildHeaders() };\r\n // Preserva headers extras (ex: X-TenantID)\r\n const oldHeaders = init.headers as Record<string, string> | undefined;\r\n if (oldHeaders) {\r\n for (const [k, v] of Object.entries(oldHeaders)) {\r\n if (k !== 'Authorization') newHeaders[k] = v;\r\n }\r\n }\r\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\r\n return handleResponse(retryResponse);\r\n }\r\n }\r\n\r\n return handleResponse(response);\r\n}\r\n\r\nexport const http = {\r\n async get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint, params), {\r\n method: 'GET',\r\n headers: buildHeaders()\r\n });\r\n },\r\n\r\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'POST',\r\n headers: buildHeaders(),\r\n body: body !== undefined ? JSON.stringify(body) : undefined\r\n });\r\n },\r\n\r\n async put<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'PUT',\r\n headers: buildHeaders(),\r\n body: body !== undefined ? JSON.stringify(body) : undefined\r\n });\r\n },\r\n\r\n async del<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint, params), {\r\n method: 'DELETE',\r\n headers: buildHeaders()\r\n });\r\n },\r\n\r\n async delBody<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'DELETE',\r\n headers: buildHeaders(),\r\n body: body !== undefined ? JSON.stringify(body) : undefined\r\n });\r\n },\r\n\r\n async upload<T>(endpoint: string, formData: FormData): Promise<T> {\r\n const config = getConfig();\r\n const headers: Record<string, string> = {};\r\n if (config.token) headers['Authorization'] = formatToken(config.token);\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'POST',\r\n headers,\r\n body: formData\r\n });\r\n }\r\n};\r\n\r\n// HTTP client para Dynamic Schema (usa X-TenantID header)\r\nasync function requestWithTenant<T>(\r\n method: string,\r\n endpoint: string,\r\n tenantId: number | string,\r\n options?: { params?: Record<string, unknown>; body?: unknown }\r\n): Promise<T> {\r\n const headers = {\r\n ...buildHeaders(),\r\n 'X-TenantID': String(tenantId)\r\n };\r\n\r\n return fetchWithRefresh(buildUrl(endpoint, options?.params), {\r\n method,\r\n headers,\r\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\r\n });\r\n}\r\n\r\n/**\r\n * Requisição genérica para o serviço de integrações (porta 1003)\r\n */\r\nasync function requestIntegrations<T>(\r\n method: string,\r\n endpoint: string,\r\n options?: { params?: Record<string, unknown>; body?: unknown }\r\n): Promise<T> {\r\n const config = getConfig();\r\n if (!config.integrationURL) {\r\n throw new Error('integrationURL não configurado. Passe integrationURL em configureSdkMitra() ou via query param.');\r\n }\r\n\r\n const base = config.integrationURL.replace(/\\/+$/, '');\r\n let url = `${base}${endpoint}`;\r\n\r\n if (options?.params) {\r\n const query = Object.entries(options.params)\r\n .filter(([, v]) => v !== undefined && v !== null)\r\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\r\n .join('&');\r\n if (query) url += `?${query}`;\r\n }\r\n\r\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\r\n if (config.token) headers['Authorization'] = formatToken(config.token);\r\n\r\n return fetchWithRefresh(url, {\r\n method,\r\n headers,\r\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\r\n });\r\n}\r\n\r\nexport const httpIntegrations = {\r\n get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\r\n return requestIntegrations('GET', endpoint, { params });\r\n },\r\n post<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return requestIntegrations('POST', endpoint, { body });\r\n }\r\n};\r\n\r\nexport const httpTenant = {\r\n get<T>(endpoint: string, tenantId: number | string, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('GET', endpoint, tenantId, { params });\r\n },\r\n post<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\r\n },\r\n put<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\r\n },\r\n patch<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\r\n },\r\n del<T>(endpoint: string, tenantId: number | string, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\r\n }\r\n};\r\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpTenant } from './client';\nimport { getConfig, resolveProjectId } from './config';\nimport type {\n ExecuteDataLoaderOptions,\n ExecuteDataLoaderResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse,\n // Profile Management\n ListProfilesOptions,\n ListProfilesResponse,\n GetProfileDetailsOptions,\n GetProfileDetailsResponse,\n CreateProfileOptions,\n CreateProfileResponse,\n UpdateProfileOptions,\n UpdateProfileResponse,\n DeleteProfileOptions,\n DeleteProfileResponse,\n SetProfileUsersOptions,\n SetProfileSelectTablesOptions,\n SetProfileDmlTablesOptions,\n SetProfileActionsOptions,\n SetProfileScreensOptions,\n SetProfileServerFunctionsOptions,\n SetProfilePermissionResponse,\n ExecutePublicServerFunctionOptions,\n ExecutePublicServerFunctionResponse,\n ExecutePublicServerFunctionAsyncResponse,\n GetPublicServerFunctionExecutionOptions,\n GetPublicServerFunctionExecutionResponse\n} from './types';\n\n/**\n * POST /interactions/executeDataLoader\n * Executa um Data Loader\n */\nexport async function executeDataLoaderMitra(options: ExecuteDataLoaderOptions): Promise<ExecuteDataLoaderResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dataLoaderId: options.dataLoaderId\n };\n if (options.input !== undefined) body.input = options.input;\n return http.post('/interactions/executeDataLoader', body);\n}\n\n/**\n * POST /interactions/executeDbAction\n * Executa uma DBAction (DML) cadastrada\n */\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dbActionId: options.dbActionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeDbAction', body);\n}\n\n/**\n * POST /interactions/setFileStatus\n * Move arquivo do chat para PUBLIC ou LOADABLE\n */\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\n return http.post('/interactions/setFileStatus', {\n projectId: resolveProjectId(options.projectId),\n fileName: options.fileName,\n targetPath: options.targetPath\n });\n}\n\n/**\n * POST /interactions/setVariable\n * Cria ou atualiza uma variável customizada\n */\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n };\n\n if (options.value !== undefined) {\n body.value = options.value;\n }\n\n return http.post('/interactions/setVariable', body);\n}\n\n/**\n * GET /interactions/listVariables?projectId={id}\n * Lista variáveis de um projeto\n */\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\n return http.get('/interactions/listVariables', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * GET /interactions/getVariable?projectId={id}&key={key}\n * Busca o valor de uma variável específica\n */\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\n return http.get('/interactions/getVariable', {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n });\n}\n\n/**\n * POST /interactions/runAction\n * Executa uma Action (fluxo de ação) cadastrada\n */\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n actionId: options.actionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/runAction', body);\n}\n\n/**\n * POST /interactions/executeServerFunction\n * Executa uma Server Function de forma SÍNCRONA (timeout 60s no backend)\n */\nexport async function executeServerFunctionMitra(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunction', body);\n}\n\n/**\n * POST /interactions/executeServerFunctionAsync\n * Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)\n */\nexport async function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunctionAsync', body);\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/execute\n * Executa uma Server Function pública de forma SÍNCRONA (sem autenticação).\n * A SF deve ter publicExecution = true. Timeout 5min.\n */\nexport async function executePublicServerFunctionMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/executeAsync\n * Executa uma Server Function pública de forma ASSÍNCRONA (sem autenticação).\n * Retorna executionId imediatamente. Use getPublicServerFunctionExecutionMitra para polling.\n */\nexport async function executePublicServerFunctionAsyncMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionAsyncResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /public/serverFunction/{projectId}/execution/{executionId}\n * Consulta o status/resultado de uma execução pública de SF (sem autenticação).\n */\nexport async function getPublicServerFunctionExecutionMitra(\n options: GetPublicServerFunctionExecutionOptions\n): Promise<GetPublicServerFunctionExecutionResponse> {\n const { projectId, executionId } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' }\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /interactions/integrations?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return http.get('/interactions/integrations', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /interactions/integrations/call\n * Chama uma API externa via serviço de integrações\n * Mapeia connection → integrationSlug no body\n */\nexport async function callIntegrationMitra(options: CallIntegrationOptions): Promise<CallIntegrationResponse> {\n const body: Record<string, unknown> = {\n integrationSlug: options.connection,\n projectId: resolveProjectId(options.projectId),\n method: options.method\n };\n\n if (options.endpoint !== undefined) {\n body.endpoint = options.endpoint;\n }\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n if (options.body !== undefined) {\n body.body = options.body;\n }\n\n return http.post('/interactions/integrations/call', body);\n}\n\n/**\n * POST /interactions/stopServerFunctionExecution\n * Para a execução de uma Server Function em andamento\n */\nexport async function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse> {\n return http.post('/interactions/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n// === Upload de Arquivos ===\n\n/**\n * POST /interactions/uploadFilePublic (multipart/form-data)\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\n */\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/interactions/uploadFilePublic', formData);\n}\n\n/**\n * POST /interactions/uploadFileLoadable (multipart/form-data)\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\n */\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/interactions/uploadFileLoadable', formData);\n}\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}`, pid, { page, size, jdbcConnectionConfigId, ...filters });\n}\n\nexport async function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>> {\n const { tableName, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function updateRecordMitra(options: UpdateRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.put(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function patchRecordMitra(options: PatchRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.patch(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function deleteRecordMitra(options: DeleteRecordOptions): Promise<void> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.del(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]> {\n const { tableName, records, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n// === Profile Management ===\n\n/**\n * GET /interactions/profiles?projectId={id}\n * Lista todos os perfis do projeto\n */\nexport async function listProfilesMitra(options: ListProfilesOptions = {}): Promise<ListProfilesResponse> {\n return http.get('/interactions/profiles', { projectId: resolveProjectId(options.projectId) });\n}\n\n/**\n * GET /interactions/profiles/{profileId}?projectId={id}\n * Detalhes de um perfil (usuários, tabelas, actions, screens, server functions)\n */\nexport async function getProfileDetailsMitra(options: GetProfileDetailsOptions): Promise<GetProfileDetailsResponse> {\n return http.get(`/interactions/profiles/${options.profileId}`, { projectId: resolveProjectId(options.projectId) });\n}\n\n/**\n * POST /interactions/profiles\n * Cria um novo perfil\n */\nexport async function createProfileMitra(options: CreateProfileOptions): Promise<CreateProfileResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n name: options.name\n };\n if (options.color !== undefined) body.color = options.color;\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\n return http.post('/interactions/profiles', body);\n}\n\n/**\n * PUT /interactions/profiles\n * Atualiza um perfil existente\n */\nexport async function updateProfileMitra(options: UpdateProfileOptions): Promise<UpdateProfileResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId\n };\n if (options.name !== undefined) body.name = options.name;\n if (options.color !== undefined) body.color = options.color;\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\n return http.put('/interactions/profiles', body);\n}\n\n/**\n * DELETE /interactions/profiles\n * Deleta um perfil\n */\nexport async function deleteProfileMitra(options: DeleteProfileOptions): Promise<DeleteProfileResponse> {\n return http.delBody('/interactions/profiles', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId\n });\n}\n\n/**\n * POST /interactions/profiles/users\n * Define os usuários de um perfil (substitui lista atual)\n */\nexport async function setProfileUsersMitra(options: SetProfileUsersOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/users', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n userIds: options.userIds\n });\n}\n\n/**\n * POST /interactions/profiles/selectTables\n * Define as tabelas SELECT permitidas por perfil\n */\nexport async function setProfileSelectTablesMitra(options: SetProfileSelectTablesOptions): Promise<SetProfilePermissionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n tables: options.tables\n };\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\n return http.post('/interactions/profiles/selectTables', body);\n}\n\n/**\n * POST /interactions/profiles/dmlTables\n * Define as tabelas DML permitidas por perfil\n */\nexport async function setProfileDmlTablesMitra(options: SetProfileDmlTablesOptions): Promise<SetProfilePermissionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n tables: options.tables\n };\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\n return http.post('/interactions/profiles/dmlTables', body);\n}\n\n/**\n * POST /interactions/profiles/actions\n * Define as actions permitidas por perfil\n */\nexport async function setProfileActionsMitra(options: SetProfileActionsOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/actions', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n actionIds: options.actionIds\n });\n}\n\n/**\n * POST /interactions/profiles/screens\n * Define as screens permitidas por perfil\n */\nexport async function setProfileScreensMitra(options: SetProfileScreensOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/screens', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n screenIds: options.screenIds\n });\n}\n\n/**\n * POST /interactions/profiles/serverFunctions\n * Define as server functions permitidas por perfil\n */\nexport async function setProfileServerFunctionsMitra(options: SetProfileServerFunctionsOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/serverFunctions', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n serverFunctionIds: options.serverFunctionIds\n });\n}\n\n","/**\r\n * Mitra Interactions SDK — Agent Attachments (interno)\r\n *\r\n * Detecção de tipo + upload + montagem do AgentAttachment, replicando o que o\r\n * mitra-nuxt faz no drop/send. O consumidor passa File[] em send({ files });\r\n * a SDK cuida de tudo. NÃO faz parte da API pública (usado por agent-task-session).\r\n */\r\n\r\nimport { uploadFilePublicMitra } from './services';\r\nimport type { AgentAttachment, AgentAttachmentType } from './types';\r\n\r\n// Mapa de extensão → tipo (porte do mitra-nuxt AgentTaskInput.vue).\r\nconst EXTENSION_MAP: Record<string, AgentAttachmentType> = {\r\n // Images\r\n png: 'image', jpg: 'image', jpeg: 'image', gif: 'image', webp: 'image', svg: 'image', bmp: 'image', ico: 'image',\r\n // PDF\r\n pdf: 'pdf',\r\n // CSV\r\n csv: 'csv', tsv: 'csv',\r\n // Excel\r\n xlsx: 'excel', xls: 'excel', xlsm: 'excel', xlsb: 'excel', ods: 'excel',\r\n // Word\r\n docx: 'word', doc: 'word', odt: 'word', rtf: 'word',\r\n // PowerPoint\r\n pptx: 'powerpoint', ppt: 'powerpoint', odp: 'powerpoint',\r\n // Text\r\n txt: 'text', md: 'text', log: 'text', ini: 'text', cfg: 'text', env: 'text',\r\n // Code\r\n js: 'code', ts: 'code', jsx: 'code', tsx: 'code', py: 'code', rb: 'code',\r\n java: 'code', c: 'code', cpp: 'code', h: 'code', cs: 'code', go: 'code',\r\n rs: 'code', php: 'code', swift: 'code', kt: 'code', scala: 'code',\r\n html: 'code', css: 'code', scss: 'code', less: 'code', sql: 'code',\r\n sh: 'code', bash: 'code', zsh: 'code', yaml: 'code', yml: 'code',\r\n toml: 'code', xml: 'code', vue: 'code', svelte: 'code',\r\n // JSON\r\n json: 'json', jsonl: 'json', geojson: 'json',\r\n // ZIP\r\n zip: 'zip', tar: 'zip', gz: 'zip', rar: 'zip', '7z': 'zip',\r\n // Audio\r\n mp3: 'audio', wav: 'audio', ogg: 'audio', flac: 'audio', m4a: 'audio', aac: 'audio', wma: 'audio'\r\n};\r\n\r\n/** Detecta o AttachmentType a partir da extensão/MIME (mesmo critério do Nuxt). */\r\nexport function detectAttachmentType(file: File): AgentAttachmentType {\r\n const ext = file.name.split('.').pop()?.toLowerCase() ?? '';\r\n if (EXTENSION_MAP[ext]) return EXTENSION_MAP[ext];\r\n if (file.type.startsWith('image/')) return 'image';\r\n if (file.type === 'application/pdf') return 'pdf';\r\n if (file.type.startsWith('audio/')) return 'audio';\r\n if (file.type.startsWith('text/')) return 'text';\r\n return 'unknown';\r\n}\r\n\r\n/**\r\n * Para cada File: detecta o tipo, sobe via uploadFilePublic (URL pública) e\r\n * monta o AgentAttachment. Uploads em paralelo. Lança se algum não retornar URL.\r\n */\r\nexport async function buildAttachmentsFromFiles(\r\n files: File[],\r\n projectId?: number | string\r\n): Promise<AgentAttachment[]> {\r\n return Promise.all(\r\n files.map(async (file) => {\r\n const type = detectAttachmentType(file);\r\n const res = await uploadFilePublicMitra({ file, projectId });\r\n const url = res.result?.publicUrl;\r\n if (!url) {\r\n throw new Error(`upload sem URL pública: ${file.name}`);\r\n }\r\n return {\r\n url,\r\n name: file.name,\r\n type,\r\n mimeType: file.type,\r\n size: file.size\r\n };\r\n })\r\n );\r\n}\r\n","/**\r\n * Mitra Interactions SDK — AgentTaskSession\r\n *\r\n * Handle resource-oriented de um chat com o agente. Encapsula todo o ciclo\r\n * de vida (histórico, streaming, fila, cancel) num único objeto.\r\n *\r\n * Espelha a semântica do Code Builder (Pinia stores + composables), porém\r\n * por-session em vez de globalmente compartilhado.\r\n *\r\n * Não construa diretamente — use `getAgentTaskMitra({ create | taskId })`.\r\n */\r\n\r\nimport type {\r\n AgentChat,\r\n AgentMessage,\r\n AgentAttachment,\r\n AgentTaskSession as IAgentTaskSession,\r\n AgentTaskStatus,\r\n AgentTaskEventMap,\r\n AgentTaskEventName,\r\n AgentType,\r\n QueuedItem,\r\n SendOptions\r\n} from './types';\r\nimport { buildAttachmentsFromFiles } from './agent-attachments';\r\n\r\ninterface SessionTransport {\r\n /** Garante WS conectado. */\r\n ensureConnected(): Promise<void>;\r\n /** Envia request/response com requestId, aguarda data. */\r\n request<T>(type: string, payload: Record<string, unknown>): Promise<T>;\r\n /** Envia mensagem fire-and-forget (eventos chegam via subscribe). */\r\n send(type: string, payload: Record<string, unknown>, taskId?: string): void;\r\n /** Resolve projectId (param ou config global). */\r\n resolveProjectId(override?: number | string): number | string;\r\n /** Próximo seq incremental (FIFO de mensagens em fila). */\r\n nextSeq(): number;\r\n /** Subscribe handler pra eventos WS de uma taskId específica. Retorna unsubscribe. */\r\n subscribe(taskId: string, handler: (msg: any) => void): () => void;\r\n /** Subscribe handler pra eventos sem taskId resolvido (ex: task_update pra session nova). */\r\n subscribePending(sessionId: string, handler: (msg: any) => void): () => void;\r\n /** Verifica se uma taskId está em streaming agora (do streaming_state). */\r\n isStreaming(taskId: string): boolean;\r\n /** Remove session do cache global (chamado no close). */\r\n unregister(taskId: string | null, sessionId: string): void;\r\n /** Registra mapeamento taskId → session (chamado quando task_created chega). */\r\n register(taskId: string, session: AgentTaskSession): void;\r\n}\r\n\r\ninterface SessionInitNew {\r\n kind: 'new';\r\n projectId?: number | string;\r\n agentType?: AgentType;\r\n modelId?: string;\r\n name?: string;\r\n}\r\n\r\ninterface SessionInitExisting {\r\n kind: 'existing';\r\n taskId: string;\r\n}\r\n\r\ntype SessionInit = SessionInitNew | SessionInitExisting;\r\n\r\nconst QUEUE_MAX = 10;\r\nconst TURN_STARTED_SAFETY_MS = 30_000;\r\nlet sessionCounter = 0;\r\n\r\nexport class AgentTaskSession implements IAgentTaskSession {\r\n // ── Identidade ────────────────────────\r\n private _taskId: string | null = null;\r\n private _task: AgentChat | null = null;\r\n private readonly _isNew: boolean;\r\n private readonly _sessionId: string;\r\n\r\n // ── Estado ────────────────────────────\r\n private _status: AgentTaskStatus = 'opening';\r\n private _history: AgentMessage[] = [];\r\n private _content = '';\r\n private _queue: QueuedItem[] = [];\r\n\r\n // ── Config inicial ────────────────────\r\n private _projectId?: number | string;\r\n private _agentType?: AgentType;\r\n private _modelId?: string;\r\n private _initialName?: string;\r\n\r\n // ── Cancel state ──────────────────────\r\n private _cancelled = false;\r\n private _awaitingTurnStarted = false;\r\n private _turnStartedTimer: ReturnType<typeof setTimeout> | null = null;\r\n private _pendingCancelResolve: (() => void) | null = null;\r\n\r\n // ── Listeners ─────────────────────────\r\n private _listeners: Map<AgentTaskEventName, Set<(payload: any) => void>> = new Map();\r\n private _wsUnsubscribe: (() => void) | null = null;\r\n private _wsUnsubscribePending: (() => void) | null = null;\r\n\r\n private readonly _transport: SessionTransport;\r\n\r\n constructor(init: SessionInit, transport: SessionTransport) {\r\n this._transport = transport;\r\n this._sessionId = `sess-${++sessionCounter}-${Date.now()}`;\r\n this._isNew = init.kind === 'new';\r\n\r\n if (init.kind === 'new') {\r\n this._projectId = init.projectId;\r\n this._agentType = init.agentType;\r\n this._modelId = init.modelId;\r\n this._initialName = init.name;\r\n // Sessions novas começam idle (nada pra carregar)\r\n this._setStatus('idle');\r\n // Eventos do task_update precisam chegar antes do taskId existir\r\n this._wsUnsubscribePending = this._transport.subscribePending(\r\n this._sessionId,\r\n (msg) => this._handleMessage(msg)\r\n );\r\n } else {\r\n this._taskId = init.taskId;\r\n this._transport.register(init.taskId, this);\r\n this._wsUnsubscribe = this._transport.subscribe(init.taskId, (msg) =>\r\n this._handleMessage(msg)\r\n );\r\n // Conecta WS em background e detecta se já está streaming\r\n this._initExisting(init.taskId);\r\n }\r\n }\r\n\r\n // ── Properties públicas ────────────────────────────\r\n\r\n get taskId(): string | null {\r\n return this._taskId;\r\n }\r\n get task(): AgentChat | null {\r\n return this._task;\r\n }\r\n get isNew(): boolean {\r\n return this._isNew;\r\n }\r\n get status(): AgentTaskStatus {\r\n return this._status;\r\n }\r\n get history(): ReadonlyArray<AgentMessage> {\r\n return this._history;\r\n }\r\n get content(): string {\r\n return this._content;\r\n }\r\n get queue(): ReadonlyArray<QueuedItem> {\r\n return this._queue;\r\n }\r\n\r\n // ── Lifecycle ──────────────────────────────────────\r\n\r\n private async _initExisting(taskId: string): Promise<void> {\r\n try {\r\n await this._transport.ensureConnected();\r\n if (this._status === 'closed') return;\r\n // Detecta stream ativo (vem do streaming_state mantido pelo transport)\r\n if (this._transport.isStreaming(taskId)) {\r\n this._setStatus('streaming');\r\n } else {\r\n this._setStatus('idle');\r\n }\r\n } catch (err) {\r\n this._emitError(err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async loadHistory(options?: { limit?: number }): Promise<AgentMessage[]> {\r\n if (this._status === 'closed') {\r\n throw new Error('AgentTaskSession: session fechada.');\r\n }\r\n if (!this._taskId) {\r\n // Session nova sem prompt ainda — não tem histórico\r\n this._history = [];\r\n this._emit('historyLoaded', []);\r\n return [];\r\n }\r\n await this._transport.ensureConnected();\r\n const payload: Record<string, unknown> = { taskId: this._taskId };\r\n if (options?.limit != null) payload.limit = options.limit;\r\n const msgs = await this._transport.request<AgentMessage[]>('get_history', payload);\r\n this._history = msgs;\r\n this._emit('historyLoaded', msgs);\r\n return msgs;\r\n }\r\n\r\n close(): void {\r\n if (this._status === 'closed') return;\r\n this._setStatus('closed');\r\n if (this._turnStartedTimer) {\r\n clearTimeout(this._turnStartedTimer);\r\n this._turnStartedTimer = null;\r\n }\r\n if (this._wsUnsubscribe) {\r\n this._wsUnsubscribe();\r\n this._wsUnsubscribe = null;\r\n }\r\n if (this._wsUnsubscribePending) {\r\n this._wsUnsubscribePending();\r\n this._wsUnsubscribePending = null;\r\n }\r\n this._transport.unregister(this._taskId, this._sessionId);\r\n this._listeners.clear();\r\n }\r\n\r\n // ── Comandos ───────────────────────────────────────\r\n\r\n send(prompt: string, options?: SendOptions): void {\r\n if (this._status === 'closed') {\r\n throw new Error('AgentTaskSession: session fechada.');\r\n }\r\n const files = options?.files?.length ? options.files : undefined;\r\n if (!prompt.trim() && !files) return;\r\n\r\n const agentType = options?.agentType ?? this._agentType ?? 'claudecode';\r\n const modelId = options?.modelId ?? this._modelId;\r\n\r\n // Com anexos: sobe primeiro (igual o Nuxt faz no send), depois despacha.\r\n // O send continua síncrono/void — o upload roda em background e o\r\n // consumidor observa pelo status 'uploading' + evento 'error'.\r\n if (files) {\r\n void this._uploadThenDispatch(prompt, agentType, modelId, files);\r\n return;\r\n }\r\n this._dispatchSend(prompt, agentType, modelId, undefined);\r\n }\r\n\r\n private async _uploadThenDispatch(\r\n prompt: string,\r\n agentType: AgentType,\r\n modelId: string | undefined,\r\n files: File[]\r\n ): Promise<void> {\r\n const wasStreaming = this._status === 'streaming';\r\n if (!wasStreaming) this._setStatus('uploading');\r\n let attachments: AgentAttachment[];\r\n try {\r\n attachments = await buildAttachmentsFromFiles(files, this._projectId);\r\n } catch (err) {\r\n this._emit('error', {\r\n error: `Falha ao subir anexos: ${err instanceof Error ? err.message : String(err)}`\r\n });\r\n if (this._status === 'uploading') this._setStatus('idle');\r\n return;\r\n }\r\n // Session pode ter sido fechada durante o upload.\r\n if (this._status === 'closed') return;\r\n this._dispatchSend(prompt, agentType, modelId, attachments);\r\n }\r\n\r\n private _dispatchSend(\r\n prompt: string,\r\n agentType: AgentType,\r\n modelId: string | undefined,\r\n attachments: AgentAttachment[] | undefined\r\n ): void {\r\n // Se streaming, enfileira\r\n if (this._status === 'streaming') {\r\n this._enqueue(prompt, agentType);\r\n // Best-effort mid-session injection (BASH_ENV no OpenCode)\r\n if (this._taskId) {\r\n this._transport.send(\r\n 'send_prompt',\r\n {\r\n prompt,\r\n taskId: this._taskId,\r\n projectId: this._projectId,\r\n agentType,\r\n ...(modelId ? { modelId } : {}),\r\n ...(attachments ? { attachments } : {}),\r\n midSession: true\r\n },\r\n this._taskId\r\n );\r\n }\r\n return;\r\n }\r\n\r\n // Se cancelado, marca awaitingTurnStarted e dispara safety net\r\n if (this._status === 'cancelled') {\r\n this._awaitingTurnStarted = true;\r\n if (this._turnStartedTimer) clearTimeout(this._turnStartedTimer);\r\n this._turnStartedTimer = setTimeout(() => {\r\n this._turnStartedTimer = null;\r\n if (this._awaitingTurnStarted) {\r\n this._cancelled = false;\r\n this._awaitingTurnStarted = false;\r\n this._setStatus('idle');\r\n }\r\n }, TURN_STARTED_SAFETY_MS);\r\n }\r\n\r\n // Dispara novo turno\r\n this._setStatus('streaming');\r\n this._content = '';\r\n\r\n const payload: Record<string, unknown> = {\r\n prompt,\r\n projectId: this._projectId,\r\n agentType\r\n };\r\n if (modelId) payload.modelId = modelId;\r\n if (attachments) payload.attachments = attachments;\r\n if (this._taskId) payload.taskId = this._taskId;\r\n if (this._initialName && !this._taskId) {\r\n payload.name = this._initialName;\r\n }\r\n\r\n this._transport.send('send_prompt', payload, this._taskId ?? undefined);\r\n }\r\n\r\n async cancel(): Promise<void> {\r\n if (this._status === 'closed') return;\r\n if (this._status !== 'streaming' && this._status !== 'cancelled') return;\r\n\r\n this._cancelled = true;\r\n this._clearQueue();\r\n\r\n if (this._taskId) {\r\n this._transport.send(\r\n 'task_cancel',\r\n { source: 'sdk_cancel' },\r\n this._taskId\r\n );\r\n }\r\n\r\n this._setStatus('cancelled');\r\n this._emit('cancelled', undefined);\r\n\r\n // Resolve quando turn_started chega OU safety net (30s)\r\n return new Promise<void>((resolve) => {\r\n const previousResolve = this._pendingCancelResolve;\r\n this._pendingCancelResolve = () => {\r\n resolve();\r\n if (previousResolve) previousResolve();\r\n };\r\n setTimeout(() => {\r\n if (this._pendingCancelResolve) {\r\n this._pendingCancelResolve = null;\r\n resolve();\r\n }\r\n }, TURN_STARTED_SAFETY_MS);\r\n });\r\n }\r\n\r\n // ── Manipulação de fila ────────────────────────────\r\n\r\n editQueueItem(itemId: string, newText: string): boolean {\r\n const idx = this._queue.findIndex((q) => q.id === itemId);\r\n if (idx < 0 || this._queue[idx].status !== 'pending') return false;\r\n this._queue = [\r\n ...this._queue.slice(0, idx),\r\n { ...this._queue[idx], text: newText },\r\n ...this._queue.slice(idx + 1)\r\n ];\r\n this._emitQueueChange();\r\n return true;\r\n }\r\n\r\n removeQueueItem(itemId: string): boolean {\r\n const before = this._queue.length;\r\n this._queue = this._queue.filter((q) => q.id !== itemId);\r\n if (this._queue.length === before) return false;\r\n this._emitQueueChange();\r\n return true;\r\n }\r\n\r\n clearQueue(): void {\r\n if (this._queue.length === 0) return;\r\n this._clearQueue();\r\n }\r\n\r\n // ── Eventos ────────────────────────────────────────\r\n\r\n on<E extends AgentTaskEventName>(\r\n event: E,\r\n handler: (payload: AgentTaskEventMap[E]) => void\r\n ): () => void {\r\n if (!this._listeners.has(event)) {\r\n this._listeners.set(event, new Set());\r\n }\r\n this._listeners.get(event)!.add(handler as any);\r\n return () => {\r\n this._listeners.get(event)?.delete(handler as any);\r\n };\r\n }\r\n\r\n // ── Internals: routing de mensagens WS ─────────────\r\n\r\n private _handleMessage(msg: any): void {\r\n if (!msg?.type) return;\r\n\r\n // Cancel gate local: se cancelado, dropa eventos stale (exceto turn_started/error)\r\n if (\r\n this._cancelled &&\r\n msg.type !== 'turn_started' &&\r\n msg.type !== 'error' &&\r\n msg.type !== 'task_update'\r\n ) {\r\n return;\r\n }\r\n\r\n const payload = (msg.payload ?? {}) as Record<string, unknown>;\r\n\r\n switch (msg.type) {\r\n case 'task_update': {\r\n // Task criada (caso `new`) — reassocia e registra no transport\r\n if (payload.action !== 'created') return;\r\n const task = payload.task as AgentChat | undefined;\r\n if (!task) return;\r\n if (!this._taskId) {\r\n this._taskId = task.id;\r\n this._task = task;\r\n this._transport.register(task.id, this);\r\n // Trocar subscribePending por subscribe direto\r\n if (this._wsUnsubscribePending) {\r\n this._wsUnsubscribePending();\r\n this._wsUnsubscribePending = null;\r\n }\r\n this._wsUnsubscribe = this._transport.subscribe(task.id, (m) =>\r\n this._handleMessage(m)\r\n );\r\n this._emit('taskCreated', { task });\r\n } else if (this._taskId === task.id) {\r\n this._task = task;\r\n }\r\n break;\r\n }\r\n\r\n case 'turn_started': {\r\n // Levanta cancel gate, sinaliza início de turno\r\n if (this._cancelled) {\r\n this._cancelled = false;\r\n this._awaitingTurnStarted = false;\r\n if (this._turnStartedTimer) {\r\n clearTimeout(this._turnStartedTimer);\r\n this._turnStartedTimer = null;\r\n }\r\n if (this._pendingCancelResolve) {\r\n this._pendingCancelResolve();\r\n this._pendingCancelResolve = null;\r\n }\r\n }\r\n if (this._status !== 'streaming') {\r\n this._setStatus('streaming');\r\n this._content = '';\r\n }\r\n this._emit('turnStart', undefined);\r\n break;\r\n }\r\n\r\n case 'stream_delta': {\r\n const kind: 'text' | 'tool' =\r\n payload.subtype === 'thinking' ? 'tool' : 'text';\r\n const delta = String(payload.delta ?? '');\r\n if (kind === 'text') this._content += delta;\r\n this._emit('delta', { delta, kind });\r\n break;\r\n }\r\n\r\n case 'stream_tool_activity': {\r\n this._emit('tool', {\r\n tool: String(payload.tool ?? ''),\r\n input: payload.input as string | undefined,\r\n content: payload.content as string | undefined,\r\n timestamp: Number(msg.timestamp ?? Date.now())\r\n });\r\n break;\r\n }\r\n\r\n case 'stream_end': {\r\n const finalContent = this._content;\r\n this._emit('turnEnd', { content: finalContent });\r\n this._setStatus('idle');\r\n // Dequeue próximo item se houver\r\n this._shiftQueueAndSend();\r\n break;\r\n }\r\n\r\n case 'error': {\r\n const error = String(payload.error ?? msg.error ?? 'Erro desconhecido');\r\n this._emitError(error);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // ── Fila interna ───────────────────────────────────\r\n\r\n private _enqueue(text: string, agentType: AgentType): void {\r\n if (this._queue.length >= QUEUE_MAX) return;\r\n const trimmed = text.trim();\r\n if (this._queue.some((q) => q.text.trim() === trimmed)) return;\r\n const item: QueuedItem = {\r\n id: `q-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\r\n text,\r\n agentType,\r\n seq: this._transport.nextSeq(),\r\n createdAt: Date.now(),\r\n status: 'pending'\r\n };\r\n this._queue = [...this._queue, item];\r\n this._emitQueueChange();\r\n }\r\n\r\n private _shiftQueueAndSend(): void {\r\n if (this._queue.length === 0) return;\r\n const [next, ...rest] = this._queue;\r\n this._queue = rest;\r\n this._emitQueueChange();\r\n this.send(next.text, { agentType: next.agentType });\r\n }\r\n\r\n private _clearQueue(): void {\r\n if (this._queue.length === 0) return;\r\n this._queue = [];\r\n this._emitQueueChange();\r\n }\r\n\r\n // ── Helpers de emissão ─────────────────────────────\r\n\r\n private _emit<E extends AgentTaskEventName>(\r\n event: E,\r\n payload: AgentTaskEventMap[E]\r\n ): void {\r\n const set = this._listeners.get(event);\r\n if (!set) return;\r\n for (const handler of set) {\r\n try {\r\n (handler as (p: any) => void)(payload);\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error(`[AgentTaskSession] handler de '${event}' lançou:`, err);\r\n }\r\n }\r\n }\r\n\r\n private _emitError(error: string): void {\r\n this._emit('error', { error });\r\n this._setStatus('error');\r\n }\r\n\r\n private _emitQueueChange(): void {\r\n this._emit('queueChange', { queue: this._queue });\r\n }\r\n\r\n private _setStatus(next: AgentTaskStatus): void {\r\n if (this._status === next) return;\r\n const previous = this._status;\r\n this._status = next;\r\n this._emit('statusChange', { status: next, previous });\r\n }\r\n}\r\n","/**\r\n * Mitra Interactions SDK — Agent Chat\r\n *\r\n * Hub do WebSocket compartilhado e factories da API pública:\r\n * - manageAgentChatMitra({ action: 'list' | 'rename' | 'delete', ... })\r\n * - getAgentTaskMitra({ create | taskId, ... })\r\n *\r\n * O WS é singleton: todas as sessions usam UMA conexão. O roteamento\r\n * de eventos é feito por taskId, despachando pra session correspondente.\r\n *\r\n * NÃO há `sendAgentPromptMitra` ou `getAgentHistoryMitra` exportados —\r\n * essas operações vivem dentro de `AgentTaskSession`.\r\n */\r\n\r\nimport { getConfig, stripBearer } from './config';\r\nimport { isNewWorld } from './auth';\r\nimport { AgentTaskSession } from './agent-task-session';\r\nimport type {\r\n AgentChat,\r\n AgentTaskSession as IAgentTaskSession,\r\n GetAgentTaskOptions,\r\n ManageAgentChatOptions,\r\n ManageAgentChatListOptions,\r\n ManageAgentChatRenameOptions,\r\n ManageAgentChatDeleteOptions,\r\n RenameAgentChatResult,\r\n DeleteAgentChatResult\r\n} from './types';\r\n\r\n// ── WS singleton state ───────────────────────────────────────────────────\r\n\r\nlet ws: WebSocket | null = null;\r\nlet connectPromise: Promise<WebSocket> | null = null;\r\nlet requestSeq = 0;\r\nlet queueSeq = 0;\r\n\r\ninterface PendingRequest {\r\n resolve: (data: unknown) => void;\r\n reject: (err: Error) => void;\r\n}\r\nconst pendingRequests = new Map<string, PendingRequest>();\r\n\r\n/** Sessions indexadas por taskId (para roteamento). */\r\nconst sessionsByTaskId = new Map<string, AgentTaskSession>();\r\n\r\n/** Handlers de mensagens vindas pra cada taskId já conhecida. */\r\nconst handlersByTaskId = new Map<string, Set<(msg: any) => void>>();\r\n\r\n/**\r\n * Handlers de sessions que ainda não têm taskId (caso create:true).\r\n * Elas escutam task_update pra capturar o taskId real.\r\n */\r\nconst pendingHandlers = new Map<string, (msg: any) => void>();\r\n\r\n/** Tasks em streaming agora (do streaming_state event). */\r\nconst streamingTaskIds = new Set<string>();\r\n\r\n// ── Helpers ──────────────────────────────────────────────────────────────\r\n\r\nfunction nextRequestId(): string {\r\n return `req-${Date.now()}-${++requestSeq}`;\r\n}\r\n\r\nfunction nextQueueSeq(): number {\r\n return ++queueSeq;\r\n}\r\n\r\nfunction getRawToken(): string {\r\n const config = getConfig();\r\n if (!config.token) {\r\n throw new Error('Agent Chat: token não configurado. Faça login primeiro ou passe token em configureSdkMitra.');\r\n }\r\n return stripBearer(config.token);\r\n}\r\n\r\nfunction resolveProjectId(override?: number | string): number | string {\r\n const config = getConfig();\r\n const pid = override ?? config.projectId;\r\n if (pid == null) {\r\n throw new Error('Agent Chat: projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n return pid;\r\n}\r\n\r\nfunction getWsUrl(): string {\r\n // Fonte única: window.__mitraEnv.agentWsUrl, injetado pelo build-proxy\r\n // do Mitra em todas as apps publicadas pela plataforma. Como a SDK é\r\n // consumida apenas nessas apps, não há outra origem possível.\r\n if (typeof window !== 'undefined') {\r\n const injected = (window as any).__mitraEnv?.agentWsUrl;\r\n if (typeof injected === 'string' && injected) return injected;\r\n }\r\n throw new Error('Agent Chat: window.__mitraEnv.agentWsUrl indisponível. A SDK precisa rodar em uma app publicada pelo Mitra (build-proxy injeta __mitraEnv).');\r\n}\r\n\r\n// ── Connection ───────────────────────────────────────────────────────────\r\n\r\nfunction connect(): Promise<WebSocket> {\r\n if (ws && ws.readyState === WebSocket.OPEN) {\r\n return Promise.resolve(ws);\r\n }\r\n if (connectPromise) return connectPromise;\r\n\r\n const baseUrl = getWsUrl();\r\n const token = getRawToken();\r\n const separator = baseUrl.includes('?') ? '&' : '?';\r\n const url = `${baseUrl}${separator}token=${encodeURIComponent(token)}`;\r\n\r\n connectPromise = new Promise<WebSocket>((resolve, reject) => {\r\n const socket = new WebSocket(url);\r\n let opened = false;\r\n\r\n const timer = setTimeout(() => {\r\n if (!opened) {\r\n try { socket.close(); } catch { /* noop */ }\r\n connectPromise = null;\r\n reject(new Error('Agent Chat: timeout ao conectar no WebSocket'));\r\n }\r\n }, 15000);\r\n\r\n socket.onopen = () => {\r\n opened = true;\r\n clearTimeout(timer);\r\n ws = socket;\r\n connectPromise = null;\r\n resolve(socket);\r\n };\r\n\r\n socket.onerror = () => {\r\n if (!opened) {\r\n clearTimeout(timer);\r\n connectPromise = null;\r\n reject(new Error('Agent Chat: erro ao conectar no WebSocket'));\r\n }\r\n };\r\n\r\n socket.onclose = () => {\r\n if (ws === socket) ws = null;\r\n // Falha todas as requisições pendentes\r\n for (const [id, pending] of pendingRequests) {\r\n pending.reject(new Error('Agent Chat: conexão fechada'));\r\n pendingRequests.delete(id);\r\n }\r\n streamingTaskIds.clear();\r\n };\r\n\r\n socket.onmessage = (event) => routeMessage(event.data);\r\n });\r\n\r\n return connectPromise;\r\n}\r\n\r\n// ── Message routing ──────────────────────────────────────────────────────\r\n\r\nfunction routeMessage(raw: unknown): void {\r\n let msg: any;\r\n try {\r\n msg = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n } catch {\r\n return;\r\n }\r\n if (!msg?.type) return;\r\n\r\n // 1) Request/Response (correlacionado por requestId)\r\n if (msg.type === 'response' && msg.requestId) {\r\n const pending = pendingRequests.get(msg.requestId);\r\n if (!pending) return;\r\n pendingRequests.delete(msg.requestId);\r\n if (msg.ok) pending.resolve(msg.data);\r\n else pending.reject(new Error(msg.error || 'Erro desconhecido'));\r\n return;\r\n }\r\n\r\n // 2) streaming_state (mantém Set de tasks streaming)\r\n if (msg.type === 'streaming_state') {\r\n streamingTaskIds.clear();\r\n const ids = (msg.payload?.streamingTaskIds ?? []) as string[];\r\n for (const id of ids) streamingTaskIds.add(id);\r\n return;\r\n }\r\n\r\n // 3) turn_started / stream_end mantêm o Set sincronizado\r\n if (msg.type === 'turn_started' && msg.taskId) {\r\n streamingTaskIds.add(msg.taskId);\r\n } else if (msg.type === 'stream_end' && msg.taskId) {\r\n streamingTaskIds.delete(msg.taskId);\r\n }\r\n\r\n // 4) Roteamento por taskId — entrega a TODAS as sessions registradas\r\n // pra essa taskId (geralmente uma só, mas cache permite duplicação)\r\n if (msg.taskId) {\r\n const set = handlersByTaskId.get(msg.taskId);\r\n if (set) {\r\n for (const handler of set) handler(msg);\r\n }\r\n }\r\n\r\n // 5) Entrega também a sessions pendentes (sem taskId ainda)\r\n // — apenas task_update pra elas capturarem o taskId real\r\n if (msg.type === 'task_update') {\r\n for (const handler of pendingHandlers.values()) handler(msg);\r\n }\r\n}\r\n\r\n// ── Transport interface (injetado nas sessions) ──────────────────────────\r\n\r\nconst transport = {\r\n async ensureConnected(): Promise<void> {\r\n await connect();\r\n },\r\n\r\n async request<T>(type: string, payload: Record<string, unknown>): Promise<T> {\r\n const socket = await connect();\r\n const requestId = nextRequestId();\r\n return new Promise<T>((resolve, reject) => {\r\n pendingRequests.set(requestId, {\r\n resolve: (data) => resolve(data as T),\r\n reject\r\n });\r\n try {\r\n socket.send(JSON.stringify({ type, requestId, payload }));\r\n } catch (err) {\r\n pendingRequests.delete(requestId);\r\n reject(err instanceof Error ? err : new Error(String(err)));\r\n }\r\n });\r\n },\r\n\r\n send(type: string, payload: Record<string, unknown>, taskId?: string): void {\r\n // Best-effort: conecta se necessário, mas não bloqueia o caller\r\n connect()\r\n .then((socket) => {\r\n const requestId = nextRequestId();\r\n socket.send(JSON.stringify({ type, requestId, payload, taskId }));\r\n })\r\n .catch((err) => {\r\n // eslint-disable-next-line no-console\r\n console.error('[agent-chat] send falhou:', err);\r\n });\r\n },\r\n\r\n resolveProjectId(override?: number | string): number | string {\r\n return resolveProjectId(override);\r\n },\r\n\r\n nextSeq(): number {\r\n return nextQueueSeq();\r\n },\r\n\r\n subscribe(taskId: string, handler: (msg: any) => void): () => void {\r\n if (!handlersByTaskId.has(taskId)) {\r\n handlersByTaskId.set(taskId, new Set());\r\n }\r\n handlersByTaskId.get(taskId)!.add(handler);\r\n return () => {\r\n const set = handlersByTaskId.get(taskId);\r\n if (!set) return;\r\n set.delete(handler);\r\n if (set.size === 0) handlersByTaskId.delete(taskId);\r\n };\r\n },\r\n\r\n subscribePending(sessionId: string, handler: (msg: any) => void): () => void {\r\n pendingHandlers.set(sessionId, handler);\r\n return () => {\r\n pendingHandlers.delete(sessionId);\r\n };\r\n },\r\n\r\n isStreaming(taskId: string): boolean {\r\n return streamingTaskIds.has(taskId);\r\n },\r\n\r\n register(taskId: string, session: AgentTaskSession): void {\r\n sessionsByTaskId.set(taskId, session);\r\n },\r\n\r\n unregister(taskId: string | null, _sessionId: string): void {\r\n if (taskId) sessionsByTaskId.delete(taskId);\r\n // sessions pendentes saem via subscribePending unsubscribe\r\n }\r\n};\r\n\r\n// ── Public API ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Acesso ao transporte WS interno. Usado pelos demais módulos (ex:\r\n * agent-credentials) que precisam fazer request/response sobre o mesmo\r\n * singleton. NÃO faz parte da API pública.\r\n *\r\n * @internal\r\n */\r\nexport function getTransport() {\r\n return transport;\r\n}\r\n\r\n/**\r\n * Gerencia os chats do user (coleção) — espelha `manageAgentCredentialMitra`.\r\n * Operações stateless: listar, renomear, deletar.\r\n *\r\n * @example\r\n * const chats = await manageAgentChatMitra({ action: 'list' });\r\n * await manageAgentChatMitra({ action: 'rename', taskId, name: 'Novo nome' });\r\n * await manageAgentChatMitra({ action: 'delete', taskId });\r\n */\r\nexport function manageAgentChatMitra(options: ManageAgentChatListOptions): Promise<AgentChat[]>;\r\nexport function manageAgentChatMitra(options: ManageAgentChatRenameOptions): Promise<RenameAgentChatResult>;\r\nexport function manageAgentChatMitra(options: ManageAgentChatDeleteOptions): Promise<DeleteAgentChatResult>;\r\nexport function manageAgentChatMitra(options: ManageAgentChatOptions): Promise<any> {\r\n if (isNewWorld()) throw new Error('manageAgentChatMitra ainda não suportado no novo Mitra.');\r\n if (options.action === 'list') {\r\n const projectId = resolveProjectId(options.projectId);\r\n return transport.request<AgentChat[]>('chats', { action: 'list', projectId });\r\n }\r\n if (options.action === 'rename') {\r\n if (!options.taskId) throw new Error('manageAgentChatMitra(rename): taskId obrigatório.');\r\n if (!options.name?.trim()) throw new Error('manageAgentChatMitra(rename): name obrigatório.');\r\n return transport.request('chats', { action: 'rename', taskId: options.taskId, name: options.name.trim() });\r\n }\r\n if (options.action === 'delete') {\r\n if (!options.taskId) throw new Error('manageAgentChatMitra(delete): taskId obrigatório.');\r\n return transport.request('chats', { action: 'delete', taskId: options.taskId });\r\n }\r\n throw new Error(`manageAgentChatMitra: action inválida (${(options as ManageAgentChatOptions).action}).`);\r\n}\r\n\r\n/**\r\n * Abre um handle de chat (session). Use:\r\n * - `{ create: true }` para iniciar um chat novo\r\n * - `{ taskId: 'X' }` para abrir um chat existente\r\n *\r\n * A session expõe histórico, streaming, fila, cancel e eventos. Se a\r\n * mesma taskId for aberta duas vezes, retorna a MESMA instância (cache).\r\n */\r\nexport function getAgentTaskMitra(options: GetAgentTaskOptions): IAgentTaskSession {\r\n if (isNewWorld()) throw new Error('getAgentTaskMitra ainda não suportado no novo Mitra.');\r\n if ('taskId' in options && options.taskId) {\r\n const cached = sessionsByTaskId.get(options.taskId);\r\n if (cached) return cached as unknown as IAgentTaskSession;\r\n return new AgentTaskSession(\r\n { kind: 'existing', taskId: options.taskId },\r\n transport\r\n );\r\n }\r\n if ('create' in options && options.create) {\r\n return new AgentTaskSession(\r\n {\r\n kind: 'new',\r\n projectId: options.projectId,\r\n agentType: options.agentType,\r\n modelId: options.modelId,\r\n name: options.name\r\n },\r\n transport\r\n );\r\n }\r\n throw new Error('getAgentTaskMitra: passe { create: true } ou { taskId }.');\r\n}\r\n\r\n","/**\r\n * Mitra Interactions SDK — Agent Credentials\r\n *\r\n * Função ÚNICA `manageAgentCredentialMitra` sobre /sdk-ws para todas as\r\n * operações de credencial do agente:\r\n * - API keys (8 providers: anthropic, openai, gemini, kimi, minimax, glm, qwen, openrouter)\r\n * - Subscriptions OAuth (Claude paste-código / OpenAI device flow via Codex)\r\n *\r\n * Actions de baixo nível (RPC direto contra o backend):\r\n * status | remove | list | list_models | validate | save\r\n * oauth_start | oauth_exchange | device_start | device_poll | device_cancel\r\n *\r\n * Actions de alto nível (orquestradas na SDK — o app controla UI/popup/timing):\r\n * auth — inicia o fluxo e retorna o que a UI mostra (sem efeito colateral\r\n * de janela). claude → { authUrl, state }; codex → { userCode,\r\n * verificationUrl, pollId }.\r\n * connect — finaliza/salva. claude → passa { code, state }; codex → passa\r\n * { pollId } e a SDK faz o polling até autorizar.\r\n *\r\n * Fluxo típico (sem callbacks, sem redirect, sem callback page):\r\n * const { authUrl, state } = await manageAgentCredentialMitra({ action:'auth', target:'claude' });\r\n * // app abre authUrl + coleta o código do user\r\n * await manageAgentCredentialMitra({ action:'connect', target:'claude', code, state });\r\n *\r\n * const { userCode, verificationUrl, pollId } = await manageAgentCredentialMitra({ action:'auth', target:'codex' });\r\n * // app mostra \"abra {verificationUrl}, digite {userCode}\"\r\n * await manageAgentCredentialMitra({ action:'connect', target:'codex', pollId });\r\n *\r\n * SEGURANÇA: o token de subscription NUNCA volta cru pro cliente. É salvo\r\n * server-side (Firestore) e injetado no sandbox E2B direto de lá.\r\n */\r\n\r\nimport { getTransport } from './agent-chat';\r\nimport { isNewWorld } from './auth';\r\nimport type {\r\n ManageAgentCredentialOptions,\r\n ManageAgentCredentialResult,\r\n AuthAgentCredentialOptions,\r\n AuthAgentCredentialResult,\r\n ConnectAgentCredentialOptions,\r\n ConnectAgentSubscriptionResult,\r\n CredentialAction,\r\n CredentialTarget,\r\n ConnectableSubscriptionTarget,\r\n} from './types';\r\n\r\n// PKCE verifier guardado entre auth(claude) e connect(claude), indexado por\r\n// state. Assim o app só lida com { code, state } — nunca vê o codeVerifier.\r\nconst pendingVerifiers = new Map<string, string>();\r\n\r\n// ── API pública (overloads) ────────────────────────────────────────────────\r\n\r\n/**\r\n * Inicia um fluxo de subscription. Não abre janelas — retorna os dados pra UI:\r\n * claude → { authUrl, state } codex → { userCode, verificationUrl, pollId }\r\n */\r\nexport function manageAgentCredentialMitra(\r\n options: AuthAgentCredentialOptions\r\n): Promise<AuthAgentCredentialResult>;\r\n\r\n/**\r\n * Finaliza/salva uma subscription:\r\n * claude → { code, state } codex → { pollId } (a SDK faz o polling)\r\n */\r\nexport function manageAgentCredentialMitra(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult>;\r\n\r\n/**\r\n * RPC direto contra o backend. Retorno depende de (action, target).\r\n *\r\n * @example\r\n * await manageAgentCredentialMitra({ action: 'list' });\r\n * await manageAgentCredentialMitra({ action: 'list_models' });\r\n * await manageAgentCredentialMitra({ action: 'status', target: 'anthropic' });\r\n * await manageAgentCredentialMitra({ action: 'validate', target: 'openai', key: 'sk-...' });\r\n * await manageAgentCredentialMitra({ action: 'save', target: 'glm', key: '...' });\r\n * await manageAgentCredentialMitra({ action: 'remove', target: 'claude' });\r\n */\r\nexport function manageAgentCredentialMitra<R = ManageAgentCredentialResult>(\r\n options: ManageAgentCredentialOptions\r\n): Promise<R>;\r\n\r\nexport function manageAgentCredentialMitra(\r\n options: ManageAgentCredentialOptions | AuthAgentCredentialOptions | ConnectAgentCredentialOptions\r\n): Promise<any> {\r\n if (isNewWorld()) throw new Error('manageAgentCredentialMitra ainda não suportado no novo Mitra.');\r\n if (options.action === 'auth') return authSubscription(options as AuthAgentCredentialOptions);\r\n if (options.action === 'connect') return connectSubscription(options as ConnectAgentCredentialOptions);\r\n return rpc(options as ManageAgentCredentialOptions);\r\n}\r\n\r\n// ── RPC de baixo nível ─────────────────────────────────────────────────────\r\n\r\nfunction rpc<R>(options: ManageAgentCredentialOptions): Promise<R> {\r\n const transport = getTransport();\r\n const { action, target, ...rest } = options as ManageAgentCredentialOptions & Record<string, unknown>;\r\n\r\n // Backend espera `data` com os fields action-específicos. Empacotamos tudo\r\n // que não é action/target em data (descartando undefined).\r\n const data: Record<string, unknown> = {};\r\n for (const [k, v] of Object.entries(rest)) {\r\n if (v !== undefined) data[k] = v;\r\n }\r\n\r\n return transport.request<R>('credentials', { action, target, data });\r\n}\r\n\r\n// ── auth: inicia o fluxo ───────────────────────────────────────────────────\r\n\r\nasync function authSubscription(\r\n options: AuthAgentCredentialOptions\r\n): Promise<AuthAgentCredentialResult> {\r\n const { target } = options;\r\n\r\n if (target === 'claude') {\r\n const start = await rpc<{ authUrl: string; state: string; codeVerifier: string }>({\r\n action: 'oauth_start',\r\n target: 'claude'\r\n });\r\n pendingVerifiers.set(start.state, start.codeVerifier);\r\n return { target: 'claude', authUrl: start.authUrl, state: start.state };\r\n }\r\n\r\n if (target === 'codex') {\r\n const start = await rpc<{ pollId: string; userCode: string | null; verificationUrl: string | null }>({\r\n action: 'device_start',\r\n target: 'codex'\r\n });\r\n return {\r\n target: 'codex',\r\n userCode: start.userCode,\r\n verificationUrl: start.verificationUrl,\r\n pollId: start.pollId\r\n };\r\n }\r\n\r\n throw new Error(`manageAgentCredentialMitra(auth): target inválido (${target}). Use 'claude' ou 'codex'.`);\r\n}\r\n\r\n// ── connect: finaliza/salva ─────────────────────────────────────────────────\r\n\r\nfunction connectSubscription(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult> {\r\n const { target } = options;\r\n if (target === 'claude') return connectClaude(options);\r\n if (target === 'codex') return connectCodex(options);\r\n throw new Error(`manageAgentCredentialMitra(connect): target inválido (${target}). Use 'claude' ou 'codex'.`);\r\n}\r\n\r\nasync function connectClaude(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult> {\r\n const { code, state } = options;\r\n if (!code || !state) {\r\n throw new Error('manageAgentCredentialMitra(connect, claude): code e state são obrigatórios (state vem de auth).');\r\n }\r\n const codeVerifier = pendingVerifiers.get(state);\r\n\r\n const exchange = await rpc<{\r\n success: boolean;\r\n expiresAt: number;\r\n account: { email: string; orgName: string } | null;\r\n }>({\r\n action: 'oauth_exchange',\r\n target: 'claude',\r\n code,\r\n state,\r\n // Se a SDK ainda tem o verifier (mesmo runtime), envia; senão o backend\r\n // resolve via state (pkceStore). Cobre os dois caminhos.\r\n ...(codeVerifier ? { codeVerifier } : {})\r\n });\r\n\r\n pendingVerifiers.delete(state);\r\n\r\n return {\r\n target: 'claude',\r\n success: exchange.success === true,\r\n expiresAt: exchange.expiresAt,\r\n account: exchange.account ?? null\r\n };\r\n}\r\n\r\nasync function connectCodex(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult> {\r\n const { pollId } = options;\r\n if (!pollId) {\r\n throw new Error('manageAgentCredentialMitra(connect, codex): pollId é obrigatório (vem de auth).');\r\n }\r\n\r\n const pollInterval = options.pollIntervalMs ?? 2000;\r\n const deadline = Date.now() + (options.deviceTimeoutMs ?? 15 * 60_000);\r\n\r\n while (Date.now() < deadline) {\r\n const result = await rpc<{\r\n status: 'starting' | 'waiting_for_user' | 'completed' | 'failed' | 'expired' | 'not_found';\r\n error?: string | null;\r\n }>({ action: 'device_poll', target: 'codex', pollId });\r\n\r\n if (result.status === 'completed') {\r\n return { target: 'codex', success: true };\r\n }\r\n if (result.status === 'failed' || result.status === 'expired' || result.status === 'not_found') {\r\n throw new Error(`manageAgentCredentialMitra(connect, codex): ${result.status}${result.error ? ` — ${result.error}` : ''}`);\r\n }\r\n await sleep(pollInterval);\r\n }\r\n\r\n await rpc({ action: 'device_cancel', target: 'codex', pollId }).catch(() => {});\r\n throw new Error('manageAgentCredentialMitra(connect, codex): timeout.');\r\n}\r\n\r\n// ── Helpers ──────────────────────────────────────────────────────────────\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n return new Promise((r) => setTimeout(r, ms));\r\n}\r\n\r\n// Re-exports utilitários para o caller\r\nexport type {\r\n ManageAgentCredentialOptions,\r\n ManageAgentCredentialResult,\r\n AuthAgentCredentialOptions,\r\n AuthAgentCredentialResult,\r\n ConnectAgentCredentialOptions,\r\n ConnectAgentSubscriptionResult,\r\n CredentialAction,\r\n CredentialTarget,\r\n ConnectableSubscriptionTarget\r\n};\r\n","/**\r\n * Mitra Interactions SDK - Instance\r\n *\r\n * Permite múltiplas instâncias configuradas independentemente.\r\n */\r\n\r\nimport type { MitraConfig } from './config';\r\nimport { stripBearer } from './config';\r\nimport { refreshTokenSilently } from './auth';\r\nimport { openChatMitra, closeChatMitra } from './chat';\r\nimport {\r\n sendPasswordResetCodeMitra,\r\n validatePasswordResetCodeMitra,\r\n resetPasswordMitra\r\n} from './password-reset';\r\nimport {\r\n getAgentTaskMitra,\r\n manageAgentChatMitra\r\n} from './agent-chat';\r\nimport { manageAgentCredentialMitra } from './agent-credentials';\r\nimport type { LoginResponse } from './types';\r\nimport type {\r\n ExecuteDataLoaderOptions,\r\n ExecuteDataLoaderResponse,\r\n ExecuteDbActionOptions,\r\n ExecuteDbActionResponse,\r\n SetFileStatusOptions,\r\n SetFileStatusResponse,\r\n SetVariableOptions,\r\n SetVariableResponse,\r\n ListVariablesOptions,\r\n ListVariablesResponse,\r\n GetVariableOptions,\r\n GetVariableResponse,\r\n RunActionOptions,\r\n RunActionResponse,\r\n ExecuteServerFunctionOptions,\r\n ExecuteServerFunctionResponse,\r\n ExecuteServerFunctionAsyncOptions,\r\n ExecuteServerFunctionAsyncResponse,\r\n ExecutePublicServerFunctionOptions,\r\n ExecutePublicServerFunctionResponse,\r\n ExecutePublicServerFunctionAsyncResponse,\r\n GetPublicServerFunctionExecutionOptions,\r\n GetPublicServerFunctionExecutionResponse,\r\n CallIntegrationOptions,\r\n CallIntegrationResponse,\r\n ListIntegrationsOptions,\r\n IntegrationResponse,\r\n StopServerFunctionExecutionOptions,\r\n StopServerFunctionExecutionResponse,\r\n ListRecordsOptions,\r\n ListRecordsResponse,\r\n GetRecordOptions,\r\n CreateRecordOptions,\r\n UpdateRecordOptions,\r\n PatchRecordOptions,\r\n DeleteRecordOptions,\r\n CreateRecordsBatchOptions,\r\n UploadFileOptions,\r\n UploadFileResponse,\r\n // Profile Management\r\n ListProfilesOptions,\r\n ListProfilesResponse,\r\n GetProfileDetailsOptions,\r\n GetProfileDetailsResponse,\r\n CreateProfileOptions,\r\n CreateProfileResponse,\r\n UpdateProfileOptions,\r\n UpdateProfileResponse,\r\n DeleteProfileOptions,\r\n DeleteProfileResponse,\r\n SetProfileUsersOptions,\r\n SetProfileSelectTablesOptions,\r\n SetProfileDmlTablesOptions,\r\n SetProfileActionsOptions,\r\n SetProfileScreensOptions,\r\n SetProfileServerFunctionsOptions,\r\n SetProfilePermissionResponse,\r\n // Password Reset\r\n SendPasswordResetCodeOptions,\r\n ValidatePasswordResetCodeOptions,\r\n ResetPasswordOptions,\r\n // Agent Chat\r\n GetAgentTaskOptions,\r\n AgentTaskSession,\r\n ManageAgentChatOptions,\r\n ManageAgentCredentialOptions,\r\n ConnectAgentCredentialOptions\r\n} from './types';\r\n\r\n// ── HTTP Helpers ──────────────────────────────────────────────────────\r\n\r\nfunction formatToken(token: string): string {\r\n return `Bearer ${stripBearer(token)}`;\r\n}\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\nfunction buildQuery(params: Record<string, unknown>): string {\r\n return Object.entries(params)\r\n .filter(([, v]) => v !== undefined && v !== null)\r\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\r\n .join('&');\r\n}\r\n\r\n// ── MitraInstance ─────────────────────────────────────────────────────\r\n\r\nexport interface MitraInstance {\r\n readonly config: MitraConfig;\r\n\r\n // Services\r\n executeDataLoader(options: ExecuteDataLoaderOptions): Promise<ExecuteDataLoaderResponse>;\r\n executeDbAction(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse>;\r\n setFileStatus(options: SetFileStatusOptions): Promise<SetFileStatusResponse>;\r\n setVariable(options: SetVariableOptions): Promise<SetVariableResponse>;\r\n listVariables(options?: ListVariablesOptions): Promise<ListVariablesResponse>;\r\n getVariable(options: GetVariableOptions): Promise<GetVariableResponse>;\r\n runAction(options: RunActionOptions): Promise<RunActionResponse>;\r\n executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;\r\n executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;\r\n executePublicServerFunction(options: ExecutePublicServerFunctionOptions): Promise<ExecutePublicServerFunctionResponse>;\r\n executePublicServerFunctionAsync(options: ExecutePublicServerFunctionOptions): Promise<ExecutePublicServerFunctionAsyncResponse>;\r\n getPublicServerFunctionExecution(options: GetPublicServerFunctionExecutionOptions): Promise<GetPublicServerFunctionExecutionResponse>;\r\n stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;\r\n\r\n // Upload de Arquivos\r\n uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;\r\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\r\n\r\n // Integrations\r\n listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;\r\n callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;\r\n\r\n // Dynamic Schema CRUD\r\n listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;\r\n getRecord(options: GetRecordOptions): Promise<Record<string, any>>;\r\n createRecord(options: CreateRecordOptions): Promise<Record<string, any>>;\r\n updateRecord(options: UpdateRecordOptions): Promise<Record<string, any>>;\r\n patchRecord(options: PatchRecordOptions): Promise<Record<string, any>>;\r\n deleteRecord(options: DeleteRecordOptions): Promise<void>;\r\n createRecordsBatch(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;\r\n\r\n // Profile Management\r\n listProfiles(options?: ListProfilesOptions): Promise<ListProfilesResponse>;\r\n getProfileDetails(options: GetProfileDetailsOptions): Promise<GetProfileDetailsResponse>;\r\n createProfile(options: CreateProfileOptions): Promise<CreateProfileResponse>;\r\n updateProfile(options: UpdateProfileOptions): Promise<UpdateProfileResponse>;\r\n deleteProfile(options: DeleteProfileOptions): Promise<DeleteProfileResponse>;\r\n setProfileUsers(options: SetProfileUsersOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileSelectTables(options: SetProfileSelectTablesOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileDmlTables(options: SetProfileDmlTablesOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileActions(options: SetProfileActionsOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileScreens(options: SetProfileScreensOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileServerFunctions(options: SetProfileServerFunctionsOptions): Promise<SetProfilePermissionResponse>;\r\n\r\n // Password Reset (pré-login)\r\n sendPasswordResetCode(options: SendPasswordResetCodeOptions): Promise<Record<string, unknown>>;\r\n validatePasswordResetCode(options: ValidatePasswordResetCodeOptions): Promise<Record<string, unknown>>;\r\n resetPassword(options: ResetPasswordOptions): Promise<Record<string, unknown>>;\r\n\r\n // Agent Chat (embedded)\r\n getAgentTask(options: GetAgentTaskOptions): AgentTaskSession;\r\n manageAgentChat(options: ManageAgentChatOptions): Promise<unknown>;\r\n manageAgentCredential(options: ManageAgentCredentialOptions | ConnectAgentCredentialOptions): Promise<unknown>;\r\n\r\n // Chat\r\n openChat(): void;\r\n closeChat(): void;\r\n}\r\n\r\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\r\n let _config: MitraConfig = {\r\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\r\n token: initialConfig.token ? stripBearer(initialConfig.token) : '',\r\n refreshToken: initialConfig.refreshToken,\r\n integrationURL: initialConfig.integrationURL,\r\n authUrl: initialConfig.authUrl,\r\n projectId: initialConfig.projectId\r\n };\r\n\r\n // ── Internal helpers ──\r\n\r\n function resolveProjectId(projectId?: number | string): number | string {\r\n if (projectId != null) return projectId;\r\n if (_config.projectId != null) return _config.projectId;\r\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n function authHeaders(): Record<string, string> {\r\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\r\n if (_config.token) headers['Authorization'] = formatToken(_config.token);\r\n return headers;\r\n }\r\n\r\n async function handleResponse<T>(response: Response): Promise<T> {\r\n const text = await response.text();\r\n const data = text ? JSON.parse(text) : null;\r\n if (!response.ok) {\r\n const base = data?.message || data?.error || `HTTP ${response.status}`;\r\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\r\n throw { message: msg, status: response.status, details: data };\r\n }\r\n return data as T;\r\n }\r\n\r\n // ── Token refresh silencioso ──\r\n\r\n async function tryRefreshToken(): Promise<boolean> {\r\n if (!_config.token || _config.projectId == null || !_config.baseURL) return false;\r\n\r\n // 1. Tenta refresh direto via API (sem HTML)\r\n try {\r\n const baseURL = _config.baseURL.replace(/\\/+$/, '');\r\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${_config.projectId}`, {\r\n method: 'GET',\r\n headers: { 'Authorization': formatToken(_config.token) }\r\n });\r\n\r\n if (resp.ok) {\r\n const data = await resp.json();\r\n if (data.token) {\r\n const newToken = `Bearer ${stripBearer(data.token)}`;\r\n const session: LoginResponse = {\r\n token: newToken,\r\n baseURL: data.merge?.backURL || _config.baseURL,\r\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\r\n };\r\n _config = { ..._config, token: stripBearer(session.token) };\r\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\r\n return true;\r\n }\r\n }\r\n } catch {\r\n // Falhou — tenta fallback via iframe\r\n }\r\n\r\n // 2. Fallback: refreshTokenSilently (router decide entre iframe legacy ou API novo Mitra)\r\n if (!_config.authUrl || typeof window === 'undefined') return false;\r\n\r\n try {\r\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId!);\r\n _config = {\r\n ..._config,\r\n token: stripBearer(session.token),\r\n ...(session.refreshToken !== undefined ? { refreshToken: session.refreshToken } : {})\r\n };\r\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n async function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, init);\r\n\r\n if (response.status === 403) {\r\n const refreshed = await tryRefreshToken();\r\n if (refreshed) {\r\n const newHeaders = { ...authHeaders() };\r\n const oldHeaders = init.headers as Record<string, string> | undefined;\r\n if (oldHeaders) {\r\n for (const [k, v] of Object.entries(oldHeaders)) {\r\n if (k !== 'Authorization') newHeaders[k] = v;\r\n }\r\n }\r\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\r\n return handleResponse(retryResponse);\r\n }\r\n }\r\n\r\n return handleResponse(response);\r\n }\r\n\r\n // HTTP main API (baseURL)\r\n async function request<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\r\n let url = `${_config.baseURL}${endpoint}`;\r\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\r\n return fetchWithRefresh(url, {\r\n method, headers: authHeaders(),\r\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\r\n });\r\n }\r\n\r\n // HTTP upload (multipart/form-data)\r\n async function requestUpload<T>(endpoint: string, formData: FormData): Promise<T> {\r\n const url = `${_config.baseURL}${endpoint}`;\r\n const headers: Record<string, string> = {};\r\n if (_config.token) headers['Authorization'] = formatToken(_config.token);\r\n return fetchWithRefresh(url, {\r\n method: 'POST',\r\n headers,\r\n body: formData\r\n });\r\n }\r\n\r\n // HTTP tenant (baseURL + X-TenantID)\r\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number | string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\r\n let url = `${_config.baseURL}${endpoint}`;\r\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\r\n return fetchWithRefresh(url, {\r\n method, headers: { ...authHeaders(), 'X-TenantID': String(tenantId) },\r\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\r\n });\r\n }\r\n\r\n // ── Instance ──\r\n\r\n const instance: MitraInstance & { _updateToken(token: string): void } = {\r\n get config() { return _config; },\r\n\r\n /** @internal — usado pelo MitraSDK para propagar token refresh */\r\n _updateToken(token: string) {\r\n _config = { ..._config, token };\r\n },\r\n\r\n // Services\r\n async executeDataLoader(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dataLoaderId: options.dataLoaderId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeDataLoader', { body });\r\n },\r\n\r\n async executeDbAction(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dbActionId: options.dbActionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeDbAction', { body });\r\n },\r\n\r\n async setFileStatus(options) {\r\n return request('POST', '/interactions/setFileStatus', {\r\n body: { projectId: resolveProjectId(options.projectId), fileName: options.fileName, targetPath: options.targetPath }\r\n });\r\n },\r\n\r\n async setVariable(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), key: options.key };\r\n if (options.value !== undefined) body.value = options.value;\r\n return request('POST', '/interactions/setVariable', { body });\r\n },\r\n\r\n async listVariables(options = {}) {\r\n return request('GET', '/interactions/listVariables', { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async getVariable(options) {\r\n return request('GET', '/interactions/getVariable', { params: { projectId: resolveProjectId(options.projectId), key: options.key } });\r\n },\r\n\r\n async runAction(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), actionId: options.actionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/runAction', { body });\r\n },\r\n\r\n async executeServerFunction(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeServerFunction', { body });\r\n },\r\n\r\n async executeServerFunctionAsync(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeServerFunctionAsync', { body });\r\n },\r\n\r\n async executePublicServerFunction(options) {\r\n const { projectId, serverFunctionId, input } = options;\r\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n return handleResponse<ExecutePublicServerFunctionResponse>(response);\r\n },\r\n\r\n async executePublicServerFunctionAsync(options) {\r\n const { projectId, serverFunctionId, input } = options;\r\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n return handleResponse<ExecutePublicServerFunctionAsyncResponse>(response);\r\n },\r\n\r\n async getPublicServerFunctionExecution(options) {\r\n const { projectId, executionId } = options;\r\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n return handleResponse<GetPublicServerFunctionExecutionResponse>(response);\r\n },\r\n\r\n async stopServerFunctionExecution(options) {\r\n return request('POST', '/interactions/stopServerFunctionExecution', {\r\n body: { projectId: resolveProjectId(options.projectId), executionId: options.executionId }\r\n });\r\n },\r\n\r\n // Upload de Arquivos\r\n async uploadFilePublic(options: UploadFileOptions) {\r\n const formData = new FormData();\r\n formData.append('file', options.file);\r\n formData.append('projectId', String(resolveProjectId(options.projectId)));\r\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\r\n return requestUpload('/interactions/uploadFilePublic', formData);\r\n },\r\n\r\n async uploadFileLoadable(options: UploadFileOptions) {\r\n const formData = new FormData();\r\n formData.append('file', options.file);\r\n formData.append('projectId', String(resolveProjectId(options.projectId)));\r\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\r\n return requestUpload('/interactions/uploadFileLoadable', formData);\r\n },\r\n\r\n // Integrations\r\n async listIntegrations(options = {}) {\r\n return request('GET', '/interactions/integrations', { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async callIntegration(options) {\r\n const body: Record<string, unknown> = {\r\n integrationSlug: options.connection,\r\n projectId: resolveProjectId(options.projectId),\r\n method: options.method\r\n };\r\n if (options.endpoint !== undefined) body.endpoint = options.endpoint;\r\n if (options.params !== undefined) body.params = options.params;\r\n if (options.body !== undefined) body.body = options.body;\r\n return request('POST', '/interactions/integrations/call', { body });\r\n },\r\n\r\n // Dynamic Schema CRUD\r\n async listRecords(options) {\r\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('GET', `/interactions/records/${tableName}`, pid, { params: { page, size, jdbcConnectionConfigId, ...filters } });\r\n },\r\n\r\n async getRecord(options) {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('GET', `/interactions/records/${tableName}/${id}`, pid, { params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async createRecord(options) {\r\n const { tableName, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('POST', `/interactions/records/${tableName}`, pid, { body: data, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async updateRecord(options) {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('PUT', `/interactions/records/${tableName}/${id}`, pid, { body: data, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async patchRecord(options) {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('PATCH', `/interactions/records/${tableName}/${id}`, pid, { body: data, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async deleteRecord(options) {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('DELETE', `/interactions/records/${tableName}/${id}`, pid, { params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async createRecordsBatch(options) {\r\n const { tableName, records, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('POST', `/interactions/records/${tableName}/batch`, pid, { body: records, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n // Profile Management\r\n async listProfiles(options = {}) {\r\n return request('GET', '/interactions/profiles', { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async getProfileDetails(options) {\r\n return request('GET', `/interactions/profiles/${options.profileId}`, { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async createProfile(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), name: options.name };\r\n if (options.color !== undefined) body.color = options.color;\r\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\r\n return request('POST', '/interactions/profiles', { body });\r\n },\r\n\r\n async updateProfile(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), profileId: options.profileId };\r\n if (options.name !== undefined) body.name = options.name;\r\n if (options.color !== undefined) body.color = options.color;\r\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\r\n return request('PUT', '/interactions/profiles', { body });\r\n },\r\n\r\n async deleteProfile(options) {\r\n return request('DELETE', '/interactions/profiles', { body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId } });\r\n },\r\n\r\n async setProfileUsers(options) {\r\n return request('POST', '/interactions/profiles/users', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, userIds: options.userIds }\r\n });\r\n },\r\n\r\n async setProfileSelectTables(options) {\r\n return request('POST', '/interactions/profiles/selectTables', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, tables: options.tables }\r\n });\r\n },\r\n\r\n async setProfileDmlTables(options) {\r\n return request('POST', '/interactions/profiles/dmlTables', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, tables: options.tables }\r\n });\r\n },\r\n\r\n async setProfileActions(options) {\r\n return request('POST', '/interactions/profiles/actions', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, actionIds: options.actionIds }\r\n });\r\n },\r\n\r\n async setProfileScreens(options) {\r\n return request('POST', '/interactions/profiles/screens', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, screenIds: options.screenIds }\r\n });\r\n },\r\n\r\n async setProfileServerFunctions(options) {\r\n return request('POST', '/interactions/profiles/serverFunctions', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, serverFunctionIds: options.serverFunctionIds }\r\n });\r\n },\r\n\r\n // Password Reset (pré-login)\r\n sendPasswordResetCode(options: SendPasswordResetCodeOptions) {\r\n return sendPasswordResetCodeMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\r\n },\r\n validatePasswordResetCode(options: ValidatePasswordResetCodeOptions) {\r\n return validatePasswordResetCodeMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\r\n },\r\n resetPassword(options: ResetPasswordOptions) {\r\n return resetPasswordMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\r\n },\r\n\r\n // Agent Chat (embedded)\r\n getAgentTask(options: GetAgentTaskOptions) { return getAgentTaskMitra(options); },\r\n manageAgentChat(options: any) { return manageAgentChatMitra(options); },\r\n manageAgentCredential(options: any) { return manageAgentCredentialMitra(options); },\r\n\r\n // Chat\r\n openChat() { openChatMitra(); },\r\n closeChat() { closeChatMitra(); }\r\n };\r\n\r\n return instance;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Configuração\r\n */\r\n\r\nimport { createMitraInstance, type MitraInstance } from './instance';\r\n\r\nexport interface MitraConfig {\r\n /** URL base da API (ex: https://api.mitra.com). Opcional se houver window.__mitraEnv.apiBaseURL (build-proxy). */\r\n baseURL?: string;\r\n /** Token JWT para autenticação (opcional para Server Functions públicas) */\r\n token?: string;\r\n /** Refresh token (novo Mitra). Necessário para refresh automático no novo mundo. */\r\n refreshToken?: string;\r\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\r\n integrationURL?: string;\r\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\r\n authUrl?: string;\r\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\r\n projectId?: number | string;\r\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\r\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\r\n}\r\n\r\nlet globalConfig: MitraConfig | null = null;\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Remove todos os prefixos \"Bearer \" do início do token (case-insensitive,\r\n * repetidos) e espaços nas pontas. Garante que o token seja sempre guardado\r\n * cru, evitando \"Bearer Bearer ...\" quando o consumidor já passa o prefixo.\r\n */\r\nexport function stripBearer(token: string): string {\r\n let t = token.trim();\r\n while (/^bearer\\s+/i.test(t)) {\r\n t = t.replace(/^bearer\\s+/i, '').trim();\r\n }\r\n return t;\r\n}\r\n\r\n// ── API Pública ──────────────────────────────────────────────────────\r\n\r\n/**\r\n * Lê configuração injetada pelo build-proxy do Mitra em apps publicadas.\r\n * Quando a SDK roda dentro de uma app publicada pela plataforma, todas\r\n * as URLs de infra já estão disponíveis em `window.__mitraEnv` — não há\r\n * necessidade de o consumidor passá-las manualmente.\r\n */\r\nfunction readInjectedEnv(): Partial<MitraConfig> {\r\n if (typeof window === 'undefined') return {};\r\n const env = (window as any).__mitraEnv;\r\n if (!env || typeof env !== 'object') return {};\r\n const out: Partial<MitraConfig> = {};\r\n if (typeof env.apiBaseURL === 'string' && env.apiBaseURL) out.baseURL = env.apiBaseURL;\r\n if (typeof env.integrationURL === 'string' && env.integrationURL) out.integrationURL = env.integrationURL;\r\n if (typeof env.authUrl === 'string' && env.authUrl) out.authUrl = env.authUrl;\r\n return out;\r\n}\r\n\r\n/**\r\n * Configura o SDK globalmente e retorna uma instância configurada.\r\n *\r\n * Em apps publicadas pelo Mitra (window.__mitraEnv presente), nenhum campo\r\n * precisa ser passado — todas as URLs vêm da injeção do build-proxy.\r\n * Em outros contextos, baseURL ainda é necessário (manual ou via login).\r\n */\r\nexport function configureSdkMitra(config: Partial<MitraConfig> = {}): MitraInstance {\r\n const injected = readInjectedEnv();\r\n const merged: MitraConfig = { ...injected, ...config };\r\n\r\n if (!merged.baseURL) {\r\n throw new Error('baseURL é obrigatório. Passe em configureSdkMitra({ baseURL }), faça login para receber via sdk-auth, ou rode em uma app publicada pelo Mitra (window.__mitraEnv).');\r\n }\r\n\r\n // Normaliza o token (remove \"Bearer \" duplicado/extra) antes de guardar.\r\n if (merged.token != null) merged.token = stripBearer(merged.token);\r\n\r\n globalConfig = {\r\n ...merged,\r\n baseURL: merged.baseURL.replace(/\\/+$/, '')\r\n };\r\n\r\n if (merged.token && typeof window !== 'undefined') {\r\n // Init chat in background (if build-proxy injected the script)\r\n const chat = (window as any).__mitraChat;\r\n if (chat) chat.init(merged.token);\r\n }\r\n\r\n return createMitraInstance(globalConfig);\r\n}\r\n\r\n/**\r\n * Obtém a configuração atual\r\n */\r\nexport function getConfig(): MitraConfig {\r\n if (!globalConfig) {\r\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\r\n }\r\n return globalConfig;\r\n}\r\n\r\n/**\r\n * Verifica se o SDK está configurado\r\n */\r\nexport function isConfigured(): boolean {\r\n return globalConfig !== null;\r\n}\r\n\r\n/**\r\n * Atualiza o token global (usado internamente pelo refresh automático).\r\n * Aceita refreshToken opcional (novo Mitra).\r\n */\r\nexport function updateGlobalToken(token: string, refreshToken?: string): void {\r\n if (globalConfig) {\r\n globalConfig = {\r\n ...globalConfig,\r\n token: stripBearer(token),\r\n ...(refreshToken !== undefined ? { refreshToken } : {})\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nexport function resolveProjectId(projectId?: number | string): number | string {\r\n if (projectId != null) return projectId;\r\n if (globalConfig?.projectId != null) return globalConfig.projectId;\r\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/auth-legacy.ts","../src/auth-new.ts","../src/auth.ts","../src/chat.ts","../src/password-reset.ts","../src/client.ts","../src/services.ts","../src/agent-attachments.ts","../src/agent-task-session.ts","../src/agent-chat.ts","../src/agent-credentials.ts","../src/instance.ts","../src/config.ts"],"names":["resolveLoginOptions","autoConfigureFromLogin","text","getOriginFromUrl","loginWithEmailMitra","loginWithGoogleMitra","loginWithMicrosoftMitra","loginMitra","emailLoginMitra","emailSignupMitra","emailVerifyCodeMitra","emailResendCodeMitra","_refreshPromise","refreshTokenSilently","isNewWorld","getFetch","resolveProjectId","transport","formatToken","handleResponse","tryRefreshToken","_a","fetchWithRefresh"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Mitra Interactions SDK - Autenticação\r\n *\r\n * Login via popup seguro hospedado no domínio Mitra.\r\n * Credenciais nunca passam pelo código do desenvolvedor.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse,\r\n EmailSignupOptions,\r\n EmailLoginOptions,\r\n EmailVerifyCodeOptions,\r\n EmailResendCodeOptions\r\n} from './types';\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────────\r\n\r\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\r\nconst POPUP_WIDTH = 420;\r\nconst POPUP_HEIGHT = 520;\r\n\r\n/**\r\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\r\n */\r\nfunction getOriginFromUrl(url: string): string {\r\n try {\r\n const parsed = new URL(url);\r\n return parsed.origin;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Abre popup de autenticação e aguarda o resultado via postMessage.\r\n * Valida que a mensagem veio do origin da authUrl.\r\n */\r\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\r\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n url,\r\n 'mitra-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n\r\n function onMessage(event: MessageEvent) {\r\n // Ignora mensagens de outros origins\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n // Detecta se o popup foi fechado sem completar\r\n const pollTimer = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário'));\r\n }\r\n }, 500);\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearInterval(pollTimer);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/**\r\n * Auto-configura o SDK a partir da resposta de login.\r\n * Preserva authUrl e projectId usados no login para chamadas subsequentes.\r\n */\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number | string): void {\r\n if (!response.baseURL) return;\r\n\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * Monta a URL do popup/redirect de autenticação.\r\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\r\n */\r\nfunction buildAuthUrl(\r\n authUrl: string,\r\n method: string,\r\n projectId: number | string,\r\n opts?: { returnTo?: string; create?: boolean; title?: string }\r\n): string {\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n const separator = base.includes('?') ? '&' : '?';\r\n let url = `${base}${separator}method=${method}&projectId=${encodeURIComponent(projectId)}`;\r\n if (opts?.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;\r\n if (opts?.create) url += `&create=true`;\r\n if (opts?.title) url += `&title=${encodeURIComponent(opts.title)}`;\r\n // Passa a URL completa de origem — document.referrer cross-origin perde path/query\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n return url;\r\n}\r\n\r\n// ── Resolução de opções ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number | string } {\r\n const config = isConfigured() ? getConfig() : null;\r\n\r\n const authUrl = options?.authUrl || config?.authUrl;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n return { authUrl, projectId };\r\n}\r\n\r\n// ── Helpers de redirect ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Converte returnTo relativo para absoluto. Se não informado, usa a URL atual.\r\n */\r\nfunction resolveReturnTo(returnTo?: string): string {\r\n if (typeof window === 'undefined') return returnTo || '';\r\n if (!returnTo) return window.location.href;\r\n if (/^https?:\\/\\//.test(returnTo)) return returnTo;\r\n // Caminho relativo → absoluto\r\n return new URL(returnTo, window.location.origin).href;\r\n}\r\n\r\n// ── Funções de Login ────────────────────────────────────────────────────\r\n\r\n/**\r\n * Função central de login: decide popup vs redirect, monta URL com opts extras.\r\n */\r\nasync function doLogin(method: string, options?: LoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const mode = options?.mode || 'popup';\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, method, projectId, {\r\n returnTo: mode === 'redirect' ? resolveReturnTo(options?.returnTo) : undefined,\r\n create: options?.create,\r\n title: options?.title\r\n });\r\n\r\n if (mode === 'redirect') {\r\n window.location.href = url;\r\n // Nunca resolve — o navegador navega para fora\r\n return new Promise(() => {});\r\n }\r\n\r\n const response = await openAuthPopup(url, origin);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Login com email e senha via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('email', options);\r\n}\r\n\r\n/**\r\n * Login com Google via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('google', options);\r\n}\r\n\r\n/**\r\n * Login com Microsoft via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('microsoft', options);\r\n}\r\n\r\n/**\r\n * Login genérico via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin(method, options);\r\n}\r\n\r\n// ── Token Refresh Silencioso ─────────────────────────────────────────\r\n\r\nconst REFRESH_TIMEOUT_MS = 15000;\r\n\r\n/** Promise do refresh em andamento (deduplicação — evita múltiplos iframes) */\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\n/**\r\n * Cria iframe invisível para renovar o token silenciosamente.\r\n * O sdk-auth detecta a sessão existente (cookie do provider) e retorna\r\n * um novo token via postMessage, sem interação do usuário.\r\n */\r\nfunction openAuthIframe(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n iframe.src = url;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Token refresh timeout'));\r\n }, REFRESH_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro no refresh do token'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Renova o token silenciosamente via iframe invisível.\r\n * Se já houver um refresh em andamento, reaproveita a mesma promise.\r\n */\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number | string): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, 'refresh', projectId);\r\n const response = await openAuthIframe(url, origin);\r\n return response;\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n\r\n// ── Email Auth via iframe silencioso ──────────────────────────────\r\n\r\nconst SILENT_TIMEOUT_MS = 20000;\r\nconst AUTH_READY_TYPE = 'mitra-auth-ready';\r\nconst AUTH_CREDENTIALS_TYPE = 'mitra-auth-credentials';\r\n\r\n/**\r\n * Cria iframe invisível no modo silent e envia credenciais via postMessage.\r\n * O HTML de auth faz a chamada à API (sem CORS) e devolve o resultado.\r\n */\r\nfunction openSilentAuthIframe(\r\n authUrl: string,\r\n projectId: number | string,\r\n credentials: Record<string, unknown>\r\n): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const origin = getOriginFromUrl(authUrl);\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n const separator = base.includes('?') ? '&' : '?';\r\n let url = `${base}${separator}mode=silent&projectId=${encodeURIComponent(projectId)}`;\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Timeout na autenticação silenciosa'));\r\n }, SILENT_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== origin) return;\r\n\r\n // Passo 1: HTML avisou que está pronto → envia credenciais\r\n if (event.data?.type === AUTH_READY_TYPE) {\r\n iframe.contentWindow?.postMessage({\r\n type: AUTH_CREDENTIALS_TYPE,\r\n ...credentials\r\n }, origin);\r\n return;\r\n }\r\n\r\n // Passo 2: Resultado da autenticação\r\n if (event.data?.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n iframe.src = url;\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Cria conta via email usando iframe silencioso.\r\n * Após sucesso, o usuário recebe um código de verificação por email.\r\n * Fluxo: emailSignupMitra → emailVerifyCodeMitra → emailLoginMitra\r\n */\r\nexport async function emailSignupMitra(options: EmailSignupOptions): Promise<void> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n const result = await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'signup',\r\n name: options.name,\r\n email: options.email,\r\n password: options.password\r\n });\r\n\r\n // Signup retorna { needsVerification: true } — não configura SDK\r\n if (!(result as any).needsVerification) {\r\n throw new Error('Resposta inesperada do signup');\r\n }\r\n}\r\n\r\n/**\r\n * Verifica o código de 6 dígitos enviado por email após signup.\r\n * Após verificação, faz login automático e retorna LoginResponse.\r\n * Auto-configura o SDK após sucesso.\r\n */\r\nexport async function emailVerifyCodeMitra(options: EmailVerifyCodeOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n const response = await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'verifyCode',\r\n email: options.email,\r\n code: options.code,\r\n password: options.password\r\n });\r\n\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Reenvia o código de verificação para o email.\r\n */\r\nexport async function emailResendCodeMitra(options: EmailResendCodeOptions): Promise<void> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'resendCode',\r\n email: options.email\r\n });\r\n}\r\n\r\n/**\r\n * Login via email e senha usando iframe silencioso.\r\n * O HTML de auth faz a chamada à API e resolve as credenciais do projeto.\r\n * Retorna LoginResponse com token, baseURL e integrationURL.\r\n * Auto-configura o SDK após sucesso.\r\n */\r\nexport async function emailLoginMitra(options: EmailLoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n const response = await openSilentAuthIframe(authUrl, projectId, {\r\n action: 'login',\r\n email: options.email,\r\n password: options.password\r\n });\r\n\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Autenticação (Novo Mitra)\r\n *\r\n * Implementação do auth para o novo Mitra (Kong gateway).\r\n * - Email login/signup/refresh: via BFF (mitra-legacy-bff), POST {gateway}/auth/*.\r\n * O BFF resolve projectId->appId, chama o mitra-iam e já devolve o envelope\r\n * { token, baseURL, integrationURL } que a SDK consome.\r\n * - SSO (Google/Microsoft): EXCEÇÃO — fala direto com o IAM\r\n * ({gateway}/iam/api/v1/auth/*) + página atravessadora, pois o BFF ainda não\r\n * expõe esses endpoints.\r\n * Sem iframe, sem postMessage, sem sdk-auth.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse,\r\n EmailSignupOptions,\r\n EmailLoginOptions,\r\n EmailVerifyCodeOptions,\r\n EmailResendCodeOptions\r\n} from './types';\r\n\r\n// ── Tipos internos ──────────────────────────────────────────────────\r\n\r\ninterface NewAuthTokenResponse {\r\n accessToken: string;\r\n refreshToken: string;\r\n tokenType: string;\r\n}\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\n// SSO (exceção): IAM direto. Kong resolve /iam/* pro IAM service.\r\nfunction buildEndpoint(authUrl: string, path: string): string {\r\n const base = authUrl.replace(/\\/+$/, '');\r\n return `${base}/iam/api/v1/auth${path}`;\r\n}\r\n\r\n// BFF (mitra-legacy-bff): mesmo gateway do baseURL, prefixo /auth. Espelha como o\r\n// resto do SDK alcança o BFF ({baseURL}/interactions/...); o gateway roteia pro BFF.\r\nfunction buildBffAuthEndpoint(gateway: string, path: string): string {\r\n const base = gateway.replace(/\\/+$/, '');\r\n return `${base}/auth${path}`;\r\n}\r\n\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number | string } {\r\n const config = isConfigured() ? getConfig() : null;\r\n // No novo Mitra, authUrl e baseURL apontam pro mesmo gateway. authUrl é mantido\r\n // por compat com a API legacy; se não vier, cai pro baseURL configurado.\r\n const authUrl = options?.authUrl || config?.authUrl || config?.baseURL;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl/baseURL é obrigatório. Configure via configureSdkMitra({ baseURL }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n return { authUrl, projectId };\r\n}\r\n\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number | string): void {\r\n if (!response.baseURL) return;\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.refreshToken ? { refreshToken: response.refreshToken } : {}),\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\nasync function postNewAuth(url: string, body: unknown): Promise<NewAuthTokenResponse> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => '');\r\n let parsed: any = null;\r\n try { parsed = text ? JSON.parse(text) : null; } catch { /* ignore */ }\r\n const msg = parsed?.message || parsed?.error || `HTTP ${response.status}`;\r\n throw { message: msg, status: response.status, details: parsed };\r\n }\r\n\r\n return response.json();\r\n}\r\n\r\n/**\r\n * POST pro BFF. Mesmo tratamento de erro do postNewAuth, mas tolera corpo vazio\r\n * (signup retorna void) e devolve o JSON cru (envelope { token, baseURL, ... }).\r\n */\r\nasync function postBffAuth(url: string, body: unknown): Promise<any> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => '');\r\n let parsed: any = null;\r\n try { parsed = text ? JSON.parse(text) : null; } catch { /* ignore */ }\r\n const msg = parsed?.message || parsed?.error || `HTTP ${response.status}`;\r\n throw { message: msg, status: response.status, details: parsed };\r\n }\r\n\r\n const text = await response.text().catch(() => '');\r\n return text ? JSON.parse(text) : null;\r\n}\r\n\r\nfunction normalizeResponse(tokens: NewAuthTokenResponse, authUrl: string): LoginResponse {\r\n // No novo Mitra, baseURL = authUrl (Kong gateway)\r\n return {\r\n token: tokens.accessToken,\r\n refreshToken: tokens.refreshToken,\r\n baseURL: authUrl\r\n };\r\n}\r\n\r\nconst NOT_SUPPORTED_POPUP = 'Login via popup (loginWithEmailMitra/loginMitra com method \"email\" ou \"mitra\") ainda não suportado no novo Mitra. Use emailLoginMitra({ email, password }).';\r\nconst NOT_SUPPORTED_VERIFY = 'emailVerifyCodeMitra não existe no novo Mitra (signup é direto, sem código de verificação).';\r\nconst NOT_SUPPORTED_RESEND = 'emailResendCodeMitra não existe no novo Mitra.';\r\nconst NOT_SUPPORTED_REDIRECT = 'mode \"redirect\" ainda não suportado no novo Mitra para SSO. Use mode \"popup\" (default).';\r\n\r\n// ── OAuth (Google / Microsoft) ──────────────────────────────────────\r\n// Fluxo (SDK não conhece provider, só conversa com a página atravessadora):\r\n// 0. DISCOVERY: por ora a URL da página (front) vem MOCKADA no SDK\r\n// (SSO_AUTH_PAGE_URL). Quando o back expor GET /iam/api/v1/auth/sso/config\r\n// → { authPageUrl }, voltamos a descobrir lá.\r\n// 1. SDK abre popup em <authPageUrl>?provider=&state=&appId=&apiUrl=.\r\n// 2. Página atravessadora busca branding (/iam/branding/{appId}), monta a URL\r\n// OAuth do provider com redirect_uri=<authPageUrl> e redireciona.\r\n// 3. Provider autentica e redireciona o popup de volta pro authPageUrl com ?code=&state=.\r\n// 4. A página faz postMessage({type:'mitra-oauth-result',success,code,state,error})\r\n// pro opener e fecha sozinha.\r\n// 5. SDK valida origin (== origin do authPageUrl, NÃO do baseURL) + state (CSRF),\r\n// troca o code por token no IAM via\r\n// POST <baseURL>/iam/api/v1/auth/{google|microsoft} { code, redirectUri, appId }.\r\n//\r\n// authPageUrl é tratado como opaco: usado cru (sem normalizar) como redirectUri,\r\n// porque o provider valida redirect_uri byte a byte. Client IDs e config OAuth\r\n// ficam na página, não no SDK.\r\n// ────────────────────────────────────────────────────────────────────\r\n\r\nconst OAUTH_RESULT_TYPE = 'mitra-oauth-result';\r\nconst POPUP_W = 480;\r\nconst POPUP_H = 600;\r\nconst POPUP_TIMEOUT_MS = 5 * 60 * 1000;\r\n\r\n// TEMP: o discovery /sso/config ainda não existe no back. Em vez de descobrir a\r\n// URL da página atravessadora, retornamos a URL conhecida do front (CloudFront)\r\n// mockada. Trocar de volta pelo fetch ao /sso/config quando o back subir.\r\nconst SSO_AUTH_PAGE_URL = 'https://d2by6yrxhbu2rl.cloudfront.net/sdk-auth.html';\r\n\r\n/**\r\n * Retorna a URL da página de auth (front). Mockado por ora — ver SSO_AUTH_PAGE_URL.\r\n * Mantido async + assinatura pra não mexer nos call sites (e facilitar voltar ao\r\n * discovery no back depois).\r\n */\r\nasync function fetchSsoAuthPageUrl(_baseURL: string): Promise<string> {\r\n return SSO_AUTH_PAGE_URL;\r\n}\r\n\r\nfunction buildStartUrl(\r\n authPageUrl: string,\r\n provider: 'google' | 'microsoft',\r\n state: string,\r\n appId: string,\r\n apiUrl: string\r\n): string {\r\n const sep = authPageUrl.includes('?') ? '&' : '?';\r\n // origin = origin desta SDK; a página trava o postMessage do token nela.\r\n return authPageUrl + sep + new URLSearchParams({ provider, state, appId, apiUrl, origin: window.location.origin }).toString();\r\n}\r\n\r\nfunction getOriginFromUrl(url: string): string {\r\n try { return new URL(url).origin; } catch { return ''; }\r\n}\r\n\r\nfunction generateState(): string {\r\n if (typeof crypto === 'undefined' || typeof crypto.getRandomValues !== 'function') {\r\n throw new Error('crypto.getRandomValues não disponível neste ambiente.');\r\n }\r\n const bytes = new Uint8Array(16);\r\n crypto.getRandomValues(bytes);\r\n return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');\r\n}\r\n\r\nfunction openOAuthPopup(\r\n providerUrl: string,\r\n expectedOrigin: string,\r\n expectedState: string\r\n): Promise<{ token: { accessToken: string; refreshToken: string; tokenType: string } }> {\r\n return new Promise((resolve, reject) => {\r\n const outerW = window.outerWidth || screen.width;\r\n const outerH = window.outerHeight || screen.height;\r\n const left = Math.max(0, (window.screenX || 0) + (outerW - POPUP_W) / 2);\r\n const top = Math.max(0, (window.screenY || 0) + (outerH - POPUP_H) / 2);\r\n\r\n // DEBUG: link EXATO aberto no popup (pra diagnosticar \"Parametros invalidos\")\r\n // eslint-disable-next-line no-console\r\n console.log('[mitra-sso] window.open ->', providerUrl);\r\n\r\n const popup = window.open(\r\n providerUrl,\r\n 'mitra-oauth',\r\n `width=${POPUP_W},height=${POPUP_H},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n const popupRef: Window = popup;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Timeout na autenticação OAuth.'));\r\n }, POPUP_TIMEOUT_MS);\r\n\r\n const poll = setInterval(() => {\r\n if (popupRef.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário.'));\r\n }\r\n }, 500);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== OAUTH_RESULT_TYPE) return;\r\n const data = event.data as {\r\n success?: boolean;\r\n token?: { accessToken: string; refreshToken: string; tokenType: string };\r\n state?: string;\r\n error?: string;\r\n };\r\n\r\n if (data.state !== expectedState) {\r\n cleanup();\r\n reject(new Error('State inválido (possível CSRF).'));\r\n return;\r\n }\r\n\r\n cleanup();\r\n\r\n if (!data.success) {\r\n reject(new Error(data.error || 'Erro na autenticação OAuth.'));\r\n return;\r\n }\r\n if (!data.token) {\r\n reject(new Error('Resposta OAuth sem token.'));\r\n return;\r\n }\r\n resolve({ token: data.token });\r\n }\r\n\r\n function cleanup() {\r\n clearTimeout(timer);\r\n clearInterval(poll);\r\n window.removeEventListener('message', onMessage);\r\n if (!popupRef.closed) popupRef.close();\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/** Promise de OAuth em andamento — dedup de clicks duplicados / React StrictMode. */\r\nlet _oauthInFlight: Promise<LoginResponse> | null = null;\r\n\r\nasync function loginWithProvider(\r\n provider: 'google' | 'microsoft',\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n if (_oauthInFlight) return _oauthInFlight;\r\n\r\n if (typeof window === 'undefined') {\r\n throw new Error('SSO só funciona em ambiente browser.');\r\n }\r\n if (options?.mode === 'redirect') {\r\n throw new Error(NOT_SUPPORTED_REDIRECT);\r\n }\r\n\r\n _oauthInFlight = (async () => {\r\n try {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const state = generateState();\r\n const appId = String(projectId);\r\n\r\n // 0. DISCOVERY: descobre a URL da página de auth (front) no back.\r\n const authPageUrl = await fetchSsoAuthPageUrl(authUrl);\r\n // Origin do FRONT (página) — é contra ele que validamos o postMessage,\r\n // NÃO contra o baseURL/gateway.\r\n const pageOrigin = getOriginFromUrl(authPageUrl);\r\n // redirectUri = authPageUrl cru (sem normalizar): o provider valida byte a byte.\r\n const redirectUri = authPageUrl;\r\n const startUrl = buildStartUrl(authPageUrl, provider, state, appId, authUrl);\r\n\r\n // DEBUG: link exato que o SDK abre no popup\r\n // eslint-disable-next-line no-console\r\n console.log('[mitra-sso] authPageUrl:', authPageUrl, '| startUrl:', startUrl, '| redirectUri:', redirectUri);\r\n\r\n // A página atravessadora já trocou o code pelo token (same-origin, sem CORS)\r\n // e devolveu o token pronto via postMessage. A SDK não toca no endpoint de auth.\r\n const { token } = await openOAuthPopup(startUrl, pageOrigin, state);\r\n\r\n const response = normalizeResponse(token, authUrl);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n } finally {\r\n _oauthInFlight = null;\r\n }\r\n })();\r\n\r\n return _oauthInFlight;\r\n}\r\n\r\n// ── Login (popup-style) ─────────────────────────────────────────────\r\n\r\nexport async function loginWithEmailMitra(_options?: LoginOptions): Promise<LoginResponse> {\r\n throw new Error(NOT_SUPPORTED_POPUP);\r\n}\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('google', options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('microsoft', options);\r\n}\r\n\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n if (method === 'google') return loginWithProvider('google', options);\r\n if (method === 'microsoft') return loginWithProvider('microsoft', options);\r\n throw new Error(NOT_SUPPORTED_POPUP);\r\n}\r\n\r\n// ── Email API direta ────────────────────────────────────────────────\r\n\r\nexport async function emailLoginMitra(options: EmailLoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n // Via BFF: POST {gateway}/auth/email/login. O BFF resolve projectId->appId,\r\n // chama o mitra-iam e já devolve o envelope { token, baseURL, integrationURL }.\r\n const data = await postBffAuth(buildBffAuthEndpoint(authUrl, '/email/login'), {\r\n projectId: String(projectId),\r\n email: options.email,\r\n password: options.password\r\n });\r\n\r\n const response: LoginResponse = {\r\n token: data.token,\r\n baseURL: data.baseURL || authUrl,\r\n ...(data.integrationURL ? { integrationURL: data.integrationURL } : {})\r\n };\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\nexport async function emailSignupMitra(options: EmailSignupOptions): Promise<void> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n\r\n // Via BFF: POST {gateway}/auth/email/signup. Retorna void (sem auto-signin),\r\n // igual à semântica legacy — o usuário chama emailLoginMitra em seguida.\r\n await postBffAuth(buildBffAuthEndpoint(authUrl, '/email/signup'), {\r\n projectId: String(projectId),\r\n name: options.name,\r\n email: options.email,\r\n password: options.password\r\n });\r\n}\r\n\r\nexport async function emailVerifyCodeMitra(_options: EmailVerifyCodeOptions): Promise<LoginResponse> {\r\n throw new Error(NOT_SUPPORTED_VERIFY);\r\n}\r\n\r\nexport async function emailResendCodeMitra(_options: EmailResendCodeOptions): Promise<void> {\r\n throw new Error(NOT_SUPPORTED_RESEND);\r\n}\r\n\r\n// ── Refresh ─────────────────────────────────────────────────────────\r\n\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\nexport async function refreshTokenSilently(authUrl: string, _projectId: number | string): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const config = isConfigured() ? getConfig() : null;\r\n const refreshToken = config?.refreshToken;\r\n if (!refreshToken) {\r\n throw new Error('refreshToken não disponível para renovação no novo Mitra. Faça login novamente.');\r\n }\r\n const tokens = await postNewAuth(buildEndpoint(authUrl, '/refresh-token'), { refreshToken });\r\n return normalizeResponse(tokens, authUrl);\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Autenticação (Router)\r\n *\r\n * Roteia chamadas de auth para a implementação correta com base no `authUrl`:\r\n * - URLs legadas (`coder.mitralab.io/sdk-auth/`, `agent.mitralab.io/sdk-auth/`) → auth-legacy.ts\r\n * - Qualquer outro authUrl → auth-new.ts (novo Mitra: Kong gateway + IAM service)\r\n *\r\n * A API pública é idêntica à legacy. Consumers não precisam alterar código.\r\n */\r\n\r\nimport { isConfigured, getConfig } from './config';\r\nimport * as legacy from './auth-legacy';\r\nimport * as fresh from './auth-new';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse,\r\n EmailSignupOptions,\r\n EmailLoginOptions,\r\n EmailVerifyCodeOptions,\r\n EmailResendCodeOptions\r\n} from './types';\r\n\r\n// ── Detecção de mundo ───────────────────────────────────────────────\r\n\r\nconst LEGACY_AUTH_URLS = [\r\n 'https://coder.mitralab.io/sdk-auth/',\r\n 'https://agent.mitralab.io/sdk-auth/'\r\n];\r\n\r\nfunction normalize(url: string): string {\r\n // Remove query string e fragment, garante trailing slash\r\n const stripped = url.split('?')[0].split('#')[0];\r\n return stripped.endsWith('/') ? stripped : stripped + '/';\r\n}\r\n\r\nexport function isLegacyAuthUrl(authUrl: string | undefined): boolean {\r\n if (!authUrl) return false;\r\n return LEGACY_AUTH_URLS.includes(normalize(authUrl));\r\n}\r\n\r\n/**\r\n * Retorna true se o contexto atual é o novo mundo (authUrl configurado não é\r\n * legacy). Usado por features que ainda não têm suporte no novo Mitra.\r\n */\r\nexport function isNewWorld(authUrl?: string): boolean {\r\n const resolved = authUrl ?? (isConfigured() ? getConfig().authUrl : undefined);\r\n // Sem authUrl não dá pra afirmar que é novo mundo — assume legacy (não bloqueia).\r\n if (!resolved) return false;\r\n return !isLegacyAuthUrl(resolved);\r\n}\r\n\r\nfunction resolveAuthUrlFromOptions(options?: { authUrl?: string }): string | undefined {\r\n if (options?.authUrl) return options.authUrl;\r\n if (isConfigured()) return getConfig().authUrl;\r\n return undefined;\r\n}\r\n\r\n// ── Roteamento ──────────────────────────────────────────────────────\r\n\r\nexport async function loginMitra(\r\n method: 'email' | 'google' | 'microsoft' | 'mitra',\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginMitra(method, options)\r\n : fresh.loginMitra(method, options);\r\n}\r\n\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithEmailMitra(options)\r\n : fresh.loginWithEmailMitra(options);\r\n}\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithGoogleMitra(options)\r\n : fresh.loginWithGoogleMitra(options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithMicrosoftMitra(options)\r\n : fresh.loginWithMicrosoftMitra(options);\r\n}\r\n\r\nexport async function emailSignupMitra(options: EmailSignupOptions): Promise<void> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailSignupMitra(options)\r\n : fresh.emailSignupMitra(options);\r\n}\r\n\r\nexport async function emailLoginMitra(options: EmailLoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailLoginMitra(options)\r\n : fresh.emailLoginMitra(options);\r\n}\r\n\r\nexport async function emailVerifyCodeMitra(options: EmailVerifyCodeOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailVerifyCodeMitra(options)\r\n : fresh.emailVerifyCodeMitra(options);\r\n}\r\n\r\nexport async function emailResendCodeMitra(options: EmailResendCodeOptions): Promise<void> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.emailResendCodeMitra(options)\r\n : fresh.emailResendCodeMitra(options);\r\n}\r\n\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number | string): Promise<LoginResponse> {\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.refreshTokenSilently(authUrl, projectId)\r\n : fresh.refreshTokenSilently(authUrl, projectId);\r\n}\r\n","/**\n * Mitra Interactions SDK - Chat Integration\n *\n * Integrates with the __mitraChat object injected by the build-proxy\n * in published apps. Chat is initialized automatically by configureSdkMitra().\n */\n\n/**\n * Opens the Mitra Chat sidebar.\n * If chat is still loading, polls until ready (max 15s).\n */\nexport function openChatMitra(): void {\n if (typeof window === 'undefined') return;\n\n const chat = (window as any).__mitraChat;\n if (!chat) return;\n\n if (chat.isReady) {\n chat.open();\n } else {\n const iv = setInterval(() => {\n if (chat.isReady) { clearInterval(iv); chat.open(); }\n }, 200);\n setTimeout(() => clearInterval(iv), 15000);\n }\n}\n\n/**\n * Closes the Mitra Chat sidebar.\n */\nexport function closeChatMitra(): void {\n if (typeof window === 'undefined') return;\n (window as any).__mitraChat?.close();\n}\n","/**\r\n * Mitra Interactions SDK - Password Reset (legacy backend)\r\n *\r\n * Endpoints públicos (sem auth) para fluxo de \"esqueci minha senha\".\r\n * Usa um backend separado (porta 1005 ou 4133 dependendo do ambiente),\r\n * resolvido a partir do `authUrl` configurado.\r\n */\r\n\r\nimport { isConfigured, getConfig } from './config';\r\nimport type {\r\n SendPasswordResetCodeOptions,\r\n ValidatePasswordResetCodeOptions,\r\n ResetPasswordOptions\r\n} from './types';\r\n\r\n// ── Mapeamento authUrl → auth API base ──────────────────────────────\r\n\r\nconst AUTH_API_BY_AUTH_URL: Record<string, string> = {\r\n 'https://coder.mitralab.io/sdk-auth/': 'https://api0.mitraecp.com:1005',\r\n 'https://agent.mitralab.io/sdk-auth/': 'https://api2.mitrasheet.com:4133'\r\n};\r\n\r\nfunction normalizeAuthUrl(url: string): string {\r\n const stripped = url.split('?')[0].split('#')[0];\r\n return stripped.endsWith('/') ? stripped : stripped + '/';\r\n}\r\n\r\n// ── Mundo novo ainda não suportado ──────────────────────────────────\r\n\r\nconst NOT_SUPPORTED_SEND = 'sendPasswordResetCodeMitra ainda não suportado no novo Mitra.';\r\nconst NOT_SUPPORTED_VALIDATE = 'validatePasswordResetCodeMitra ainda não suportado no novo Mitra.';\r\nconst NOT_SUPPORTED_RESET = 'resetPasswordMitra ainda não suportado no novo Mitra.';\r\n\r\n/** Retorna true se o authUrl resolvido é do mundo novo (não-legacy) e não há override explícito. */\r\nfunction isNewWorld(opts: { authUrl?: string; authApiURL?: string }): boolean {\r\n if (opts.authApiURL) return false;\r\n if (typeof window !== 'undefined' && (window as any).__mitraEnv?.apiBaseURL) return false;\r\n const authUrl = opts.authUrl || (isConfigured() ? getConfig().authUrl : undefined);\r\n if (!authUrl) return false;\r\n return !(normalizeAuthUrl(authUrl) in AUTH_API_BY_AUTH_URL);\r\n}\r\n\r\nfunction resolveProjectId(opts: { projectId?: number | string }): number | string {\r\n if (opts.projectId != null) return opts.projectId;\r\n if (isConfigured()) {\r\n const pid = getConfig().projectId;\r\n if (pid != null) return pid;\r\n }\r\n throw new Error(\r\n 'projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).'\r\n );\r\n}\r\n\r\nfunction resolveAuthApiURL(opts: { authUrl?: string; authApiURL?: string }): string {\r\n // 1. Override explícito (testes / staging)\r\n if (opts.authApiURL) return opts.authApiURL.replace(/\\/+$/, '');\r\n\r\n // 2. Build-proxy injecta `window.__mitraEnv = { apiBaseURL: '...' }` antes do bundle\r\n if (typeof window !== 'undefined') {\r\n const injected = (window as any).__mitraEnv?.apiBaseURL;\r\n if (typeof injected === 'string' && injected.length > 0) {\r\n return injected.replace(/\\/+$/, '');\r\n }\r\n }\r\n\r\n // 3. Fallback: deriva do authUrl conhecido (dev local sem proxy)\r\n const authUrl = opts.authUrl || (isConfigured() ? getConfig().authUrl : undefined);\r\n if (authUrl) {\r\n const apiURL = AUTH_API_BY_AUTH_URL[normalizeAuthUrl(authUrl)];\r\n if (apiURL) return apiURL;\r\n }\r\n\r\n // 4. Sem nada\r\n throw new Error(\r\n 'Não foi possível resolver a API base. Configure window.__mitraEnv.apiBaseURL via build-proxy, ' +\r\n 'passe authApiURL nas options, ou use um authUrl conhecido (coder.mitralab.io ou agent.mitralab.io).'\r\n );\r\n}\r\n\r\n// ── Fetch helper ────────────────────────────────────────────────────\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\nasync function callAuthApi<T>(url: string, method: 'POST' | 'PUT', body: unknown): Promise<T> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method,\r\n headers: { 'Content-Type': 'application/json', accept: 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n const text = await response.text();\r\n let data: any = null;\r\n try { data = text ? JSON.parse(text) : null; } catch { /* keep null */ }\r\n\r\n if (!response.ok) {\r\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\r\n throw { message: msg, status: response.status, details: data };\r\n }\r\n\r\n return data as T;\r\n}\r\n\r\n// ── API pública ─────────────────────────────────────────────────────\r\n\r\n/**\r\n * POST /mitraspace/auth/resetPassword\r\n * Envia um código de verificação por email para iniciar o fluxo de reset de senha.\r\n */\r\nexport async function sendPasswordResetCodeMitra(\r\n options: SendPasswordResetCodeOptions\r\n): Promise<Record<string, unknown>> {\r\n if (isNewWorld(options)) throw new Error(NOT_SUPPORTED_SEND);\r\n const apiURL = resolveAuthApiURL(options);\r\n const projectId = resolveProjectId(options);\r\n return callAuthApi(`${apiURL}/mitraspace/auth/resetPassword`, 'POST', {\r\n email: options.email,\r\n projectId\r\n });\r\n}\r\n\r\n/**\r\n * POST /mitraspace/auth/resetPassword/validateCode\r\n * Valida o código recebido por email (sem trocar a senha ainda).\r\n */\r\nexport async function validatePasswordResetCodeMitra(\r\n options: ValidatePasswordResetCodeOptions\r\n): Promise<Record<string, unknown>> {\r\n if (isNewWorld(options)) throw new Error(NOT_SUPPORTED_VALIDATE);\r\n const apiURL = resolveAuthApiURL(options);\r\n const projectId = resolveProjectId(options);\r\n return callAuthApi(`${apiURL}/mitraspace/auth/resetPassword/validateCode`, 'POST', {\r\n email: options.email,\r\n code: options.code,\r\n projectId\r\n });\r\n}\r\n\r\n/**\r\n * PUT /mitraspace/auth/resetPassword\r\n * Troca a senha usando email + código + nova senha.\r\n */\r\nexport async function resetPasswordMitra(\r\n options: ResetPasswordOptions\r\n): Promise<Record<string, unknown>> {\r\n if (isNewWorld(options)) throw new Error(NOT_SUPPORTED_RESET);\r\n const apiURL = resolveAuthApiURL(options);\r\n const projectId = resolveProjectId(options);\r\n return callAuthApi(`${apiURL}/mitraspace/auth/resetPassword`, 'PUT', {\r\n email: options.email,\r\n code: options.code,\r\n newPassword: options.newPassword,\r\n projectId\r\n });\r\n}\r\n","/**\r\n * Mitra Interactions SDK - HTTP Client\r\n */\r\n\r\nimport { getConfig, updateGlobalToken, stripBearer } from './config';\r\nimport { refreshTokenSilently } from './auth';\r\nimport type { LoginResponse } from './types';\r\n\r\n/**\r\n * Obtém a função fetch\r\n */\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') {\r\n return globalThis.fetch;\r\n }\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\n/**\r\n * Formata o token para Authorization\r\n */\r\nfunction formatToken(token: string): string {\r\n return `Bearer ${stripBearer(token)}`;\r\n}\r\n\r\n/**\r\n * Constrói os headers\r\n */\r\nfunction buildHeaders(): Record<string, string> {\r\n const config = getConfig();\r\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\r\n if (config.token) headers['Authorization'] = formatToken(config.token);\r\n return headers;\r\n}\r\n\r\n/**\r\n * Constrói a URL com query params opcionais\r\n */\r\nfunction buildUrl(endpoint: string, params?: Record<string, unknown>): string {\r\n const config = getConfig();\r\n let url = `${config.baseURL}${endpoint}`;\r\n if (params) {\r\n const query = Object.entries(params)\r\n .filter(([, v]) => v !== undefined && v !== null)\r\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\r\n .join('&');\r\n if (query) url += `?${query}`;\r\n }\r\n return url;\r\n}\r\n\r\n/**\r\n * Tenta renovar o token diretamente via API (sem iframe/HTML).\r\n * Usa o token atual pra chamar refreshedToken e obter um novo token scoped.\r\n * Se falhar (token expirado de verdade), tenta o fallback via iframe.\r\n */\r\nasync function tryRefreshToken(): Promise<boolean> {\r\n const config = getConfig();\r\n\r\n if (!config.token || config.projectId == null) return false;\r\n\r\n // 1. Tenta refresh direto via API (sem HTML)\r\n try {\r\n const baseURL = config.baseURL.replace(/\\/+$/, '');\r\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${config.projectId}`, {\r\n method: 'GET',\r\n headers: { 'Authorization': formatToken(config.token) }\r\n });\r\n\r\n if (resp.ok) {\r\n const data = await resp.json();\r\n if (data.token) {\r\n const newToken = `Bearer ${stripBearer(data.token)}`;\r\n const session: LoginResponse = {\r\n token: newToken,\r\n baseURL: data.merge?.backURL || config.baseURL,\r\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\r\n };\r\n updateGlobalToken(session.token);\r\n if (config.onTokenRefresh) config.onTokenRefresh(session);\r\n return true;\r\n }\r\n }\r\n } catch {\r\n // Falhou — tenta fallback via iframe (legacy) ou refresh-token API (novo Mitra)\r\n }\r\n\r\n // 2. Fallback: refreshTokenSilently (router decide entre iframe legacy ou API novo Mitra)\r\n if (!config.authUrl || typeof window === 'undefined') return false;\r\n\r\n try {\r\n const session: LoginResponse = await refreshTokenSilently(config.authUrl, config.projectId);\r\n updateGlobalToken(session.token, session.refreshToken);\r\n if (config.onTokenRefresh) config.onTokenRefresh(session);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Cliente HTTP\r\n */\r\nasync function handleResponse<T>(response: Response): Promise<T> {\r\n const text = await response.text();\r\n const data = text ? JSON.parse(text) : null;\r\n\r\n if (!response.ok) {\r\n const base = data?.message || data?.error || `HTTP ${response.status}`;\r\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\r\n throw {\r\n message: msg,\r\n status: response.status,\r\n details: data\r\n };\r\n }\r\n\r\n return data as T;\r\n}\r\n\r\n/**\r\n * Executa um fetch. Se retornar AUTH_EXPIRED_STATUS, tenta refresh e retenta uma vez.\r\n */\r\nasync function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, init);\r\n\r\n if (response.status === 403) {\r\n const refreshed = await tryRefreshToken();\r\n if (refreshed) {\r\n // Retenta com o novo token\r\n const newHeaders = { ...buildHeaders() };\r\n // Preserva headers extras (ex: X-TenantID)\r\n const oldHeaders = init.headers as Record<string, string> | undefined;\r\n if (oldHeaders) {\r\n for (const [k, v] of Object.entries(oldHeaders)) {\r\n if (k !== 'Authorization') newHeaders[k] = v;\r\n }\r\n }\r\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\r\n return handleResponse(retryResponse);\r\n }\r\n }\r\n\r\n return handleResponse(response);\r\n}\r\n\r\nexport const http = {\r\n async get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint, params), {\r\n method: 'GET',\r\n headers: buildHeaders()\r\n });\r\n },\r\n\r\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'POST',\r\n headers: buildHeaders(),\r\n body: body !== undefined ? JSON.stringify(body) : undefined\r\n });\r\n },\r\n\r\n async put<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'PUT',\r\n headers: buildHeaders(),\r\n body: body !== undefined ? JSON.stringify(body) : undefined\r\n });\r\n },\r\n\r\n async del<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint, params), {\r\n method: 'DELETE',\r\n headers: buildHeaders()\r\n });\r\n },\r\n\r\n async delBody<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'DELETE',\r\n headers: buildHeaders(),\r\n body: body !== undefined ? JSON.stringify(body) : undefined\r\n });\r\n },\r\n\r\n async upload<T>(endpoint: string, formData: FormData): Promise<T> {\r\n const config = getConfig();\r\n const headers: Record<string, string> = {};\r\n if (config.token) headers['Authorization'] = formatToken(config.token);\r\n return fetchWithRefresh(buildUrl(endpoint), {\r\n method: 'POST',\r\n headers,\r\n body: formData\r\n });\r\n }\r\n};\r\n\r\n// HTTP client para Dynamic Schema (usa X-TenantID header)\r\nasync function requestWithTenant<T>(\r\n method: string,\r\n endpoint: string,\r\n tenantId: number | string,\r\n options?: { params?: Record<string, unknown>; body?: unknown }\r\n): Promise<T> {\r\n const headers = {\r\n ...buildHeaders(),\r\n 'X-TenantID': String(tenantId)\r\n };\r\n\r\n return fetchWithRefresh(buildUrl(endpoint, options?.params), {\r\n method,\r\n headers,\r\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\r\n });\r\n}\r\n\r\n/**\r\n * Requisição genérica para o serviço de integrações (porta 1003)\r\n */\r\nasync function requestIntegrations<T>(\r\n method: string,\r\n endpoint: string,\r\n options?: { params?: Record<string, unknown>; body?: unknown }\r\n): Promise<T> {\r\n const config = getConfig();\r\n if (!config.integrationURL) {\r\n throw new Error('integrationURL não configurado. Passe integrationURL em configureSdkMitra() ou via query param.');\r\n }\r\n\r\n const base = config.integrationURL.replace(/\\/+$/, '');\r\n let url = `${base}${endpoint}`;\r\n\r\n if (options?.params) {\r\n const query = Object.entries(options.params)\r\n .filter(([, v]) => v !== undefined && v !== null)\r\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\r\n .join('&');\r\n if (query) url += `?${query}`;\r\n }\r\n\r\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\r\n if (config.token) headers['Authorization'] = formatToken(config.token);\r\n\r\n return fetchWithRefresh(url, {\r\n method,\r\n headers,\r\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\r\n });\r\n}\r\n\r\nexport const httpIntegrations = {\r\n get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\r\n return requestIntegrations('GET', endpoint, { params });\r\n },\r\n post<T>(endpoint: string, body?: unknown): Promise<T> {\r\n return requestIntegrations('POST', endpoint, { body });\r\n }\r\n};\r\n\r\nexport const httpTenant = {\r\n get<T>(endpoint: string, tenantId: number | string, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('GET', endpoint, tenantId, { params });\r\n },\r\n post<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\r\n },\r\n put<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\r\n },\r\n patch<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\r\n },\r\n del<T>(endpoint: string, tenantId: number | string, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\r\n }\r\n};\r\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpTenant } from './client';\nimport { getConfig, resolveProjectId } from './config';\nimport type {\n ExecuteDataLoaderOptions,\n ExecuteDataLoaderResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse,\n // Profile Management\n ListProfilesOptions,\n ListProfilesResponse,\n GetProfileDetailsOptions,\n GetProfileDetailsResponse,\n CreateProfileOptions,\n CreateProfileResponse,\n UpdateProfileOptions,\n UpdateProfileResponse,\n DeleteProfileOptions,\n DeleteProfileResponse,\n SetProfileUsersOptions,\n SetProfileSelectTablesOptions,\n SetProfileDmlTablesOptions,\n SetProfileActionsOptions,\n SetProfileScreensOptions,\n SetProfileServerFunctionsOptions,\n SetProfilePermissionResponse,\n ExecutePublicServerFunctionOptions,\n ExecutePublicServerFunctionResponse,\n ExecutePublicServerFunctionAsyncResponse,\n GetPublicServerFunctionExecutionOptions,\n GetPublicServerFunctionExecutionResponse\n} from './types';\n\n/**\n * POST /interactions/executeDataLoader\n * Executa um Data Loader\n */\nexport async function executeDataLoaderMitra(options: ExecuteDataLoaderOptions): Promise<ExecuteDataLoaderResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dataLoaderId: options.dataLoaderId\n };\n if (options.input !== undefined) body.input = options.input;\n return http.post('/interactions/executeDataLoader', body);\n}\n\n/**\n * POST /interactions/executeDbAction\n * Executa uma DBAction (DML) cadastrada\n */\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dbActionId: options.dbActionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeDbAction', body);\n}\n\n/**\n * POST /interactions/setFileStatus\n * Move arquivo do chat para PUBLIC ou LOADABLE\n */\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\n return http.post('/interactions/setFileStatus', {\n projectId: resolveProjectId(options.projectId),\n fileName: options.fileName,\n targetPath: options.targetPath\n });\n}\n\n/**\n * POST /interactions/setVariable\n * Cria ou atualiza uma variável customizada\n */\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n };\n\n if (options.value !== undefined) {\n body.value = options.value;\n }\n\n return http.post('/interactions/setVariable', body);\n}\n\n/**\n * GET /interactions/listVariables?projectId={id}\n * Lista variáveis de um projeto\n */\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\n return http.get('/interactions/listVariables', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * GET /interactions/getVariable?projectId={id}&key={key}\n * Busca o valor de uma variável específica\n */\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\n return http.get('/interactions/getVariable', {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n });\n}\n\n/**\n * POST /interactions/runAction\n * Executa uma Action (fluxo de ação) cadastrada\n */\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n actionId: options.actionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/runAction', body);\n}\n\n/**\n * POST /interactions/executeServerFunction\n * Executa uma Server Function de forma SÍNCRONA (timeout 60s no backend)\n */\nexport async function executeServerFunctionMitra(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunction', body);\n}\n\n/**\n * POST /interactions/executeServerFunctionAsync\n * Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)\n */\nexport async function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunctionAsync', body);\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/execute\n * Executa uma Server Function pública de forma SÍNCRONA (sem autenticação).\n * A SF deve ter publicExecution = true. Timeout 5min.\n */\nexport async function executePublicServerFunctionMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/executeAsync\n * Executa uma Server Function pública de forma ASSÍNCRONA (sem autenticação).\n * Retorna executionId imediatamente. Use getPublicServerFunctionExecutionMitra para polling.\n */\nexport async function executePublicServerFunctionAsyncMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionAsyncResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /public/serverFunction/{projectId}/execution/{executionId}\n * Consulta o status/resultado de uma execução pública de SF (sem autenticação).\n */\nexport async function getPublicServerFunctionExecutionMitra(\n options: GetPublicServerFunctionExecutionOptions\n): Promise<GetPublicServerFunctionExecutionResponse> {\n const { projectId, executionId } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' }\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /interactions/integrations?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return http.get('/interactions/integrations', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /interactions/integrations/call\n * Chama uma API externa via serviço de integrações\n * Mapeia connection → integrationSlug no body\n */\nexport async function callIntegrationMitra(options: CallIntegrationOptions): Promise<CallIntegrationResponse> {\n const body: Record<string, unknown> = {\n integrationSlug: options.connection,\n projectId: resolveProjectId(options.projectId),\n method: options.method\n };\n\n if (options.endpoint !== undefined) {\n body.endpoint = options.endpoint;\n }\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n if (options.body !== undefined) {\n body.body = options.body;\n }\n\n return http.post('/interactions/integrations/call', body);\n}\n\n/**\n * POST /interactions/stopServerFunctionExecution\n * Para a execução de uma Server Function em andamento\n */\nexport async function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse> {\n return http.post('/interactions/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n// === Upload de Arquivos ===\n\n/**\n * POST /interactions/uploadFilePublic (multipart/form-data)\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\n */\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/interactions/uploadFilePublic', formData);\n}\n\n/**\n * POST /interactions/uploadFileLoadable (multipart/form-data)\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\n */\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/interactions/uploadFileLoadable', formData);\n}\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}`, pid, { page, size, jdbcConnectionConfigId, ...filters });\n}\n\nexport async function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>> {\n const { tableName, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function updateRecordMitra(options: UpdateRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.put(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function patchRecordMitra(options: PatchRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.patch(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function deleteRecordMitra(options: DeleteRecordOptions): Promise<void> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.del(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]> {\n const { tableName, records, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n// === Profile Management ===\n\n/**\n * GET /interactions/profiles?projectId={id}\n * Lista todos os perfis do projeto\n */\nexport async function listProfilesMitra(options: ListProfilesOptions = {}): Promise<ListProfilesResponse> {\n return http.get('/interactions/profiles', { projectId: resolveProjectId(options.projectId) });\n}\n\n/**\n * GET /interactions/profiles/{profileId}?projectId={id}\n * Detalhes de um perfil (usuários, tabelas, actions, screens, server functions)\n */\nexport async function getProfileDetailsMitra(options: GetProfileDetailsOptions): Promise<GetProfileDetailsResponse> {\n return http.get(`/interactions/profiles/${options.profileId}`, { projectId: resolveProjectId(options.projectId) });\n}\n\n/**\n * POST /interactions/profiles\n * Cria um novo perfil\n */\nexport async function createProfileMitra(options: CreateProfileOptions): Promise<CreateProfileResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n name: options.name\n };\n if (options.color !== undefined) body.color = options.color;\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\n return http.post('/interactions/profiles', body);\n}\n\n/**\n * PUT /interactions/profiles\n * Atualiza um perfil existente\n */\nexport async function updateProfileMitra(options: UpdateProfileOptions): Promise<UpdateProfileResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId\n };\n if (options.name !== undefined) body.name = options.name;\n if (options.color !== undefined) body.color = options.color;\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\n return http.put('/interactions/profiles', body);\n}\n\n/**\n * DELETE /interactions/profiles\n * Deleta um perfil\n */\nexport async function deleteProfileMitra(options: DeleteProfileOptions): Promise<DeleteProfileResponse> {\n return http.delBody('/interactions/profiles', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId\n });\n}\n\n/**\n * POST /interactions/profiles/users\n * Define os usuários de um perfil (substitui lista atual)\n */\nexport async function setProfileUsersMitra(options: SetProfileUsersOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/users', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n userIds: options.userIds\n });\n}\n\n/**\n * POST /interactions/profiles/selectTables\n * Define as tabelas SELECT permitidas por perfil\n */\nexport async function setProfileSelectTablesMitra(options: SetProfileSelectTablesOptions): Promise<SetProfilePermissionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n tables: options.tables\n };\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\n return http.post('/interactions/profiles/selectTables', body);\n}\n\n/**\n * POST /interactions/profiles/dmlTables\n * Define as tabelas DML permitidas por perfil\n */\nexport async function setProfileDmlTablesMitra(options: SetProfileDmlTablesOptions): Promise<SetProfilePermissionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n tables: options.tables\n };\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\n return http.post('/interactions/profiles/dmlTables', body);\n}\n\n/**\n * POST /interactions/profiles/actions\n * Define as actions permitidas por perfil\n */\nexport async function setProfileActionsMitra(options: SetProfileActionsOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/actions', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n actionIds: options.actionIds\n });\n}\n\n/**\n * POST /interactions/profiles/screens\n * Define as screens permitidas por perfil\n */\nexport async function setProfileScreensMitra(options: SetProfileScreensOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/screens', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n screenIds: options.screenIds\n });\n}\n\n/**\n * POST /interactions/profiles/serverFunctions\n * Define as server functions permitidas por perfil\n */\nexport async function setProfileServerFunctionsMitra(options: SetProfileServerFunctionsOptions): Promise<SetProfilePermissionResponse> {\n return http.post('/interactions/profiles/serverFunctions', {\n projectId: resolveProjectId(options.projectId),\n profileId: options.profileId,\n serverFunctionIds: options.serverFunctionIds\n });\n}\n\n","/**\r\n * Mitra Interactions SDK — Agent Attachments (interno)\r\n *\r\n * Detecção de tipo + upload + montagem do AgentAttachment, replicando o que o\r\n * mitra-nuxt faz no drop/send. O consumidor passa File[] em send({ files });\r\n * a SDK cuida de tudo. NÃO faz parte da API pública (usado por agent-task-session).\r\n */\r\n\r\nimport { uploadFilePublicMitra } from './services';\r\nimport type { AgentAttachment, AgentAttachmentType } from './types';\r\n\r\n// Mapa de extensão → tipo (porte do mitra-nuxt AgentTaskInput.vue).\r\nconst EXTENSION_MAP: Record<string, AgentAttachmentType> = {\r\n // Images\r\n png: 'image', jpg: 'image', jpeg: 'image', gif: 'image', webp: 'image', svg: 'image', bmp: 'image', ico: 'image',\r\n // PDF\r\n pdf: 'pdf',\r\n // CSV\r\n csv: 'csv', tsv: 'csv',\r\n // Excel\r\n xlsx: 'excel', xls: 'excel', xlsm: 'excel', xlsb: 'excel', ods: 'excel',\r\n // Word\r\n docx: 'word', doc: 'word', odt: 'word', rtf: 'word',\r\n // PowerPoint\r\n pptx: 'powerpoint', ppt: 'powerpoint', odp: 'powerpoint',\r\n // Text\r\n txt: 'text', md: 'text', log: 'text', ini: 'text', cfg: 'text', env: 'text',\r\n // Code\r\n js: 'code', ts: 'code', jsx: 'code', tsx: 'code', py: 'code', rb: 'code',\r\n java: 'code', c: 'code', cpp: 'code', h: 'code', cs: 'code', go: 'code',\r\n rs: 'code', php: 'code', swift: 'code', kt: 'code', scala: 'code',\r\n html: 'code', css: 'code', scss: 'code', less: 'code', sql: 'code',\r\n sh: 'code', bash: 'code', zsh: 'code', yaml: 'code', yml: 'code',\r\n toml: 'code', xml: 'code', vue: 'code', svelte: 'code',\r\n // JSON\r\n json: 'json', jsonl: 'json', geojson: 'json',\r\n // ZIP\r\n zip: 'zip', tar: 'zip', gz: 'zip', rar: 'zip', '7z': 'zip',\r\n // Audio\r\n mp3: 'audio', wav: 'audio', ogg: 'audio', flac: 'audio', m4a: 'audio', aac: 'audio', wma: 'audio'\r\n};\r\n\r\n/** Detecta o AttachmentType a partir da extensão/MIME (mesmo critério do Nuxt). */\r\nexport function detectAttachmentType(file: File): AgentAttachmentType {\r\n const ext = file.name.split('.').pop()?.toLowerCase() ?? '';\r\n if (EXTENSION_MAP[ext]) return EXTENSION_MAP[ext];\r\n if (file.type.startsWith('image/')) return 'image';\r\n if (file.type === 'application/pdf') return 'pdf';\r\n if (file.type.startsWith('audio/')) return 'audio';\r\n if (file.type.startsWith('text/')) return 'text';\r\n return 'unknown';\r\n}\r\n\r\n/**\r\n * Para cada File: detecta o tipo, sobe via uploadFilePublic (URL pública) e\r\n * monta o AgentAttachment. Uploads em paralelo. Lança se algum não retornar URL.\r\n */\r\nexport async function buildAttachmentsFromFiles(\r\n files: File[],\r\n projectId?: number | string\r\n): Promise<AgentAttachment[]> {\r\n return Promise.all(\r\n files.map(async (file) => {\r\n const type = detectAttachmentType(file);\r\n const res = await uploadFilePublicMitra({ file, projectId });\r\n const url = res.result?.publicUrl;\r\n if (!url) {\r\n throw new Error(`upload sem URL pública: ${file.name}`);\r\n }\r\n return {\r\n url,\r\n name: file.name,\r\n type,\r\n mimeType: file.type,\r\n size: file.size\r\n };\r\n })\r\n );\r\n}\r\n","/**\r\n * Mitra Interactions SDK — AgentTaskSession\r\n *\r\n * Handle resource-oriented de um chat com o agente. Encapsula todo o ciclo\r\n * de vida (histórico, streaming, fila, cancel) num único objeto.\r\n *\r\n * Espelha a semântica do Code Builder (Pinia stores + composables), porém\r\n * por-session em vez de globalmente compartilhado.\r\n *\r\n * Não construa diretamente — use `getAgentTaskMitra({ create | taskId })`.\r\n */\r\n\r\nimport type {\r\n AgentChat,\r\n AgentMessage,\r\n AgentAttachment,\r\n AgentTaskSession as IAgentTaskSession,\r\n AgentTaskStatus,\r\n AgentTaskEventMap,\r\n AgentTaskEventName,\r\n AgentType,\r\n QueuedItem,\r\n SendOptions\r\n} from './types';\r\nimport { buildAttachmentsFromFiles } from './agent-attachments';\r\n\r\ninterface SessionTransport {\r\n /** Garante WS conectado. */\r\n ensureConnected(): Promise<void>;\r\n /** Envia request/response com requestId, aguarda data. */\r\n request<T>(type: string, payload: Record<string, unknown>): Promise<T>;\r\n /** Envia mensagem fire-and-forget (eventos chegam via subscribe). */\r\n send(type: string, payload: Record<string, unknown>, taskId?: string): void;\r\n /** Resolve projectId (param ou config global). */\r\n resolveProjectId(override?: number | string): number | string;\r\n /** Próximo seq incremental (FIFO de mensagens em fila). */\r\n nextSeq(): number;\r\n /** Subscribe handler pra eventos WS de uma taskId específica. Retorna unsubscribe. */\r\n subscribe(taskId: string, handler: (msg: any) => void): () => void;\r\n /** Subscribe handler pra eventos sem taskId resolvido (ex: task_update pra session nova). */\r\n subscribePending(sessionId: string, handler: (msg: any) => void): () => void;\r\n /** Verifica se uma taskId está em streaming agora (do streaming_state). */\r\n isStreaming(taskId: string): boolean;\r\n /** Remove session do cache global (chamado no close). */\r\n unregister(taskId: string | null, sessionId: string): void;\r\n /** Registra mapeamento taskId → session (chamado quando task_created chega). */\r\n register(taskId: string, session: AgentTaskSession): void;\r\n}\r\n\r\ninterface SessionInitNew {\r\n kind: 'new';\r\n projectId?: number | string;\r\n agentType?: AgentType;\r\n modelId?: string;\r\n name?: string;\r\n}\r\n\r\ninterface SessionInitExisting {\r\n kind: 'existing';\r\n taskId: string;\r\n}\r\n\r\ntype SessionInit = SessionInitNew | SessionInitExisting;\r\n\r\nconst QUEUE_MAX = 10;\r\nconst TURN_STARTED_SAFETY_MS = 30_000;\r\nlet sessionCounter = 0;\r\n\r\nexport class AgentTaskSession implements IAgentTaskSession {\r\n // ── Identidade ────────────────────────\r\n private _taskId: string | null = null;\r\n private _task: AgentChat | null = null;\r\n private readonly _isNew: boolean;\r\n private readonly _sessionId: string;\r\n\r\n // ── Estado ────────────────────────────\r\n private _status: AgentTaskStatus = 'opening';\r\n private _history: AgentMessage[] = [];\r\n private _content = '';\r\n private _queue: QueuedItem[] = [];\r\n\r\n // ── Config inicial ────────────────────\r\n private _projectId?: number | string;\r\n private _agentType?: AgentType;\r\n private _modelId?: string;\r\n private _initialName?: string;\r\n\r\n // ── Cancel state ──────────────────────\r\n private _cancelled = false;\r\n private _awaitingTurnStarted = false;\r\n private _turnStartedTimer: ReturnType<typeof setTimeout> | null = null;\r\n private _pendingCancelResolve: (() => void) | null = null;\r\n\r\n // ── Listeners ─────────────────────────\r\n private _listeners: Map<AgentTaskEventName, Set<(payload: any) => void>> = new Map();\r\n private _wsUnsubscribe: (() => void) | null = null;\r\n private _wsUnsubscribePending: (() => void) | null = null;\r\n\r\n private readonly _transport: SessionTransport;\r\n\r\n constructor(init: SessionInit, transport: SessionTransport) {\r\n this._transport = transport;\r\n this._sessionId = `sess-${++sessionCounter}-${Date.now()}`;\r\n this._isNew = init.kind === 'new';\r\n\r\n if (init.kind === 'new') {\r\n this._projectId = init.projectId;\r\n this._agentType = init.agentType;\r\n this._modelId = init.modelId;\r\n this._initialName = init.name;\r\n // Sessions novas começam idle (nada pra carregar)\r\n this._setStatus('idle');\r\n // Eventos do task_update precisam chegar antes do taskId existir\r\n this._wsUnsubscribePending = this._transport.subscribePending(\r\n this._sessionId,\r\n (msg) => this._handleMessage(msg)\r\n );\r\n } else {\r\n this._taskId = init.taskId;\r\n this._transport.register(init.taskId, this);\r\n this._wsUnsubscribe = this._transport.subscribe(init.taskId, (msg) =>\r\n this._handleMessage(msg)\r\n );\r\n // Conecta WS em background e detecta se já está streaming\r\n this._initExisting(init.taskId);\r\n }\r\n }\r\n\r\n // ── Properties públicas ────────────────────────────\r\n\r\n get taskId(): string | null {\r\n return this._taskId;\r\n }\r\n get task(): AgentChat | null {\r\n return this._task;\r\n }\r\n get isNew(): boolean {\r\n return this._isNew;\r\n }\r\n get status(): AgentTaskStatus {\r\n return this._status;\r\n }\r\n get history(): ReadonlyArray<AgentMessage> {\r\n return this._history;\r\n }\r\n get content(): string {\r\n return this._content;\r\n }\r\n get queue(): ReadonlyArray<QueuedItem> {\r\n return this._queue;\r\n }\r\n\r\n // ── Lifecycle ──────────────────────────────────────\r\n\r\n private async _initExisting(taskId: string): Promise<void> {\r\n try {\r\n await this._transport.ensureConnected();\r\n if (this._status === 'closed') return;\r\n // Detecta stream ativo (vem do streaming_state mantido pelo transport)\r\n if (this._transport.isStreaming(taskId)) {\r\n this._setStatus('streaming');\r\n } else {\r\n this._setStatus('idle');\r\n }\r\n } catch (err) {\r\n this._emitError(err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async loadHistory(options?: { limit?: number }): Promise<AgentMessage[]> {\r\n if (this._status === 'closed') {\r\n throw new Error('AgentTaskSession: session fechada.');\r\n }\r\n if (!this._taskId) {\r\n // Session nova sem prompt ainda — não tem histórico\r\n this._history = [];\r\n this._emit('historyLoaded', []);\r\n return [];\r\n }\r\n await this._transport.ensureConnected();\r\n const payload: Record<string, unknown> = { taskId: this._taskId };\r\n if (options?.limit != null) payload.limit = options.limit;\r\n const msgs = await this._transport.request<AgentMessage[]>('get_history', payload);\r\n this._history = msgs;\r\n this._emit('historyLoaded', msgs);\r\n return msgs;\r\n }\r\n\r\n close(): void {\r\n if (this._status === 'closed') return;\r\n this._setStatus('closed');\r\n if (this._turnStartedTimer) {\r\n clearTimeout(this._turnStartedTimer);\r\n this._turnStartedTimer = null;\r\n }\r\n if (this._wsUnsubscribe) {\r\n this._wsUnsubscribe();\r\n this._wsUnsubscribe = null;\r\n }\r\n if (this._wsUnsubscribePending) {\r\n this._wsUnsubscribePending();\r\n this._wsUnsubscribePending = null;\r\n }\r\n this._transport.unregister(this._taskId, this._sessionId);\r\n this._listeners.clear();\r\n }\r\n\r\n // ── Comandos ───────────────────────────────────────\r\n\r\n send(prompt: string, options?: SendOptions): void {\r\n if (this._status === 'closed') {\r\n throw new Error('AgentTaskSession: session fechada.');\r\n }\r\n const files = options?.files?.length ? options.files : undefined;\r\n if (!prompt.trim() && !files) return;\r\n\r\n const agentType = options?.agentType ?? this._agentType ?? 'claudecode';\r\n const modelId = options?.modelId ?? this._modelId;\r\n\r\n // Com anexos: sobe primeiro (igual o Nuxt faz no send), depois despacha.\r\n // O send continua síncrono/void — o upload roda em background e o\r\n // consumidor observa pelo status 'uploading' + evento 'error'.\r\n if (files) {\r\n void this._uploadThenDispatch(prompt, agentType, modelId, files);\r\n return;\r\n }\r\n this._dispatchSend(prompt, agentType, modelId, undefined);\r\n }\r\n\r\n private async _uploadThenDispatch(\r\n prompt: string,\r\n agentType: AgentType,\r\n modelId: string | undefined,\r\n files: File[]\r\n ): Promise<void> {\r\n const wasStreaming = this._status === 'streaming';\r\n if (!wasStreaming) this._setStatus('uploading');\r\n let attachments: AgentAttachment[];\r\n try {\r\n attachments = await buildAttachmentsFromFiles(files, this._projectId);\r\n } catch (err) {\r\n this._emit('error', {\r\n error: `Falha ao subir anexos: ${err instanceof Error ? err.message : String(err)}`\r\n });\r\n if (this._status === 'uploading') this._setStatus('idle');\r\n return;\r\n }\r\n // Session pode ter sido fechada durante o upload.\r\n if (this._status === 'closed') return;\r\n this._dispatchSend(prompt, agentType, modelId, attachments);\r\n }\r\n\r\n private _dispatchSend(\r\n prompt: string,\r\n agentType: AgentType,\r\n modelId: string | undefined,\r\n attachments: AgentAttachment[] | undefined\r\n ): void {\r\n // Se streaming, enfileira\r\n if (this._status === 'streaming') {\r\n this._enqueue(prompt, agentType);\r\n // Best-effort mid-session injection (BASH_ENV no OpenCode)\r\n if (this._taskId) {\r\n this._transport.send(\r\n 'send_prompt',\r\n {\r\n prompt,\r\n taskId: this._taskId,\r\n projectId: this._projectId,\r\n agentType,\r\n ...(modelId ? { modelId } : {}),\r\n ...(attachments ? { attachments } : {}),\r\n midSession: true\r\n },\r\n this._taskId\r\n );\r\n }\r\n return;\r\n }\r\n\r\n // Se cancelado, marca awaitingTurnStarted e dispara safety net\r\n if (this._status === 'cancelled') {\r\n this._awaitingTurnStarted = true;\r\n if (this._turnStartedTimer) clearTimeout(this._turnStartedTimer);\r\n this._turnStartedTimer = setTimeout(() => {\r\n this._turnStartedTimer = null;\r\n if (this._awaitingTurnStarted) {\r\n this._cancelled = false;\r\n this._awaitingTurnStarted = false;\r\n this._setStatus('idle');\r\n }\r\n }, TURN_STARTED_SAFETY_MS);\r\n }\r\n\r\n // Dispara novo turno\r\n this._setStatus('streaming');\r\n this._content = '';\r\n\r\n const payload: Record<string, unknown> = {\r\n prompt,\r\n projectId: this._projectId,\r\n agentType\r\n };\r\n if (modelId) payload.modelId = modelId;\r\n if (attachments) payload.attachments = attachments;\r\n if (this._taskId) payload.taskId = this._taskId;\r\n if (this._initialName && !this._taskId) {\r\n payload.name = this._initialName;\r\n }\r\n\r\n this._transport.send('send_prompt', payload, this._taskId ?? undefined);\r\n }\r\n\r\n async cancel(): Promise<void> {\r\n if (this._status === 'closed') return;\r\n if (this._status !== 'streaming' && this._status !== 'cancelled') return;\r\n\r\n this._cancelled = true;\r\n this._clearQueue();\r\n\r\n if (this._taskId) {\r\n this._transport.send(\r\n 'task_cancel',\r\n { source: 'sdk_cancel' },\r\n this._taskId\r\n );\r\n }\r\n\r\n this._setStatus('cancelled');\r\n this._emit('cancelled', undefined);\r\n\r\n // Resolve quando turn_started chega OU safety net (30s)\r\n return new Promise<void>((resolve) => {\r\n const previousResolve = this._pendingCancelResolve;\r\n this._pendingCancelResolve = () => {\r\n resolve();\r\n if (previousResolve) previousResolve();\r\n };\r\n setTimeout(() => {\r\n if (this._pendingCancelResolve) {\r\n this._pendingCancelResolve = null;\r\n resolve();\r\n }\r\n }, TURN_STARTED_SAFETY_MS);\r\n });\r\n }\r\n\r\n // ── Manipulação de fila ────────────────────────────\r\n\r\n editQueueItem(itemId: string, newText: string): boolean {\r\n const idx = this._queue.findIndex((q) => q.id === itemId);\r\n if (idx < 0 || this._queue[idx].status !== 'pending') return false;\r\n this._queue = [\r\n ...this._queue.slice(0, idx),\r\n { ...this._queue[idx], text: newText },\r\n ...this._queue.slice(idx + 1)\r\n ];\r\n this._emitQueueChange();\r\n return true;\r\n }\r\n\r\n removeQueueItem(itemId: string): boolean {\r\n const before = this._queue.length;\r\n this._queue = this._queue.filter((q) => q.id !== itemId);\r\n if (this._queue.length === before) return false;\r\n this._emitQueueChange();\r\n return true;\r\n }\r\n\r\n clearQueue(): void {\r\n if (this._queue.length === 0) return;\r\n this._clearQueue();\r\n }\r\n\r\n // ── Eventos ────────────────────────────────────────\r\n\r\n on<E extends AgentTaskEventName>(\r\n event: E,\r\n handler: (payload: AgentTaskEventMap[E]) => void\r\n ): () => void {\r\n if (!this._listeners.has(event)) {\r\n this._listeners.set(event, new Set());\r\n }\r\n this._listeners.get(event)!.add(handler as any);\r\n return () => {\r\n this._listeners.get(event)?.delete(handler as any);\r\n };\r\n }\r\n\r\n // ── Internals: routing de mensagens WS ─────────────\r\n\r\n private _handleMessage(msg: any): void {\r\n if (!msg?.type) return;\r\n\r\n // Cancel gate local: se cancelado, dropa eventos stale (exceto turn_started/error)\r\n if (\r\n this._cancelled &&\r\n msg.type !== 'turn_started' &&\r\n msg.type !== 'error' &&\r\n msg.type !== 'task_update'\r\n ) {\r\n return;\r\n }\r\n\r\n const payload = (msg.payload ?? {}) as Record<string, unknown>;\r\n\r\n switch (msg.type) {\r\n case 'task_update': {\r\n // Task criada (caso `new`) — reassocia e registra no transport\r\n if (payload.action !== 'created') return;\r\n const task = payload.task as AgentChat | undefined;\r\n if (!task) return;\r\n if (!this._taskId) {\r\n this._taskId = task.id;\r\n this._task = task;\r\n this._transport.register(task.id, this);\r\n // Trocar subscribePending por subscribe direto\r\n if (this._wsUnsubscribePending) {\r\n this._wsUnsubscribePending();\r\n this._wsUnsubscribePending = null;\r\n }\r\n this._wsUnsubscribe = this._transport.subscribe(task.id, (m) =>\r\n this._handleMessage(m)\r\n );\r\n this._emit('taskCreated', { task });\r\n } else if (this._taskId === task.id) {\r\n this._task = task;\r\n }\r\n break;\r\n }\r\n\r\n case 'turn_started': {\r\n // Levanta cancel gate, sinaliza início de turno\r\n if (this._cancelled) {\r\n this._cancelled = false;\r\n this._awaitingTurnStarted = false;\r\n if (this._turnStartedTimer) {\r\n clearTimeout(this._turnStartedTimer);\r\n this._turnStartedTimer = null;\r\n }\r\n if (this._pendingCancelResolve) {\r\n this._pendingCancelResolve();\r\n this._pendingCancelResolve = null;\r\n }\r\n }\r\n if (this._status !== 'streaming') {\r\n this._setStatus('streaming');\r\n this._content = '';\r\n }\r\n this._emit('turnStart', undefined);\r\n break;\r\n }\r\n\r\n case 'stream_delta': {\r\n const kind: 'text' | 'tool' =\r\n payload.subtype === 'thinking' ? 'tool' : 'text';\r\n const delta = String(payload.delta ?? '');\r\n if (kind === 'text') this._content += delta;\r\n this._emit('delta', { delta, kind });\r\n break;\r\n }\r\n\r\n case 'stream_tool_activity': {\r\n this._emit('tool', {\r\n tool: String(payload.tool ?? ''),\r\n input: payload.input as string | undefined,\r\n content: payload.content as string | undefined,\r\n timestamp: Number(msg.timestamp ?? Date.now())\r\n });\r\n break;\r\n }\r\n\r\n case 'stream_end': {\r\n const finalContent = this._content;\r\n this._emit('turnEnd', { content: finalContent });\r\n this._setStatus('idle');\r\n // Dequeue próximo item se houver\r\n this._shiftQueueAndSend();\r\n break;\r\n }\r\n\r\n case 'error': {\r\n const error = String(payload.error ?? msg.error ?? 'Erro desconhecido');\r\n this._emitError(error);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // ── Fila interna ───────────────────────────────────\r\n\r\n private _enqueue(text: string, agentType: AgentType): void {\r\n if (this._queue.length >= QUEUE_MAX) return;\r\n const trimmed = text.trim();\r\n if (this._queue.some((q) => q.text.trim() === trimmed)) return;\r\n const item: QueuedItem = {\r\n id: `q-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\r\n text,\r\n agentType,\r\n seq: this._transport.nextSeq(),\r\n createdAt: Date.now(),\r\n status: 'pending'\r\n };\r\n this._queue = [...this._queue, item];\r\n this._emitQueueChange();\r\n }\r\n\r\n private _shiftQueueAndSend(): void {\r\n if (this._queue.length === 0) return;\r\n const [next, ...rest] = this._queue;\r\n this._queue = rest;\r\n this._emitQueueChange();\r\n this.send(next.text, { agentType: next.agentType });\r\n }\r\n\r\n private _clearQueue(): void {\r\n if (this._queue.length === 0) return;\r\n this._queue = [];\r\n this._emitQueueChange();\r\n }\r\n\r\n // ── Helpers de emissão ─────────────────────────────\r\n\r\n private _emit<E extends AgentTaskEventName>(\r\n event: E,\r\n payload: AgentTaskEventMap[E]\r\n ): void {\r\n const set = this._listeners.get(event);\r\n if (!set) return;\r\n for (const handler of set) {\r\n try {\r\n (handler as (p: any) => void)(payload);\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error(`[AgentTaskSession] handler de '${event}' lançou:`, err);\r\n }\r\n }\r\n }\r\n\r\n private _emitError(error: string): void {\r\n this._emit('error', { error });\r\n this._setStatus('error');\r\n }\r\n\r\n private _emitQueueChange(): void {\r\n this._emit('queueChange', { queue: this._queue });\r\n }\r\n\r\n private _setStatus(next: AgentTaskStatus): void {\r\n if (this._status === next) return;\r\n const previous = this._status;\r\n this._status = next;\r\n this._emit('statusChange', { status: next, previous });\r\n }\r\n}\r\n","/**\r\n * Mitra Interactions SDK — Agent Chat\r\n *\r\n * Hub do WebSocket compartilhado e factories da API pública:\r\n * - manageAgentChatMitra({ action: 'list' | 'rename' | 'delete', ... })\r\n * - getAgentTaskMitra({ create | taskId, ... })\r\n *\r\n * O WS é singleton: todas as sessions usam UMA conexão. O roteamento\r\n * de eventos é feito por taskId, despachando pra session correspondente.\r\n *\r\n * NÃO há `sendAgentPromptMitra` ou `getAgentHistoryMitra` exportados —\r\n * essas operações vivem dentro de `AgentTaskSession`.\r\n */\r\n\r\nimport { getConfig, stripBearer } from './config';\r\nimport { isNewWorld } from './auth';\r\nimport { AgentTaskSession } from './agent-task-session';\r\nimport type {\r\n AgentChat,\r\n AgentTaskSession as IAgentTaskSession,\r\n GetAgentTaskOptions,\r\n ManageAgentChatOptions,\r\n ManageAgentChatListOptions,\r\n ManageAgentChatRenameOptions,\r\n ManageAgentChatDeleteOptions,\r\n RenameAgentChatResult,\r\n DeleteAgentChatResult\r\n} from './types';\r\n\r\n// ── WS singleton state ───────────────────────────────────────────────────\r\n\r\nlet ws: WebSocket | null = null;\r\nlet connectPromise: Promise<WebSocket> | null = null;\r\nlet requestSeq = 0;\r\nlet queueSeq = 0;\r\n\r\ninterface PendingRequest {\r\n resolve: (data: unknown) => void;\r\n reject: (err: Error) => void;\r\n}\r\nconst pendingRequests = new Map<string, PendingRequest>();\r\n\r\n/** Sessions indexadas por taskId (para roteamento). */\r\nconst sessionsByTaskId = new Map<string, AgentTaskSession>();\r\n\r\n/** Handlers de mensagens vindas pra cada taskId já conhecida. */\r\nconst handlersByTaskId = new Map<string, Set<(msg: any) => void>>();\r\n\r\n/**\r\n * Handlers de sessions que ainda não têm taskId (caso create:true).\r\n * Elas escutam task_update pra capturar o taskId real.\r\n */\r\nconst pendingHandlers = new Map<string, (msg: any) => void>();\r\n\r\n/** Tasks em streaming agora (do streaming_state event). */\r\nconst streamingTaskIds = new Set<string>();\r\n\r\n// ── Helpers ──────────────────────────────────────────────────────────────\r\n\r\nfunction nextRequestId(): string {\r\n return `req-${Date.now()}-${++requestSeq}`;\r\n}\r\n\r\nfunction nextQueueSeq(): number {\r\n return ++queueSeq;\r\n}\r\n\r\nfunction getRawToken(): string {\r\n const config = getConfig();\r\n if (!config.token) {\r\n throw new Error('Agent Chat: token não configurado. Faça login primeiro ou passe token em configureSdkMitra.');\r\n }\r\n return stripBearer(config.token);\r\n}\r\n\r\nfunction resolveProjectId(override?: number | string): number | string {\r\n const config = getConfig();\r\n const pid = override ?? config.projectId;\r\n if (pid == null) {\r\n throw new Error('Agent Chat: projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n return pid;\r\n}\r\n\r\nfunction getWsUrl(): string {\r\n // Fonte única: window.__mitraEnv.agentWsUrl, injetado pelo build-proxy\r\n // do Mitra em todas as apps publicadas pela plataforma. Como a SDK é\r\n // consumida apenas nessas apps, não há outra origem possível.\r\n if (typeof window !== 'undefined') {\r\n const injected = (window as any).__mitraEnv?.agentWsUrl;\r\n if (typeof injected === 'string' && injected) return injected;\r\n }\r\n throw new Error('Agent Chat: window.__mitraEnv.agentWsUrl indisponível. A SDK precisa rodar em uma app publicada pelo Mitra (build-proxy injeta __mitraEnv).');\r\n}\r\n\r\n// ── Connection ───────────────────────────────────────────────────────────\r\n\r\nfunction connect(): Promise<WebSocket> {\r\n if (ws && ws.readyState === WebSocket.OPEN) {\r\n return Promise.resolve(ws);\r\n }\r\n if (connectPromise) return connectPromise;\r\n\r\n const baseUrl = getWsUrl();\r\n const token = getRawToken();\r\n const separator = baseUrl.includes('?') ? '&' : '?';\r\n const url = `${baseUrl}${separator}token=${encodeURIComponent(token)}`;\r\n\r\n connectPromise = new Promise<WebSocket>((resolve, reject) => {\r\n const socket = new WebSocket(url);\r\n let opened = false;\r\n\r\n const timer = setTimeout(() => {\r\n if (!opened) {\r\n try { socket.close(); } catch { /* noop */ }\r\n connectPromise = null;\r\n reject(new Error('Agent Chat: timeout ao conectar no WebSocket'));\r\n }\r\n }, 15000);\r\n\r\n socket.onopen = () => {\r\n opened = true;\r\n clearTimeout(timer);\r\n ws = socket;\r\n connectPromise = null;\r\n resolve(socket);\r\n };\r\n\r\n socket.onerror = () => {\r\n if (!opened) {\r\n clearTimeout(timer);\r\n connectPromise = null;\r\n reject(new Error('Agent Chat: erro ao conectar no WebSocket'));\r\n }\r\n };\r\n\r\n socket.onclose = () => {\r\n if (ws === socket) ws = null;\r\n // Falha todas as requisições pendentes\r\n for (const [id, pending] of pendingRequests) {\r\n pending.reject(new Error('Agent Chat: conexão fechada'));\r\n pendingRequests.delete(id);\r\n }\r\n streamingTaskIds.clear();\r\n };\r\n\r\n socket.onmessage = (event) => routeMessage(event.data);\r\n });\r\n\r\n return connectPromise;\r\n}\r\n\r\n// ── Message routing ──────────────────────────────────────────────────────\r\n\r\nfunction routeMessage(raw: unknown): void {\r\n let msg: any;\r\n try {\r\n msg = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n } catch {\r\n return;\r\n }\r\n if (!msg?.type) return;\r\n\r\n // 1) Request/Response (correlacionado por requestId)\r\n if (msg.type === 'response' && msg.requestId) {\r\n const pending = pendingRequests.get(msg.requestId);\r\n if (!pending) return;\r\n pendingRequests.delete(msg.requestId);\r\n if (msg.ok) pending.resolve(msg.data);\r\n else pending.reject(new Error(msg.error || 'Erro desconhecido'));\r\n return;\r\n }\r\n\r\n // 2) streaming_state (mantém Set de tasks streaming)\r\n if (msg.type === 'streaming_state') {\r\n streamingTaskIds.clear();\r\n const ids = (msg.payload?.streamingTaskIds ?? []) as string[];\r\n for (const id of ids) streamingTaskIds.add(id);\r\n return;\r\n }\r\n\r\n // 3) turn_started / stream_end mantêm o Set sincronizado\r\n if (msg.type === 'turn_started' && msg.taskId) {\r\n streamingTaskIds.add(msg.taskId);\r\n } else if (msg.type === 'stream_end' && msg.taskId) {\r\n streamingTaskIds.delete(msg.taskId);\r\n }\r\n\r\n // 4) Roteamento por taskId — entrega a TODAS as sessions registradas\r\n // pra essa taskId (geralmente uma só, mas cache permite duplicação)\r\n if (msg.taskId) {\r\n const set = handlersByTaskId.get(msg.taskId);\r\n if (set) {\r\n for (const handler of set) handler(msg);\r\n }\r\n }\r\n\r\n // 5) Entrega também a sessions pendentes (sem taskId ainda)\r\n // — apenas task_update pra elas capturarem o taskId real\r\n if (msg.type === 'task_update') {\r\n for (const handler of pendingHandlers.values()) handler(msg);\r\n }\r\n}\r\n\r\n// ── Transport interface (injetado nas sessions) ──────────────────────────\r\n\r\nconst transport = {\r\n async ensureConnected(): Promise<void> {\r\n await connect();\r\n },\r\n\r\n async request<T>(type: string, payload: Record<string, unknown>): Promise<T> {\r\n const socket = await connect();\r\n const requestId = nextRequestId();\r\n return new Promise<T>((resolve, reject) => {\r\n pendingRequests.set(requestId, {\r\n resolve: (data) => resolve(data as T),\r\n reject\r\n });\r\n try {\r\n socket.send(JSON.stringify({ type, requestId, payload }));\r\n } catch (err) {\r\n pendingRequests.delete(requestId);\r\n reject(err instanceof Error ? err : new Error(String(err)));\r\n }\r\n });\r\n },\r\n\r\n send(type: string, payload: Record<string, unknown>, taskId?: string): void {\r\n // Best-effort: conecta se necessário, mas não bloqueia o caller\r\n connect()\r\n .then((socket) => {\r\n const requestId = nextRequestId();\r\n socket.send(JSON.stringify({ type, requestId, payload, taskId }));\r\n })\r\n .catch((err) => {\r\n // eslint-disable-next-line no-console\r\n console.error('[agent-chat] send falhou:', err);\r\n });\r\n },\r\n\r\n resolveProjectId(override?: number | string): number | string {\r\n return resolveProjectId(override);\r\n },\r\n\r\n nextSeq(): number {\r\n return nextQueueSeq();\r\n },\r\n\r\n subscribe(taskId: string, handler: (msg: any) => void): () => void {\r\n if (!handlersByTaskId.has(taskId)) {\r\n handlersByTaskId.set(taskId, new Set());\r\n }\r\n handlersByTaskId.get(taskId)!.add(handler);\r\n return () => {\r\n const set = handlersByTaskId.get(taskId);\r\n if (!set) return;\r\n set.delete(handler);\r\n if (set.size === 0) handlersByTaskId.delete(taskId);\r\n };\r\n },\r\n\r\n subscribePending(sessionId: string, handler: (msg: any) => void): () => void {\r\n pendingHandlers.set(sessionId, handler);\r\n return () => {\r\n pendingHandlers.delete(sessionId);\r\n };\r\n },\r\n\r\n isStreaming(taskId: string): boolean {\r\n return streamingTaskIds.has(taskId);\r\n },\r\n\r\n register(taskId: string, session: AgentTaskSession): void {\r\n sessionsByTaskId.set(taskId, session);\r\n },\r\n\r\n unregister(taskId: string | null, _sessionId: string): void {\r\n if (taskId) sessionsByTaskId.delete(taskId);\r\n // sessions pendentes saem via subscribePending unsubscribe\r\n }\r\n};\r\n\r\n// ── Public API ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Acesso ao transporte WS interno. Usado pelos demais módulos (ex:\r\n * agent-credentials) que precisam fazer request/response sobre o mesmo\r\n * singleton. NÃO faz parte da API pública.\r\n *\r\n * @internal\r\n */\r\nexport function getTransport() {\r\n return transport;\r\n}\r\n\r\n/**\r\n * Gerencia os chats do user (coleção) — espelha `manageAgentCredentialMitra`.\r\n * Operações stateless: listar, renomear, deletar.\r\n *\r\n * @example\r\n * const chats = await manageAgentChatMitra({ action: 'list' });\r\n * await manageAgentChatMitra({ action: 'rename', taskId, name: 'Novo nome' });\r\n * await manageAgentChatMitra({ action: 'delete', taskId });\r\n */\r\nexport function manageAgentChatMitra(options: ManageAgentChatListOptions): Promise<AgentChat[]>;\r\nexport function manageAgentChatMitra(options: ManageAgentChatRenameOptions): Promise<RenameAgentChatResult>;\r\nexport function manageAgentChatMitra(options: ManageAgentChatDeleteOptions): Promise<DeleteAgentChatResult>;\r\nexport function manageAgentChatMitra(options: ManageAgentChatOptions): Promise<any> {\r\n if (isNewWorld()) throw new Error('manageAgentChatMitra ainda não suportado no novo Mitra.');\r\n if (options.action === 'list') {\r\n const projectId = resolveProjectId(options.projectId);\r\n return transport.request<AgentChat[]>('chats', { action: 'list', projectId });\r\n }\r\n if (options.action === 'rename') {\r\n if (!options.taskId) throw new Error('manageAgentChatMitra(rename): taskId obrigatório.');\r\n if (!options.name?.trim()) throw new Error('manageAgentChatMitra(rename): name obrigatório.');\r\n return transport.request('chats', { action: 'rename', taskId: options.taskId, name: options.name.trim() });\r\n }\r\n if (options.action === 'delete') {\r\n if (!options.taskId) throw new Error('manageAgentChatMitra(delete): taskId obrigatório.');\r\n return transport.request('chats', { action: 'delete', taskId: options.taskId });\r\n }\r\n throw new Error(`manageAgentChatMitra: action inválida (${(options as ManageAgentChatOptions).action}).`);\r\n}\r\n\r\n/**\r\n * Abre um handle de chat (session). Use:\r\n * - `{ create: true }` para iniciar um chat novo\r\n * - `{ taskId: 'X' }` para abrir um chat existente\r\n *\r\n * A session expõe histórico, streaming, fila, cancel e eventos. Se a\r\n * mesma taskId for aberta duas vezes, retorna a MESMA instância (cache).\r\n */\r\nexport function getAgentTaskMitra(options: GetAgentTaskOptions): IAgentTaskSession {\r\n if (isNewWorld()) throw new Error('getAgentTaskMitra ainda não suportado no novo Mitra.');\r\n if ('taskId' in options && options.taskId) {\r\n const cached = sessionsByTaskId.get(options.taskId);\r\n if (cached) return cached as unknown as IAgentTaskSession;\r\n return new AgentTaskSession(\r\n { kind: 'existing', taskId: options.taskId },\r\n transport\r\n );\r\n }\r\n if ('create' in options && options.create) {\r\n return new AgentTaskSession(\r\n {\r\n kind: 'new',\r\n projectId: options.projectId,\r\n agentType: options.agentType,\r\n modelId: options.modelId,\r\n name: options.name\r\n },\r\n transport\r\n );\r\n }\r\n throw new Error('getAgentTaskMitra: passe { create: true } ou { taskId }.');\r\n}\r\n\r\n","/**\r\n * Mitra Interactions SDK — Agent Credentials\r\n *\r\n * Função ÚNICA `manageAgentCredentialMitra` sobre /sdk-ws para todas as\r\n * operações de credencial do agente:\r\n * - API keys (8 providers: anthropic, openai, gemini, kimi, minimax, glm, qwen, openrouter)\r\n * - Subscriptions OAuth (Claude paste-código / OpenAI device flow via Codex)\r\n *\r\n * Actions de baixo nível (RPC direto contra o backend):\r\n * status | remove | list | list_models | validate | save\r\n * oauth_start | oauth_exchange | device_start | device_poll | device_cancel\r\n *\r\n * Actions de alto nível (orquestradas na SDK — o app controla UI/popup/timing):\r\n * auth — inicia o fluxo e retorna o que a UI mostra (sem efeito colateral\r\n * de janela). claude → { authUrl, state }; codex → { userCode,\r\n * verificationUrl, pollId }.\r\n * connect — finaliza/salva. claude → passa { code, state }; codex → passa\r\n * { pollId } e a SDK faz o polling até autorizar.\r\n *\r\n * Fluxo típico (sem callbacks, sem redirect, sem callback page):\r\n * const { authUrl, state } = await manageAgentCredentialMitra({ action:'auth', target:'claude' });\r\n * // app abre authUrl + coleta o código do user\r\n * await manageAgentCredentialMitra({ action:'connect', target:'claude', code, state });\r\n *\r\n * const { userCode, verificationUrl, pollId } = await manageAgentCredentialMitra({ action:'auth', target:'codex' });\r\n * // app mostra \"abra {verificationUrl}, digite {userCode}\"\r\n * await manageAgentCredentialMitra({ action:'connect', target:'codex', pollId });\r\n *\r\n * SEGURANÇA: o token de subscription NUNCA volta cru pro cliente. É salvo\r\n * server-side (Firestore) e injetado no sandbox E2B direto de lá.\r\n */\r\n\r\nimport { getTransport } from './agent-chat';\r\nimport { isNewWorld } from './auth';\r\nimport type {\r\n ManageAgentCredentialOptions,\r\n ManageAgentCredentialResult,\r\n AuthAgentCredentialOptions,\r\n AuthAgentCredentialResult,\r\n ConnectAgentCredentialOptions,\r\n ConnectAgentSubscriptionResult,\r\n CredentialAction,\r\n CredentialTarget,\r\n ConnectableSubscriptionTarget,\r\n} from './types';\r\n\r\n// PKCE verifier guardado entre auth(claude) e connect(claude), indexado por\r\n// state. Assim o app só lida com { code, state } — nunca vê o codeVerifier.\r\nconst pendingVerifiers = new Map<string, string>();\r\n\r\n// ── API pública (overloads) ────────────────────────────────────────────────\r\n\r\n/**\r\n * Inicia um fluxo de subscription. Não abre janelas — retorna os dados pra UI:\r\n * claude → { authUrl, state } codex → { userCode, verificationUrl, pollId }\r\n */\r\nexport function manageAgentCredentialMitra(\r\n options: AuthAgentCredentialOptions\r\n): Promise<AuthAgentCredentialResult>;\r\n\r\n/**\r\n * Finaliza/salva uma subscription:\r\n * claude → { code, state } codex → { pollId } (a SDK faz o polling)\r\n */\r\nexport function manageAgentCredentialMitra(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult>;\r\n\r\n/**\r\n * RPC direto contra o backend. Retorno depende de (action, target).\r\n *\r\n * @example\r\n * await manageAgentCredentialMitra({ action: 'list' });\r\n * await manageAgentCredentialMitra({ action: 'list_models' });\r\n * await manageAgentCredentialMitra({ action: 'status', target: 'anthropic' });\r\n * await manageAgentCredentialMitra({ action: 'validate', target: 'openai', key: 'sk-...' });\r\n * await manageAgentCredentialMitra({ action: 'save', target: 'glm', key: '...' });\r\n * await manageAgentCredentialMitra({ action: 'remove', target: 'claude' });\r\n */\r\nexport function manageAgentCredentialMitra<R = ManageAgentCredentialResult>(\r\n options: ManageAgentCredentialOptions\r\n): Promise<R>;\r\n\r\nexport function manageAgentCredentialMitra(\r\n options: ManageAgentCredentialOptions | AuthAgentCredentialOptions | ConnectAgentCredentialOptions\r\n): Promise<any> {\r\n if (isNewWorld()) throw new Error('manageAgentCredentialMitra ainda não suportado no novo Mitra.');\r\n if (options.action === 'auth') return authSubscription(options as AuthAgentCredentialOptions);\r\n if (options.action === 'connect') return connectSubscription(options as ConnectAgentCredentialOptions);\r\n return rpc(options as ManageAgentCredentialOptions);\r\n}\r\n\r\n// ── RPC de baixo nível ─────────────────────────────────────────────────────\r\n\r\nfunction rpc<R>(options: ManageAgentCredentialOptions): Promise<R> {\r\n const transport = getTransport();\r\n const { action, target, ...rest } = options as ManageAgentCredentialOptions & Record<string, unknown>;\r\n\r\n // Backend espera `data` com os fields action-específicos. Empacotamos tudo\r\n // que não é action/target em data (descartando undefined).\r\n const data: Record<string, unknown> = {};\r\n for (const [k, v] of Object.entries(rest)) {\r\n if (v !== undefined) data[k] = v;\r\n }\r\n\r\n return transport.request<R>('credentials', { action, target, data });\r\n}\r\n\r\n// ── auth: inicia o fluxo ───────────────────────────────────────────────────\r\n\r\nasync function authSubscription(\r\n options: AuthAgentCredentialOptions\r\n): Promise<AuthAgentCredentialResult> {\r\n const { target } = options;\r\n\r\n if (target === 'claude') {\r\n const start = await rpc<{ authUrl: string; state: string; codeVerifier: string }>({\r\n action: 'oauth_start',\r\n target: 'claude'\r\n });\r\n pendingVerifiers.set(start.state, start.codeVerifier);\r\n return { target: 'claude', authUrl: start.authUrl, state: start.state };\r\n }\r\n\r\n if (target === 'codex') {\r\n const start = await rpc<{ pollId: string; userCode: string | null; verificationUrl: string | null }>({\r\n action: 'device_start',\r\n target: 'codex'\r\n });\r\n return {\r\n target: 'codex',\r\n userCode: start.userCode,\r\n verificationUrl: start.verificationUrl,\r\n pollId: start.pollId\r\n };\r\n }\r\n\r\n throw new Error(`manageAgentCredentialMitra(auth): target inválido (${target}). Use 'claude' ou 'codex'.`);\r\n}\r\n\r\n// ── connect: finaliza/salva ─────────────────────────────────────────────────\r\n\r\nfunction connectSubscription(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult> {\r\n const { target } = options;\r\n if (target === 'claude') return connectClaude(options);\r\n if (target === 'codex') return connectCodex(options);\r\n throw new Error(`manageAgentCredentialMitra(connect): target inválido (${target}). Use 'claude' ou 'codex'.`);\r\n}\r\n\r\nasync function connectClaude(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult> {\r\n const { code, state } = options;\r\n if (!code || !state) {\r\n throw new Error('manageAgentCredentialMitra(connect, claude): code e state são obrigatórios (state vem de auth).');\r\n }\r\n const codeVerifier = pendingVerifiers.get(state);\r\n\r\n const exchange = await rpc<{\r\n success: boolean;\r\n expiresAt: number;\r\n account: { email: string; orgName: string } | null;\r\n }>({\r\n action: 'oauth_exchange',\r\n target: 'claude',\r\n code,\r\n state,\r\n // Se a SDK ainda tem o verifier (mesmo runtime), envia; senão o backend\r\n // resolve via state (pkceStore). Cobre os dois caminhos.\r\n ...(codeVerifier ? { codeVerifier } : {})\r\n });\r\n\r\n pendingVerifiers.delete(state);\r\n\r\n return {\r\n target: 'claude',\r\n success: exchange.success === true,\r\n expiresAt: exchange.expiresAt,\r\n account: exchange.account ?? null\r\n };\r\n}\r\n\r\nasync function connectCodex(\r\n options: ConnectAgentCredentialOptions\r\n): Promise<ConnectAgentSubscriptionResult> {\r\n const { pollId } = options;\r\n if (!pollId) {\r\n throw new Error('manageAgentCredentialMitra(connect, codex): pollId é obrigatório (vem de auth).');\r\n }\r\n\r\n const pollInterval = options.pollIntervalMs ?? 2000;\r\n const deadline = Date.now() + (options.deviceTimeoutMs ?? 15 * 60_000);\r\n\r\n while (Date.now() < deadline) {\r\n const result = await rpc<{\r\n status: 'starting' | 'waiting_for_user' | 'completed' | 'failed' | 'expired' | 'not_found';\r\n error?: string | null;\r\n }>({ action: 'device_poll', target: 'codex', pollId });\r\n\r\n if (result.status === 'completed') {\r\n return { target: 'codex', success: true };\r\n }\r\n if (result.status === 'failed' || result.status === 'expired' || result.status === 'not_found') {\r\n throw new Error(`manageAgentCredentialMitra(connect, codex): ${result.status}${result.error ? ` — ${result.error}` : ''}`);\r\n }\r\n await sleep(pollInterval);\r\n }\r\n\r\n await rpc({ action: 'device_cancel', target: 'codex', pollId }).catch(() => {});\r\n throw new Error('manageAgentCredentialMitra(connect, codex): timeout.');\r\n}\r\n\r\n// ── Helpers ──────────────────────────────────────────────────────────────\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n return new Promise((r) => setTimeout(r, ms));\r\n}\r\n\r\n// Re-exports utilitários para o caller\r\nexport type {\r\n ManageAgentCredentialOptions,\r\n ManageAgentCredentialResult,\r\n AuthAgentCredentialOptions,\r\n AuthAgentCredentialResult,\r\n ConnectAgentCredentialOptions,\r\n ConnectAgentSubscriptionResult,\r\n CredentialAction,\r\n CredentialTarget,\r\n ConnectableSubscriptionTarget\r\n};\r\n","/**\r\n * Mitra Interactions SDK - Instance\r\n *\r\n * Permite múltiplas instâncias configuradas independentemente.\r\n */\r\n\r\nimport type { MitraConfig } from './config';\r\nimport { stripBearer } from './config';\r\nimport { refreshTokenSilently } from './auth';\r\nimport { openChatMitra, closeChatMitra } from './chat';\r\nimport {\r\n sendPasswordResetCodeMitra,\r\n validatePasswordResetCodeMitra,\r\n resetPasswordMitra\r\n} from './password-reset';\r\nimport {\r\n getAgentTaskMitra,\r\n manageAgentChatMitra\r\n} from './agent-chat';\r\nimport { manageAgentCredentialMitra } from './agent-credentials';\r\nimport type { LoginResponse } from './types';\r\nimport type {\r\n ExecuteDataLoaderOptions,\r\n ExecuteDataLoaderResponse,\r\n ExecuteDbActionOptions,\r\n ExecuteDbActionResponse,\r\n SetFileStatusOptions,\r\n SetFileStatusResponse,\r\n SetVariableOptions,\r\n SetVariableResponse,\r\n ListVariablesOptions,\r\n ListVariablesResponse,\r\n GetVariableOptions,\r\n GetVariableResponse,\r\n RunActionOptions,\r\n RunActionResponse,\r\n ExecuteServerFunctionOptions,\r\n ExecuteServerFunctionResponse,\r\n ExecuteServerFunctionAsyncOptions,\r\n ExecuteServerFunctionAsyncResponse,\r\n ExecutePublicServerFunctionOptions,\r\n ExecutePublicServerFunctionResponse,\r\n ExecutePublicServerFunctionAsyncResponse,\r\n GetPublicServerFunctionExecutionOptions,\r\n GetPublicServerFunctionExecutionResponse,\r\n CallIntegrationOptions,\r\n CallIntegrationResponse,\r\n ListIntegrationsOptions,\r\n IntegrationResponse,\r\n StopServerFunctionExecutionOptions,\r\n StopServerFunctionExecutionResponse,\r\n ListRecordsOptions,\r\n ListRecordsResponse,\r\n GetRecordOptions,\r\n CreateRecordOptions,\r\n UpdateRecordOptions,\r\n PatchRecordOptions,\r\n DeleteRecordOptions,\r\n CreateRecordsBatchOptions,\r\n UploadFileOptions,\r\n UploadFileResponse,\r\n // Profile Management\r\n ListProfilesOptions,\r\n ListProfilesResponse,\r\n GetProfileDetailsOptions,\r\n GetProfileDetailsResponse,\r\n CreateProfileOptions,\r\n CreateProfileResponse,\r\n UpdateProfileOptions,\r\n UpdateProfileResponse,\r\n DeleteProfileOptions,\r\n DeleteProfileResponse,\r\n SetProfileUsersOptions,\r\n SetProfileSelectTablesOptions,\r\n SetProfileDmlTablesOptions,\r\n SetProfileActionsOptions,\r\n SetProfileScreensOptions,\r\n SetProfileServerFunctionsOptions,\r\n SetProfilePermissionResponse,\r\n // Password Reset\r\n SendPasswordResetCodeOptions,\r\n ValidatePasswordResetCodeOptions,\r\n ResetPasswordOptions,\r\n // Agent Chat\r\n GetAgentTaskOptions,\r\n AgentTaskSession,\r\n ManageAgentChatOptions,\r\n ManageAgentCredentialOptions,\r\n ConnectAgentCredentialOptions\r\n} from './types';\r\n\r\n// ── HTTP Helpers ──────────────────────────────────────────────────────\r\n\r\nfunction formatToken(token: string): string {\r\n return `Bearer ${stripBearer(token)}`;\r\n}\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\nfunction buildQuery(params: Record<string, unknown>): string {\r\n return Object.entries(params)\r\n .filter(([, v]) => v !== undefined && v !== null)\r\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\r\n .join('&');\r\n}\r\n\r\n// ── MitraInstance ─────────────────────────────────────────────────────\r\n\r\nexport interface MitraInstance {\r\n readonly config: MitraConfig;\r\n\r\n // Services\r\n executeDataLoader(options: ExecuteDataLoaderOptions): Promise<ExecuteDataLoaderResponse>;\r\n executeDbAction(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse>;\r\n setFileStatus(options: SetFileStatusOptions): Promise<SetFileStatusResponse>;\r\n setVariable(options: SetVariableOptions): Promise<SetVariableResponse>;\r\n listVariables(options?: ListVariablesOptions): Promise<ListVariablesResponse>;\r\n getVariable(options: GetVariableOptions): Promise<GetVariableResponse>;\r\n runAction(options: RunActionOptions): Promise<RunActionResponse>;\r\n executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;\r\n executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;\r\n executePublicServerFunction(options: ExecutePublicServerFunctionOptions): Promise<ExecutePublicServerFunctionResponse>;\r\n executePublicServerFunctionAsync(options: ExecutePublicServerFunctionOptions): Promise<ExecutePublicServerFunctionAsyncResponse>;\r\n getPublicServerFunctionExecution(options: GetPublicServerFunctionExecutionOptions): Promise<GetPublicServerFunctionExecutionResponse>;\r\n stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;\r\n\r\n // Upload de Arquivos\r\n uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;\r\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\r\n\r\n // Integrations\r\n listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;\r\n callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;\r\n\r\n // Dynamic Schema CRUD\r\n listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;\r\n getRecord(options: GetRecordOptions): Promise<Record<string, any>>;\r\n createRecord(options: CreateRecordOptions): Promise<Record<string, any>>;\r\n updateRecord(options: UpdateRecordOptions): Promise<Record<string, any>>;\r\n patchRecord(options: PatchRecordOptions): Promise<Record<string, any>>;\r\n deleteRecord(options: DeleteRecordOptions): Promise<void>;\r\n createRecordsBatch(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;\r\n\r\n // Profile Management\r\n listProfiles(options?: ListProfilesOptions): Promise<ListProfilesResponse>;\r\n getProfileDetails(options: GetProfileDetailsOptions): Promise<GetProfileDetailsResponse>;\r\n createProfile(options: CreateProfileOptions): Promise<CreateProfileResponse>;\r\n updateProfile(options: UpdateProfileOptions): Promise<UpdateProfileResponse>;\r\n deleteProfile(options: DeleteProfileOptions): Promise<DeleteProfileResponse>;\r\n setProfileUsers(options: SetProfileUsersOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileSelectTables(options: SetProfileSelectTablesOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileDmlTables(options: SetProfileDmlTablesOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileActions(options: SetProfileActionsOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileScreens(options: SetProfileScreensOptions): Promise<SetProfilePermissionResponse>;\r\n setProfileServerFunctions(options: SetProfileServerFunctionsOptions): Promise<SetProfilePermissionResponse>;\r\n\r\n // Password Reset (pré-login)\r\n sendPasswordResetCode(options: SendPasswordResetCodeOptions): Promise<Record<string, unknown>>;\r\n validatePasswordResetCode(options: ValidatePasswordResetCodeOptions): Promise<Record<string, unknown>>;\r\n resetPassword(options: ResetPasswordOptions): Promise<Record<string, unknown>>;\r\n\r\n // Agent Chat (embedded)\r\n getAgentTask(options: GetAgentTaskOptions): AgentTaskSession;\r\n manageAgentChat(options: ManageAgentChatOptions): Promise<unknown>;\r\n manageAgentCredential(options: ManageAgentCredentialOptions | ConnectAgentCredentialOptions): Promise<unknown>;\r\n\r\n // Chat\r\n openChat(): void;\r\n closeChat(): void;\r\n}\r\n\r\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\r\n let _config: MitraConfig = {\r\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\r\n token: initialConfig.token ? stripBearer(initialConfig.token) : '',\r\n refreshToken: initialConfig.refreshToken,\r\n integrationURL: initialConfig.integrationURL,\r\n authUrl: initialConfig.authUrl,\r\n projectId: initialConfig.projectId\r\n };\r\n\r\n // ── Internal helpers ──\r\n\r\n function resolveProjectId(projectId?: number | string): number | string {\r\n if (projectId != null) return projectId;\r\n if (_config.projectId != null) return _config.projectId;\r\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n function authHeaders(): Record<string, string> {\r\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\r\n if (_config.token) headers['Authorization'] = formatToken(_config.token);\r\n return headers;\r\n }\r\n\r\n async function handleResponse<T>(response: Response): Promise<T> {\r\n const text = await response.text();\r\n const data = text ? JSON.parse(text) : null;\r\n if (!response.ok) {\r\n const base = data?.message || data?.error || `HTTP ${response.status}`;\r\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\r\n throw { message: msg, status: response.status, details: data };\r\n }\r\n return data as T;\r\n }\r\n\r\n // ── Token refresh silencioso ──\r\n\r\n async function tryRefreshToken(): Promise<boolean> {\r\n if (!_config.token || _config.projectId == null || !_config.baseURL) return false;\r\n\r\n // 1. Tenta refresh direto via API (sem HTML)\r\n try {\r\n const baseURL = _config.baseURL.replace(/\\/+$/, '');\r\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${_config.projectId}`, {\r\n method: 'GET',\r\n headers: { 'Authorization': formatToken(_config.token) }\r\n });\r\n\r\n if (resp.ok) {\r\n const data = await resp.json();\r\n if (data.token) {\r\n const newToken = `Bearer ${stripBearer(data.token)}`;\r\n const session: LoginResponse = {\r\n token: newToken,\r\n baseURL: data.merge?.backURL || _config.baseURL,\r\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\r\n };\r\n _config = { ..._config, token: stripBearer(session.token) };\r\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\r\n return true;\r\n }\r\n }\r\n } catch {\r\n // Falhou — tenta fallback via iframe\r\n }\r\n\r\n // 2. Fallback: refreshTokenSilently (router decide entre iframe legacy ou API novo Mitra)\r\n if (!_config.authUrl || typeof window === 'undefined') return false;\r\n\r\n try {\r\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId!);\r\n _config = {\r\n ..._config,\r\n token: stripBearer(session.token),\r\n ...(session.refreshToken !== undefined ? { refreshToken: session.refreshToken } : {})\r\n };\r\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n async function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, init);\r\n\r\n if (response.status === 403) {\r\n const refreshed = await tryRefreshToken();\r\n if (refreshed) {\r\n const newHeaders = { ...authHeaders() };\r\n const oldHeaders = init.headers as Record<string, string> | undefined;\r\n if (oldHeaders) {\r\n for (const [k, v] of Object.entries(oldHeaders)) {\r\n if (k !== 'Authorization') newHeaders[k] = v;\r\n }\r\n }\r\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\r\n return handleResponse(retryResponse);\r\n }\r\n }\r\n\r\n return handleResponse(response);\r\n }\r\n\r\n // HTTP main API (baseURL)\r\n async function request<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\r\n let url = `${_config.baseURL}${endpoint}`;\r\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\r\n return fetchWithRefresh(url, {\r\n method, headers: authHeaders(),\r\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\r\n });\r\n }\r\n\r\n // HTTP upload (multipart/form-data)\r\n async function requestUpload<T>(endpoint: string, formData: FormData): Promise<T> {\r\n const url = `${_config.baseURL}${endpoint}`;\r\n const headers: Record<string, string> = {};\r\n if (_config.token) headers['Authorization'] = formatToken(_config.token);\r\n return fetchWithRefresh(url, {\r\n method: 'POST',\r\n headers,\r\n body: formData\r\n });\r\n }\r\n\r\n // HTTP tenant (baseURL + X-TenantID)\r\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number | string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\r\n let url = `${_config.baseURL}${endpoint}`;\r\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\r\n return fetchWithRefresh(url, {\r\n method, headers: { ...authHeaders(), 'X-TenantID': String(tenantId) },\r\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\r\n });\r\n }\r\n\r\n // ── Instance ──\r\n\r\n const instance: MitraInstance & { _updateToken(token: string): void } = {\r\n get config() { return _config; },\r\n\r\n /** @internal — usado pelo MitraSDK para propagar token refresh */\r\n _updateToken(token: string) {\r\n _config = { ..._config, token };\r\n },\r\n\r\n // Services\r\n async executeDataLoader(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dataLoaderId: options.dataLoaderId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeDataLoader', { body });\r\n },\r\n\r\n async executeDbAction(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dbActionId: options.dbActionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeDbAction', { body });\r\n },\r\n\r\n async setFileStatus(options) {\r\n return request('POST', '/interactions/setFileStatus', {\r\n body: { projectId: resolveProjectId(options.projectId), fileName: options.fileName, targetPath: options.targetPath }\r\n });\r\n },\r\n\r\n async setVariable(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), key: options.key };\r\n if (options.value !== undefined) body.value = options.value;\r\n return request('POST', '/interactions/setVariable', { body });\r\n },\r\n\r\n async listVariables(options = {}) {\r\n return request('GET', '/interactions/listVariables', { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async getVariable(options) {\r\n return request('GET', '/interactions/getVariable', { params: { projectId: resolveProjectId(options.projectId), key: options.key } });\r\n },\r\n\r\n async runAction(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), actionId: options.actionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/runAction', { body });\r\n },\r\n\r\n async executeServerFunction(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeServerFunction', { body });\r\n },\r\n\r\n async executeServerFunctionAsync(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\r\n if (options.input !== undefined) body.input = options.input;\r\n return request('POST', '/interactions/executeServerFunctionAsync', { body });\r\n },\r\n\r\n async executePublicServerFunction(options) {\r\n const { projectId, serverFunctionId, input } = options;\r\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n return handleResponse<ExecutePublicServerFunctionResponse>(response);\r\n },\r\n\r\n async executePublicServerFunctionAsync(options) {\r\n const { projectId, serverFunctionId, input } = options;\r\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n return handleResponse<ExecutePublicServerFunctionAsyncResponse>(response);\r\n },\r\n\r\n async getPublicServerFunctionExecution(options) {\r\n const { projectId, executionId } = options;\r\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n return handleResponse<GetPublicServerFunctionExecutionResponse>(response);\r\n },\r\n\r\n async stopServerFunctionExecution(options) {\r\n return request('POST', '/interactions/stopServerFunctionExecution', {\r\n body: { projectId: resolveProjectId(options.projectId), executionId: options.executionId }\r\n });\r\n },\r\n\r\n // Upload de Arquivos\r\n async uploadFilePublic(options: UploadFileOptions) {\r\n const formData = new FormData();\r\n formData.append('file', options.file);\r\n formData.append('projectId', String(resolveProjectId(options.projectId)));\r\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\r\n return requestUpload('/interactions/uploadFilePublic', formData);\r\n },\r\n\r\n async uploadFileLoadable(options: UploadFileOptions) {\r\n const formData = new FormData();\r\n formData.append('file', options.file);\r\n formData.append('projectId', String(resolveProjectId(options.projectId)));\r\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\r\n return requestUpload('/interactions/uploadFileLoadable', formData);\r\n },\r\n\r\n // Integrations\r\n async listIntegrations(options = {}) {\r\n return request('GET', '/interactions/integrations', { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async callIntegration(options) {\r\n const body: Record<string, unknown> = {\r\n integrationSlug: options.connection,\r\n projectId: resolveProjectId(options.projectId),\r\n method: options.method\r\n };\r\n if (options.endpoint !== undefined) body.endpoint = options.endpoint;\r\n if (options.params !== undefined) body.params = options.params;\r\n if (options.body !== undefined) body.body = options.body;\r\n return request('POST', '/interactions/integrations/call', { body });\r\n },\r\n\r\n // Dynamic Schema CRUD\r\n async listRecords(options) {\r\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('GET', `/interactions/records/${tableName}`, pid, { params: { page, size, jdbcConnectionConfigId, ...filters } });\r\n },\r\n\r\n async getRecord(options) {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('GET', `/interactions/records/${tableName}/${id}`, pid, { params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async createRecord(options) {\r\n const { tableName, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('POST', `/interactions/records/${tableName}`, pid, { body: data, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async updateRecord(options) {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('PUT', `/interactions/records/${tableName}/${id}`, pid, { body: data, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async patchRecord(options) {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('PATCH', `/interactions/records/${tableName}/${id}`, pid, { body: data, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async deleteRecord(options) {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('DELETE', `/interactions/records/${tableName}/${id}`, pid, { params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n async createRecordsBatch(options) {\r\n const { tableName, records, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return requestTenant('POST', `/interactions/records/${tableName}/batch`, pid, { body: records, params: { jdbcConnectionConfigId } });\r\n },\r\n\r\n // Profile Management\r\n async listProfiles(options = {}) {\r\n return request('GET', '/interactions/profiles', { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async getProfileDetails(options) {\r\n return request('GET', `/interactions/profiles/${options.profileId}`, { params: { projectId: resolveProjectId(options.projectId) } });\r\n },\r\n\r\n async createProfile(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), name: options.name };\r\n if (options.color !== undefined) body.color = options.color;\r\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\r\n return request('POST', '/interactions/profiles', { body });\r\n },\r\n\r\n async updateProfile(options) {\r\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), profileId: options.profileId };\r\n if (options.name !== undefined) body.name = options.name;\r\n if (options.color !== undefined) body.color = options.color;\r\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\r\n return request('PUT', '/interactions/profiles', { body });\r\n },\r\n\r\n async deleteProfile(options) {\r\n return request('DELETE', '/interactions/profiles', { body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId } });\r\n },\r\n\r\n async setProfileUsers(options) {\r\n return request('POST', '/interactions/profiles/users', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, userIds: options.userIds }\r\n });\r\n },\r\n\r\n async setProfileSelectTables(options) {\r\n return request('POST', '/interactions/profiles/selectTables', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, tables: options.tables }\r\n });\r\n },\r\n\r\n async setProfileDmlTables(options) {\r\n return request('POST', '/interactions/profiles/dmlTables', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, tables: options.tables }\r\n });\r\n },\r\n\r\n async setProfileActions(options) {\r\n return request('POST', '/interactions/profiles/actions', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, actionIds: options.actionIds }\r\n });\r\n },\r\n\r\n async setProfileScreens(options) {\r\n return request('POST', '/interactions/profiles/screens', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, screenIds: options.screenIds }\r\n });\r\n },\r\n\r\n async setProfileServerFunctions(options) {\r\n return request('POST', '/interactions/profiles/serverFunctions', {\r\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, serverFunctionIds: options.serverFunctionIds }\r\n });\r\n },\r\n\r\n // Password Reset (pré-login)\r\n sendPasswordResetCode(options: SendPasswordResetCodeOptions) {\r\n return sendPasswordResetCodeMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\r\n },\r\n validatePasswordResetCode(options: ValidatePasswordResetCodeOptions) {\r\n return validatePasswordResetCodeMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\r\n },\r\n resetPassword(options: ResetPasswordOptions) {\r\n return resetPasswordMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\r\n },\r\n\r\n // Agent Chat (embedded)\r\n getAgentTask(options: GetAgentTaskOptions) { return getAgentTaskMitra(options); },\r\n manageAgentChat(options: any) { return manageAgentChatMitra(options); },\r\n manageAgentCredential(options: any) { return manageAgentCredentialMitra(options); },\r\n\r\n // Chat\r\n openChat() { openChatMitra(); },\r\n closeChat() { closeChatMitra(); }\r\n };\r\n\r\n return instance;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Configuração\r\n */\r\n\r\nimport { createMitraInstance, type MitraInstance } from './instance';\r\n\r\nexport interface MitraConfig {\r\n /** URL base da API (ex: https://api.mitra.com). Opcional se houver window.__mitraEnv.apiBaseURL (build-proxy). */\r\n baseURL?: string;\r\n /** Token JWT para autenticação (opcional para Server Functions públicas) */\r\n token?: string;\r\n /** Refresh token (novo Mitra). Necessário para refresh automático no novo mundo. */\r\n refreshToken?: string;\r\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\r\n integrationURL?: string;\r\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\r\n authUrl?: string;\r\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\r\n projectId?: number | string;\r\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\r\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\r\n}\r\n\r\nlet globalConfig: MitraConfig | null = null;\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Remove todos os prefixos \"Bearer \" do início do token (case-insensitive,\r\n * repetidos) e espaços nas pontas. Garante que o token seja sempre guardado\r\n * cru, evitando \"Bearer Bearer ...\" quando o consumidor já passa o prefixo.\r\n */\r\nexport function stripBearer(token: string): string {\r\n let t = token.trim();\r\n while (/^bearer\\s+/i.test(t)) {\r\n t = t.replace(/^bearer\\s+/i, '').trim();\r\n }\r\n return t;\r\n}\r\n\r\n// ── API Pública ──────────────────────────────────────────────────────\r\n\r\n/**\r\n * Lê configuração injetada pelo build-proxy do Mitra em apps publicadas.\r\n * Quando a SDK roda dentro de uma app publicada pela plataforma, todas\r\n * as URLs de infra já estão disponíveis em `window.__mitraEnv` — não há\r\n * necessidade de o consumidor passá-las manualmente.\r\n */\r\nfunction readInjectedEnv(): Partial<MitraConfig> {\r\n if (typeof window === 'undefined') return {};\r\n const env = (window as any).__mitraEnv;\r\n if (!env || typeof env !== 'object') return {};\r\n const out: Partial<MitraConfig> = {};\r\n if (typeof env.apiBaseURL === 'string' && env.apiBaseURL) out.baseURL = env.apiBaseURL;\r\n if (typeof env.integrationURL === 'string' && env.integrationURL) out.integrationURL = env.integrationURL;\r\n if (typeof env.authUrl === 'string' && env.authUrl) out.authUrl = env.authUrl;\r\n return out;\r\n}\r\n\r\n/**\r\n * Configura o SDK globalmente e retorna uma instância configurada.\r\n *\r\n * Em apps publicadas pelo Mitra (window.__mitraEnv presente), nenhum campo\r\n * precisa ser passado — todas as URLs vêm da injeção do build-proxy.\r\n * Em outros contextos, baseURL ainda é necessário (manual ou via login).\r\n */\r\nexport function configureSdkMitra(config: Partial<MitraConfig> = {}): MitraInstance {\r\n const injected = readInjectedEnv();\r\n const merged: MitraConfig = { ...injected, ...config };\r\n\r\n if (!merged.baseURL) {\r\n throw new Error('baseURL é obrigatório. Passe em configureSdkMitra({ baseURL }), faça login para receber via sdk-auth, ou rode em uma app publicada pelo Mitra (window.__mitraEnv).');\r\n }\r\n\r\n // Normaliza o token (remove \"Bearer \" duplicado/extra) antes de guardar.\r\n if (merged.token != null) merged.token = stripBearer(merged.token);\r\n\r\n globalConfig = {\r\n ...merged,\r\n baseURL: merged.baseURL.replace(/\\/+$/, '')\r\n };\r\n\r\n if (merged.token && typeof window !== 'undefined') {\r\n // Init chat in background (if build-proxy injected the script)\r\n const chat = (window as any).__mitraChat;\r\n if (chat) chat.init(merged.token);\r\n }\r\n\r\n return createMitraInstance(globalConfig);\r\n}\r\n\r\n/**\r\n * Obtém a configuração atual\r\n */\r\nexport function getConfig(): MitraConfig {\r\n if (!globalConfig) {\r\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\r\n }\r\n return globalConfig;\r\n}\r\n\r\n/**\r\n * Verifica se o SDK está configurado\r\n */\r\nexport function isConfigured(): boolean {\r\n return globalConfig !== null;\r\n}\r\n\r\n/**\r\n * Atualiza o token global (usado internamente pelo refresh automático).\r\n * Aceita refreshToken opcional (novo Mitra).\r\n */\r\nexport function updateGlobalToken(token: string, refreshToken?: string): void {\r\n if (globalConfig) {\r\n globalConfig = {\r\n ...globalConfig,\r\n token: stripBearer(token),\r\n ...(refreshToken !== undefined ? { refreshToken } : {})\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nexport function resolveProjectId(projectId?: number | string): number | string {\r\n if (projectId != null) return projectId;\r\n if (globalConfig?.projectId != null) return globalConfig.projectId;\r\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n}\r\n"]}
|