mitra-interactions-sdk 1.0.64 → 1.0.65
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/README.md +30 -3
- package/dist/index.d.mts +44 -1
- package/dist/index.d.ts +44 -1
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +90 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth.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","refreshInFlight","tryRefreshToken","doRefreshToken","fetchWithRefresh","_a"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Mitra Interactions SDK - Autenticação\n *\n * Login via popup seguro hospedado no domínio Mitra.\n * Credenciais nunca passam pelo código do desenvolvedor.\n */\n\nimport { configureSdkMitra, isConfigured, getConfig} from './config';\nimport type {\n LoginOptions,\n LoginResponse,\n EmailSignupOptions,\n EmailLoginOptions,\n EmailVerifyCodeOptions,\n EmailResendCodeOptions\n} from './types';\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\nconst POPUP_WIDTH = 420;\nconst POPUP_HEIGHT = 520;\n\n/**\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\n */\nfunction getOriginFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n return parsed.origin;\n } catch {\n return '';\n }\n}\n\n/**\n * Abre popup de autenticação e aguarda o resultado via postMessage.\n * Valida que a mensagem veio do origin da authUrl.\n */\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\n return new Promise((resolve, reject) => {\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\n\n const popup = window.open(\n url,\n 'mitra-auth',\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\n );\n\n if (!popup) {\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\n return;\n }\n\n function onMessage(event: MessageEvent) {\n // Ignora mensagens de outros origins\n if (event.origin !== expectedOrigin) return;\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\n\n cleanup();\n\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error || 'Erro na autenticação'));\n }\n }\n\n // Detecta se o popup foi fechado sem completar\n const pollTimer = setInterval(() => {\n if (popup.closed) {\n cleanup();\n reject(new Error('Login cancelado pelo usuário'));\n }\n }, 500);\n\n function cleanup() {\n window.removeEventListener('message', onMessage);\n clearInterval(pollTimer);\n }\n\n window.addEventListener('message', onMessage);\n });\n}\n\n/**\n * Auto-configura o SDK a partir da resposta de login.\n * Preserva authUrl e projectId usados no login para chamadas subsequentes.\n */\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number): void {\n if (!response.baseURL) return;\n\n configureSdkMitra({\n baseURL: response.baseURL,\n token: response.token,\n authUrl,\n projectId,\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\n });\n}\n\n/**\n * Monta a URL do popup/redirect de autenticação.\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\n */\nfunction buildAuthUrl(\n authUrl: string,\n method: string,\n projectId: number,\n opts?: { returnTo?: string; create?: boolean; title?: string }\n): string {\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\n const separator = base.includes('?') ? '&' : '?';\n let url = `${base}${separator}method=${method}&projectId=${encodeURIComponent(projectId)}`;\n if (opts?.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;\n if (opts?.create) url += `&create=true`;\n if (opts?.title) url += `&title=${encodeURIComponent(opts.title)}`;\n // Passa a URL completa de origem — document.referrer cross-origin perde path/query\n if (typeof window !== 'undefined') {\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\n }\n return url;\n}\n\n// ── Resolução de opções ─────────────────────────────────────────────────\n\n/**\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\n */\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\n const config = isConfigured() ? getConfig() : null;\n\n const authUrl = options?.authUrl || config?.authUrl;\n const projectId = options?.projectId ?? config?.projectId;\n\n if (!authUrl) {\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\n }\n if (projectId == null) {\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\n }\n\n return { authUrl, projectId };\n}\n\n// ── Helpers de redirect ─────────────────────────────────────────────────\n\n/**\n * Converte returnTo relativo para absoluto. Se não informado, usa a URL atual.\n */\nfunction resolveReturnTo(returnTo?: string): string {\n if (typeof window === 'undefined') return returnTo || '';\n if (!returnTo) return window.location.href;\n if (/^https?:\\/\\//.test(returnTo)) return returnTo;\n // Caminho relativo → absoluto\n return new URL(returnTo, window.location.origin).href;\n}\n\n// ── Funções de Login ────────────────────────────────────────────────────\n\n/**\n * Função central de login: decide popup vs redirect, monta URL com opts extras.\n */\nasync function doLogin(method: string, options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const mode = options?.mode || 'popup';\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, method, projectId, {\n returnTo: mode === 'redirect' ? resolveReturnTo(options?.returnTo) : undefined,\n create: options?.create,\n title: options?.title\n });\n\n if (mode === 'redirect') {\n window.location.href = url;\n // Nunca resolve — o navegador navega para fora\n return new Promise(() => {});\n }\n\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response, authUrl, projectId);\n return response;\n}\n\n/**\n * Login com email e senha via popup/redirect seguro Mitra.\n */\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\n return doLogin('email', options);\n}\n\n/**\n * Login com Google via popup/redirect seguro Mitra.\n */\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\n return doLogin('google', options);\n}\n\n/**\n * Login com Microsoft via popup/redirect seguro Mitra.\n */\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\n return doLogin('microsoft', options);\n}\n\n/**\n * Login genérico via popup/redirect seguro Mitra.\n */\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\n return doLogin(method, options);\n}\n\n// ── Token Refresh Silencioso ─────────────────────────────────────────\n\nconst REFRESH_TIMEOUT_MS = 15000;\n\n/** Promise do refresh em andamento (deduplicação — evita múltiplos iframes) */\nlet _refreshPromise: Promise<LoginResponse> | null = null;\n\n/**\n * Cria iframe invisível para renovar o token silenciosamente.\n * O sdk-auth detecta a sessão existente (cookie do provider) e retorna\n * um novo token via postMessage, sem interação do usuário.\n */\nfunction openAuthIframe(url: string, expectedOrigin: string): Promise<LoginResponse> {\n return new Promise((resolve, reject) => {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = url;\n\n const timer = setTimeout(() => {\n cleanup();\n reject(new Error('Token refresh timeout'));\n }, REFRESH_TIMEOUT_MS);\n\n function onMessage(event: MessageEvent) {\n if (event.origin !== expectedOrigin) return;\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\n\n cleanup();\n\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error || 'Erro no refresh do token'));\n }\n }\n\n function cleanup() {\n window.removeEventListener('message', onMessage);\n clearTimeout(timer);\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\n }\n\n window.addEventListener('message', onMessage);\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Renova o token silenciosamente via iframe invisível.\n * Se já houver um refresh em andamento, reaproveita a mesma promise.\n */\nexport async function refreshTokenSilently(authUrl: string, projectId: number): Promise<LoginResponse> {\n if (_refreshPromise) return _refreshPromise;\n\n _refreshPromise = (async () => {\n try {\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'refresh', projectId);\n const response = await openAuthIframe(url, origin);\n return response;\n } finally {\n _refreshPromise = null;\n }\n })();\n\n return _refreshPromise;\n}\n\n// ── Email Auth via iframe silencioso ──────────────────────────────\n\nconst SILENT_TIMEOUT_MS = 20000;\nconst AUTH_READY_TYPE = 'mitra-auth-ready';\nconst AUTH_CREDENTIALS_TYPE = 'mitra-auth-credentials';\n\n/**\n * Cria iframe invisível no modo silent e envia credenciais via postMessage.\n * O HTML de auth faz a chamada à API (sem CORS) e devolve o resultado.\n */\nfunction openSilentAuthIframe(\n authUrl: string,\n projectId: number,\n credentials: Record<string, unknown>\n): Promise<LoginResponse> {\n return new Promise((resolve, reject) => {\n const origin = getOriginFromUrl(authUrl);\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\n const separator = base.includes('?') ? '&' : '?';\n let url = `${base}${separator}mode=silent&projectId=${encodeURIComponent(projectId)}`;\n if (typeof window !== 'undefined') {\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\n }\n\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n\n const timer = setTimeout(() => {\n cleanup();\n reject(new Error('Timeout na autenticação silenciosa'));\n }, SILENT_TIMEOUT_MS);\n\n function onMessage(event: MessageEvent) {\n if (event.origin !== origin) return;\n\n // Passo 1: HTML avisou que está pronto → envia credenciais\n if (event.data?.type === AUTH_READY_TYPE) {\n iframe.contentWindow?.postMessage({\n type: AUTH_CREDENTIALS_TYPE,\n ...credentials\n }, origin);\n return;\n }\n\n // Passo 2: Resultado da autenticação\n if (event.data?.type !== AUTH_MESSAGE_TYPE) return;\n\n cleanup();\n\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error || 'Erro na autenticação'));\n }\n }\n\n function cleanup() {\n window.removeEventListener('message', onMessage);\n clearTimeout(timer);\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\n }\n\n window.addEventListener('message', onMessage);\n iframe.src = url;\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Cria conta via email usando iframe silencioso.\n * Após sucesso, o usuário recebe um código de verificação por email.\n * Fluxo: emailSignupMitra → emailVerifyCodeMitra → emailLoginMitra\n */\nexport async function emailSignupMitra(options: EmailSignupOptions): Promise<void> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n\n const result = await openSilentAuthIframe(authUrl, projectId, {\n action: 'signup',\n name: options.name,\n email: options.email,\n password: options.password\n });\n\n // Signup retorna { needsVerification: true } — não configura SDK\n if (!(result as any).needsVerification) {\n throw new Error('Resposta inesperada do signup');\n }\n}\n\n/**\n * Verifica o código de 6 dígitos enviado por email após signup.\n * Após verificação, faz login automático e retorna LoginResponse.\n * Auto-configura o SDK após sucesso.\n */\nexport async function emailVerifyCodeMitra(options: EmailVerifyCodeOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n\n const response = await openSilentAuthIframe(authUrl, projectId, {\n action: 'verifyCode',\n email: options.email,\n code: options.code,\n password: options.password\n });\n\n autoConfigureFromLogin(response, authUrl, projectId);\n return response;\n}\n\n/**\n * Reenvia o código de verificação para o email.\n */\nexport async function emailResendCodeMitra(options: EmailResendCodeOptions): Promise<void> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n\n await openSilentAuthIframe(authUrl, projectId, {\n action: 'resendCode',\n email: options.email\n });\n}\n\n/**\n * Login via email e senha usando iframe silencioso.\n * O HTML de auth faz a chamada à API e resolve as credenciais do projeto.\n * Retorna LoginResponse com token, baseURL e integrationURL.\n * Auto-configura o SDK após sucesso.\n */\nexport async function emailLoginMitra(options: EmailLoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n\n const response = await openSilentAuthIframe(authUrl, projectId, {\n action: 'login',\n email: options.email,\n password: options.password\n });\n\n autoConfigureFromLogin(response, authUrl, projectId);\n return response;\n}\n","/**\r\n * Mitra Interactions SDK - Chat Integration\r\n *\r\n * Integrates with the __mitraChat object injected by the build-proxy\r\n * in published apps. Chat is initialized automatically by configureSdkMitra().\r\n */\r\n\r\n/**\r\n * Opens the Mitra Chat sidebar.\r\n * If chat is still loading, polls until ready (max 15s).\r\n */\r\nexport function openChatMitra(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const chat = (window as any).__mitraChat;\r\n if (!chat) return;\r\n\r\n if (chat.isReady) {\r\n chat.open();\r\n } else {\r\n const iv = setInterval(() => {\r\n if (chat.isReady) { clearInterval(iv); chat.open(); }\r\n }, 200);\r\n setTimeout(() => clearInterval(iv), 15000);\r\n }\r\n}\r\n\r\n/**\r\n * Closes the Mitra Chat sidebar.\r\n */\r\nexport function closeChatMitra(): void {\r\n if (typeof window === 'undefined') return;\r\n (window as any).__mitraChat?.close();\r\n}\r\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","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig, updateGlobalToken, stripBearer } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\n\n/**\n * Obtém a função fetch\n */\nfunction getFetch(): typeof fetch {\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch;\n }\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\n}\n\n/**\n * Formata o token para Authorization\n */\nfunction formatToken(token: string): string {\n return `Bearer ${stripBearer(token)}`;\n}\n\n/**\n * Constrói os headers\n */\nfunction buildHeaders(): Record<string, string> {\n const config = getConfig();\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (config.token) headers['Authorization'] = formatToken(config.token);\n return headers;\n}\n\n/**\n * Constrói a URL com query params opcionais\n */\nfunction buildUrl(endpoint: string, params?: Record<string, unknown>): string {\n const config = getConfig();\n let url = `${config.baseURL}${endpoint}`;\n if (params) {\n const query = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n return url;\n}\n\n/**\n * Renova a sessão pela página de auth (iframe invisível), que usa o cookie do\n * provider. Single-flight: chamadas concorrentes compartilham a mesma\n * tentativa — sem isso, operações que disparam juntas (listar modelos e\n * listar provedores, por exemplo) pediriam tokens em paralelo.\n */\nlet refreshInFlight: Promise<boolean> | null = null;\n\n/**\n * Renovação single-flight: chamadas concorrentes compartilham a MESMA\n * tentativa. Sem isto, operações que disparam juntas (listar modelos e\n * listar provedores, por exemplo) pediriam dois tokens em paralelo — e se o\n * emissor rotaciona a credencial, o segundo invalida o primeiro.\n */\nexport function tryRefreshToken(): Promise<boolean> {\n if (refreshInFlight) return refreshInFlight;\n const attempt = doRefreshToken();\n refreshInFlight = attempt;\n const clear = (): void => { if (refreshInFlight === attempt) refreshInFlight = null; };\n attempt.then(clear, clear);\n return attempt;\n}\n\nasync function doRefreshToken(): Promise<boolean> {\n const config = getConfig();\n\n if (!config.token || config.projectId == null || !config.baseURL) return false;\n\n // Renovacao pela pagina de auth (iframe): usa a sessao do provider.\n if (!config.authUrl || typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(config.authUrl, config.projectId);\n updateGlobalToken(session.token);\n if (config.onTokenRefresh) config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Cliente HTTP\n */\nasync function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw {\n message: msg,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\n}\n\n/**\n * Executa um fetch. Se retornar AUTH_EXPIRED_STATUS, tenta refresh e retenta uma vez.\n */\nasync function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n // Retenta com o novo token\n const newHeaders = { ...buildHeaders() };\n // Preserva headers extras (ex: X-TenantID)\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n}\n\nexport const http = {\n async get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint, params), {\n method: 'GET',\n headers: buildHeaders()\n });\n },\n\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n },\n\n async put<T>(endpoint: string, body?: unknown): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'PUT',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n },\n\n async del<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint, params), {\n method: 'DELETE',\n headers: buildHeaders()\n });\n },\n\n async delBody<T>(endpoint: string, body?: unknown): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'DELETE',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n },\n\n async upload<T>(endpoint: string, formData: FormData): Promise<T> {\n const config = getConfig();\n const headers: Record<string, string> = {};\n if (config.token) headers['Authorization'] = formatToken(config.token);\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers,\n body: formData\n });\n }\n};\n\n// HTTP client para Dynamic Schema (usa X-TenantID header)\nasync function requestWithTenant<T>(\n method: string,\n endpoint: string,\n tenantId: number,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n return fetchWithRefresh(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\n/**\n * Requisição genérica para o serviço de integrações (porta 1003)\n */\nasync function requestIntegrations<T>(\n method: string,\n endpoint: string,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const config = getConfig();\n if (!config.integrationURL) {\n throw new Error('integrationURL não configurado. Passe integrationURL em configureSdkMitra() ou via query param.');\n }\n\n const base = config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${endpoint}`;\n\n if (options?.params) {\n const query = Object.entries(options.params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (config.token) headers['Authorization'] = formatToken(config.token);\n\n return fetchWithRefresh(url, {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\nexport const httpIntegrations = {\n get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return requestIntegrations('GET', endpoint, { params });\n },\n post<T>(endpoint: string, body?: unknown): Promise<T> {\n return requestIntegrations('POST', endpoint, { body });\n }\n};\n\nexport const httpTenant = {\n get<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('GET', endpoint, tenantId, { params });\n },\n post<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\n },\n put<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\n },\n patch<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\n },\n del<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\n }\n};\n","/**\r\n * Mitra Interactions SDK - Services\r\n */\r\n\r\nimport { http, httpTenant } from './client';\r\nimport { getConfig, resolveProjectId } from './config';\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 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 ExecutePublicServerFunctionOptions,\r\n ExecutePublicServerFunctionResponse,\r\n ExecutePublicServerFunctionAsyncResponse,\r\n GetPublicServerFunctionExecutionOptions,\r\n GetPublicServerFunctionExecutionResponse\r\n} from './types';\r\n\r\n/**\r\n * POST /interactions/executeDataLoader\r\n * Executa um Data Loader\r\n */\r\nexport async function executeDataLoaderMitra(options: ExecuteDataLoaderOptions): Promise<ExecuteDataLoaderResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n dataLoaderId: options.dataLoaderId\r\n };\r\n if (options.input !== undefined) body.input = options.input;\r\n return http.post('/interactions/executeDataLoader', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/executeDbAction\r\n * Executa uma DBAction (DML) cadastrada\r\n */\r\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n dbActionId: options.dbActionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/executeDbAction', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/setFileStatus\r\n * Move arquivo do chat para PUBLIC ou LOADABLE\r\n */\r\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\r\n return http.post('/interactions/setFileStatus', {\r\n projectId: resolveProjectId(options.projectId),\r\n fileName: options.fileName,\r\n targetPath: options.targetPath\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/setVariable\r\n * Cria ou atualiza uma variável customizada\r\n */\r\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n key: options.key\r\n };\r\n\r\n if (options.value !== undefined) {\r\n body.value = options.value;\r\n }\r\n\r\n return http.post('/interactions/setVariable', body);\r\n}\r\n\r\n/**\r\n * GET /interactions/listVariables?projectId={id}\r\n * Lista variáveis de um projeto\r\n */\r\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\r\n return http.get('/interactions/listVariables', {\r\n projectId: resolveProjectId(options.projectId)\r\n });\r\n}\r\n\r\n/**\r\n * GET /interactions/getVariable?projectId={id}&key={key}\r\n * Busca o valor de uma variável específica\r\n */\r\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\r\n return http.get('/interactions/getVariable', {\r\n projectId: resolveProjectId(options.projectId),\r\n key: options.key\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/runAction\r\n * Executa uma Action (fluxo de ação) cadastrada\r\n */\r\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n actionId: options.actionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/runAction', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/executeServerFunction\r\n * Executa uma Server Function de forma SÍNCRONA (timeout 60s no backend)\r\n */\r\nexport async function executeServerFunctionMitra(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n serverFunctionId: options.serverFunctionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/executeServerFunction', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/executeServerFunctionAsync\r\n * Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)\r\n */\r\nexport async function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n serverFunctionId: options.serverFunctionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/executeServerFunctionAsync', body);\r\n}\r\n\r\n/**\r\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/execute\r\n * Executa uma Server Function pública de forma SÍNCRONA (sem autenticação).\r\n * A SF deve ter publicExecution = true. Timeout 5min.\r\n */\r\nexport async function executePublicServerFunctionMitra(\r\n options: ExecutePublicServerFunctionOptions\r\n): Promise<ExecutePublicServerFunctionResponse> {\r\n const { projectId, serverFunctionId, input } = options;\r\n const baseURL = getConfig().baseURL;\r\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n\r\n if (!response.ok) {\r\n const data = await response.json().catch(() => null);\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 response.json();\r\n}\r\n\r\n/**\r\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/executeAsync\r\n * Executa uma Server Function pública de forma ASSÍNCRONA (sem autenticação).\r\n * Retorna executionId imediatamente. Use getPublicServerFunctionExecutionMitra para polling.\r\n */\r\nexport async function executePublicServerFunctionAsyncMitra(\r\n options: ExecutePublicServerFunctionOptions\r\n): Promise<ExecutePublicServerFunctionAsyncResponse> {\r\n const { projectId, serverFunctionId, input } = options;\r\n const baseURL = getConfig().baseURL;\r\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n\r\n if (!response.ok) {\r\n const data = await response.json().catch(() => null);\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 response.json();\r\n}\r\n\r\n/**\r\n * GET /public/serverFunction/{projectId}/execution/{executionId}\r\n * Consulta o status/resultado de uma execução pública de SF (sem autenticação).\r\n */\r\nexport async function getPublicServerFunctionExecutionMitra(\r\n options: GetPublicServerFunctionExecutionOptions\r\n): Promise<GetPublicServerFunctionExecutionResponse> {\r\n const { projectId, executionId } = options;\r\n const baseURL = getConfig().baseURL;\r\n const url = `${baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n\r\n if (!response.ok) {\r\n const data = await response.json().catch(() => null);\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 response.json();\r\n}\r\n\r\n/**\r\n * GET /interactions/integrations?projectId=X\r\n * Lista integrações configuradas no projeto\r\n */\r\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\r\n return http.get('/interactions/integrations', {\r\n projectId: resolveProjectId(options.projectId)\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/integrations/call\r\n * Chama uma API externa via serviço de integrações\r\n * Mapeia connection → integrationSlug no body\r\n */\r\nexport async function callIntegrationMitra(options: CallIntegrationOptions): Promise<CallIntegrationResponse> {\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\r\n if (options.endpoint !== undefined) {\r\n body.endpoint = options.endpoint;\r\n }\r\n\r\n if (options.params !== undefined) {\r\n body.params = options.params;\r\n }\r\n\r\n if (options.body !== undefined) {\r\n body.body = options.body;\r\n }\r\n\r\n return http.post('/interactions/integrations/call', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/stopServerFunctionExecution\r\n * Para a execução de uma Server Function em andamento\r\n */\r\nexport async function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse> {\r\n return http.post('/interactions/stopServerFunctionExecution', {\r\n projectId: resolveProjectId(options.projectId),\r\n executionId: options.executionId\r\n });\r\n}\r\n\r\n// === Upload de Arquivos ===\r\n\r\n/**\r\n * POST /interactions/uploadFilePublic (multipart/form-data)\r\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\r\n */\r\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\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 http.upload('/interactions/uploadFilePublic', formData);\r\n}\r\n\r\n/**\r\n * POST /interactions/uploadFileLoadable (multipart/form-data)\r\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\r\n */\r\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\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 http.upload('/interactions/uploadFileLoadable', formData);\r\n}\r\n\r\n// === Dynamic Schema CRUD ===\r\n\r\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\r\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.get(`/interactions/records/${tableName}`, pid, { page, size, jdbcConnectionConfigId, ...filters });\r\n}\r\n\r\nexport async function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.get(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.post(`/interactions/records/${tableName}`, pid, data, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function updateRecordMitra(options: UpdateRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.put(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function patchRecordMitra(options: PatchRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.patch(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function deleteRecordMitra(options: DeleteRecordOptions): Promise<void> {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.del(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]> {\r\n const { tableName, records, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.post(`/interactions/records/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\r\n}\r\n\r\n// === Profile Management ===\r\n\r\n/**\r\n * GET /interactions/profiles?projectId={id}\r\n * Lista todos os perfis do projeto\r\n */\r\nexport async function listProfilesMitra(options: ListProfilesOptions = {}): Promise<ListProfilesResponse> {\r\n return http.get('/interactions/profiles', { projectId: resolveProjectId(options.projectId) });\r\n}\r\n\r\n/**\r\n * GET /interactions/profiles/{profileId}?projectId={id}\r\n * Detalhes de um perfil (usuários, tabelas, actions, screens, server functions)\r\n */\r\nexport async function getProfileDetailsMitra(options: GetProfileDetailsOptions): Promise<GetProfileDetailsResponse> {\r\n return http.get(`/interactions/profiles/${options.profileId}`, { projectId: resolveProjectId(options.projectId) });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles\r\n * Cria um novo perfil\r\n */\r\nexport async function createProfileMitra(options: CreateProfileOptions): Promise<CreateProfileResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n name: options.name\r\n };\r\n if (options.color !== undefined) body.color = options.color;\r\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\r\n return http.post('/interactions/profiles', body);\r\n}\r\n\r\n/**\r\n * PUT /interactions/profiles\r\n * Atualiza um perfil existente\r\n */\r\nexport async function updateProfileMitra(options: UpdateProfileOptions): Promise<UpdateProfileResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId\r\n };\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 http.put('/interactions/profiles', body);\r\n}\r\n\r\n/**\r\n * DELETE /interactions/profiles\r\n * Deleta um perfil\r\n */\r\nexport async function deleteProfileMitra(options: DeleteProfileOptions): Promise<DeleteProfileResponse> {\r\n return http.delBody('/interactions/profiles', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/users\r\n * Define os usuários de um perfil (substitui lista atual)\r\n */\r\nexport async function setProfileUsersMitra(options: SetProfileUsersOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/users', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n userIds: options.userIds\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/selectTables\r\n * Define as tabelas SELECT permitidas por perfil\r\n */\r\nexport async function setProfileSelectTablesMitra(options: SetProfileSelectTablesOptions): Promise<SetProfilePermissionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n tables: options.tables\r\n };\r\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\r\n return http.post('/interactions/profiles/selectTables', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/dmlTables\r\n * Define as tabelas DML permitidas por perfil\r\n */\r\nexport async function setProfileDmlTablesMitra(options: SetProfileDmlTablesOptions): Promise<SetProfilePermissionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n tables: options.tables\r\n };\r\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\r\n return http.post('/interactions/profiles/dmlTables', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/actions\r\n * Define as actions permitidas por perfil\r\n */\r\nexport async function setProfileActionsMitra(options: SetProfileActionsOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/actions', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n actionIds: options.actionIds\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/screens\r\n * Define as screens permitidas por perfil\r\n */\r\nexport async function setProfileScreensMitra(options: SetProfileScreensOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/screens', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n screenIds: options.screenIds\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/serverFunctions\r\n * Define as server functions permitidas por perfil\r\n */\r\nexport async function setProfileServerFunctionsMitra(options: SetProfileServerFunctionsOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/serverFunctions', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n serverFunctionIds: options.serverFunctionIds\r\n });\r\n}\r\n\r\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","/**\n * Mitra Interactions SDK — AgentTaskSession\n *\n * Handle resource-oriented de um chat com o agente. Encapsula todo o ciclo\n * de vida (histórico, streaming, fila, cancel) num único objeto.\n *\n * Espelha a semântica do Code Builder (Pinia stores + composables), porém\n * por-session em vez de globalmente compartilhado.\n *\n * Não construa diretamente — use `getAgentTaskMitra({ create | taskId })`.\n */\n\nimport type {\n AgentChat,\n AgentMessage,\n AgentAttachment,\n AgentTaskSession as IAgentTaskSession,\n AgentTaskStatus,\n AgentTaskEventMap,\n AgentTaskEventName,\n AgentType,\n QueuedItem,\n SendOptions\n} from './types';\nimport { buildAttachmentsFromFiles } from './agent-attachments';\n\ninterface SessionTransport {\n /** Garante WS conectado. */\n ensureConnected(): Promise<void>;\n /** Envia request/response com requestId, aguarda data. */\n request<T>(type: string, payload: Record<string, unknown>): Promise<T>;\n /** Envia mensagem fire-and-forget (eventos chegam via subscribe). */\n send(type: string, payload: Record<string, unknown>, taskId?: string): void;\n /** Resolve projectId (param ou config global). */\n resolveProjectId(override?: number): number;\n /** Próximo seq incremental (FIFO de mensagens em fila). */\n nextSeq(): number;\n /** Subscribe handler pra eventos WS de uma taskId específica. Retorna unsubscribe. */\n subscribe(taskId: string, handler: (msg: any) => void): () => void;\n /** Subscribe handler pra eventos sem taskId resolvido (ex: task_update pra session nova). */\n subscribePending(sessionId: string, handler: (msg: any) => void): () => void;\n /** Verifica se uma taskId está em streaming agora (do streaming_state). */\n isStreaming(taskId: string): boolean;\n /** Remove session do cache global (chamado no close). */\n unregister(taskId: string | null, sessionId: string): void;\n /** Registra mapeamento taskId → session (chamado quando task_created chega). */\n register(taskId: string, session: AgentTaskSession): void;\n}\n\ninterface SessionInitNew {\n kind: 'new';\n projectId?: number;\n agentType?: AgentType;\n modelId?: string;\n name?: string;\n connectionId?: string;\n}\n\ninterface SessionInitExisting {\n kind: 'existing';\n taskId: string;\n /** Sem isto, a sessao reaberta manda send_prompt sem projectId. */\n projectId?: number;\n}\n\ntype SessionInit = SessionInitNew | SessionInitExisting;\n\nconst QUEUE_MAX = 10;\nconst TURN_STARTED_SAFETY_MS = 30_000;\nlet sessionCounter = 0;\n\nexport class AgentTaskSession implements IAgentTaskSession {\n // ── Identidade ────────────────────────\n private _taskId: string | null = null;\n private _task: AgentChat | null = null;\n private readonly _isNew: boolean;\n private readonly _sessionId: string;\n\n // ── Estado ────────────────────────────\n private _status: AgentTaskStatus = 'opening';\n private _history: AgentMessage[] = [];\n private _content = '';\n private _queue: QueuedItem[] = [];\n\n // ── Config inicial ────────────────────\n private _projectId?: number;\n private _agentType?: AgentType;\n private _modelId?: string;\n private _initialName?: string;\n private _connectionId?: string;\n\n // ── Cancel state ──────────────────────\n private _cancelled = false;\n private _awaitingTurnStarted = false;\n private _turnStartedTimer: ReturnType<typeof setTimeout> | null = null;\n private _pendingCancelResolve: (() => void) | null = null;\n\n // ── Listeners ─────────────────────────\n private _listeners: Map<AgentTaskEventName, Set<(payload: any) => void>> = new Map();\n private _wsUnsubscribe: (() => void) | null = null;\n private _wsUnsubscribePending: (() => void) | null = null;\n\n private readonly _transport: SessionTransport;\n\n constructor(init: SessionInit, transport: SessionTransport) {\n this._transport = transport;\n this._sessionId = `sess-${++sessionCounter}-${Date.now()}`;\n this._isNew = init.kind === 'new';\n // Vale para os dois ramos: sem isto a sessao reaberta por taskId manda\n // send_prompt e get_history sem projectId.\n this._projectId = init.projectId;\n\n if (init.kind === 'new') {\n this._agentType = init.agentType;\n this._modelId = init.modelId;\n this._initialName = init.name;\n this._connectionId = init.connectionId;\n // Sessions novas começam idle (nada pra carregar)\n this._setStatus('idle');\n // Eventos do task_update precisam chegar antes do taskId existir\n this._wsUnsubscribePending = this._transport.subscribePending(\n this._sessionId,\n (msg) => this._handleMessage(msg)\n );\n } else {\n this._taskId = init.taskId;\n this._transport.register(init.taskId, this);\n this._wsUnsubscribe = this._transport.subscribe(init.taskId, (msg) =>\n this._handleMessage(msg)\n );\n // Conecta WS em background e detecta se já está streaming\n this._initExisting(init.taskId);\n }\n }\n\n // ── Properties públicas ────────────────────────────\n\n get taskId(): string | null {\n return this._taskId;\n }\n get task(): AgentChat | null {\n return this._task;\n }\n get isNew(): boolean {\n return this._isNew;\n }\n get status(): AgentTaskStatus {\n return this._status;\n }\n get history(): ReadonlyArray<AgentMessage> {\n return this._history;\n }\n get content(): string {\n return this._content;\n }\n get queue(): ReadonlyArray<QueuedItem> {\n return this._queue;\n }\n\n // ── Lifecycle ──────────────────────────────────────\n\n private async _initExisting(taskId: string): Promise<void> {\n try {\n await this._transport.ensureConnected();\n if (this._status === 'closed') return;\n // Detecta stream ativo (vem do streaming_state mantido pelo transport)\n if (this._transport.isStreaming(taskId)) {\n this._setStatus('streaming');\n } else {\n this._setStatus('idle');\n }\n } catch (err) {\n this._emitError(err instanceof Error ? err.message : String(err));\n }\n }\n\n async loadHistory(options?: { limit?: number }): Promise<AgentMessage[]> {\n if (this._status === 'closed') {\n throw new Error('AgentTaskSession: session fechada.');\n }\n if (!this._taskId) {\n // Session nova sem prompt ainda — não tem histórico\n this._history = [];\n this._emit('historyLoaded', []);\n return [];\n }\n await this._transport.ensureConnected();\n const payload: Record<string, unknown> = { taskId: this._taskId };\n if (this._projectId != null) payload.projectId = this._projectId;\n if (options?.limit != null) payload.limit = options.limit;\n const msgs = await this._transport.request<AgentMessage[]>('get_history', payload);\n this._history = msgs;\n this._emit('historyLoaded', msgs);\n return msgs;\n }\n\n close(): void {\n if (this._status === 'closed') return;\n this._setStatus('closed');\n if (this._turnStartedTimer) {\n clearTimeout(this._turnStartedTimer);\n this._turnStartedTimer = null;\n }\n if (this._wsUnsubscribe) {\n this._wsUnsubscribe();\n this._wsUnsubscribe = null;\n }\n if (this._wsUnsubscribePending) {\n this._wsUnsubscribePending();\n this._wsUnsubscribePending = null;\n }\n this._transport.unregister(this._taskId, this._sessionId);\n this._listeners.clear();\n }\n\n // ── Comandos ───────────────────────────────────────\n\n send(prompt: string, options?: SendOptions): void {\n if (this._status === 'closed') {\n throw new Error('AgentTaskSession: session fechada.');\n }\n const files = options?.files?.length ? options.files : undefined;\n if (!prompt.trim() && !files) return;\n\n const agentType = options?.agentType ?? this._agentType ?? 'claudecode';\n const modelId = options?.modelId ?? this._modelId;\n\n // Com anexos: sobe primeiro (igual o Nuxt faz no send), depois despacha.\n // O send continua síncrono/void — o upload roda em background e o\n // consumidor observa pelo status 'uploading' + evento 'error'.\n if (files) {\n void this._uploadThenDispatch(prompt, agentType, modelId, files);\n return;\n }\n this._dispatchSend(prompt, agentType, modelId, undefined);\n }\n\n private async _uploadThenDispatch(\n prompt: string,\n agentType: AgentType,\n modelId: string | undefined,\n files: File[]\n ): Promise<void> {\n const wasStreaming = this._status === 'streaming';\n if (!wasStreaming) this._setStatus('uploading');\n let attachments: AgentAttachment[];\n try {\n attachments = await buildAttachmentsFromFiles(files, this._projectId);\n } catch (err) {\n this._emit('error', {\n error: `Falha ao subir anexos: ${err instanceof Error ? err.message : String(err)}`\n });\n if (this._status === 'uploading') this._setStatus('idle');\n return;\n }\n // Session pode ter sido fechada durante o upload.\n if (this._status === 'closed') return;\n this._dispatchSend(prompt, agentType, modelId, attachments);\n }\n\n private _dispatchSend(\n prompt: string,\n agentType: AgentType,\n modelId: string | undefined,\n attachments: AgentAttachment[] | undefined\n ): void {\n // Se streaming, enfileira\n if (this._status === 'streaming') {\n this._enqueue(prompt, agentType);\n // Best-effort mid-session injection (BASH_ENV no OpenCode)\n if (this._taskId) {\n this._transport.send(\n 'send_prompt',\n {\n prompt,\n taskId: this._taskId,\n projectId: this._projectId,\n agentType,\n ...(modelId ? { modelId } : {}),\n ...(attachments ? { attachments } : {}),\n midSession: true\n },\n this._taskId\n );\n }\n return;\n }\n\n // Se cancelado, marca awaitingTurnStarted e dispara safety net\n if (this._status === 'cancelled') {\n this._awaitingTurnStarted = true;\n if (this._turnStartedTimer) clearTimeout(this._turnStartedTimer);\n this._turnStartedTimer = setTimeout(() => {\n this._turnStartedTimer = null;\n if (this._awaitingTurnStarted) {\n this._cancelled = false;\n this._awaitingTurnStarted = false;\n this._setStatus('idle');\n }\n }, TURN_STARTED_SAFETY_MS);\n }\n\n // Dispara novo turno\n this._setStatus('streaming');\n this._content = '';\n\n const payload: Record<string, unknown> = {\n prompt,\n projectId: this._projectId,\n agentType\n };\n if (modelId) payload.modelId = modelId;\n if (attachments) payload.attachments = attachments;\n if (this._taskId) payload.taskId = this._taskId;\n if (this._connectionId) payload.connectionId = this._connectionId;\n if (this._initialName && !this._taskId) {\n payload.name = this._initialName;\n }\n\n this._transport.send('send_prompt', payload, this._taskId ?? undefined);\n }\n\n async cancel(): Promise<void> {\n if (this._status === 'closed') return;\n if (this._status !== 'streaming' && this._status !== 'cancelled') return;\n\n this._cancelled = true;\n this._clearQueue();\n\n if (this._taskId) {\n this._transport.send(\n 'task_cancel',\n {\n source: 'sdk_cancel',\n ...(this._projectId != null ? { projectId: this._projectId } : {})\n },\n this._taskId\n );\n }\n\n this._setStatus('cancelled');\n this._emit('cancelled', undefined);\n\n // Resolve quando turn_started chega OU safety net (30s)\n return new Promise<void>((resolve) => {\n const previousResolve = this._pendingCancelResolve;\n this._pendingCancelResolve = () => {\n resolve();\n if (previousResolve) previousResolve();\n };\n setTimeout(() => {\n if (this._pendingCancelResolve) {\n this._pendingCancelResolve = null;\n resolve();\n }\n }, TURN_STARTED_SAFETY_MS);\n });\n }\n\n // ── Manipulação de fila ────────────────────────────\n\n editQueueItem(itemId: string, newText: string): boolean {\n const idx = this._queue.findIndex((q) => q.id === itemId);\n if (idx < 0 || this._queue[idx].status !== 'pending') return false;\n this._queue = [\n ...this._queue.slice(0, idx),\n { ...this._queue[idx], text: newText },\n ...this._queue.slice(idx + 1)\n ];\n this._emitQueueChange();\n return true;\n }\n\n removeQueueItem(itemId: string): boolean {\n const before = this._queue.length;\n this._queue = this._queue.filter((q) => q.id !== itemId);\n if (this._queue.length === before) return false;\n this._emitQueueChange();\n return true;\n }\n\n clearQueue(): void {\n if (this._queue.length === 0) return;\n this._clearQueue();\n }\n\n // ── Eventos ────────────────────────────────────────\n\n on<E extends AgentTaskEventName>(\n event: E,\n handler: (payload: AgentTaskEventMap[E]) => void\n ): () => void {\n if (!this._listeners.has(event)) {\n this._listeners.set(event, new Set());\n }\n this._listeners.get(event)!.add(handler as any);\n return () => {\n this._listeners.get(event)?.delete(handler as any);\n };\n }\n\n // ── Internals: routing de mensagens WS ─────────────\n\n private _handleMessage(msg: any): void {\n if (!msg?.type) return;\n\n // Cancel gate local: se cancelado, dropa eventos stale (exceto turn_started/error)\n if (\n this._cancelled &&\n msg.type !== 'turn_started' &&\n msg.type !== 'error' &&\n msg.type !== 'task_update'\n ) {\n return;\n }\n\n const payload = (msg.payload ?? {}) as Record<string, unknown>;\n\n switch (msg.type) {\n case 'task_update': {\n // Task criada (caso `new`) — reassocia e registra no transport\n if (payload.action !== 'created') return;\n const task = payload.task as AgentChat | undefined;\n if (!task) return;\n if (!this._taskId) {\n this._taskId = task.id;\n this._task = task;\n this._transport.register(task.id, this);\n // Trocar subscribePending por subscribe direto\n if (this._wsUnsubscribePending) {\n this._wsUnsubscribePending();\n this._wsUnsubscribePending = null;\n }\n this._wsUnsubscribe = this._transport.subscribe(task.id, (m) =>\n this._handleMessage(m)\n );\n this._emit('taskCreated', { task });\n } else if (this._taskId === task.id) {\n this._task = task;\n }\n break;\n }\n\n case 'turn_started': {\n // Levanta cancel gate, sinaliza início de turno\n if (this._cancelled) {\n this._cancelled = false;\n this._awaitingTurnStarted = false;\n if (this._turnStartedTimer) {\n clearTimeout(this._turnStartedTimer);\n this._turnStartedTimer = null;\n }\n if (this._pendingCancelResolve) {\n this._pendingCancelResolve();\n this._pendingCancelResolve = null;\n }\n }\n if (this._status !== 'streaming') {\n this._setStatus('streaming');\n this._content = '';\n }\n this._emit('turnStart', undefined);\n break;\n }\n\n case 'stream_delta': {\n const kind: 'text' | 'tool' =\n payload.subtype === 'thinking' ? 'tool' : 'text';\n const delta = String(payload.delta ?? '');\n if (kind === 'text') this._content += delta;\n this._emit('delta', { delta, kind });\n break;\n }\n\n case 'stream_tool_activity': {\n this._emit('tool', {\n tool: String(payload.tool ?? ''),\n input: payload.input as string | undefined,\n content: payload.content as string | undefined,\n timestamp: Number(msg.timestamp ?? Date.now())\n });\n break;\n }\n\n case 'stream_end': {\n const finalContent = this._content;\n this._emit('turnEnd', { content: finalContent });\n this._setStatus('idle');\n // Dequeue próximo item se houver\n this._shiftQueueAndSend();\n break;\n }\n\n case 'error': {\n const error = String(payload.error ?? msg.error ?? 'Erro desconhecido');\n this._emitError(error);\n break;\n }\n }\n }\n\n // ── Fila interna ───────────────────────────────────\n\n private _enqueue(text: string, agentType: AgentType): void {\n if (this._queue.length >= QUEUE_MAX) return;\n const trimmed = text.trim();\n if (this._queue.some((q) => q.text.trim() === trimmed)) return;\n const item: QueuedItem = {\n id: `q-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n text,\n agentType,\n seq: this._transport.nextSeq(),\n createdAt: Date.now(),\n status: 'pending'\n };\n this._queue = [...this._queue, item];\n this._emitQueueChange();\n }\n\n private _shiftQueueAndSend(): void {\n if (this._queue.length === 0) return;\n const [next, ...rest] = this._queue;\n this._queue = rest;\n this._emitQueueChange();\n this.send(next.text, { agentType: next.agentType });\n }\n\n private _clearQueue(): void {\n if (this._queue.length === 0) return;\n this._queue = [];\n this._emitQueueChange();\n }\n\n // ── Helpers de emissão ─────────────────────────────\n\n private _emit<E extends AgentTaskEventName>(\n event: E,\n payload: AgentTaskEventMap[E]\n ): void {\n const set = this._listeners.get(event);\n if (!set) return;\n for (const handler of set) {\n try {\n (handler as (p: any) => void)(payload);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(`[AgentTaskSession] handler de '${event}' lançou:`, err);\n }\n }\n }\n\n private _emitError(error: string): void {\n this._emit('error', { error });\n this._setStatus('error');\n }\n\n private _emitQueueChange(): void {\n this._emit('queueChange', { queue: this._queue });\n }\n\n private _setStatus(next: AgentTaskStatus): void {\n if (this._status === next) return;\n const previous = this._status;\n this._status = next;\n this._emit('statusChange', { status: next, previous });\n }\n}\n","/**\n * Mitra Interactions SDK — Agent Chat\n *\n * Hub do WebSocket compartilhado e factories da API pública:\n * - manageAgentChatMitra({ action: 'list' | 'rename' | 'delete', ... })\n * - getAgentTaskMitra({ create | taskId, ... })\n *\n * O WS é singleton: todas as sessions usam UMA conexão. O roteamento\n * de eventos é feito por taskId, despachando pra session correspondente.\n *\n * NÃO há `sendAgentPromptMitra` ou `getAgentHistoryMitra` exportados —\n * essas operações vivem dentro de `AgentTaskSession`.\n */\n\nimport { getConfig, stripBearer, isTokenExpiring, inferProjectId} from './config';\nimport { tryRefreshToken } from './client';\nimport { AgentTaskSession } from './agent-task-session';\nimport type {\n AgentChat,\n AgentTaskSession as IAgentTaskSession,\n GetAgentTaskOptions,\n ManageAgentChatOptions,\n ManageAgentChatListOptions,\n ManageAgentChatRenameOptions,\n ManageAgentChatDeleteOptions,\n RenameAgentChatResult,\n DeleteAgentChatResult\n} from './types';\n\n// ── WS singleton state ───────────────────────────────────────────────────\n\nlet ws: WebSocket | null = null;\nlet connectPromise: Promise<WebSocket> | null = null;\nlet requestSeq = 0;\nlet queueSeq = 0;\n\ninterface PendingRequest {\n resolve: (data: unknown) => void;\n reject: (err: Error) => void;\n}\nconst pendingRequests = new Map<string, PendingRequest>();\n\n/** Sessions indexadas por taskId (para roteamento). */\nconst sessionsByTaskId = new Map<string, AgentTaskSession>();\n\n/** Handlers de mensagens vindas pra cada taskId já conhecida. */\nconst handlersByTaskId = new Map<string, Set<(msg: any) => void>>();\n\n/**\n * Handlers de sessions que ainda não têm taskId (caso create:true).\n * Elas escutam task_update pra capturar o taskId real.\n */\nconst pendingHandlers = new Map<string, (msg: any) => void>();\n\n/** Tasks em streaming agora (do streaming_state event). */\nconst streamingTaskIds = new Set<string>();\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nfunction nextRequestId(): string {\n return `req-${Date.now()}-${++requestSeq}`;\n}\n\nfunction nextQueueSeq(): number {\n return ++queueSeq;\n}\n\nfunction getRawToken(): string {\n const config = getConfig();\n if (!config.token) {\n throw new Error('Agent Chat: token não configurado. Faça login primeiro ou passe token em configureSdkMitra.');\n }\n return stripBearer(config.token);\n}\n\nfunction resolveProjectId(override?: number): number {\n const config = getConfig();\n const pid = override ?? config.projectId;\n if (pid == null) {\n throw new Error('Agent Chat: projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n }\n return pid;\n}\n\nfunction getWsUrl(): string {\n // 1. Config explícito (configureSdkMitra({ agentWsUrl })) — necessário fora do\n // browser, ex: MitraSDK em Node. Tem prioridade sobre o window.\n const configured = getConfig().agentWsUrl;\n if (typeof configured === 'string' && configured) return configured;\n // 2. Fallback: window.__mitraEnv.agentWsUrl, injetado pelo build-proxy do\n // Mitra em apps publicadas pela plataforma (leitura ao vivo no connect,\n // caso __mitraEnv seja injetado depois do configureSdkMitra).\n if (typeof window !== 'undefined') {\n const injected = (window as any).__mitraEnv?.agentWsUrl;\n if (typeof injected === 'string' && injected) return injected;\n }\n throw new Error('Agent Chat: agentWsUrl indisponível. Passe em configureSdkMitra({ agentWsUrl }) ou rode em uma app publicada pelo Mitra (build-proxy injeta window.__mitraEnv.agentWsUrl).');\n}\n\n// ── HTTP transport (opt-in via configureSdkMitra({ httpEnable: true })) ────\n// Espelha o WS sobre HTTP, sem streaming: a resposta vem completa de uma vez.\n// Base HTTP derivada do agentWsUrl (ws→http, wss→https, sem querystring).\n// Rotas (o servidor do agente precisa expor — ver spec):\n// POST {base}/request { type, payload } → { ok, data?, error? }\n// POST {base}/prompt { ...send_prompt, taskId? } → { taskId, task?, content }\n\nfunction isHttpEnabled(): boolean {\n return getConfig().httpEnable === true;\n}\n\nfunction getAgentHttpBase(): string {\n return getWsUrl().split('?')[0].replace(/^ws/i, 'http').replace(/\\/+$/, '');\n}\n\nasync function agentHttpPost(path: string, body: unknown): Promise<any> {\n const fetchFn: typeof fetch = (globalThis as any).fetch;\n if (typeof fetchFn !== 'function') {\n throw new Error('Agent Chat (HTTP): fetch indisponível. Use Node 18+ ou um browser.');\n }\n // Mesma antecipação do WS: este canal fala direto com o agente, sem passar\n // pelo http client que trata 401.\n if (isTokenExpiring()) await tryRefreshToken();\n const resp = await fetchFn(`${getAgentHttpBase()}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${getRawToken()}`\n },\n body: JSON.stringify(body)\n });\n const text = await resp.text().catch(() => '');\n const data = text ? JSON.parse(text) : null;\n if (!resp.ok) {\n throw new Error(data?.error || data?.message || `Agent Chat (HTTP ${resp.status})`);\n }\n return data;\n}\n\n/** Prompt via HTTP: POST → resposta completa → injeta os mesmos eventos do WS. */\nasync function httpSendPrompt(payload: Record<string, unknown>, taskId?: string): Promise<void> {\n const data = await agentHttpPost('/prompt', { ...payload, ...(taskId ? { taskId } : {}) });\n const resolvedTaskId: string = data?.taskId || taskId || '';\n const content: string = data?.content ?? '';\n // Sintetiza a sequência de eventos que o WS mandaria — as sessions não mudam.\n if (data?.task) {\n routeMessage({ type: 'task_update', payload: { action: 'created', task: data.task } });\n }\n if (resolvedTaskId) {\n routeMessage({ type: 'turn_started', taskId: resolvedTaskId });\n routeMessage({ type: 'stream_delta', taskId: resolvedTaskId, payload: { delta: content } });\n routeMessage({ type: 'stream_end', taskId: resolvedTaskId });\n }\n}\n\n// ── Connection ───────────────────────────────────────────────────────────\n\n/**\n * Erros que significam \"o canal caiu\", não \"o servidor recusou a operação\".\n * Só esses valem uma retentativa com sessão renovada.\n */\nfunction isChannelError(err: unknown): boolean {\n const msg = err instanceof Error ? err.message : String(err ?? '');\n return /conexão fechada|timeout ao conectar|erro ao conectar/i.test(msg);\n}\n\n/** \" (4003 Forbidden)\" a partir do CloseEvent, quando o servidor informa. */\nfunction closeDetail(event?: { code?: number; reason?: string }): string {\n const code = event?.code;\n const reason = (event?.reason ?? '').trim();\n if (!code && !reason) return '';\n if (code && reason) return ` (${code} ${reason})`;\n return code ? ` (${code})` : ` (${reason})`;\n}\n\n/** Abre o socket com o token ATUAL — ele viaja na URL do handshake. */\nfunction openSocket(): Promise<WebSocket> {\n const baseUrl = getWsUrl();\n const token = getRawToken();\n const separator = baseUrl.includes('?') ? '&' : '?';\n // O servidor valida o escopo NO HANDSHAKE: token sem `tni` e sem projectId\n // na query derruba a conexao antes de qualquer mensagem ser lida, e nenhum\n // payload adiante importa. Mandar o projectId aqui cobre o token sem tenant.\n const projectId = inferProjectId();\n const escopo = projectId != null ? `&projectId=${encodeURIComponent(projectId)}` : '';\n const url = `${baseUrl}${separator}token=${encodeURIComponent(token)}${escopo}`;\n\n return new Promise<WebSocket>((resolve, reject) => {\n const socket = new WebSocket(url);\n let opened = false;\n\n const timer = setTimeout(() => {\n if (!opened) {\n try { socket.close(); } catch { /* noop */ }\n reject(new Error('Agent Chat: timeout ao conectar no WebSocket'));\n }\n }, 15000);\n\n socket.onopen = () => {\n opened = true;\n clearTimeout(timer);\n ws = socket;\n resolve(socket);\n };\n\n socket.onerror = () => {\n if (!opened) {\n clearTimeout(timer);\n reject(new Error('Agent Chat: erro ao conectar no WebSocket'));\n }\n };\n\n socket.onclose = (event) => {\n if (ws === socket) ws = null;\n // O servidor aceita o upgrade e SÓ ENTÃO valida: token vencido volta\n // como close 4003 Forbidden, não como 401. Guardar code e reason é o\n // que separa \"sessão inválida\" de \"a rede caiu\".\n const detalhe = closeDetail(event);\n if (!opened) {\n clearTimeout(timer);\n reject(new Error(`Agent Chat: conexão fechada${detalhe}`));\n }\n // Falha todas as requisições pendentes\n for (const [id, pending] of pendingRequests) {\n pending.reject(new Error(`Agent Chat: conexão fechada${detalhe}`));\n pendingRequests.delete(id);\n }\n streamingTaskIds.clear();\n };\n\n socket.onmessage = (event) => routeMessage(event.data);\n });\n}\n\nfunction connect(): Promise<WebSocket> {\n if (ws && ws.readyState === WebSocket.OPEN) {\n return Promise.resolve(ws);\n }\n if (connectPromise) return connectPromise;\n\n const attempt = (async () => {\n // PROATIVO: o token viaja na URL do handshake e uma rejeição por token\n // vencido NÃO chega como 401 — o socket é só fechado. Sem 401 não há\n // gatilho reativo, então renova ANTES de abrir.\n if (isTokenExpiring()) await tryRefreshToken();\n try {\n return await openSocket();\n } catch (err) {\n // REATIVO: caiu mesmo assim (venceu no meio, revogado). Renova e tenta\n // UMA vez; sem renovação, sobe o erro original em vez de repetir uma\n // tentativa idêntica à que acabou de falhar.\n if (!isChannelError(err)) throw err;\n const refreshed = await tryRefreshToken();\n if (!refreshed) throw err;\n return openSocket();\n }\n })();\n\n connectPromise = attempt;\n const clear = (): void => { if (connectPromise === attempt) connectPromise = null; };\n attempt.then(clear, clear);\n return attempt;\n}\n\n// ── Message routing ──────────────────────────────────────────────────────\n\nfunction routeMessage(raw: unknown): void {\n let msg: any;\n try {\n msg = typeof raw === 'string' ? JSON.parse(raw) : raw;\n } catch {\n return;\n }\n if (!msg?.type) return;\n\n // 1) Request/Response (correlacionado por requestId)\n if (msg.type === 'response' && msg.requestId) {\n const pending = pendingRequests.get(msg.requestId);\n if (!pending) return;\n pendingRequests.delete(msg.requestId);\n if (msg.ok) pending.resolve(msg.data);\n else pending.reject(new Error(msg.error || 'Erro desconhecido'));\n return;\n }\n\n // 2) streaming_state (mantém Set de tasks streaming)\n if (msg.type === 'streaming_state') {\n streamingTaskIds.clear();\n const ids = (msg.payload?.streamingTaskIds ?? []) as string[];\n for (const id of ids) streamingTaskIds.add(id);\n return;\n }\n\n // 3) turn_started / stream_end mantêm o Set sincronizado\n if (msg.type === 'turn_started' && msg.taskId) {\n streamingTaskIds.add(msg.taskId);\n } else if (msg.type === 'stream_end' && msg.taskId) {\n streamingTaskIds.delete(msg.taskId);\n }\n\n // 4) Roteamento por taskId — entrega a TODAS as sessions registradas\n // pra essa taskId (geralmente uma só, mas cache permite duplicação)\n if (msg.taskId) {\n const set = handlersByTaskId.get(msg.taskId);\n if (set) {\n for (const handler of set) handler(msg);\n }\n }\n\n // 5) Entrega também a sessions pendentes (sem taskId ainda)\n // — apenas task_update pra elas capturarem o taskId real\n if (msg.type === 'task_update') {\n for (const handler of pendingHandlers.values()) handler(msg);\n }\n}\n\n// ── Transport interface (injetado nas sessions) ──────────────────────────\n\n/** Uma ida ao servidor pelo socket: conecta (ou reusa), manda e espera a resposta. */\nfunction requestOverSocket<T>(type: string, payload: Record<string, unknown>): Promise<T> {\n return connect().then((socket) => new Promise<T>((resolve, reject) => {\n const requestId = nextRequestId();\n pendingRequests.set(requestId, {\n resolve: (data) => resolve(data as T),\n reject\n });\n try {\n socket.send(JSON.stringify({ type, requestId, payload }));\n } catch (err) {\n pendingRequests.delete(requestId);\n reject(err instanceof Error ? err : new Error(String(err)));\n }\n }));\n}\n\nconst transport = {\n async ensureConnected(): Promise<void> {\n if (isHttpEnabled()) return; // modo HTTP: não abre WebSocket\n await connect();\n },\n\n async request<T>(type: string, payload: Record<string, unknown>): Promise<T> {\n // HTTP opt-in: req/resp direto, sem WS.\n if (isHttpEnabled()) {\n const data = await agentHttpPost('/request', { type, payload });\n if (data && data.ok === false) throw new Error(data.error || 'Erro desconhecido');\n return (data?.data ?? data) as T;\n }\n try {\n return await requestOverSocket<T>(type, payload);\n } catch (err) {\n // O servidor pode aceitar o handshake e fechar logo depois, com a\n // requisição em voo — nesse caminho o token vencido chega como\n // \"conexão fechada\", nunca como 401. Renova e tenta UMA vez.\n if (!isChannelError(err)) throw err;\n const refreshed = await tryRefreshToken();\n if (!refreshed) throw err;\n return requestOverSocket<T>(type, payload);\n }\n },\n\n send(type: string, payload: Record<string, unknown>, taskId?: string): void {\n // HTTP opt-in: só send_prompt tem tratativa (resposta completa de uma vez).\n // Outros tipos (ex: task_cancel) não fazem sentido no modo all-at-once — noop.\n if (isHttpEnabled()) {\n if (type === 'send_prompt') {\n httpSendPrompt(payload, taskId).catch((err) => {\n const tid = taskId || '';\n if (tid) routeMessage({ type: 'error', taskId: tid, payload: { error: err?.message || String(err) } });\n // eslint-disable-next-line no-console\n else console.error('[agent-chat] httpSendPrompt falhou:', err);\n });\n }\n return;\n }\n // Best-effort: conecta se necessário, mas não bloqueia o caller\n connect()\n .then((socket) => {\n const requestId = nextRequestId();\n socket.send(JSON.stringify({ type, requestId, payload, taskId }));\n })\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error('[agent-chat] send falhou:', err);\n });\n },\n\n resolveProjectId(override?: number): number {\n return resolveProjectId(override);\n },\n\n nextSeq(): number {\n return nextQueueSeq();\n },\n\n subscribe(taskId: string, handler: (msg: any) => void): () => void {\n if (!handlersByTaskId.has(taskId)) {\n handlersByTaskId.set(taskId, new Set());\n }\n handlersByTaskId.get(taskId)!.add(handler);\n return () => {\n const set = handlersByTaskId.get(taskId);\n if (!set) return;\n set.delete(handler);\n if (set.size === 0) handlersByTaskId.delete(taskId);\n };\n },\n\n subscribePending(sessionId: string, handler: (msg: any) => void): () => void {\n pendingHandlers.set(sessionId, handler);\n return () => {\n pendingHandlers.delete(sessionId);\n };\n },\n\n isStreaming(taskId: string): boolean {\n return streamingTaskIds.has(taskId);\n },\n\n register(taskId: string, session: AgentTaskSession): void {\n sessionsByTaskId.set(taskId, session);\n },\n\n unregister(taskId: string | null, _sessionId: string): void {\n if (taskId) sessionsByTaskId.delete(taskId);\n // sessions pendentes saem via subscribePending unsubscribe\n }\n};\n\n// ── Public API ───────────────────────────────────────────────────────────\n\n/**\n * Acesso ao transporte WS interno. Usado pelos demais módulos (ex:\n * agent-credentials) que precisam fazer request/response sobre o mesmo\n * singleton. NÃO faz parte da API pública.\n *\n * @internal\n */\nexport function getTransport() {\n return transport;\n}\n\n/**\n * Gerencia os chats do user (coleção) — espelha `manageAgentCredentialMitra`.\n * Operações stateless: listar, renomear, deletar.\n *\n * @example\n * const chats = await manageAgentChatMitra({ action: 'list' });\n * await manageAgentChatMitra({ action: 'rename', taskId, name: 'Novo nome' });\n * await manageAgentChatMitra({ action: 'delete', taskId });\n */\nexport function manageAgentChatMitra(options: ManageAgentChatListOptions): Promise<AgentChat[]>;\nexport function manageAgentChatMitra(options: ManageAgentChatRenameOptions): Promise<RenameAgentChatResult>;\nexport function manageAgentChatMitra(options: ManageAgentChatDeleteOptions): Promise<DeleteAgentChatResult>;\nexport function manageAgentChatMitra(options: ManageAgentChatOptions): Promise<any> {\n if (options.action === 'list') {\n const projectId = resolveProjectId(options.projectId);\n return transport.request<AgentChat[]>('chats', { action: 'list', projectId });\n }\n if (options.action === 'rename') {\n if (!options.taskId) throw new Error('manageAgentChatMitra(rename): taskId obrigatório.');\n if (!options.name?.trim()) throw new Error('manageAgentChatMitra(rename): name obrigatório.');\n const projectId = inferProjectId(options.projectId);\n return transport.request('chats', {\n action: 'rename',\n taskId: options.taskId,\n name: options.name.trim(),\n ...(projectId != null ? { projectId } : {})\n });\n }\n if (options.action === 'delete') {\n if (!options.taskId) throw new Error('manageAgentChatMitra(delete): taskId obrigatório.');\n const projectId = inferProjectId(options.projectId);\n return transport.request('chats', {\n action: 'delete',\n taskId: options.taskId,\n ...(projectId != null ? { projectId } : {})\n });\n }\n throw new Error(`manageAgentChatMitra: action inválida (${(options as ManageAgentChatOptions).action}).`);\n}\n\n/**\n * Abre um handle de chat (session). Use:\n * - `{ create: true }` para iniciar um chat novo\n * - `{ taskId: 'X' }` para abrir um chat existente\n *\n * A session expõe histórico, streaming, fila, cancel e eventos. Se a\n * mesma taskId for aberta duas vezes, retorna a MESMA instância (cache).\n */\nexport function getAgentTaskMitra(options: GetAgentTaskOptions): IAgentTaskSession {\n if ('taskId' in options && options.taskId) {\n const cached = sessionsByTaskId.get(options.taskId);\n if (cached) return cached as unknown as IAgentTaskSession;\n return new AgentTaskSession(\n { kind: 'existing', taskId: options.taskId, projectId: inferProjectId(options.projectId) },\n transport\n );\n }\n if ('create' in options && options.create) {\n return new AgentTaskSession(\n {\n kind: 'new',\n projectId: options.projectId,\n agentType: options.agentType,\n modelId: options.modelId,\n name: options.name,\n connectionId: options.connectionId\n },\n transport\n );\n }\n throw new Error('getAgentTaskMitra: passe { create: true } ou { taskId }.');\n}\n\n","/**\n * Mitra Interactions SDK — Agent Credentials\n *\n * Função ÚNICA `manageAgentCredentialMitra` sobre /sdk-ws para todas as\n * operações de credencial do agente:\n * - API keys (8 providers: anthropic, openai, gemini, kimi, minimax, glm, qwen, openrouter)\n * - Subscriptions OAuth (Claude paste-código / OpenAI device flow via Codex)\n *\n * Actions de baixo nível (RPC direto contra o backend):\n * status | remove | list | list_models | validate | save\n * oauth_start | oauth_exchange | device_start | device_poll | device_cancel\n *\n * Actions de alto nível (orquestradas na SDK — o app controla UI/popup/timing):\n * auth — inicia o fluxo e retorna o que a UI mostra (sem efeito colateral\n * de janela). claude → { authUrl, state }; codex → { userCode,\n * verificationUrl, pollId }.\n * connect — finaliza/salva. claude → passa { code, state }; codex → passa\n * { pollId } e a SDK faz o polling até autorizar.\n *\n * Fluxo típico (sem callbacks, sem redirect, sem callback page):\n * const { authUrl, state } = await manageAgentCredentialMitra({ action:'auth', target:'claude' });\n * // app abre authUrl + coleta o código do user\n * await manageAgentCredentialMitra({ action:'connect', target:'claude', code, state });\n *\n * const { userCode, verificationUrl, pollId } = await manageAgentCredentialMitra({ action:'auth', target:'codex' });\n * // app mostra \"abra {verificationUrl}, digite {userCode}\"\n * await manageAgentCredentialMitra({ action:'connect', target:'codex', pollId });\n *\n * SEGURANÇA: o token de subscription NUNCA volta cru pro cliente. É salvo\n * server-side (Firestore) e injetado no sandbox E2B direto de lá.\n */\n\nimport { inferProjectId } from './config';\nimport { getTransport } from './agent-chat';\nimport type {\n ManageAgentCredentialOptions,\n ManageAgentCredentialResult,\n AuthAgentCredentialOptions,\n AuthAgentCredentialResult,\n ConnectAgentCredentialOptions,\n ConnectAgentSubscriptionResult,\n CredentialAction,\n CredentialTarget,\n ConnectableSubscriptionTarget,\n} from './types';\n\n// PKCE verifier guardado entre auth(claude) e connect(claude), indexado por\n// state. Assim o app só lida com { code, state } — nunca vê o codeVerifier.\nconst pendingVerifiers = new Map<string, string>();\n\n// ── API pública (overloads) ────────────────────────────────────────────────\n\n/**\n * Inicia um fluxo de subscription. Não abre janelas — retorna os dados pra UI:\n * claude → { authUrl, state } codex → { userCode, verificationUrl, pollId }\n */\nexport function manageAgentCredentialMitra(\n options: AuthAgentCredentialOptions\n): Promise<AuthAgentCredentialResult>;\n\n/**\n * Finaliza/salva uma subscription:\n * claude → { code, state } codex → { pollId } (a SDK faz o polling)\n */\nexport function manageAgentCredentialMitra(\n options: ConnectAgentCredentialOptions\n): Promise<ConnectAgentSubscriptionResult>;\n\n/**\n * RPC direto contra o backend. Retorno depende de (action, target).\n *\n * @example\n * await manageAgentCredentialMitra({ action: 'list' });\n * await manageAgentCredentialMitra({ action: 'list_models' });\n * await manageAgentCredentialMitra({ action: 'status', target: 'anthropic' });\n * await manageAgentCredentialMitra({ action: 'validate', target: 'openai', key: 'sk-...' });\n * await manageAgentCredentialMitra({ action: 'save', target: 'glm', key: '...' });\n * await manageAgentCredentialMitra({ action: 'remove', target: 'claude' });\n */\nexport function manageAgentCredentialMitra<R = ManageAgentCredentialResult>(\n options: ManageAgentCredentialOptions\n): Promise<R>;\n\nexport function manageAgentCredentialMitra(\n options: ManageAgentCredentialOptions | AuthAgentCredentialOptions | ConnectAgentCredentialOptions\n): Promise<any> {\n if (options.action === 'auth') return authSubscription(options as AuthAgentCredentialOptions);\n if (options.action === 'connect') return connectSubscription(options as ConnectAgentCredentialOptions);\n return rpc(options as ManageAgentCredentialOptions);\n}\n\n// ── RPC de baixo nível ─────────────────────────────────────────────────────\n\nfunction rpc<R>(options: ManageAgentCredentialOptions): Promise<R> {\n const transport = getTransport();\n const { action, target, connectionId, ...rest } = options as ManageAgentCredentialOptions & Record<string, unknown>;\n\n // Backend espera `data` com os fields action-específicos. Empacotamos tudo\n // que não é action/target/connectionId em data (descartando undefined).\n const data: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(rest)) {\n if (v !== undefined) data[k] = v;\n }\n\n // connectionId vai no TOPO do payload (o backend lê payload.connectionId pra\n // escopar a credencial na connection do projeto + RBAC dev-only nas escritas).\n // projectId acompanha o connectionId no TOPO do payload: os dois escopam a\n // credencial no projeto. Inferido do config quando não vier nas options.\n const projectId = inferProjectId((options as { projectId?: number }).projectId);\n return transport.request<R>('credentials', {\n action,\n target,\n connectionId,\n ...(projectId != null ? { projectId } : {}),\n data\n });\n}\n\n// ── auth: inicia o fluxo ───────────────────────────────────────────────────\n\nasync function authSubscription(\n options: AuthAgentCredentialOptions\n): Promise<AuthAgentCredentialResult> {\n const { target } = options;\n\n if (target === 'claude') {\n const start = await rpc<{ authUrl: string; state: string; codeVerifier: string }>({\n action: 'oauth_start',\n target: 'claude'\n });\n pendingVerifiers.set(start.state, start.codeVerifier);\n return { target: 'claude', authUrl: start.authUrl, state: start.state };\n }\n\n if (target === 'codex') {\n const start = await rpc<{ pollId: string; userCode: string | null; verificationUrl: string | null }>({\n action: 'device_start',\n target: 'codex'\n });\n return {\n target: 'codex',\n userCode: start.userCode,\n verificationUrl: start.verificationUrl,\n pollId: start.pollId\n };\n }\n\n throw new Error(`manageAgentCredentialMitra(auth): target inválido (${target}). Use 'claude' ou 'codex'.`);\n}\n\n// ── connect: finaliza/salva ─────────────────────────────────────────────────\n\nfunction connectSubscription(\n options: ConnectAgentCredentialOptions\n): Promise<ConnectAgentSubscriptionResult> {\n const { target } = options;\n if (target === 'claude') return connectClaude(options);\n if (target === 'codex') return connectCodex(options);\n throw new Error(`manageAgentCredentialMitra(connect): target inválido (${target}). Use 'claude' ou 'codex'.`);\n}\n\nasync function connectClaude(\n options: ConnectAgentCredentialOptions\n): Promise<ConnectAgentSubscriptionResult> {\n const { code, state } = options;\n if (!code || !state) {\n throw new Error('manageAgentCredentialMitra(connect, claude): code e state são obrigatórios (state vem de auth).');\n }\n const codeVerifier = pendingVerifiers.get(state);\n\n const exchange = await rpc<{\n success: boolean;\n expiresAt: number;\n account: { email: string; orgName: string } | null;\n }>({\n action: 'oauth_exchange',\n target: 'claude',\n code,\n state,\n // Se a SDK ainda tem o verifier (mesmo runtime), envia; senão o backend\n // resolve via state (pkceStore). Cobre os dois caminhos.\n ...(codeVerifier ? { codeVerifier } : {})\n });\n\n pendingVerifiers.delete(state);\n\n return {\n target: 'claude',\n success: exchange.success === true,\n expiresAt: exchange.expiresAt,\n account: exchange.account ?? null\n };\n}\n\nasync function connectCodex(\n options: ConnectAgentCredentialOptions\n): Promise<ConnectAgentSubscriptionResult> {\n const { pollId } = options;\n if (!pollId) {\n throw new Error('manageAgentCredentialMitra(connect, codex): pollId é obrigatório (vem de auth).');\n }\n\n const pollInterval = options.pollIntervalMs ?? 2000;\n const deadline = Date.now() + (options.deviceTimeoutMs ?? 15 * 60_000);\n\n while (Date.now() < deadline) {\n const result = await rpc<{\n status: 'starting' | 'waiting_for_user' | 'completed' | 'failed' | 'expired' | 'not_found';\n error?: string | null;\n }>({ action: 'device_poll', target: 'codex', pollId });\n\n if (result.status === 'completed') {\n return { target: 'codex', success: true };\n }\n if (result.status === 'failed' || result.status === 'expired' || result.status === 'not_found') {\n throw new Error(`manageAgentCredentialMitra(connect, codex): ${result.status}${result.error ? ` — ${result.error}` : ''}`);\n }\n await sleep(pollInterval);\n }\n\n await rpc({ action: 'device_cancel', target: 'codex', pollId }).catch(() => {});\n throw new Error('manageAgentCredentialMitra(connect, codex): timeout.');\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n\n// Re-exports utilitários para o caller\nexport type {\n ManageAgentCredentialOptions,\n ManageAgentCredentialResult,\n AuthAgentCredentialOptions,\n AuthAgentCredentialResult,\n ConnectAgentCredentialOptions,\n ConnectAgentSubscriptionResult,\n CredentialAction,\n CredentialTarget,\n ConnectableSubscriptionTarget\n};\n","/**\n * Mitra Interactions SDK - Instance\n *\n * Permite múltiplas instâncias configuradas independentemente.\n */\n\nimport type { MitraConfig } from './config';\nimport { stripBearer, updateGlobalToken } from './config';\nimport { refreshTokenSilently } from './auth';\nimport { openChatMitra, closeChatMitra } from './chat';\nimport {\n sendPasswordResetCodeMitra,\n validatePasswordResetCodeMitra,\n resetPasswordMitra\n} from './password-reset';\nimport {\n getAgentTaskMitra,\n manageAgentChatMitra\n} from './agent-chat';\nimport { manageAgentCredentialMitra } from './agent-credentials';\nimport type { LoginResponse } from './types';\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 ExecutePublicServerFunctionOptions,\n ExecutePublicServerFunctionResponse,\n ExecutePublicServerFunctionAsyncResponse,\n GetPublicServerFunctionExecutionOptions,\n GetPublicServerFunctionExecutionResponse,\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 // Password Reset\n SendPasswordResetCodeOptions,\n ValidatePasswordResetCodeOptions,\n ResetPasswordOptions,\n // Agent Chat\n GetAgentTaskOptions,\n AgentTaskSession,\n ManageAgentChatOptions,\n ManageAgentCredentialOptions,\n ConnectAgentCredentialOptions\n} from './types';\n\n// ── HTTP Helpers ──────────────────────────────────────────────────────\n\nfunction formatToken(token: string): string {\n return `Bearer ${stripBearer(token)}`;\n}\n\nfunction getFetch(): typeof fetch {\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\n}\n\nfunction buildQuery(params: Record<string, unknown>): string {\n return Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n}\n\n// ── MitraInstance ─────────────────────────────────────────────────────\n\nexport interface MitraInstance {\n readonly config: MitraConfig;\n\n // Services\n executeDataLoader(options: ExecuteDataLoaderOptions): Promise<ExecuteDataLoaderResponse>;\n executeDbAction(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse>;\n setFileStatus(options: SetFileStatusOptions): Promise<SetFileStatusResponse>;\n setVariable(options: SetVariableOptions): Promise<SetVariableResponse>;\n listVariables(options?: ListVariablesOptions): Promise<ListVariablesResponse>;\n getVariable(options: GetVariableOptions): Promise<GetVariableResponse>;\n runAction(options: RunActionOptions): Promise<RunActionResponse>;\n executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;\n executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;\n executePublicServerFunction(options: ExecutePublicServerFunctionOptions): Promise<ExecutePublicServerFunctionResponse>;\n executePublicServerFunctionAsync(options: ExecutePublicServerFunctionOptions): Promise<ExecutePublicServerFunctionAsyncResponse>;\n getPublicServerFunctionExecution(options: GetPublicServerFunctionExecutionOptions): Promise<GetPublicServerFunctionExecutionResponse>;\n stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;\n\n // Upload de Arquivos\n uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\n\n // Integrations\n listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;\n callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;\n\n // Dynamic Schema CRUD\n listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;\n getRecord(options: GetRecordOptions): Promise<Record<string, any>>;\n createRecord(options: CreateRecordOptions): Promise<Record<string, any>>;\n updateRecord(options: UpdateRecordOptions): Promise<Record<string, any>>;\n patchRecord(options: PatchRecordOptions): Promise<Record<string, any>>;\n deleteRecord(options: DeleteRecordOptions): Promise<void>;\n createRecordsBatch(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;\n\n // Profile Management\n listProfiles(options?: ListProfilesOptions): Promise<ListProfilesResponse>;\n getProfileDetails(options: GetProfileDetailsOptions): Promise<GetProfileDetailsResponse>;\n createProfile(options: CreateProfileOptions): Promise<CreateProfileResponse>;\n updateProfile(options: UpdateProfileOptions): Promise<UpdateProfileResponse>;\n deleteProfile(options: DeleteProfileOptions): Promise<DeleteProfileResponse>;\n setProfileUsers(options: SetProfileUsersOptions): Promise<SetProfilePermissionResponse>;\n setProfileSelectTables(options: SetProfileSelectTablesOptions): Promise<SetProfilePermissionResponse>;\n setProfileDmlTables(options: SetProfileDmlTablesOptions): Promise<SetProfilePermissionResponse>;\n setProfileActions(options: SetProfileActionsOptions): Promise<SetProfilePermissionResponse>;\n setProfileScreens(options: SetProfileScreensOptions): Promise<SetProfilePermissionResponse>;\n setProfileServerFunctions(options: SetProfileServerFunctionsOptions): Promise<SetProfilePermissionResponse>;\n\n // Password Reset (pré-login)\n sendPasswordResetCode(options: SendPasswordResetCodeOptions): Promise<Record<string, unknown>>;\n validatePasswordResetCode(options: ValidatePasswordResetCodeOptions): Promise<Record<string, unknown>>;\n resetPassword(options: ResetPasswordOptions): Promise<Record<string, unknown>>;\n\n // Agent Chat (embedded)\n getAgentTask(options: GetAgentTaskOptions): AgentTaskSession;\n manageAgentChat(options: ManageAgentChatOptions): Promise<unknown>;\n manageAgentCredential(options: ManageAgentCredentialOptions | ConnectAgentCredentialOptions): Promise<unknown>;\n\n // Chat\n openChat(): void;\n closeChat(): void;\n}\n\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\n let _config: MitraConfig = {\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\n token: initialConfig.token ? stripBearer(initialConfig.token) : '',\n integrationURL: initialConfig.integrationURL,\n authUrl: initialConfig.authUrl,\n projectId: initialConfig.projectId\n };\n\n // ── Internal helpers ──\n\n function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (_config.projectId != null) return _config.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n }\n\n function authHeaders(): Record<string, string> {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (_config.token) headers['Authorization'] = formatToken(_config.token);\n return headers;\n }\n\n async function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw { message: msg, status: response.status, details: data };\n }\n return data as T;\n }\n\n // ── Token refresh silencioso ──\n\n let refreshInFlight: Promise<boolean> | null = null;\n\n /** Single-flight: chamadas concorrentes compartilham a mesma renovacao. */\n function tryRefreshToken(): Promise<boolean> {\n if (refreshInFlight) return refreshInFlight;\n const attempt = doRefreshToken();\n refreshInFlight = attempt;\n const clear = (): void => { if (refreshInFlight === attempt) refreshInFlight = null; };\n attempt.then(clear, clear);\n return attempt;\n }\n\n async function doRefreshToken(): Promise<boolean> {\n if (!_config.token || _config.projectId == null || !_config.baseURL) return false;\n\n // Renovacao pela pagina de auth (iframe): usa a sessao do provider.\n // 2. Fallback: iframe (pra SSO com cookie de sessão do provider)\n if (!_config.authUrl || typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId!);\n _config = { ..._config, token: stripBearer(session.token) };\n updateGlobalToken(session.token);\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n const newHeaders = { ...authHeaders() };\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n }\n\n // HTTP main API (baseURL)\n async function request<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: authHeaders(),\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // HTTP upload (multipart/form-data)\n async function requestUpload<T>(endpoint: string, formData: FormData): Promise<T> {\n const url = `${_config.baseURL}${endpoint}`;\n const headers: Record<string, string> = {};\n if (_config.token) headers['Authorization'] = formatToken(_config.token);\n return fetchWithRefresh(url, {\n method: 'POST',\n headers,\n body: formData\n });\n }\n\n // HTTP tenant (baseURL + X-TenantID)\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: { ...authHeaders(), 'X-TenantID': String(tenantId) },\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // ── Instance ──\n\n const instance: MitraInstance & { _updateToken(token: string): void } = {\n get config() { return _config; },\n\n /** @internal — usado pelo MitraSDK para propagar token refresh */\n _updateToken(token: string) {\n _config = { ..._config, token };\n },\n\n // Services\n async executeDataLoader(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dataLoaderId: options.dataLoaderId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/interactions/executeDataLoader', { body });\n },\n\n async executeDbAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dbActionId: options.dbActionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/interactions/executeDbAction', { body });\n },\n\n async setFileStatus(options) {\n return request('POST', '/interactions/setFileStatus', {\n body: { projectId: resolveProjectId(options.projectId), fileName: options.fileName, targetPath: options.targetPath }\n });\n },\n\n async setVariable(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), key: options.key };\n if (options.value !== undefined) body.value = options.value;\n return request('POST', '/interactions/setVariable', { body });\n },\n\n async listVariables(options = {}) {\n return request('GET', '/interactions/listVariables', { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async getVariable(options) {\n return request('GET', '/interactions/getVariable', { params: { projectId: resolveProjectId(options.projectId), key: options.key } });\n },\n\n async runAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), actionId: options.actionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/interactions/runAction', { body });\n },\n\n async executeServerFunction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/interactions/executeServerFunction', { body });\n },\n\n async executeServerFunctionAsync(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/interactions/executeServerFunctionAsync', { body });\n },\n\n async executePublicServerFunction(options) {\n const { projectId, serverFunctionId, input } = options;\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\n const fetchFn = getFetch();\n const response = await fetchFn(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n return handleResponse<ExecutePublicServerFunctionResponse>(response);\n },\n\n async executePublicServerFunctionAsync(options) {\n const { projectId, serverFunctionId, input } = options;\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\n const fetchFn = getFetch();\n const response = await fetchFn(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n return handleResponse<ExecutePublicServerFunctionAsyncResponse>(response);\n },\n\n async getPublicServerFunctionExecution(options) {\n const { projectId, executionId } = options;\n const url = `${_config.baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\n const fetchFn = getFetch();\n const response = await fetchFn(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' }\n });\n return handleResponse<GetPublicServerFunctionExecutionResponse>(response);\n },\n\n async stopServerFunctionExecution(options) {\n return request('POST', '/interactions/stopServerFunctionExecution', {\n body: { projectId: resolveProjectId(options.projectId), executionId: options.executionId }\n });\n },\n\n // Upload de Arquivos\n async uploadFilePublic(options: UploadFileOptions) {\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 requestUpload('/interactions/uploadFilePublic', formData);\n },\n\n async uploadFileLoadable(options: UploadFileOptions) {\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 requestUpload('/interactions/uploadFileLoadable', formData);\n },\n\n // Integrations\n async listIntegrations(options = {}) {\n return request('GET', '/interactions/integrations', { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async callIntegration(options) {\n const body: Record<string, unknown> = {\n integrationSlug: options.connection,\n projectId: resolveProjectId(options.projectId),\n method: options.method\n };\n if (options.endpoint !== undefined) body.endpoint = options.endpoint;\n if (options.params !== undefined) body.params = options.params;\n if (options.body !== undefined) body.body = options.body;\n return request('POST', '/interactions/integrations/call', { body });\n },\n\n // Dynamic Schema CRUD\n async listRecords(options) {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return requestTenant('GET', `/interactions/records/${tableName}`, pid, { params: { page, size, jdbcConnectionConfigId, ...filters } });\n },\n\n async getRecord(options) {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return requestTenant('GET', `/interactions/records/${tableName}/${id}`, pid, { params: { jdbcConnectionConfigId } });\n },\n\n async createRecord(options) {\n const { tableName, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return requestTenant('POST', `/interactions/records/${tableName}`, pid, { body: data, params: { jdbcConnectionConfigId } });\n },\n\n async updateRecord(options) {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return requestTenant('PUT', `/interactions/records/${tableName}/${id}`, pid, { body: data, params: { jdbcConnectionConfigId } });\n },\n\n async patchRecord(options) {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return requestTenant('PATCH', `/interactions/records/${tableName}/${id}`, pid, { body: data, params: { jdbcConnectionConfigId } });\n },\n\n async deleteRecord(options) {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return requestTenant('DELETE', `/interactions/records/${tableName}/${id}`, pid, { params: { jdbcConnectionConfigId } });\n },\n\n async createRecordsBatch(options) {\n const { tableName, records, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return requestTenant('POST', `/interactions/records/${tableName}/batch`, pid, { body: records, params: { jdbcConnectionConfigId } });\n },\n\n // Profile Management\n async listProfiles(options = {}) {\n return request('GET', '/interactions/profiles', { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async getProfileDetails(options) {\n return request('GET', `/interactions/profiles/${options.profileId}`, { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async createProfile(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), name: options.name };\n if (options.color !== undefined) body.color = options.color;\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\n return request('POST', '/interactions/profiles', { body });\n },\n\n async updateProfile(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), profileId: options.profileId };\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 request('PUT', '/interactions/profiles', { body });\n },\n\n async deleteProfile(options) {\n return request('DELETE', '/interactions/profiles', { body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId } });\n },\n\n async setProfileUsers(options) {\n return request('POST', '/interactions/profiles/users', {\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, userIds: options.userIds }\n });\n },\n\n async setProfileSelectTables(options) {\n return request('POST', '/interactions/profiles/selectTables', {\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, tables: options.tables }\n });\n },\n\n async setProfileDmlTables(options) {\n return request('POST', '/interactions/profiles/dmlTables', {\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, tables: options.tables }\n });\n },\n\n async setProfileActions(options) {\n return request('POST', '/interactions/profiles/actions', {\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, actionIds: options.actionIds }\n });\n },\n\n async setProfileScreens(options) {\n return request('POST', '/interactions/profiles/screens', {\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, screenIds: options.screenIds }\n });\n },\n\n async setProfileServerFunctions(options) {\n return request('POST', '/interactions/profiles/serverFunctions', {\n body: { projectId: resolveProjectId(options.projectId), profileId: options.profileId, serverFunctionIds: options.serverFunctionIds }\n });\n },\n\n // Password Reset (pré-login)\n sendPasswordResetCode(options: SendPasswordResetCodeOptions) {\n return sendPasswordResetCodeMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\n },\n validatePasswordResetCode(options: ValidatePasswordResetCodeOptions) {\n return validatePasswordResetCodeMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\n },\n resetPassword(options: ResetPasswordOptions) {\n return resetPasswordMitra({ ...options, authUrl: options.authUrl ?? _config.authUrl });\n },\n\n // Agent Chat (embedded)\n getAgentTask(options: GetAgentTaskOptions) { return getAgentTaskMitra(options); },\n manageAgentChat(options: any) { return manageAgentChatMitra(options); },\n manageAgentCredential(options: any) { return manageAgentCredentialMitra(options); },\n\n // Chat\n openChat() { openChatMitra(); },\n closeChat() { closeChatMitra(); }\n };\n\n return instance;\n}\n","/**\n * Mitra Interactions SDK - Configuração\n */\n\nimport { createMitraInstance, type MitraInstance } from './instance';\n\nexport interface MitraConfig {\n /** URL base da API (ex: https://api.mitra.com). Opcional se houver window.__mitraEnv.apiBaseURL (build-proxy). */\n baseURL?: string;\n /** Token JWT para autenticação (opcional para Server Functions públicas) */\n token?: string;\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\n integrationURL?: string;\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\n authUrl?: string;\n /**\n * URL do WebSocket do agente (Agent Chat). Opcional: em apps publicadas pela\n * plataforma vem de window.__mitraEnv.agentWsUrl (build-proxy). Fora do browser\n * (ex: MitraSDK em Node) passe aqui — config explícito tem prioridade sobre o window.\n */\n agentWsUrl?: string;\n /**\n * Agent Chat via HTTP em vez de WebSocket (opt-in). Default: false (usa WS).\n * Quando true, gerência (list/rename/delete/history/credentials) e o prompt\n * vão por HTTP (resposta completa de uma vez, sem streaming). Requer que o\n * servidor do agente exponha as rotas HTTP (ver spec). NÃO quebra quem usa WS.\n */\n httpEnable?: boolean;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\n// ── Helpers ───────────────────────────────────────────────────────────\n\n/**\n * Remove todos os prefixos \"Bearer \" do início do token (case-insensitive,\n * repetidos) e espaços nas pontas. Garante que o token seja sempre guardado\n * cru, evitando \"Bearer Bearer ...\" quando o consumidor já passa o prefixo.\n */\nexport function stripBearer(token: string): string {\n let t = token.trim();\n while (/^bearer\\s+/i.test(t)) {\n t = t.replace(/^bearer\\s+/i, '').trim();\n }\n return t;\n}\n\n/**\n * Lê o payload do JWT sem validar assinatura (quem valida é o servidor).\n * Serve só pra decidir, no cliente, se vale renovar antes de usar o token.\n * Retorna null se o token não for um JWT legível.\n */\nexport function decodeJwtPayload(token: string): Record<string, unknown> | null {\n try {\n const part = stripBearer(token).split('.')[1];\n if (!part) return null;\n const b64 = part.replace(/-/g, '+').replace(/_/g, '/');\n const padded = b64 + '='.repeat((4 - (b64.length % 4)) % 4);\n const json = typeof atob === 'function'\n ? atob(padded)\n : Buffer.from(padded, 'base64').toString('utf8');\n return JSON.parse(json) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\n/**\n * true quando o token já venceu ou vence dentro da margem (default 60s).\n *\n * Existe por causa do WebSocket do Agent Chat: o token viaja na URL do\n * handshake e uma rejeição por token vencido NÃO chega ao JS como 401 — o\n * socket é apenas fechado. Sem 401 não há gatilho reativo, então a renovação\n * precisa acontecer ANTES de conectar. Token não-JWT ou sem `exp` devolve\n * false (deixa o servidor decidir).\n */\nexport function isTokenExpiring(token?: string, skewMs = 60_000): boolean {\n const t = token ?? globalConfig?.token;\n if (!t) return false;\n const payload = decodeJwtPayload(t);\n const exp = payload?.exp;\n if (typeof exp !== 'number') return false;\n return exp * 1000 - Date.now() < skewMs;\n}\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Lê configuração injetada pelo build-proxy do Mitra em apps publicadas.\n * Quando a SDK roda dentro de uma app publicada pela plataforma, todas\n * as URLs de infra já estão disponíveis em `window.__mitraEnv` — não há\n * necessidade de o consumidor passá-las manualmente.\n */\nfunction readInjectedEnv(): Partial<MitraConfig> {\n if (typeof window === 'undefined') return {};\n const env = (window as any).__mitraEnv;\n if (!env || typeof env !== 'object') return {};\n const out: Partial<MitraConfig> = {};\n if (typeof env.apiBaseURL === 'string' && env.apiBaseURL) out.baseURL = env.apiBaseURL;\n if (typeof env.integrationURL === 'string' && env.integrationURL) out.integrationURL = env.integrationURL;\n if (typeof env.authUrl === 'string' && env.authUrl) out.authUrl = env.authUrl;\n if (typeof env.agentWsUrl === 'string' && env.agentWsUrl) out.agentWsUrl = env.agentWsUrl;\n return out;\n}\n\n/**\n * Configura o SDK globalmente e retorna uma instância configurada.\n *\n * Em apps publicadas pelo Mitra (window.__mitraEnv presente), nenhum campo\n * precisa ser passado — todas as URLs vêm da injeção do build-proxy.\n * Em outros contextos, baseURL ainda é necessário (manual ou via login).\n */\nexport function configureSdkMitra(config: Partial<MitraConfig> = {}): MitraInstance {\n const injected = readInjectedEnv();\n const merged: MitraConfig = { ...injected, ...config };\n\n if (!merged.baseURL) {\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).');\n }\n\n // Normaliza o token (remove \"Bearer \" duplicado/extra) antes de guardar.\n if (merged.token != null) merged.token = stripBearer(merged.token);\n\n globalConfig = {\n ...merged,\n baseURL: merged.baseURL.replace(/\\/+$/, '')\n };\n\n if (merged.token && typeof window !== 'undefined') {\n // Init chat in background (if build-proxy injected the script)\n const chat = (window as any).__mitraChat;\n if (chat) chat.init(merged.token);\n }\n\n return createMitraInstance(globalConfig);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Atualiza o token global (usado internamente pelo refresh automático).\n */\nexport function updateGlobalToken(token: string): void {\n if (globalConfig) {\n globalConfig = { ...globalConfig, token: stripBearer(token) };\n }\n}\n\n/**\n * Mesma inferência do `resolveProjectId`, mas sem exigir: devolve o valor\n * passado, senão o global, senão `undefined`. Serve para campos opcionais —\n * quem não tem projectId configurado continua funcionando como antes.\n */\nexport function inferProjectId(projectId?: number): number | undefined {\n if (projectId != null) return projectId;\n return globalConfig?.projectId ?? undefined;\n}\n\n/**\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\n */\nexport function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (globalConfig?.projectId != null) return globalConfig.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n}\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","refreshInFlight","tryRefreshToken","doRefreshToken","fetchWithRefresh","_a"],"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","/**\r\n * Mitra Interactions SDK - Chat Integration\r\n *\r\n * Integrates with the __mitraChat object injected by the build-proxy\r\n * in published apps. Chat is initialized automatically by configureSdkMitra().\r\n */\r\n\r\n/**\r\n * Opens the Mitra Chat sidebar.\r\n * If chat is still loading, polls until ready (max 15s).\r\n */\r\nexport function openChatMitra(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const chat = (window as any).__mitraChat;\r\n if (!chat) return;\r\n\r\n if (chat.isReady) {\r\n chat.open();\r\n } else {\r\n const iv = setInterval(() => {\r\n if (chat.isReady) { clearInterval(iv); chat.open(); }\r\n }, 200);\r\n setTimeout(() => clearInterval(iv), 15000);\r\n }\r\n}\r\n\r\n/**\r\n * Closes the Mitra Chat sidebar.\r\n */\r\nexport function closeChatMitra(): void {\r\n if (typeof window === 'undefined') return;\r\n (window as any).__mitraChat?.close();\r\n}\r\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 * Renova a sessão pela página de auth (iframe invisível), que usa o cookie do\r\n * provider. Single-flight: chamadas concorrentes compartilham a mesma\r\n * tentativa — sem isso, operações que disparam juntas (listar modelos e\r\n * listar provedores, por exemplo) pediriam tokens em paralelo.\r\n */\r\nlet refreshInFlight: Promise<boolean> | null = null;\r\n\r\n/**\r\n * Renovação single-flight: chamadas concorrentes compartilham a MESMA\r\n * tentativa. Sem isto, operações que disparam juntas (listar modelos e\r\n * listar provedores, por exemplo) pediriam dois tokens em paralelo — e se o\r\n * emissor rotaciona a credencial, o segundo invalida o primeiro.\r\n */\r\nexport function tryRefreshToken(): Promise<boolean> {\r\n if (refreshInFlight) return refreshInFlight;\r\n const attempt = doRefreshToken();\r\n refreshInFlight = attempt;\r\n const clear = (): void => { if (refreshInFlight === attempt) refreshInFlight = null; };\r\n attempt.then(clear, clear);\r\n return attempt;\r\n}\r\n\r\nasync function doRefreshToken(): Promise<boolean> {\r\n const config = getConfig();\r\n\r\n if (!config.token || config.projectId == null || !config.baseURL) return false;\r\n\r\n // Renovacao pela pagina de auth (iframe): usa a sessao 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 // Download binário (Blob). Usado para baixar arquivos privados com credencial,\r\n // já que a resposta não é JSON. Mesma lógica de refresh-on-403 do fetchWithRefresh.\r\n async download(endpoint: string, params?: Record<string, unknown>): Promise<Blob> {\r\n const fetchFn = getFetch();\r\n const url = buildUrl(endpoint, params);\r\n let response = await fetchFn(url, { method: 'GET', headers: buildHeaders() });\r\n if (response.status === 403) {\r\n const refreshed = await tryRefreshToken();\r\n if (refreshed) {\r\n response = await fetchFn(url, { method: 'GET', headers: buildHeaders() });\r\n }\r\n }\r\n if (!response.ok) {\r\n const text = await response.text();\r\n let data: { message?: string; error?: string; hint?: string } | null = null;\r\n try {\r\n data = text ? JSON.parse(text) : null;\r\n } catch {\r\n // corpo não-JSON — mantém data null\r\n }\r\n const base = data?.message || data?.error || `HTTP ${response.status}`;\r\n throw {\r\n message: data?.hint ? `${base} — ${data.hint}` : base,\r\n status: response.status,\r\n details: data\r\n };\r\n }\r\n return response.blob();\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","/**\r\n * Mitra Interactions SDK - Services\r\n */\r\n\r\nimport { http, httpTenant } from './client';\r\nimport { getConfig, resolveProjectId } from './config';\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 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 DownloadFileOptions,\r\n DeleteFileOptions,\r\n DeleteFileResponse,\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 ExecutePublicServerFunctionOptions,\r\n ExecutePublicServerFunctionResponse,\r\n ExecutePublicServerFunctionAsyncResponse,\r\n GetPublicServerFunctionExecutionOptions,\r\n GetPublicServerFunctionExecutionResponse\r\n} from './types';\r\n\r\n/**\r\n * POST /interactions/executeDataLoader\r\n * Executa um Data Loader\r\n */\r\nexport async function executeDataLoaderMitra(options: ExecuteDataLoaderOptions): Promise<ExecuteDataLoaderResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n dataLoaderId: options.dataLoaderId\r\n };\r\n if (options.input !== undefined) body.input = options.input;\r\n return http.post('/interactions/executeDataLoader', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/executeDbAction\r\n * Executa uma DBAction (DML) cadastrada\r\n */\r\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n dbActionId: options.dbActionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/executeDbAction', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/setFileStatus\r\n * Move arquivo do chat para PUBLIC ou LOADABLE\r\n */\r\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\r\n return http.post('/interactions/setFileStatus', {\r\n projectId: resolveProjectId(options.projectId),\r\n fileName: options.fileName,\r\n targetPath: options.targetPath\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/setVariable\r\n * Cria ou atualiza uma variável customizada\r\n */\r\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n key: options.key\r\n };\r\n\r\n if (options.value !== undefined) {\r\n body.value = options.value;\r\n }\r\n\r\n return http.post('/interactions/setVariable', body);\r\n}\r\n\r\n/**\r\n * GET /interactions/listVariables?projectId={id}\r\n * Lista variáveis de um projeto\r\n */\r\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\r\n return http.get('/interactions/listVariables', {\r\n projectId: resolveProjectId(options.projectId)\r\n });\r\n}\r\n\r\n/**\r\n * GET /interactions/getVariable?projectId={id}&key={key}\r\n * Busca o valor de uma variável específica\r\n */\r\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\r\n return http.get('/interactions/getVariable', {\r\n projectId: resolveProjectId(options.projectId),\r\n key: options.key\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/runAction\r\n * Executa uma Action (fluxo de ação) cadastrada\r\n */\r\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n actionId: options.actionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/runAction', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/executeServerFunction\r\n * Executa uma Server Function de forma SÍNCRONA (timeout 60s no backend)\r\n */\r\nexport async function executeServerFunctionMitra(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n serverFunctionId: options.serverFunctionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/executeServerFunction', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/executeServerFunctionAsync\r\n * Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)\r\n */\r\nexport async function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n serverFunctionId: options.serverFunctionId\r\n };\r\n\r\n if (options.input !== undefined) {\r\n body.input = options.input;\r\n }\r\n\r\n return http.post('/interactions/executeServerFunctionAsync', body);\r\n}\r\n\r\n/**\r\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/execute\r\n * Executa uma Server Function pública de forma SÍNCRONA (sem autenticação).\r\n * A SF deve ter publicExecution = true. Timeout 5min.\r\n */\r\nexport async function executePublicServerFunctionMitra(\r\n options: ExecutePublicServerFunctionOptions\r\n): Promise<ExecutePublicServerFunctionResponse> {\r\n const { projectId, serverFunctionId, input } = options;\r\n const baseURL = getConfig().baseURL;\r\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n\r\n if (!response.ok) {\r\n const data = await response.json().catch(() => null);\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 response.json();\r\n}\r\n\r\n/**\r\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/executeAsync\r\n * Executa uma Server Function pública de forma ASSÍNCRONA (sem autenticação).\r\n * Retorna executionId imediatamente. Use getPublicServerFunctionExecutionMitra para polling.\r\n */\r\nexport async function executePublicServerFunctionAsyncMitra(\r\n options: ExecutePublicServerFunctionOptions\r\n): Promise<ExecutePublicServerFunctionAsyncResponse> {\r\n const { projectId, serverFunctionId, input } = options;\r\n const baseURL = getConfig().baseURL;\r\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(input || {})\r\n });\r\n\r\n if (!response.ok) {\r\n const data = await response.json().catch(() => null);\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 response.json();\r\n}\r\n\r\n/**\r\n * GET /public/serverFunction/{projectId}/execution/{executionId}\r\n * Consulta o status/resultado de uma execução pública de SF (sem autenticação).\r\n */\r\nexport async function getPublicServerFunctionExecutionMitra(\r\n options: GetPublicServerFunctionExecutionOptions\r\n): Promise<GetPublicServerFunctionExecutionResponse> {\r\n const { projectId, executionId } = options;\r\n const baseURL = getConfig().baseURL;\r\n const url = `${baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n\r\n if (!response.ok) {\r\n const data = await response.json().catch(() => null);\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 response.json();\r\n}\r\n\r\n/**\r\n * GET /interactions/integrations?projectId=X\r\n * Lista integrações configuradas no projeto\r\n */\r\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\r\n return http.get('/interactions/integrations', {\r\n projectId: resolveProjectId(options.projectId)\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/integrations/call\r\n * Chama uma API externa via serviço de integrações\r\n * Mapeia connection → integrationSlug no body\r\n */\r\nexport async function callIntegrationMitra(options: CallIntegrationOptions): Promise<CallIntegrationResponse> {\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\r\n if (options.endpoint !== undefined) {\r\n body.endpoint = options.endpoint;\r\n }\r\n\r\n if (options.params !== undefined) {\r\n body.params = options.params;\r\n }\r\n\r\n if (options.body !== undefined) {\r\n body.body = options.body;\r\n }\r\n\r\n return http.post('/interactions/integrations/call', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/stopServerFunctionExecution\r\n * Para a execução de uma Server Function em andamento\r\n */\r\nexport async function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse> {\r\n return http.post('/interactions/stopServerFunctionExecution', {\r\n projectId: resolveProjectId(options.projectId),\r\n executionId: options.executionId\r\n });\r\n}\r\n\r\n// === Upload de Arquivos ===\r\n\r\n/**\r\n * POST /interactions/uploadFilePublic (multipart/form-data)\r\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\r\n */\r\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\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 http.upload('/interactions/uploadFilePublic', formData);\r\n}\r\n\r\n/**\r\n * POST /interactions/uploadFileLoadable (multipart/form-data)\r\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\r\n */\r\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\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 http.upload('/interactions/uploadFileLoadable', formData);\r\n}\r\n\r\n/**\r\n * POST /interactions/uploadFilePrivate (multipart/form-data)\r\n * Faz upload de um arquivo para a pasta PRIVATE do projeto. O arquivo NAO fica publico\r\n * no S3 (sem ACL public-read) — este e o modo recomendado/padrao. O acesso e feito por\r\n * download autenticado; use `result.currentPath` (a chave) para baixar ou excluir depois.\r\n * `result.publicUrl` sempre vem `null` para upload privado.\r\n */\r\nexport async function uploadFilePrivateMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\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 http.upload('/interactions/uploadFilePrivate', formData);\r\n}\r\n\r\n/**\r\n * GET /interactions/downloadFile\r\n * Baixa (com credencial) um arquivo privado do projeto e retorna o conteúdo como Blob.\r\n * `key` é a chave retornada no upload (`result.currentPath`).\r\n */\r\nexport async function downloadFilePrivateMitra(options: DownloadFileOptions): Promise<Blob> {\r\n return http.download('/interactions/downloadFile', {\r\n projectId: resolveProjectId(options.projectId),\r\n key: options.key\r\n });\r\n}\r\n\r\n/**\r\n * DELETE /interactions/deleteFile\r\n * Exclui um arquivo do projeto pela `key` (`result.currentPath` do upload).\r\n */\r\nexport async function deleteFileMitra(options: DeleteFileOptions): Promise<DeleteFileResponse> {\r\n return http.del('/interactions/deleteFile', {\r\n projectId: resolveProjectId(options.projectId),\r\n key: options.key\r\n });\r\n}\r\n\r\n// === Dynamic Schema CRUD ===\r\n\r\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\r\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.get(`/interactions/records/${tableName}`, pid, { page, size, jdbcConnectionConfigId, ...filters });\r\n}\r\n\r\nexport async function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.get(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.post(`/interactions/records/${tableName}`, pid, data, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function updateRecordMitra(options: UpdateRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.put(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function patchRecordMitra(options: PatchRecordOptions): Promise<Record<string, any>> {\r\n const { tableName, id, data, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.patch(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function deleteRecordMitra(options: DeleteRecordOptions): Promise<void> {\r\n const { tableName, id, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.del(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\r\n}\r\n\r\nexport async function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]> {\r\n const { tableName, records, jdbcConnectionConfigId } = options;\r\n const pid = resolveProjectId(options.projectId);\r\n return httpTenant.post(`/interactions/records/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\r\n}\r\n\r\n// === Profile Management ===\r\n\r\n/**\r\n * GET /interactions/profiles?projectId={id}\r\n * Lista todos os perfis do projeto\r\n */\r\nexport async function listProfilesMitra(options: ListProfilesOptions = {}): Promise<ListProfilesResponse> {\r\n return http.get('/interactions/profiles', { projectId: resolveProjectId(options.projectId) });\r\n}\r\n\r\n/**\r\n * GET /interactions/profiles/{profileId}?projectId={id}\r\n * Detalhes de um perfil (usuários, tabelas, actions, screens, server functions)\r\n */\r\nexport async function getProfileDetailsMitra(options: GetProfileDetailsOptions): Promise<GetProfileDetailsResponse> {\r\n return http.get(`/interactions/profiles/${options.profileId}`, { projectId: resolveProjectId(options.projectId) });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles\r\n * Cria um novo perfil\r\n */\r\nexport async function createProfileMitra(options: CreateProfileOptions): Promise<CreateProfileResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n name: options.name\r\n };\r\n if (options.color !== undefined) body.color = options.color;\r\n if (options.homeScreenId !== undefined) body.homeScreenId = options.homeScreenId;\r\n return http.post('/interactions/profiles', body);\r\n}\r\n\r\n/**\r\n * PUT /interactions/profiles\r\n * Atualiza um perfil existente\r\n */\r\nexport async function updateProfileMitra(options: UpdateProfileOptions): Promise<UpdateProfileResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId\r\n };\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 http.put('/interactions/profiles', body);\r\n}\r\n\r\n/**\r\n * DELETE /interactions/profiles\r\n * Deleta um perfil\r\n */\r\nexport async function deleteProfileMitra(options: DeleteProfileOptions): Promise<DeleteProfileResponse> {\r\n return http.delBody('/interactions/profiles', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/users\r\n * Define os usuários de um perfil (substitui lista atual)\r\n */\r\nexport async function setProfileUsersMitra(options: SetProfileUsersOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/users', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n userIds: options.userIds\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/selectTables\r\n * Define as tabelas SELECT permitidas por perfil\r\n */\r\nexport async function setProfileSelectTablesMitra(options: SetProfileSelectTablesOptions): Promise<SetProfilePermissionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n tables: options.tables\r\n };\r\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\r\n return http.post('/interactions/profiles/selectTables', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/dmlTables\r\n * Define as tabelas DML permitidas por perfil\r\n */\r\nexport async function setProfileDmlTablesMitra(options: SetProfileDmlTablesOptions): Promise<SetProfilePermissionResponse> {\r\n const body: Record<string, unknown> = {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n tables: options.tables\r\n };\r\n if (options.jdbcConnectionConfigId !== undefined) body.jdbcConnectionConfigId = options.jdbcConnectionConfigId;\r\n return http.post('/interactions/profiles/dmlTables', body);\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/actions\r\n * Define as actions permitidas por perfil\r\n */\r\nexport async function setProfileActionsMitra(options: SetProfileActionsOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/actions', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n actionIds: options.actionIds\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/screens\r\n * Define as screens permitidas por perfil\r\n */\r\nexport async function setProfileScreensMitra(options: SetProfileScreensOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/screens', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n screenIds: options.screenIds\r\n });\r\n}\r\n\r\n/**\r\n * POST /interactions/profiles/serverFunctions\r\n * Define as server functions permitidas por perfil\r\n */\r\nexport async function setProfileServerFunctionsMitra(options: SetProfileServerFunctionsOptions): Promise<SetProfilePermissionResponse> {\r\n return http.post('/interactions/profiles/serverFunctions', {\r\n projectId: resolveProjectId(options.projectId),\r\n profileId: options.profileId,\r\n serverFunctionIds: options.serverFunctionIds\r\n });\r\n}\r\n\r\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 connectionId?: string;\r\n}\r\n\r\ninterface SessionInitExisting {\r\n kind: 'existing';\r\n taskId: string;\r\n /** Sem isto, a sessao reaberta manda send_prompt sem projectId. */\r\n projectId?: number;\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 private _connectionId?: 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 // Vale para os dois ramos: sem isto a sessao reaberta por taskId manda\r\n // send_prompt e get_history sem projectId.\r\n this._projectId = init.projectId;\r\n\r\n if (init.kind === 'new') {\r\n this._agentType = init.agentType;\r\n this._modelId = init.modelId;\r\n this._initialName = init.name;\r\n this._connectionId = init.connectionId;\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 (this._projectId != null) payload.projectId = this._projectId;\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._connectionId) payload.connectionId = this._connectionId;\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 {\r\n source: 'sdk_cancel',\r\n ...(this._projectId != null ? { projectId: this._projectId } : {})\r\n },\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, isTokenExpiring, inferProjectId} from './config';\r\nimport { tryRefreshToken } from './client';\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 // 1. Config explícito (configureSdkMitra({ agentWsUrl })) — necessário fora do\r\n // browser, ex: MitraSDK em Node. Tem prioridade sobre o window.\r\n const configured = getConfig().agentWsUrl;\r\n if (typeof configured === 'string' && configured) return configured;\r\n // 2. Fallback: window.__mitraEnv.agentWsUrl, injetado pelo build-proxy do\r\n // Mitra em apps publicadas pela plataforma (leitura ao vivo no connect,\r\n // caso __mitraEnv seja injetado depois do configureSdkMitra).\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: agentWsUrl indisponível. Passe em configureSdkMitra({ agentWsUrl }) ou rode em uma app publicada pelo Mitra (build-proxy injeta window.__mitraEnv.agentWsUrl).');\r\n}\r\n\r\n// ── HTTP transport (opt-in via configureSdkMitra({ httpEnable: true })) ────\r\n// Espelha o WS sobre HTTP, sem streaming: a resposta vem completa de uma vez.\r\n// Base HTTP derivada do agentWsUrl (ws→http, wss→https, sem querystring).\r\n// Rotas (o servidor do agente precisa expor — ver spec):\r\n// POST {base}/request { type, payload } → { ok, data?, error? }\r\n// POST {base}/prompt { ...send_prompt, taskId? } → { taskId, task?, content }\r\n\r\nfunction isHttpEnabled(): boolean {\r\n return getConfig().httpEnable === true;\r\n}\r\n\r\nfunction getAgentHttpBase(): string {\r\n return getWsUrl().split('?')[0].replace(/^ws/i, 'http').replace(/\\/+$/, '');\r\n}\r\n\r\nasync function agentHttpPost(path: string, body: unknown): Promise<any> {\r\n const fetchFn: typeof fetch = (globalThis as any).fetch;\r\n if (typeof fetchFn !== 'function') {\r\n throw new Error('Agent Chat (HTTP): fetch indisponível. Use Node 18+ ou um browser.');\r\n }\r\n // Mesma antecipação do WS: este canal fala direto com o agente, sem passar\r\n // pelo http client que trata 401.\r\n if (isTokenExpiring()) await tryRefreshToken();\r\n const resp = await fetchFn(`${getAgentHttpBase()}${path}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${getRawToken()}`\r\n },\r\n body: JSON.stringify(body)\r\n });\r\n const text = await resp.text().catch(() => '');\r\n const data = text ? JSON.parse(text) : null;\r\n if (!resp.ok) {\r\n throw new Error(data?.error || data?.message || `Agent Chat (HTTP ${resp.status})`);\r\n }\r\n return data;\r\n}\r\n\r\n/** Prompt via HTTP: POST → resposta completa → injeta os mesmos eventos do WS. */\r\nasync function httpSendPrompt(payload: Record<string, unknown>, taskId?: string): Promise<void> {\r\n const data = await agentHttpPost('/prompt', { ...payload, ...(taskId ? { taskId } : {}) });\r\n const resolvedTaskId: string = data?.taskId || taskId || '';\r\n const content: string = data?.content ?? '';\r\n // Sintetiza a sequência de eventos que o WS mandaria — as sessions não mudam.\r\n if (data?.task) {\r\n routeMessage({ type: 'task_update', payload: { action: 'created', task: data.task } });\r\n }\r\n if (resolvedTaskId) {\r\n routeMessage({ type: 'turn_started', taskId: resolvedTaskId });\r\n routeMessage({ type: 'stream_delta', taskId: resolvedTaskId, payload: { delta: content } });\r\n routeMessage({ type: 'stream_end', taskId: resolvedTaskId });\r\n }\r\n}\r\n\r\n// ── Connection ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Erros que significam \"o canal caiu\", não \"o servidor recusou a operação\".\r\n * Só esses valem uma retentativa com sessão renovada.\r\n */\r\nfunction isChannelError(err: unknown): boolean {\r\n const msg = err instanceof Error ? err.message : String(err ?? '');\r\n return /conexão fechada|timeout ao conectar|erro ao conectar/i.test(msg);\r\n}\r\n\r\n/** \" (4003 Forbidden)\" a partir do CloseEvent, quando o servidor informa. */\r\nfunction closeDetail(event?: { code?: number; reason?: string }): string {\r\n const code = event?.code;\r\n const reason = (event?.reason ?? '').trim();\r\n if (!code && !reason) return '';\r\n if (code && reason) return ` (${code} ${reason})`;\r\n return code ? ` (${code})` : ` (${reason})`;\r\n}\r\n\r\n/** Abre o socket com o token ATUAL — ele viaja na URL do handshake. */\r\nfunction openSocket(): Promise<WebSocket> {\r\n const baseUrl = getWsUrl();\r\n const token = getRawToken();\r\n const separator = baseUrl.includes('?') ? '&' : '?';\r\n // O servidor valida o escopo NO HANDSHAKE: token sem `tni` e sem projectId\r\n // na query derruba a conexao antes de qualquer mensagem ser lida, e nenhum\r\n // payload adiante importa. Mandar o projectId aqui cobre o token sem tenant.\r\n const projectId = inferProjectId();\r\n const escopo = projectId != null ? `&projectId=${encodeURIComponent(projectId)}` : '';\r\n const url = `${baseUrl}${separator}token=${encodeURIComponent(token)}${escopo}`;\r\n\r\n return 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 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 resolve(socket);\r\n };\r\n\r\n socket.onerror = () => {\r\n if (!opened) {\r\n clearTimeout(timer);\r\n reject(new Error('Agent Chat: erro ao conectar no WebSocket'));\r\n }\r\n };\r\n\r\n socket.onclose = (event) => {\r\n if (ws === socket) ws = null;\r\n // O servidor aceita o upgrade e SÓ ENTÃO valida: token vencido volta\r\n // como close 4003 Forbidden, não como 401. Guardar code e reason é o\r\n // que separa \"sessão inválida\" de \"a rede caiu\".\r\n const detalhe = closeDetail(event);\r\n if (!opened) {\r\n clearTimeout(timer);\r\n reject(new Error(`Agent Chat: conexão fechada${detalhe}`));\r\n }\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${detalhe}`));\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\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 attempt = (async () => {\r\n // PROATIVO: o token viaja na URL do handshake e uma rejeição por token\r\n // vencido NÃO chega como 401 — o socket é só fechado. Sem 401 não há\r\n // gatilho reativo, então renova ANTES de abrir.\r\n if (isTokenExpiring()) await tryRefreshToken();\r\n try {\r\n return await openSocket();\r\n } catch (err) {\r\n // REATIVO: caiu mesmo assim (venceu no meio, revogado). Renova e tenta\r\n // UMA vez; sem renovação, sobe o erro original em vez de repetir uma\r\n // tentativa idêntica à que acabou de falhar.\r\n if (!isChannelError(err)) throw err;\r\n const refreshed = await tryRefreshToken();\r\n if (!refreshed) throw err;\r\n return openSocket();\r\n }\r\n })();\r\n\r\n connectPromise = attempt;\r\n const clear = (): void => { if (connectPromise === attempt) connectPromise = null; };\r\n attempt.then(clear, clear);\r\n return attempt;\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\n/** Uma ida ao servidor pelo socket: conecta (ou reusa), manda e espera a resposta. */\r\nfunction requestOverSocket<T>(type: string, payload: Record<string, unknown>): Promise<T> {\r\n return connect().then((socket) => new Promise<T>((resolve, reject) => {\r\n const requestId = nextRequestId();\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\nconst transport = {\r\n async ensureConnected(): Promise<void> {\r\n if (isHttpEnabled()) return; // modo HTTP: não abre WebSocket\r\n await connect();\r\n },\r\n\r\n async request<T>(type: string, payload: Record<string, unknown>): Promise<T> {\r\n // HTTP opt-in: req/resp direto, sem WS.\r\n if (isHttpEnabled()) {\r\n const data = await agentHttpPost('/request', { type, payload });\r\n if (data && data.ok === false) throw new Error(data.error || 'Erro desconhecido');\r\n return (data?.data ?? data) as T;\r\n }\r\n try {\r\n return await requestOverSocket<T>(type, payload);\r\n } catch (err) {\r\n // O servidor pode aceitar o handshake e fechar logo depois, com a\r\n // requisição em voo — nesse caminho o token vencido chega como\r\n // \"conexão fechada\", nunca como 401. Renova e tenta UMA vez.\r\n if (!isChannelError(err)) throw err;\r\n const refreshed = await tryRefreshToken();\r\n if (!refreshed) throw err;\r\n return requestOverSocket<T>(type, payload);\r\n }\r\n },\r\n\r\n send(type: string, payload: Record<string, unknown>, taskId?: string): void {\r\n // HTTP opt-in: só send_prompt tem tratativa (resposta completa de uma vez).\r\n // Outros tipos (ex: task_cancel) não fazem sentido no modo all-at-once — noop.\r\n if (isHttpEnabled()) {\r\n if (type === 'send_prompt') {\r\n httpSendPrompt(payload, taskId).catch((err) => {\r\n const tid = taskId || '';\r\n if (tid) routeMessage({ type: 'error', taskId: tid, payload: { error: err?.message || String(err) } });\r\n // eslint-disable-next-line no-console\r\n else console.error('[agent-chat] httpSendPrompt falhou:', err);\r\n });\r\n }\r\n return;\r\n }\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 const projectId = inferProjectId(options.projectId);\r\n return transport.request('chats', {\r\n action: 'rename',\r\n taskId: options.taskId,\r\n name: options.name.trim(),\r\n ...(projectId != null ? { projectId } : {})\r\n });\r\n }\r\n if (options.action === 'delete') {\r\n if (!options.taskId) throw new Error('manageAgentChatMitra(delete): taskId obrigatório.');\r\n const projectId = inferProjectId(options.projectId);\r\n return transport.request('chats', {\r\n action: 'delete',\r\n taskId: options.taskId,\r\n ...(projectId != null ? { projectId } : {})\r\n });\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, projectId: inferProjectId(options.projectId) },\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 connectionId: options.connectionId\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 { inferProjectId } from './config';\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, connectionId, ...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/connectionId 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 // connectionId vai no TOPO do payload (o backend lê payload.connectionId pra\r\n // escopar a credencial na connection do projeto + RBAC dev-only nas escritas).\r\n // projectId acompanha o connectionId no TOPO do payload: os dois escopam a\r\n // credencial no projeto. Inferido do config quando não vier nas options.\r\n const projectId = inferProjectId((options as { projectId?: number }).projectId);\r\n return transport.request<R>('credentials', {\r\n action,\r\n target,\r\n connectionId,\r\n ...(projectId != null ? { projectId } : {}),\r\n data\r\n });\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, updateGlobalToken } 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 DownloadFileOptions,\r\n DeleteFileOptions,\r\n DeleteFileResponse,\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 uploadFilePrivate(options: UploadFileOptions): Promise<UploadFileResponse>;\r\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\r\n downloadFilePrivate(options: DownloadFileOptions): Promise<Blob>;\r\n deleteFile(options: DeleteFileOptions): Promise<DeleteFileResponse>;\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 let refreshInFlight: Promise<boolean> | null = null;\r\n\r\n /** Single-flight: chamadas concorrentes compartilham a mesma renovacao. */\r\n function tryRefreshToken(): Promise<boolean> {\r\n if (refreshInFlight) return refreshInFlight;\r\n const attempt = doRefreshToken();\r\n refreshInFlight = attempt;\r\n const clear = (): void => { if (refreshInFlight === attempt) refreshInFlight = null; };\r\n attempt.then(clear, clear);\r\n return attempt;\r\n }\r\n\r\n async function doRefreshToken(): Promise<boolean> {\r\n if (!_config.token || _config.projectId == null || !_config.baseURL) return false;\r\n\r\n // Renovacao pela pagina de auth (iframe): usa a sessao do provider.\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 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 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 download (blob) — resposta binária (ex.: arquivo privado)\r\n async function requestDownload(endpoint: string, params?: Record<string, unknown>): Promise<Blob> {\r\n let url = `${_config.baseURL}${endpoint}`;\r\n if (params) { const q = buildQuery(params); if (q) url += `?${q}`; }\r\n const fetchFn = getFetch();\r\n let response = await fetchFn(url, { method: 'GET', headers: authHeaders() });\r\n if (response.status === 403) {\r\n const refreshed = await tryRefreshToken();\r\n if (refreshed) response = await fetchFn(url, { method: 'GET', headers: authHeaders() });\r\n }\r\n if (!response.ok) {\r\n const text = await response.text();\r\n let data: { message?: string; error?: string; hint?: string } | null = null;\r\n try {\r\n data = text ? JSON.parse(text) : null;\r\n } catch {\r\n // corpo não-JSON\r\n }\r\n const base = data?.message || data?.error || `HTTP ${response.status}`;\r\n throw { message: data?.hint ? `${base} — ${data.hint}` : base, status: response.status, details: data };\r\n }\r\n return response.blob();\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 uploadFilePrivate(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/uploadFilePrivate', 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 async downloadFilePrivate(options: DownloadFileOptions) {\r\n return requestDownload('/interactions/downloadFile', {\r\n projectId: resolveProjectId(options.projectId),\r\n key: options.key\r\n });\r\n },\r\n\r\n async deleteFile(options: DeleteFileOptions) {\r\n return request('DELETE', '/interactions/deleteFile', {\r\n params: { projectId: resolveProjectId(options.projectId), key: options.key }\r\n });\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 /**\r\n * URL do WebSocket do agente (Agent Chat). Opcional: em apps publicadas pela\r\n * plataforma vem de window.__mitraEnv.agentWsUrl (build-proxy). Fora do browser\r\n * (ex: MitraSDK em Node) passe aqui — config explícito tem prioridade sobre o window.\r\n */\r\n agentWsUrl?: string;\r\n /**\r\n * Agent Chat via HTTP em vez de WebSocket (opt-in). Default: false (usa WS).\r\n * Quando true, gerência (list/rename/delete/history/credentials) e o prompt\r\n * vão por HTTP (resposta completa de uma vez, sem streaming). Requer que o\r\n * servidor do agente exponha as rotas HTTP (ver spec). NÃO quebra quem usa WS.\r\n */\r\n httpEnable?: boolean;\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/**\r\n * Lê o payload do JWT sem validar assinatura (quem valida é o servidor).\r\n * Serve só pra decidir, no cliente, se vale renovar antes de usar o token.\r\n * Retorna null se o token não for um JWT legível.\r\n */\r\nexport function decodeJwtPayload(token: string): Record<string, unknown> | null {\r\n try {\r\n const part = stripBearer(token).split('.')[1];\r\n if (!part) return null;\r\n const b64 = part.replace(/-/g, '+').replace(/_/g, '/');\r\n const padded = b64 + '='.repeat((4 - (b64.length % 4)) % 4);\r\n const json = typeof atob === 'function'\r\n ? atob(padded)\r\n : Buffer.from(padded, 'base64').toString('utf8');\r\n return JSON.parse(json) as Record<string, unknown>;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * true quando o token já venceu ou vence dentro da margem (default 60s).\r\n *\r\n * Existe por causa do WebSocket do Agent Chat: o token viaja na URL do\r\n * handshake e uma rejeição por token vencido NÃO chega ao JS como 401 — o\r\n * socket é apenas fechado. Sem 401 não há gatilho reativo, então a renovação\r\n * precisa acontecer ANTES de conectar. Token não-JWT ou sem `exp` devolve\r\n * false (deixa o servidor decidir).\r\n */\r\nexport function isTokenExpiring(token?: string, skewMs = 60_000): boolean {\r\n const t = token ?? globalConfig?.token;\r\n if (!t) return false;\r\n const payload = decodeJwtPayload(t);\r\n const exp = payload?.exp;\r\n if (typeof exp !== 'number') return false;\r\n return exp * 1000 - Date.now() < skewMs;\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 if (typeof env.agentWsUrl === 'string' && env.agentWsUrl) out.agentWsUrl = env.agentWsUrl;\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 * Mesma inferência do `resolveProjectId`, mas sem exigir: devolve o valor\r\n * passado, senão o global, senão `undefined`. Serve para campos opcionais —\r\n * quem não tem projectId configurado continua funcionando como antes.\r\n */\r\nexport function inferProjectId(projectId?: number): number | undefined {\r\n if (projectId != null) return projectId;\r\n return globalConfig?.projectId ?? undefined;\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"]}
|