mitra-interactions-sdk 1.0.58 → 1.0.59

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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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":["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): 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,\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 } {\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): 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,\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","/**\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\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 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 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 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 } 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 token.startsWith('Bearer ') ? token : `Bearer ${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 = data.token.startsWith('Bearer ') ? data.token : `Bearer ${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\r\n }\r\n\r\n // 2. Fallback: iframe invisível (pra SSO que depende de cookie de sessão do provider)\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);\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,\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, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('GET', endpoint, tenantId, { params });\r\n },\r\n post<T>(endpoint: string, tenantId: number, 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, 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, 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, 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\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): number;\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;\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;\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 } from './config';\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 config.token.startsWith('Bearer ') ? config.token.slice(7) : config.token;\r\n}\r\n\r\nfunction resolveProjectId(override?: number): number {\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): number {\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 (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 ('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 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 (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 { 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 token.startsWith('Bearer ') ? token : `Bearer ${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 || '',\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): number {\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 = data.token.startsWith('Bearer ') ? data.token : `Bearer ${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: 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: iframe (pra SSO com cookie de sessão do provider)\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 = { ..._config, token: session.token };\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, 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 /** 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;\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// ── 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 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 */\r\nexport function updateGlobalToken(token: string): void {\r\n if (globalConfig) {\r\n globalConfig = { ...globalConfig, token };\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): number {\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.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":["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): 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,\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 } {\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): 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,\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","/**\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\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 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 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 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\r\n }\r\n\r\n // 2. Fallback: iframe invisível (pra SSO que depende de cookie de sessão do provider)\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);\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,\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, params?: Record<string, unknown>): Promise<T> {\r\n return requestWithTenant('GET', endpoint, tenantId, { params });\r\n },\r\n post<T>(endpoint: string, tenantId: number, 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, 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, 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, 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\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): number;\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;\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;\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 { 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): number {\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): number {\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 (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 ('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 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 (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 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): number {\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: iframe (pra SSO com cookie de sessão do provider)\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 = { ..._config, token: stripBearer(session.token) };\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, 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 /** 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;\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 */\r\nexport function updateGlobalToken(token: string): void {\r\n if (globalConfig) {\r\n globalConfig = { ...globalConfig, token: stripBearer(token) };\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): number {\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"]}