mitra-interactions-sdk 1.0.60-beta.21 → 1.0.60-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth-legacy.ts","../src/auth-new.ts","../src/auth.ts","../src/instance.ts","../src/config.ts","../src/client.ts","../src/services.ts"],"names":["resolveLoginOptions","autoConfigureFromLogin","getOriginFromUrl","loginWithGoogleMitra","loginWithMicrosoftMitra","loginMitra","_refreshPromise","refreshTokenSilently","exchangeSsoCodeMitra","getFetch","resolveProjectId","handleResponse","tryRefreshToken","_a","fetchWithRefresh","formatToken"],"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} 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 | string): 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 | string,\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 | string } {\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/**\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 | string): 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","/**\r\n * Mitra Interactions SDK - Autenticação (Novo Mitra)\r\n *\r\n * Implementação do auth para o novo Mitra (Kong gateway).\r\n * - Email login/signup/refresh: via BFF (mitra-legacy-bff), POST {gateway}/auth/*.\r\n * O BFF resolve projectId->appId, chama o mitra-iam e já devolve o envelope\r\n * { token, baseURL, integrationURL } que a SDK consome.\r\n * - SSO (Google): página atravessadora (sdk-auth.html) faz o start do OAuth e\r\n * devolve o `code` cru (popup via postMessage, redirect via #codeMitra). A SDK\r\n * troca o code por token no BFF (POST {gateway}/auth/{provider}), mesmo host do\r\n * /email/login. Provider-agnóstico: Microsoft entra só mudando a allowlist\r\n * quando o back liberar o endpoint. Suporta popup (desktop) e redirect (mobile).\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig, parseBody } from './config';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse\r\n} from './types';\r\n\r\n// ── Tipos internos ──────────────────────────────────────────────────\r\n\r\ninterface NewAuthTokenResponse {\r\n accessToken: string;\r\n refreshToken: string;\r\n tokenType: string;\r\n}\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\n// BFF (mitra-legacy-bff): mesmo gateway do baseURL, prefixo /auth. Espelha como o\r\n// resto do SDK alcança o BFF ({baseURL}/interactions/...); o gateway roteia pro BFF.\r\nfunction buildBffAuthEndpoint(gateway: string, path: string): string {\r\n const base = gateway.replace(/\\/+$/, '');\r\n return `${base}/auth${path}`;\r\n}\r\n\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number | string } {\r\n const config = isConfigured() ? getConfig() : null;\r\n // No novo Mitra, authUrl e baseURL apontam pro mesmo gateway. authUrl é mantido\r\n // por compat com a API legacy; se não vier, cai pro baseURL configurado.\r\n const authUrl = options?.authUrl || config?.authUrl || config?.baseURL;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl/baseURL é obrigatório. Configure via configureSdkMitra({ baseURL }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n return { authUrl, projectId };\r\n}\r\n\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number | string): void {\r\n if (!response.baseURL) return;\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.refreshToken ? { refreshToken: response.refreshToken } : {}),\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * POST pro BFF. Tolera corpo vazio (signup retorna void) e devolve o JSON cru\r\n * (envelope { token, baseURL, ... }).\r\n */\r\nasync function postBffAuth(url: string, body: unknown): Promise<any> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n const text = await response.text().catch(() => '');\r\n const { data, isJson } = parseBody(text);\r\n\r\n if (!response.ok) {\r\n // Corpo não-JSON (HTML de gateway, texto do proxy): entra cru na mensagem —\r\n // senão o erro real do BFF se perde num \"HTTP 400\" vazio.\r\n const fallback = !isJson && text ? `HTTP ${response.status} — ${text}` : `HTTP ${response.status}`;\r\n const msg = (isJson && (data?.message || data?.error)) || fallback;\r\n throw { message: msg, status: response.status, details: data };\r\n }\r\n\r\n return data;\r\n}\r\n\r\nfunction normalizeResponse(tokens: NewAuthTokenResponse, authUrl: string): LoginResponse {\r\n // No novo Mitra, baseURL = authUrl (Kong gateway)\r\n return {\r\n token: tokens.accessToken,\r\n refreshToken: tokens.refreshToken,\r\n baseURL: authUrl\r\n };\r\n}\r\n\r\nconst NOT_SUPPORTED_POPUP = 'loginMitra com method \"email\" ou \"mitra\" não é suportado no novo Mitra. Use SSO (loginWithGoogleMitra).';\r\n\r\n// ── OAuth (Google) ──────────────────────────────────────────────────\r\n// Fluxo (SDK cunha o token; a página só faz o start e devolve o code):\r\n// 0. DISCOVERY: a URL da página (front) vem MOCKADA no SDK (SSO_AUTH_PAGE_URL).\r\n// Quando o back expor o discovery, voltamos a descobrir lá.\r\n// 1. SDK abre popup (ou navega, no redirect) em\r\n// <authPageUrl>?provider=&state=&appId=&apiUrl=&origin=&responseType=code.\r\n// 2. Página monta a URL OAuth do provider com redirect_uri=<authPageUrl> e redireciona.\r\n// 3. Provider autentica e volta pra página com ?code=&state=.\r\n// 4a. POPUP: a página faz postMessage({type,success,state,code}) pro opener.\r\n// 4b. REDIRECT: a página navega o app de volta com #codeMitra=&stateMitra=.\r\n// 5. SDK valida state (CSRF) e troca o code por token no BFF:\r\n// POST {baseURL}/auth/{provider} { appId, code, redirectUri } → { token, refreshToken }.\r\n//\r\n// redirectUri = origin+path exato da página (o provider valida byte a byte).\r\n// Só o code (uso único, segundos) trafega no fragment; JWT/refresh nunca.\r\n// Compat: se a página ainda usar o contrato antigo (devolve `token` pronto no\r\n// postMessage), o popup continua funcionando — esse ramo morre quando ela migrar.\r\n// ────────────────────────────────────────────────────────────────────\r\n\r\nconst OAUTH_RESULT_TYPE = 'mitra-oauth-result';\r\nconst POPUP_W = 480;\r\nconst POPUP_H = 600;\r\nconst POPUP_TIMEOUT_MS = 5 * 60 * 1000;\r\n\r\n// Último recurso quando não dá pra derivar do gateway (ex: authUrl inválido).\r\nconst SSO_AUTH_PAGE_URL = 'https://stg.mitralab.io/sdk-auth.html';\r\n\r\n/**\r\n * Resolve a URL da página de auth (front):\r\n * 1. config.authPageUrl — override explícito via configureSdkMitra({ authPageUrl })\r\n * ou injetado pela plataforma em window.__mitraEnv.authPageUrl. Necessário só\r\n * quando o gateway NÃO divide domínio com o mitra-web (ex: ngrok local).\r\n * 2. DERIVAÇÃO do próprio gateway: a página vive no mesmo domínio do backURL\r\n * (gateway = {domínio}/legacy, página = {domínio}/sdk-auth.html) — funciona\r\n * por ambiente sem env nem hardcode.\r\n * 3. Último recurso: constante de staging.\r\n * Mantido async + assinatura pra facilitar trocar por discovery no back depois.\r\n */\r\nasync function fetchSsoAuthPageUrl(gatewayUrl: string): Promise<string> {\r\n const config = isConfigured() ? getConfig() : null;\r\n if (config?.authPageUrl) return config.authPageUrl;\r\n\r\n try {\r\n return `${new URL(gatewayUrl).origin}/sdk-auth.html`;\r\n } catch {\r\n return SSO_AUTH_PAGE_URL;\r\n }\r\n}\r\n\r\n// ── Providers SSO ───────────────────────────────────────────────────\r\n// Provider-agnóstico: o fluxo (start na página + troca no BFF /auth/{provider})\r\n// é IDÊNTICO pra Google e Microsoft. O que trava o Microsoft hoje é só a falta\r\n// de endpoint no IAM/BFF + app no Azure. Quando o back liberar, basta adicionar\r\n// 'microsoft' à allowlist — nada mais muda.\r\ntype OAuthProvider = 'google' | 'microsoft';\r\nconst SSO_ENABLED_PROVIDERS: OAuthProvider[] = ['google'];\r\n\r\nfunction providerLabel(provider: OAuthProvider): string {\r\n return provider === 'microsoft' ? 'Microsoft' : provider === 'google' ? 'Google' : provider;\r\n}\r\n\r\n/** Falha rápido (sem abrir popup/redirect) se o provider não está liberado no novo Mitra. */\r\nfunction assertProviderAvailable(provider: OAuthProvider): void {\r\n if (!SSO_ENABLED_PROVIDERS.includes(provider)) {\r\n throw new Error(`Login com ${providerLabel(provider)} ainda não disponível no novo Mitra.`);\r\n }\r\n}\r\n\r\n/** origin + path da URL (sem query/hash) — o Google valida o redirectUri byte a byte na troca. */\r\nfunction stripToOriginPath(url: string): string {\r\n try {\r\n const u = new URL(url);\r\n return u.origin + u.pathname;\r\n } catch {\r\n return url.split('?')[0].split('#')[0];\r\n }\r\n}\r\n\r\n/**\r\n * Troca o `code` do provider por token no BFF (POST {gateway}/auth/{provider}),\r\n * mesmo host do /email/login e /refresh-token. Response = mesmo envelope do\r\n * email login ({ token com Bearer, refreshToken }). Já auto-configura o SDK.\r\n */\r\nasync function exchangeSsoCode(\r\n authUrl: string,\r\n provider: OAuthProvider,\r\n code: string,\r\n redirectUri: string,\r\n projectId: number | string\r\n): Promise<LoginResponse> {\r\n const data = await postBffAuth(buildBffAuthEndpoint(authUrl, `/${provider}`), {\r\n appId: String(projectId),\r\n code,\r\n redirectUri\r\n });\r\n const response: LoginResponse = {\r\n token: data.token,\r\n // baseURL = authUrl (gateway); o BFF não devolve URLs de bootstrap.\r\n baseURL: authUrl,\r\n ...(data.refreshToken ? { refreshToken: data.refreshToken } : {})\r\n };\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n// ── Contexto do redirect (mobile) ───────────────────────────────────\r\n// No redirect o popup vira aba/navegação top-level: a SDK que iniciou o login\r\n// já foi embora quando o code volta. Guardamos o nonce (+ dados da troca) no\r\n// sessionStorage pra validar o state (anti-CSRF) e trocar o code no boot seguinte.\r\nconst SSO_REDIRECT_STORE_KEY = 'mitra_sso_redirect';\r\n\r\ninterface SsoRedirectContext {\r\n state: string;\r\n provider: OAuthProvider;\r\n authUrl: string;\r\n projectId: string;\r\n redirectUri: string;\r\n}\r\n\r\nfunction persistRedirectContext(ctx: SsoRedirectContext): void {\r\n try { sessionStorage.setItem(SSO_REDIRECT_STORE_KEY, JSON.stringify(ctx)); } catch { /* noop */ }\r\n}\r\n\r\nfunction readRedirectContext(): SsoRedirectContext | null {\r\n try {\r\n const raw = sessionStorage.getItem(SSO_REDIRECT_STORE_KEY);\r\n return raw ? JSON.parse(raw) as SsoRedirectContext : null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction clearRedirectContext(): void {\r\n try { sessionStorage.removeItem(SSO_REDIRECT_STORE_KEY); } catch { /* noop */ }\r\n}\r\n\r\nfunction buildStartUrl(\r\n authPageUrl: string,\r\n provider: OAuthProvider,\r\n state: string,\r\n appId: string,\r\n apiUrl: string,\r\n returnTo?: string\r\n): string {\r\n const sep = authPageUrl.includes('?') ? '&' : '?';\r\n const query: Record<string, string> = {\r\n provider,\r\n state,\r\n appId,\r\n apiUrl,\r\n // origin = origin desta SDK; a página trava o postMessage do result nela.\r\n origin: window.location.origin,\r\n // Contrato novo: a página NÃO troca mais o code — devolve o code cru (popup\r\n // via postMessage, redirect via #codeMitra). A SDK troca no BFF /auth/{provider}.\r\n responseType: 'code'\r\n };\r\n // Redirect (mobile): a página precisa saber pra onde voltar com o code.\r\n if (returnTo) query.returnTo = returnTo;\r\n return authPageUrl + sep + new URLSearchParams(query).toString();\r\n}\r\n\r\nfunction getOriginFromUrl(url: string): string {\r\n try { return new URL(url).origin; } catch { return ''; }\r\n}\r\n\r\nfunction generateState(): string {\r\n if (typeof crypto === 'undefined' || typeof crypto.getRandomValues !== 'function') {\r\n throw new Error('crypto.getRandomValues não disponível neste ambiente.');\r\n }\r\n const bytes = new Uint8Array(16);\r\n crypto.getRandomValues(bytes);\r\n return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');\r\n}\r\n\r\nfunction openOAuthPopup(\r\n providerUrl: string,\r\n expectedOrigin: string,\r\n expectedState: string\r\n): Promise<{ code?: string; token?: NewAuthTokenResponse }> {\r\n return new Promise((resolve, reject) => {\r\n const outerW = window.outerWidth || screen.width;\r\n const outerH = window.outerHeight || screen.height;\r\n const left = Math.max(0, (window.screenX || 0) + (outerW - POPUP_W) / 2);\r\n const top = Math.max(0, (window.screenY || 0) + (outerH - POPUP_H) / 2);\r\n\r\n const popup = window.open(\r\n providerUrl,\r\n 'mitra-oauth',\r\n `width=${POPUP_W},height=${POPUP_H},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n const popupRef: Window = popup;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Timeout na autenticação OAuth.'));\r\n }, POPUP_TIMEOUT_MS);\r\n\r\n const poll = setInterval(() => {\r\n if (popupRef.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário.'));\r\n }\r\n }, 500);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== OAUTH_RESULT_TYPE) return;\r\n const data = event.data as {\r\n success?: boolean;\r\n code?: string;\r\n token?: NewAuthTokenResponse;\r\n state?: string;\r\n error?: string;\r\n };\r\n\r\n if (data.state !== expectedState) {\r\n cleanup();\r\n reject(new Error('State inválido (possível CSRF).'));\r\n return;\r\n }\r\n\r\n cleanup();\r\n\r\n if (!data.success) {\r\n reject(new Error(data.error || 'Erro na autenticação OAuth.'));\r\n return;\r\n }\r\n // Contrato novo devolve `code`; contrato antigo devolve `token` pronto.\r\n if (!data.code && !data.token) {\r\n reject(new Error('Resposta OAuth sem code nem token.'));\r\n return;\r\n }\r\n resolve({ code: data.code, token: data.token });\r\n }\r\n\r\n function cleanup() {\r\n clearTimeout(timer);\r\n clearInterval(poll);\r\n window.removeEventListener('message', onMessage);\r\n if (!popupRef.closed) popupRef.close();\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/** Promise de OAuth em andamento — dedup de clicks duplicados / React StrictMode. */\r\nlet _oauthInFlight: Promise<LoginResponse> | null = null;\r\n\r\nasync function loginWithProvider(\r\n provider: OAuthProvider,\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n // Falha rápido antes de abrir qualquer coisa se o provider não está liberado.\r\n assertProviderAvailable(provider);\r\n\r\n if (typeof window === 'undefined') {\r\n throw new Error('SSO só funciona em ambiente browser.');\r\n }\r\n\r\n // Redirect (mobile): navega top-level e conclui no boot seguinte\r\n // (o app lê o fragment e chama exchangeSsoCodeMitra). Não faz parte do dedup de popup.\r\n if (options?.mode === 'redirect') {\r\n return startSsoRedirect(provider, options);\r\n }\r\n\r\n if (_oauthInFlight) return _oauthInFlight;\r\n\r\n _oauthInFlight = (async () => {\r\n try {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const state = generateState();\r\n const appId = String(projectId);\r\n\r\n // 0. DISCOVERY: descobre a URL da página de auth (front) no back.\r\n const authPageUrl = await fetchSsoAuthPageUrl(authUrl);\r\n // Origin do FRONT (página) — é contra ele que validamos o postMessage,\r\n // NÃO contra o baseURL/gateway.\r\n const pageOrigin = getOriginFromUrl(authPageUrl);\r\n // redirectUri = URL exata da página (origin+path); o Google valida byte a byte.\r\n const redirectUri = stripToOriginPath(authPageUrl);\r\n const startUrl = buildStartUrl(authPageUrl, provider, state, appId, authUrl);\r\n\r\n const { code, token } = await openOAuthPopup(startUrl, pageOrigin, state);\r\n\r\n // Contrato novo: a página devolveu o code cru → a SDK troca no BFF.\r\n if (code) {\r\n return await exchangeSsoCode(authUrl, provider, code, redirectUri, projectId);\r\n }\r\n // Contrato antigo (página ainda troca e devolve o token pronto): preserva\r\n // o funcionamento até a página migrar. Esse ramo morre quando ela migrar.\r\n const response = normalizeResponse(token!, authUrl);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n } finally {\r\n _oauthInFlight = null;\r\n }\r\n })();\r\n\r\n return _oauthInFlight;\r\n}\r\n\r\n/**\r\n * Inicia o SSO em modo redirect (mobile): guarda o nonce no sessionStorage e\r\n * navega top-level pra página de auth. A Promise nunca resolve (a página vai\r\n * embora); a conclusão acontece no boot seguinte via exchangeSsoCodeMitra().\r\n */\r\nasync function startSsoRedirect(provider: OAuthProvider, options?: LoginOptions): Promise<never> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const state = generateState();\r\n const appId = String(projectId);\r\n const authPageUrl = await fetchSsoAuthPageUrl(authUrl);\r\n const redirectUri = stripToOriginPath(authPageUrl);\r\n\r\n persistRedirectContext({ state, provider, authUrl, projectId: appId, redirectUri });\r\n\r\n const startUrl = buildStartUrl(authPageUrl, provider, state, appId, authUrl, window.location.href);\r\n window.location.assign(startUrl);\r\n return new Promise<never>(() => { /* a página descarrega antes de resolver */ });\r\n}\r\n\r\n/**\r\n * Gera o JWT a partir do `code` do SSO (retorno do redirect). Valida o `state`\r\n * contra o nonce gerado no start (anti-CSRF), troca o code no BFF\r\n * (POST {gateway}/auth/{provider}) e configura o SDK. Ler/limpar o fragment da\r\n * URL é responsabilidade do app — aqui só se gera o token.\r\n */\r\nexport async function exchangeSsoCodeMitra(options: { code: string; state: string }): Promise<LoginResponse> {\r\n const ctx = readRedirectContext();\r\n clearRedirectContext();\r\n\r\n if (!ctx || ctx.state !== options.state) {\r\n throw new Error('State inválido no retorno do SSO (possível CSRF).');\r\n }\r\n\r\n return exchangeSsoCode(ctx.authUrl, ctx.provider, options.code, ctx.redirectUri, ctx.projectId);\r\n}\r\n\r\n// ── Login (popup-style) ─────────────────────────────────────────────\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('google', options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('microsoft', options);\r\n}\r\n\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n if (method === 'google') return loginWithProvider('google', options);\r\n if (method === 'microsoft') return loginWithProvider('microsoft', options);\r\n throw new Error(NOT_SUPPORTED_POPUP);\r\n}\r\n\r\n// ── Refresh ─────────────────────────────────────────────────────────\r\n\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\nexport async function refreshTokenSilently(authUrl: string, _projectId: number | string): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const config = isConfigured() ? getConfig() : null;\r\n const refreshToken = config?.refreshToken;\r\n if (!refreshToken) {\r\n throw new Error('refreshToken não disponível para renovação. Faça login novamente.');\r\n }\r\n // Via BFF: POST {gateway}/auth/refresh-token { refreshToken }.\r\n // Devolve { token, refreshToken } novos. Guarda os dois.\r\n const data = await postBffAuth(buildBffAuthEndpoint(authUrl, '/refresh-token'), { refreshToken });\r\n return {\r\n token: data.token,\r\n // Refresh não muda a base — mantém o authUrl (gateway).\r\n baseURL: authUrl,\r\n ...(data.refreshToken ? { refreshToken: data.refreshToken } : {})\r\n };\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Autenticação (Router)\r\n *\r\n * Roteia chamadas de auth para a implementação correta com base no `authUrl`:\r\n * - URLs legadas (`coder.mitralab.io/sdk-auth/`, `agent.mitralab.io/sdk-auth/`) → auth-legacy.ts\r\n * - Qualquer outro authUrl → auth-new.ts (novo Mitra: Kong gateway + IAM service)\r\n *\r\n * A API pública é idêntica à legacy. Consumers não precisam alterar código.\r\n */\r\n\r\nimport { isConfigured, getConfig } from './config';\r\nimport * as legacy from './auth-legacy';\r\nimport * as fresh from './auth-new';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse\r\n} from './types';\r\n\r\n// ── Detecção de mundo ───────────────────────────────────────────────\r\n\r\nconst LEGACY_AUTH_URLS = [\r\n 'https://coder.mitralab.io/sdk-auth/',\r\n 'https://agent.mitralab.io/sdk-auth/'\r\n];\r\n\r\nfunction normalize(url: string): string {\r\n // Remove query string e fragment, garante trailing slash\r\n const stripped = url.split('?')[0].split('#')[0];\r\n return stripped.endsWith('/') ? stripped : stripped + '/';\r\n}\r\n\r\nexport function isLegacyAuthUrl(authUrl: string | undefined): boolean {\r\n if (!authUrl) return false;\r\n return LEGACY_AUTH_URLS.includes(normalize(authUrl));\r\n}\r\n\r\n/**\r\n * Retorna true se o contexto atual é o novo mundo (authUrl configurado não é\r\n * legacy). Usado por features que ainda não têm suporte no novo Mitra.\r\n */\r\nexport function isNewWorld(authUrl?: string): boolean {\r\n const resolved = authUrl ?? (isConfigured() ? getConfig().authUrl : undefined);\r\n // Sem authUrl não dá pra afirmar que é novo mundo — assume legacy (não bloqueia).\r\n if (!resolved) return false;\r\n return !isLegacyAuthUrl(resolved);\r\n}\r\n\r\nfunction resolveAuthUrlFromOptions(options?: { authUrl?: string }): string | undefined {\r\n if (options?.authUrl) return options.authUrl;\r\n if (isConfigured()) return getConfig().authUrl;\r\n return undefined;\r\n}\r\n\r\n// ── Roteamento ──────────────────────────────────────────────────────\r\n\r\nexport async function loginMitra(\r\n method: 'email' | 'google' | 'microsoft' | 'mitra',\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginMitra(method, options)\r\n : fresh.loginMitra(method, options);\r\n}\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithGoogleMitra(options)\r\n : fresh.loginWithGoogleMitra(options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithMicrosoftMitra(options)\r\n : fresh.loginWithMicrosoftMitra(options);\r\n}\r\n\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number | string): Promise<LoginResponse> {\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.refreshTokenSilently(authUrl, projectId)\r\n : fresh.refreshTokenSilently(authUrl, projectId);\r\n}\r\n\r\n/**\r\n * Gera o JWT a partir do code do SSO (novo Mitra). O app lê codeMitra/stateMitra\r\n * do fragment (lógica de template) e chama aqui pra validar o nonce e trocar o\r\n * code por token no BFF. Exclusivo do novo mundo — no legacy o token já vem\r\n * pronto no fragment (tokenMitra).\r\n */\r\nexport async function exchangeSsoCodeMitra(options: { code: string; state: string }): Promise<LoginResponse> {\r\n return fresh.exchangeSsoCodeMitra(options);\r\n}\r\n\r\n","/**\n * Mitra Interactions SDK - Instance\n *\n * Permite múltiplas instâncias configuradas independentemente.\n */\n\nimport type { MitraConfig } from './config';\nimport { stripBearer, parseBody } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\nimport type {\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} 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 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 // 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\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\n let _config: MitraConfig = {\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\n token: initialConfig.token ? stripBearer(initialConfig.token) : '',\n refreshToken: initialConfig.refreshToken,\n integrationURL: initialConfig.integrationURL,\n authUrl: initialConfig.authUrl,\n projectId: initialConfig.projectId\n };\n\n // ── Internal helpers ──\n\n function resolveProjectId(projectId?: number | string): number | string {\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, isJson } = parseBody(text);\n if (!response.ok) {\n const fallback = !isJson && text ? `HTTP ${response.status} — ${text}` : `HTTP ${response.status}`;\n const base = (isJson && (data?.message || data?.error)) || fallback;\n const msg = isJson && 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 async function tryRefreshToken(): Promise<boolean> {\n if (!_config.token || _config.projectId == null || !_config.baseURL) return false;\n\n // 1. Tenta refresh direto via API (sem HTML)\n try {\n const baseURL = _config.baseURL.replace(/\\/+$/, '');\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${_config.projectId}`, {\n method: 'GET',\n headers: { 'Authorization': formatToken(_config.token) }\n });\n\n if (resp.ok) {\n const data = await resp.json();\n if (data.token) {\n const newToken = `Bearer ${stripBearer(data.token)}`;\n const session: LoginResponse = {\n token: newToken,\n baseURL: data.merge?.backURL || _config.baseURL,\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\n };\n _config = { ..._config, token: stripBearer(session.token) };\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\n return true;\n }\n }\n } catch {\n // Falhou — tenta fallback via iframe\n }\n\n // 2. Fallback: refreshTokenSilently (router decide entre iframe legacy ou API novo Mitra)\n if (!_config.authUrl || typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId!);\n _config = {\n ..._config,\n token: stripBearer(session.token),\n ...(session.refreshToken !== undefined ? { refreshToken: session.refreshToken } : {})\n };\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 // HTTP tenant (baseURL + X-TenantID)\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number | 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(), '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 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 // 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\n return instance;\n}\n","/**\r\n * Mitra Interactions SDK - Configuração\r\n */\r\n\r\nimport { createMitraInstance, type MitraInstance } from './instance';\r\n\r\nexport interface MitraConfig {\r\n /** URL base da API (ex: https://api.mitra.com). Opcional se houver window.__mitraEnv.apiBaseURL (build-proxy). */\r\n baseURL?: string;\r\n /** Token JWT para autenticação (opcional para Server Functions públicas) */\r\n token?: string;\r\n /** Refresh token (novo Mitra). Necessário para refresh automático no novo mundo. */\r\n refreshToken?: string;\r\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\r\n integrationURL?: string;\r\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\r\n authUrl?: string;\r\n /** URL da página do popup de SSO (sdk-auth.html). Opcional se houver window.__mitraEnv.authPageUrl. */\r\n authPageUrl?: string;\r\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\r\n projectId?: number | string;\r\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\r\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\r\n}\r\n\r\nlet globalConfig: MitraConfig | null = null;\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Remove todos os prefixos \"Bearer \" do início do token (case-insensitive,\r\n * repetidos) e espaços nas pontas. Garante que o token seja sempre guardado\r\n * cru, evitando \"Bearer Bearer ...\" quando o consumidor já passa o prefixo.\r\n */\r\nexport function stripBearer(token: string): string {\r\n let t = token.trim();\r\n while (/^bearer\\s+/i.test(t)) {\r\n t = t.replace(/^bearer\\s+/i, '').trim();\r\n }\r\n return t;\r\n}\r\n\r\n/**\r\n * Parseia o corpo da resposta como JSON. Se NÃO for JSON (HTML de gateway,\r\n * texto puro de proxy, etc.), devolve o texto CRU em vez de estourar\r\n * SyntaxError — assim a mensagem real do backend nunca se perde.\r\n *\r\n * Retrocompatível: corpo JSON continua parseado igual (comportamento idêntico);\r\n * só muda o caso que hoje já quebra (não-JSON), que virava\r\n * \"Unexpected token ... in JSON\".\r\n */\r\nexport function parseBody(text: string): { data: any; isJson: boolean } {\r\n if (!text) return { data: null, isJson: true };\r\n try {\r\n return { data: JSON.parse(text), isJson: true };\r\n } catch {\r\n return { data: text, isJson: false };\r\n }\r\n}\r\n\r\n// ── Persistência do refreshToken (novo Mitra) ─────────────────────────\r\n// O refreshToken (diferente do token velho mundo, que renova via cookie/iframe)\r\n// precisa sobreviver ao F5. O SDK guarda ele no MESMO store do template\r\n// (localStorage['mitra-session']), fazendo merge — assim o template não precisa\r\n// mudar. Só o refreshToken é gravado aqui; baseURL/token continuam com o app.\r\nconst SESSION_STORE_KEY = 'mitra-session';\r\n\r\nfunction safeLocalStorage(): Storage | null {\r\n try {\r\n return typeof localStorage !== 'undefined' ? localStorage : null;\r\n } catch {\r\n return null; // acesso a localStorage pode lançar (SSR, cookies bloqueados)\r\n }\r\n}\r\n\r\nfunction persistRefreshToken(refreshToken: string): void {\r\n const ls = safeLocalStorage();\r\n if (!ls) return;\r\n try {\r\n const raw = ls.getItem(SESSION_STORE_KEY);\r\n const obj = raw ? JSON.parse(raw) : {};\r\n obj.refreshToken = refreshToken;\r\n ls.setItem(SESSION_STORE_KEY, JSON.stringify(obj));\r\n } catch { /* noop */ }\r\n}\r\n\r\nfunction readPersistedRefreshToken(): string | undefined {\r\n const ls = safeLocalStorage();\r\n if (!ls) return undefined;\r\n try {\r\n const raw = ls.getItem(SESSION_STORE_KEY);\r\n if (!raw) return undefined;\r\n const obj = JSON.parse(raw);\r\n return typeof obj?.refreshToken === 'string' && obj.refreshToken ? obj.refreshToken : undefined;\r\n } catch {\r\n return undefined;\r\n }\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.authPageUrl === 'string' && env.authPageUrl) out.authPageUrl = env.authPageUrl;\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 // refreshToken sobrevive ao F5: se não veio no config, recupera do localStorage\r\n // (o template não precisa saber dele). Se veio, persiste pra próxima carga.\r\n if (!merged.refreshToken) {\r\n const persisted = readPersistedRefreshToken();\r\n if (persisted) merged.refreshToken = persisted;\r\n } else {\r\n persistRefreshToken(merged.refreshToken);\r\n }\r\n\r\n globalConfig = {\r\n ...merged,\r\n baseURL: merged.baseURL.replace(/\\/+$/, '')\r\n };\r\n\r\n return createMitraInstance(globalConfig);\r\n}\r\n\r\n/**\r\n * Obtém a configuração atual\r\n */\r\nexport function getConfig(): MitraConfig {\r\n if (!globalConfig) {\r\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\r\n }\r\n return globalConfig;\r\n}\r\n\r\n/**\r\n * Verifica se o SDK está configurado\r\n */\r\nexport function isConfigured(): boolean {\r\n return globalConfig !== null;\r\n}\r\n\r\n/**\r\n * Atualiza o token global (usado internamente pelo refresh automático).\r\n * Aceita refreshToken opcional (novo Mitra).\r\n */\r\nexport function updateGlobalToken(token: string, refreshToken?: string): void {\r\n if (globalConfig) {\r\n globalConfig = {\r\n ...globalConfig,\r\n token: stripBearer(token),\r\n ...(refreshToken !== undefined ? { refreshToken } : {})\r\n };\r\n // Persiste o refreshToken rotacionado no store (sobrevive F5).\r\n if (refreshToken) persistRefreshToken(refreshToken);\r\n }\r\n}\r\n\r\n/**\r\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nexport function resolveProjectId(projectId?: number | string): number | string {\r\n if (projectId != null) return projectId;\r\n if (globalConfig?.projectId != null) return globalConfig.projectId;\r\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n}\r\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig, updateGlobalToken, stripBearer, parseBody } from './config';\nimport { refreshTokenSilently, isNewWorld } 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 * Tenta renovar o token diretamente via API (sem iframe/HTML).\n * Usa o token atual pra chamar refreshedToken e obter um novo token scoped.\n * Se falhar (token expirado de verdade), tenta o fallback via iframe.\n */\nasync function tryRefreshToken(): Promise<boolean> {\n const config = getConfig();\n\n if (!config.token || config.projectId == null || !config.baseURL) return false;\n\n // 1. Refresh legado via /mitraspace/project/refreshedToken — SÓ mundo velho.\n // No novo mundo o refresh é 100% BFF (passo 2); pula esse passo pra não\n // bater no endpoint legado nem depender dele.\n if (!isNewWorld()) {\n try {\n const baseURL = config.baseURL.replace(/\\/+$/, '');\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${config.projectId}`, {\n method: 'GET',\n headers: { 'Authorization': formatToken(config.token) }\n });\n\n if (resp.ok) {\n const data = await resp.json();\n if (data.token) {\n const newToken = `Bearer ${stripBearer(data.token)}`;\n const session: LoginResponse = {\n token: newToken,\n baseURL: data.merge?.backURL || config.baseURL,\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\n };\n updateGlobalToken(session.token);\n if (config.onTokenRefresh) config.onTokenRefresh(session);\n return true;\n }\n }\n } catch {\n // Falhou — cai pro fallback abaixo (iframe legacy)\n }\n }\n\n // 2. Novo mundo → BFF (/auth/refresh-token); legado → iframe. Via refreshTokenSilently.\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, session.refreshToken);\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, isJson } = parseBody(text);\n\n if (!response.ok) {\n // Sem JSON, o corpo cru entra na mensagem (senão o erro do backend some).\n const fallback = !isJson && text ? `HTTP ${response.status} — ${text}` : `HTTP ${response.status}`;\n const base = (isJson && (data?.message || data?.error)) || fallback;\n const msg = isJson && 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 // Status de token expirado difere por mundo:\n // - Novo Mitra: 401 \"token expired\" (403 lá é permissão negada — refresh não resolve).\n // - Legado: 403.\n const expiredStatus = isNewWorld() ? 401 : 403;\n\n if (response.status === expiredStatus) {\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 | string,\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 | string, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('GET', endpoint, tenantId, { params });\n },\n post<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\n },\n put<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\n },\n patch<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\n },\n del<T>(endpoint: string, tenantId: number | string, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\n }\n};\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpTenant } from './client';\nimport { getConfig, resolveProjectId } from './config';\nimport type {\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} from './types';\n\n/**\n * POST /interactions/executeServerFunction\n * Executa uma Server Function de forma SÍNCRONA (timeout 60s no backend)\n */\nexport async function executeServerFunctionMitra(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunction', body);\n}\n\n/**\n * POST /interactions/executeServerFunctionAsync\n * Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)\n */\nexport async function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunctionAsync', body);\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/execute\n * Executa uma Server Function pública de forma SÍNCRONA (sem autenticação).\n * A SF deve ter publicExecution = true. Timeout 5min.\n */\nexport async function executePublicServerFunctionMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/executeAsync\n * Executa uma Server Function pública de forma ASSÍNCRONA (sem autenticação).\n * Retorna executionId imediatamente. Use getPublicServerFunctionExecutionMitra para polling.\n */\nexport async function executePublicServerFunctionAsyncMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionAsyncResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /public/serverFunction/{projectId}/execution/{executionId}\n * Consulta o status/resultado de uma execução pública de SF (sem autenticação).\n */\nexport async function getPublicServerFunctionExecutionMitra(\n options: GetPublicServerFunctionExecutionOptions\n): Promise<GetPublicServerFunctionExecutionResponse> {\n const { projectId, executionId } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' }\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /interactions/integrations?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return http.get('/interactions/integrations', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /interactions/integrations/call\n * Chama uma API externa via serviço de integrações\n * Mapeia connection → integrationSlug no body\n */\nexport async function callIntegrationMitra(options: CallIntegrationOptions): Promise<CallIntegrationResponse> {\n const body: Record<string, unknown> = {\n integrationSlug: options.connection,\n projectId: resolveProjectId(options.projectId),\n method: options.method\n };\n\n if (options.endpoint !== undefined) {\n body.endpoint = options.endpoint;\n }\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n if (options.body !== undefined) {\n body.body = options.body;\n }\n\n return http.post('/interactions/integrations/call', body);\n}\n\n/**\n * POST /interactions/stopServerFunctionExecution\n * Para a execução de uma Server Function em andamento\n */\nexport async function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse> {\n return http.post('/interactions/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}`, pid, { page, size, jdbcConnectionConfigId, ...filters });\n}\n\nexport async function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>> {\n const { tableName, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function updateRecordMitra(options: UpdateRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.put(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function patchRecordMitra(options: PatchRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.patch(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function deleteRecordMitra(options: DeleteRecordOptions): Promise<void> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.del(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]> {\n const { tableName, records, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/auth-legacy.ts","../src/auth-new.ts","../src/auth.ts","../src/instance.ts","../src/config.ts","../src/client.ts","../src/services.ts"],"names":["resolveLoginOptions","autoConfigureFromLogin","getOriginFromUrl","loginWithGoogleMitra","loginWithMicrosoftMitra","loginMitra","_refreshPromise","refreshTokenSilently","exchangeSsoCodeMitra","getFetch","resolveProjectId","handleResponse","tryRefreshToken","_a","fetchWithRefresh","formatToken"],"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} 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 | string): 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 | string,\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 | string } {\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/**\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 | string): 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","/**\r\n * Mitra Interactions SDK - Autenticação (Novo Mitra)\r\n *\r\n * Implementação do auth para o novo Mitra (Kong gateway).\r\n * - Email login/signup/refresh: via BFF (mitra-legacy-bff), POST {gateway}/auth/*.\r\n * O BFF resolve projectId->appId, chama o mitra-iam e já devolve o envelope\r\n * { token, baseURL, integrationURL } que a SDK consome.\r\n * - SSO (Google): página atravessadora (sdk-auth.html) faz o start do OAuth e\r\n * devolve o `code` cru (popup via postMessage, redirect via #codeMitra). A SDK\r\n * troca o code por token no BFF (POST {gateway}/auth/{provider}), mesmo host do\r\n * /email/login. Provider-agnóstico: Microsoft entra só mudando a allowlist\r\n * quando o back liberar o endpoint. Suporta popup (desktop) e redirect (mobile).\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig, parseBody } from './config';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse\r\n} from './types';\r\n\r\n// ── Tipos internos ──────────────────────────────────────────────────\r\n\r\ninterface NewAuthTokenResponse {\r\n accessToken: string;\r\n refreshToken: string;\r\n tokenType: string;\r\n}\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────\r\n\r\nfunction getFetch(): typeof fetch {\r\n if (typeof globalThis.fetch === 'function') return globalThis.fetch;\r\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\r\n}\r\n\r\n// BFF (mitra-legacy-bff): mesmo gateway do baseURL, prefixo /auth. Espelha como o\r\n// resto do SDK alcança o BFF ({baseURL}/interactions/...); o gateway roteia pro BFF.\r\nfunction buildBffAuthEndpoint(gateway: string, path: string): string {\r\n const base = gateway.replace(/\\/+$/, '');\r\n return `${base}/auth${path}`;\r\n}\r\n\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number | string } {\r\n const config = isConfigured() ? getConfig() : null;\r\n // No novo Mitra, authUrl e baseURL apontam pro mesmo gateway. authUrl é mantido\r\n // por compat com a API legacy; se não vier, cai pro baseURL configurado.\r\n const authUrl = options?.authUrl || config?.authUrl || config?.baseURL;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl/baseURL é obrigatório. Configure via configureSdkMitra({ baseURL }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n return { authUrl, projectId };\r\n}\r\n\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number | string): void {\r\n if (!response.baseURL) return;\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.refreshToken ? { refreshToken: response.refreshToken } : {}),\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * POST pro BFF. Tolera corpo vazio (signup retorna void) e devolve o JSON cru\r\n * (envelope { token, baseURL, ... }).\r\n */\r\nasync function postBffAuth(url: string, body: unknown): Promise<any> {\r\n const fetchFn = getFetch();\r\n const response = await fetchFn(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n const text = await response.text().catch(() => '');\r\n const { data, isJson } = parseBody(text);\r\n\r\n if (!response.ok) {\r\n // Corpo não-JSON (HTML de gateway, texto do proxy): entra cru na mensagem —\r\n // senão o erro real do BFF se perde num \"HTTP 400\" vazio.\r\n const fallback = !isJson && text ? `HTTP ${response.status} — ${text}` : `HTTP ${response.status}`;\r\n const msg = (isJson && (data?.message || data?.error)) || fallback;\r\n throw { message: msg, status: response.status, details: data };\r\n }\r\n\r\n return data;\r\n}\r\n\r\nfunction normalizeResponse(tokens: NewAuthTokenResponse, authUrl: string): LoginResponse {\r\n // No novo Mitra, baseURL = authUrl (Kong gateway)\r\n return {\r\n token: tokens.accessToken,\r\n refreshToken: tokens.refreshToken,\r\n baseURL: authUrl\r\n };\r\n}\r\n\r\nconst NOT_SUPPORTED_POPUP = 'loginMitra com method \"email\" ou \"mitra\" não é suportado no novo Mitra. Use SSO (loginWithGoogleMitra).';\r\n\r\n// ── OAuth (Google) ──────────────────────────────────────────────────\r\n// Fluxo (SDK cunha o token; a página só faz o start e devolve o code):\r\n// 0. DISCOVERY: a URL da página (front) vem MOCKADA no SDK (SSO_AUTH_PAGE_URL).\r\n// Quando o back expor o discovery, voltamos a descobrir lá.\r\n// 1. SDK abre popup (ou navega, no redirect) em\r\n// <authPageUrl>?provider=&state=&appId=&apiUrl=&origin=&responseType=code.\r\n// 2. Página monta a URL OAuth do provider com redirect_uri=<authPageUrl> e redireciona.\r\n// 3. Provider autentica e volta pra página com ?code=&state=.\r\n// 4a. POPUP: a página faz postMessage({type,success,state,code}) pro opener.\r\n// 4b. REDIRECT: a página navega o app de volta com #codeMitra=&stateMitra=.\r\n// 5. SDK valida state (CSRF) e troca o code por token no BFF:\r\n// POST {baseURL}/auth/{provider} { appId, code, redirectUri } → { token, refreshToken }.\r\n//\r\n// redirectUri = origin+path exato da página (o provider valida byte a byte).\r\n// Só o code (uso único, segundos) trafega no fragment; JWT/refresh nunca.\r\n// Compat: se a página ainda usar o contrato antigo (devolve `token` pronto no\r\n// postMessage), o popup continua funcionando — esse ramo morre quando ela migrar.\r\n// ────────────────────────────────────────────────────────────────────\r\n\r\nconst OAUTH_RESULT_TYPE = 'mitra-oauth-result';\r\nconst POPUP_W = 480;\r\nconst POPUP_H = 600;\r\nconst POPUP_TIMEOUT_MS = 5 * 60 * 1000;\r\n\r\n// TEMP: o discovery /sso/config ainda não existe no back. Em vez de descobrir a\r\n// URL da página atravessadora, retornamos a URL conhecida do front (CloudFront)\r\n// mockada. Trocar de volta pelo fetch ao /sso/config quando o back subir.\r\nconst SSO_AUTH_PAGE_URL = 'https://beta.infusion.cloud/sdk-auth.html';\r\n\r\n/**\r\n * Resolve a URL da página de auth (front):\r\n * 1. config.authPageUrl — via configureSdkMitra({ authPageUrl }) ou injetado pela\r\n * plataforma em window.__mitraEnv.authPageUrl (apps publicadas).\r\n * 2. Fallback: constante de staging (SSO_AUTH_PAGE_URL).\r\n * Mantido async + assinatura pra facilitar trocar pelo discovery no back depois.\r\n */\r\nasync function fetchSsoAuthPageUrl(_baseURL: string): Promise<string> {\r\n const config = isConfigured() ? getConfig() : null;\r\n if (config?.authPageUrl) return config.authPageUrl;\r\n return SSO_AUTH_PAGE_URL;\r\n}\r\n\r\n// ── Providers SSO ───────────────────────────────────────────────────\r\n// Provider-agnóstico: o fluxo (start na página + troca no BFF /auth/{provider})\r\n// é IDÊNTICO pra Google e Microsoft. O que trava o Microsoft hoje é só a falta\r\n// de endpoint no IAM/BFF + app no Azure. Quando o back liberar, basta adicionar\r\n// 'microsoft' à allowlist — nada mais muda.\r\ntype OAuthProvider = 'google' | 'microsoft';\r\nconst SSO_ENABLED_PROVIDERS: OAuthProvider[] = ['google'];\r\n\r\nfunction providerLabel(provider: OAuthProvider): string {\r\n return provider === 'microsoft' ? 'Microsoft' : provider === 'google' ? 'Google' : provider;\r\n}\r\n\r\n/** Falha rápido (sem abrir popup/redirect) se o provider não está liberado no novo Mitra. */\r\nfunction assertProviderAvailable(provider: OAuthProvider): void {\r\n if (!SSO_ENABLED_PROVIDERS.includes(provider)) {\r\n throw new Error(`Login com ${providerLabel(provider)} ainda não disponível no novo Mitra.`);\r\n }\r\n}\r\n\r\n/** origin + path da URL (sem query/hash) — o Google valida o redirectUri byte a byte na troca. */\r\nfunction stripToOriginPath(url: string): string {\r\n try {\r\n const u = new URL(url);\r\n return u.origin + u.pathname;\r\n } catch {\r\n return url.split('?')[0].split('#')[0];\r\n }\r\n}\r\n\r\n/**\r\n * Troca o `code` do provider por token no BFF (POST {gateway}/auth/{provider}),\r\n * mesmo host do /email/login e /refresh-token. Response = mesmo envelope do\r\n * email login ({ token com Bearer, refreshToken }). Já auto-configura o SDK.\r\n */\r\nasync function exchangeSsoCode(\r\n authUrl: string,\r\n provider: OAuthProvider,\r\n code: string,\r\n redirectUri: string,\r\n projectId: number | string\r\n): Promise<LoginResponse> {\r\n const data = await postBffAuth(buildBffAuthEndpoint(authUrl, `/${provider}`), {\r\n appId: String(projectId),\r\n code,\r\n redirectUri\r\n });\r\n const response: LoginResponse = {\r\n token: data.token,\r\n // baseURL = authUrl (gateway); o BFF não devolve URLs de bootstrap.\r\n baseURL: authUrl,\r\n ...(data.refreshToken ? { refreshToken: data.refreshToken } : {})\r\n };\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n// ── Contexto do redirect (mobile) ───────────────────────────────────\r\n// No redirect o popup vira aba/navegação top-level: a SDK que iniciou o login\r\n// já foi embora quando o code volta. Guardamos o nonce (+ dados da troca) no\r\n// sessionStorage pra validar o state (anti-CSRF) e trocar o code no boot seguinte.\r\nconst SSO_REDIRECT_STORE_KEY = 'mitra_sso_redirect';\r\n\r\ninterface SsoRedirectContext {\r\n state: string;\r\n provider: OAuthProvider;\r\n authUrl: string;\r\n projectId: string;\r\n redirectUri: string;\r\n}\r\n\r\nfunction persistRedirectContext(ctx: SsoRedirectContext): void {\r\n try { sessionStorage.setItem(SSO_REDIRECT_STORE_KEY, JSON.stringify(ctx)); } catch { /* noop */ }\r\n}\r\n\r\nfunction readRedirectContext(): SsoRedirectContext | null {\r\n try {\r\n const raw = sessionStorage.getItem(SSO_REDIRECT_STORE_KEY);\r\n return raw ? JSON.parse(raw) as SsoRedirectContext : null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction clearRedirectContext(): void {\r\n try { sessionStorage.removeItem(SSO_REDIRECT_STORE_KEY); } catch { /* noop */ }\r\n}\r\n\r\nfunction buildStartUrl(\r\n authPageUrl: string,\r\n provider: OAuthProvider,\r\n state: string,\r\n appId: string,\r\n apiUrl: string,\r\n returnTo?: string\r\n): string {\r\n const sep = authPageUrl.includes('?') ? '&' : '?';\r\n const query: Record<string, string> = {\r\n provider,\r\n state,\r\n appId,\r\n apiUrl,\r\n // origin = origin desta SDK; a página trava o postMessage do result nela.\r\n origin: window.location.origin,\r\n // Contrato novo: a página NÃO troca mais o code — devolve o code cru (popup\r\n // via postMessage, redirect via #codeMitra). A SDK troca no BFF /auth/{provider}.\r\n responseType: 'code'\r\n };\r\n // Redirect (mobile): a página precisa saber pra onde voltar com o code.\r\n if (returnTo) query.returnTo = returnTo;\r\n return authPageUrl + sep + new URLSearchParams(query).toString();\r\n}\r\n\r\nfunction getOriginFromUrl(url: string): string {\r\n try { return new URL(url).origin; } catch { return ''; }\r\n}\r\n\r\nfunction generateState(): string {\r\n if (typeof crypto === 'undefined' || typeof crypto.getRandomValues !== 'function') {\r\n throw new Error('crypto.getRandomValues não disponível neste ambiente.');\r\n }\r\n const bytes = new Uint8Array(16);\r\n crypto.getRandomValues(bytes);\r\n return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');\r\n}\r\n\r\nfunction openOAuthPopup(\r\n providerUrl: string,\r\n expectedOrigin: string,\r\n expectedState: string\r\n): Promise<{ code?: string; token?: NewAuthTokenResponse }> {\r\n return new Promise((resolve, reject) => {\r\n const outerW = window.outerWidth || screen.width;\r\n const outerH = window.outerHeight || screen.height;\r\n const left = Math.max(0, (window.screenX || 0) + (outerW - POPUP_W) / 2);\r\n const top = Math.max(0, (window.screenY || 0) + (outerH - POPUP_H) / 2);\r\n\r\n const popup = window.open(\r\n providerUrl,\r\n 'mitra-oauth',\r\n `width=${POPUP_W},height=${POPUP_H},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n const popupRef: Window = popup;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Timeout na autenticação OAuth.'));\r\n }, POPUP_TIMEOUT_MS);\r\n\r\n const poll = setInterval(() => {\r\n if (popupRef.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário.'));\r\n }\r\n }, 500);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== OAUTH_RESULT_TYPE) return;\r\n const data = event.data as {\r\n success?: boolean;\r\n code?: string;\r\n token?: NewAuthTokenResponse;\r\n state?: string;\r\n error?: string;\r\n };\r\n\r\n if (data.state !== expectedState) {\r\n cleanup();\r\n reject(new Error('State inválido (possível CSRF).'));\r\n return;\r\n }\r\n\r\n cleanup();\r\n\r\n if (!data.success) {\r\n reject(new Error(data.error || 'Erro na autenticação OAuth.'));\r\n return;\r\n }\r\n // Contrato novo devolve `code`; contrato antigo devolve `token` pronto.\r\n if (!data.code && !data.token) {\r\n reject(new Error('Resposta OAuth sem code nem token.'));\r\n return;\r\n }\r\n resolve({ code: data.code, token: data.token });\r\n }\r\n\r\n function cleanup() {\r\n clearTimeout(timer);\r\n clearInterval(poll);\r\n window.removeEventListener('message', onMessage);\r\n if (!popupRef.closed) popupRef.close();\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/** Promise de OAuth em andamento — dedup de clicks duplicados / React StrictMode. */\r\nlet _oauthInFlight: Promise<LoginResponse> | null = null;\r\n\r\nasync function loginWithProvider(\r\n provider: OAuthProvider,\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n // Falha rápido antes de abrir qualquer coisa se o provider não está liberado.\r\n assertProviderAvailable(provider);\r\n\r\n if (typeof window === 'undefined') {\r\n throw new Error('SSO só funciona em ambiente browser.');\r\n }\r\n\r\n // Redirect (mobile): navega top-level e conclui no boot seguinte\r\n // (o app lê o fragment e chama exchangeSsoCodeMitra). Não faz parte do dedup de popup.\r\n if (options?.mode === 'redirect') {\r\n return startSsoRedirect(provider, options);\r\n }\r\n\r\n if (_oauthInFlight) return _oauthInFlight;\r\n\r\n _oauthInFlight = (async () => {\r\n try {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const state = generateState();\r\n const appId = String(projectId);\r\n\r\n // 0. DISCOVERY: descobre a URL da página de auth (front) no back.\r\n const authPageUrl = await fetchSsoAuthPageUrl(authUrl);\r\n // Origin do FRONT (página) — é contra ele que validamos o postMessage,\r\n // NÃO contra o baseURL/gateway.\r\n const pageOrigin = getOriginFromUrl(authPageUrl);\r\n // redirectUri = URL exata da página (origin+path); o Google valida byte a byte.\r\n const redirectUri = stripToOriginPath(authPageUrl);\r\n const startUrl = buildStartUrl(authPageUrl, provider, state, appId, authUrl);\r\n\r\n const { code, token } = await openOAuthPopup(startUrl, pageOrigin, state);\r\n\r\n // Contrato novo: a página devolveu o code cru → a SDK troca no BFF.\r\n if (code) {\r\n return await exchangeSsoCode(authUrl, provider, code, redirectUri, projectId);\r\n }\r\n // Contrato antigo (página ainda troca e devolve o token pronto): preserva\r\n // o funcionamento até a página migrar. Esse ramo morre quando ela migrar.\r\n const response = normalizeResponse(token!, authUrl);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n } finally {\r\n _oauthInFlight = null;\r\n }\r\n })();\r\n\r\n return _oauthInFlight;\r\n}\r\n\r\n/**\r\n * Inicia o SSO em modo redirect (mobile): guarda o nonce no sessionStorage e\r\n * navega top-level pra página de auth. A Promise nunca resolve (a página vai\r\n * embora); a conclusão acontece no boot seguinte via exchangeSsoCodeMitra().\r\n */\r\nasync function startSsoRedirect(provider: OAuthProvider, options?: LoginOptions): Promise<never> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const state = generateState();\r\n const appId = String(projectId);\r\n const authPageUrl = await fetchSsoAuthPageUrl(authUrl);\r\n const redirectUri = stripToOriginPath(authPageUrl);\r\n\r\n persistRedirectContext({ state, provider, authUrl, projectId: appId, redirectUri });\r\n\r\n const startUrl = buildStartUrl(authPageUrl, provider, state, appId, authUrl, window.location.href);\r\n window.location.assign(startUrl);\r\n return new Promise<never>(() => { /* a página descarrega antes de resolver */ });\r\n}\r\n\r\n/**\r\n * Gera o JWT a partir do `code` do SSO (retorno do redirect). Valida o `state`\r\n * contra o nonce gerado no start (anti-CSRF), troca o code no BFF\r\n * (POST {gateway}/auth/{provider}) e configura o SDK. Ler/limpar o fragment da\r\n * URL é responsabilidade do app — aqui só se gera o token.\r\n */\r\nexport async function exchangeSsoCodeMitra(options: { code: string; state: string }): Promise<LoginResponse> {\r\n const ctx = readRedirectContext();\r\n clearRedirectContext();\r\n\r\n if (!ctx || ctx.state !== options.state) {\r\n throw new Error('State inválido no retorno do SSO (possível CSRF).');\r\n }\r\n\r\n return exchangeSsoCode(ctx.authUrl, ctx.provider, options.code, ctx.redirectUri, ctx.projectId);\r\n}\r\n\r\n// ── Login (popup-style) ─────────────────────────────────────────────\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('google', options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return loginWithProvider('microsoft', options);\r\n}\r\n\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n if (method === 'google') return loginWithProvider('google', options);\r\n if (method === 'microsoft') return loginWithProvider('microsoft', options);\r\n throw new Error(NOT_SUPPORTED_POPUP);\r\n}\r\n\r\n// ── Refresh ─────────────────────────────────────────────────────────\r\n\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\nexport async function refreshTokenSilently(authUrl: string, _projectId: number | string): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const config = isConfigured() ? getConfig() : null;\r\n const refreshToken = config?.refreshToken;\r\n if (!refreshToken) {\r\n throw new Error('refreshToken não disponível para renovação. Faça login novamente.');\r\n }\r\n // Via BFF: POST {gateway}/auth/refresh-token { refreshToken }.\r\n // Devolve { token, refreshToken } novos. Guarda os dois.\r\n const data = await postBffAuth(buildBffAuthEndpoint(authUrl, '/refresh-token'), { refreshToken });\r\n return {\r\n token: data.token,\r\n // Refresh não muda a base — mantém o authUrl (gateway).\r\n baseURL: authUrl,\r\n ...(data.refreshToken ? { refreshToken: data.refreshToken } : {})\r\n };\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\r\n * Mitra Interactions SDK - Autenticação (Router)\r\n *\r\n * Roteia chamadas de auth para a implementação correta com base no `authUrl`:\r\n * - URLs legadas (`coder.mitralab.io/sdk-auth/`, `agent.mitralab.io/sdk-auth/`) → auth-legacy.ts\r\n * - Qualquer outro authUrl → auth-new.ts (novo Mitra: Kong gateway + IAM service)\r\n *\r\n * A API pública é idêntica à legacy. Consumers não precisam alterar código.\r\n */\r\n\r\nimport { isConfigured, getConfig } from './config';\r\nimport * as legacy from './auth-legacy';\r\nimport * as fresh from './auth-new';\r\nimport type {\r\n LoginOptions,\r\n LoginResponse\r\n} from './types';\r\n\r\n// ── Detecção de mundo ───────────────────────────────────────────────\r\n\r\nconst LEGACY_AUTH_URLS = [\r\n 'https://coder.mitralab.io/sdk-auth/',\r\n 'https://agent.mitralab.io/sdk-auth/'\r\n];\r\n\r\nfunction normalize(url: string): string {\r\n // Remove query string e fragment, garante trailing slash\r\n const stripped = url.split('?')[0].split('#')[0];\r\n return stripped.endsWith('/') ? stripped : stripped + '/';\r\n}\r\n\r\nexport function isLegacyAuthUrl(authUrl: string | undefined): boolean {\r\n if (!authUrl) return false;\r\n return LEGACY_AUTH_URLS.includes(normalize(authUrl));\r\n}\r\n\r\n/**\r\n * Retorna true se o contexto atual é o novo mundo (authUrl configurado não é\r\n * legacy). Usado por features que ainda não têm suporte no novo Mitra.\r\n */\r\nexport function isNewWorld(authUrl?: string): boolean {\r\n const resolved = authUrl ?? (isConfigured() ? getConfig().authUrl : undefined);\r\n // Sem authUrl não dá pra afirmar que é novo mundo — assume legacy (não bloqueia).\r\n if (!resolved) return false;\r\n return !isLegacyAuthUrl(resolved);\r\n}\r\n\r\nfunction resolveAuthUrlFromOptions(options?: { authUrl?: string }): string | undefined {\r\n if (options?.authUrl) return options.authUrl;\r\n if (isConfigured()) return getConfig().authUrl;\r\n return undefined;\r\n}\r\n\r\n// ── Roteamento ──────────────────────────────────────────────────────\r\n\r\nexport async function loginMitra(\r\n method: 'email' | 'google' | 'microsoft' | 'mitra',\r\n options?: LoginOptions\r\n): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginMitra(method, options)\r\n : fresh.loginMitra(method, options);\r\n}\r\n\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithGoogleMitra(options)\r\n : fresh.loginWithGoogleMitra(options);\r\n}\r\n\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n const authUrl = resolveAuthUrlFromOptions(options);\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.loginWithMicrosoftMitra(options)\r\n : fresh.loginWithMicrosoftMitra(options);\r\n}\r\n\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number | string): Promise<LoginResponse> {\r\n return isLegacyAuthUrl(authUrl)\r\n ? legacy.refreshTokenSilently(authUrl, projectId)\r\n : fresh.refreshTokenSilently(authUrl, projectId);\r\n}\r\n\r\n/**\r\n * Gera o JWT a partir do code do SSO (novo Mitra). O app lê codeMitra/stateMitra\r\n * do fragment (lógica de template) e chama aqui pra validar o nonce e trocar o\r\n * code por token no BFF. Exclusivo do novo mundo — no legacy o token já vem\r\n * pronto no fragment (tokenMitra).\r\n */\r\nexport async function exchangeSsoCodeMitra(options: { code: string; state: string }): Promise<LoginResponse> {\r\n return fresh.exchangeSsoCodeMitra(options);\r\n}\r\n\r\n","/**\n * Mitra Interactions SDK - Instance\n *\n * Permite múltiplas instâncias configuradas independentemente.\n */\n\nimport type { MitraConfig } from './config';\nimport { stripBearer, parseBody } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\nimport type {\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} 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 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 // 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\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\n let _config: MitraConfig = {\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\n token: initialConfig.token ? stripBearer(initialConfig.token) : '',\n refreshToken: initialConfig.refreshToken,\n integrationURL: initialConfig.integrationURL,\n authUrl: initialConfig.authUrl,\n projectId: initialConfig.projectId\n };\n\n // ── Internal helpers ──\n\n function resolveProjectId(projectId?: number | string): number | string {\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, isJson } = parseBody(text);\n if (!response.ok) {\n const fallback = !isJson && text ? `HTTP ${response.status} — ${text}` : `HTTP ${response.status}`;\n const base = (isJson && (data?.message || data?.error)) || fallback;\n const msg = isJson && 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 async function tryRefreshToken(): Promise<boolean> {\n if (!_config.token || _config.projectId == null || !_config.baseURL) return false;\n\n // 1. Tenta refresh direto via API (sem HTML)\n try {\n const baseURL = _config.baseURL.replace(/\\/+$/, '');\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${_config.projectId}`, {\n method: 'GET',\n headers: { 'Authorization': formatToken(_config.token) }\n });\n\n if (resp.ok) {\n const data = await resp.json();\n if (data.token) {\n const newToken = `Bearer ${stripBearer(data.token)}`;\n const session: LoginResponse = {\n token: newToken,\n baseURL: data.merge?.backURL || _config.baseURL,\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\n };\n _config = { ..._config, token: stripBearer(session.token) };\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\n return true;\n }\n }\n } catch {\n // Falhou — tenta fallback via iframe\n }\n\n // 2. Fallback: refreshTokenSilently (router decide entre iframe legacy ou API novo Mitra)\n if (!_config.authUrl || typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId!);\n _config = {\n ..._config,\n token: stripBearer(session.token),\n ...(session.refreshToken !== undefined ? { refreshToken: session.refreshToken } : {})\n };\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 // HTTP tenant (baseURL + X-TenantID)\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number | 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(), '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 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 // 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\n return instance;\n}\n","/**\r\n * Mitra Interactions SDK - Configuração\r\n */\r\n\r\nimport { createMitraInstance, type MitraInstance } from './instance';\r\n\r\nexport interface MitraConfig {\r\n /** URL base da API (ex: https://api.mitra.com). Opcional se houver window.__mitraEnv.apiBaseURL (build-proxy). */\r\n baseURL?: string;\r\n /** Token JWT para autenticação (opcional para Server Functions públicas) */\r\n token?: string;\r\n /** Refresh token (novo Mitra). Necessário para refresh automático no novo mundo. */\r\n refreshToken?: string;\r\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\r\n integrationURL?: string;\r\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\r\n authUrl?: string;\r\n /** URL da página do popup de SSO (sdk-auth.html). Opcional se houver window.__mitraEnv.authPageUrl. */\r\n authPageUrl?: string;\r\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\r\n projectId?: number | string;\r\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\r\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\r\n}\r\n\r\nlet globalConfig: MitraConfig | null = null;\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Remove todos os prefixos \"Bearer \" do início do token (case-insensitive,\r\n * repetidos) e espaços nas pontas. Garante que o token seja sempre guardado\r\n * cru, evitando \"Bearer Bearer ...\" quando o consumidor já passa o prefixo.\r\n */\r\nexport function stripBearer(token: string): string {\r\n let t = token.trim();\r\n while (/^bearer\\s+/i.test(t)) {\r\n t = t.replace(/^bearer\\s+/i, '').trim();\r\n }\r\n return t;\r\n}\r\n\r\n/**\r\n * Parseia o corpo da resposta como JSON. Se NÃO for JSON (HTML de gateway,\r\n * texto puro de proxy, etc.), devolve o texto CRU em vez de estourar\r\n * SyntaxError — assim a mensagem real do backend nunca se perde.\r\n *\r\n * Retrocompatível: corpo JSON continua parseado igual (comportamento idêntico);\r\n * só muda o caso que hoje já quebra (não-JSON), que virava\r\n * \"Unexpected token ... in JSON\".\r\n */\r\nexport function parseBody(text: string): { data: any; isJson: boolean } {\r\n if (!text) return { data: null, isJson: true };\r\n try {\r\n return { data: JSON.parse(text), isJson: true };\r\n } catch {\r\n return { data: text, isJson: false };\r\n }\r\n}\r\n\r\n// ── Persistência do refreshToken (novo Mitra) ─────────────────────────\r\n// O refreshToken (diferente do token velho mundo, que renova via cookie/iframe)\r\n// precisa sobreviver ao F5. O SDK guarda ele no MESMO store do template\r\n// (localStorage['mitra-session']), fazendo merge — assim o template não precisa\r\n// mudar. Só o refreshToken é gravado aqui; baseURL/token continuam com o app.\r\nconst SESSION_STORE_KEY = 'mitra-session';\r\n\r\nfunction safeLocalStorage(): Storage | null {\r\n try {\r\n return typeof localStorage !== 'undefined' ? localStorage : null;\r\n } catch {\r\n return null; // acesso a localStorage pode lançar (SSR, cookies bloqueados)\r\n }\r\n}\r\n\r\nfunction persistRefreshToken(refreshToken: string): void {\r\n const ls = safeLocalStorage();\r\n if (!ls) return;\r\n try {\r\n const raw = ls.getItem(SESSION_STORE_KEY);\r\n const obj = raw ? JSON.parse(raw) : {};\r\n obj.refreshToken = refreshToken;\r\n ls.setItem(SESSION_STORE_KEY, JSON.stringify(obj));\r\n } catch { /* noop */ }\r\n}\r\n\r\nfunction readPersistedRefreshToken(): string | undefined {\r\n const ls = safeLocalStorage();\r\n if (!ls) return undefined;\r\n try {\r\n const raw = ls.getItem(SESSION_STORE_KEY);\r\n if (!raw) return undefined;\r\n const obj = JSON.parse(raw);\r\n return typeof obj?.refreshToken === 'string' && obj.refreshToken ? obj.refreshToken : undefined;\r\n } catch {\r\n return undefined;\r\n }\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.authPageUrl === 'string' && env.authPageUrl) out.authPageUrl = env.authPageUrl;\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 // refreshToken sobrevive ao F5: se não veio no config, recupera do localStorage\r\n // (o template não precisa saber dele). Se veio, persiste pra próxima carga.\r\n if (!merged.refreshToken) {\r\n const persisted = readPersistedRefreshToken();\r\n if (persisted) merged.refreshToken = persisted;\r\n } else {\r\n persistRefreshToken(merged.refreshToken);\r\n }\r\n\r\n globalConfig = {\r\n ...merged,\r\n baseURL: merged.baseURL.replace(/\\/+$/, '')\r\n };\r\n\r\n return createMitraInstance(globalConfig);\r\n}\r\n\r\n/**\r\n * Obtém a configuração atual\r\n */\r\nexport function getConfig(): MitraConfig {\r\n if (!globalConfig) {\r\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\r\n }\r\n return globalConfig;\r\n}\r\n\r\n/**\r\n * Verifica se o SDK está configurado\r\n */\r\nexport function isConfigured(): boolean {\r\n return globalConfig !== null;\r\n}\r\n\r\n/**\r\n * Atualiza o token global (usado internamente pelo refresh automático).\r\n * Aceita refreshToken opcional (novo Mitra).\r\n */\r\nexport function updateGlobalToken(token: string, refreshToken?: string): void {\r\n if (globalConfig) {\r\n globalConfig = {\r\n ...globalConfig,\r\n token: stripBearer(token),\r\n ...(refreshToken !== undefined ? { refreshToken } : {})\r\n };\r\n // Persiste o refreshToken rotacionado no store (sobrevive F5).\r\n if (refreshToken) persistRefreshToken(refreshToken);\r\n }\r\n}\r\n\r\n/**\r\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nexport function resolveProjectId(projectId?: number | string): number | string {\r\n if (projectId != null) return projectId;\r\n if (globalConfig?.projectId != null) return globalConfig.projectId;\r\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\r\n}\r\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig, updateGlobalToken, stripBearer, parseBody } from './config';\nimport { refreshTokenSilently, isNewWorld } 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 * Tenta renovar o token diretamente via API (sem iframe/HTML).\n * Usa o token atual pra chamar refreshedToken e obter um novo token scoped.\n * Se falhar (token expirado de verdade), tenta o fallback via iframe.\n */\nasync function tryRefreshToken(): Promise<boolean> {\n const config = getConfig();\n\n if (!config.token || config.projectId == null || !config.baseURL) return false;\n\n // 1. Refresh legado via /mitraspace/project/refreshedToken — SÓ mundo velho.\n // No novo mundo o refresh é 100% BFF (passo 2); pula esse passo pra não\n // bater no endpoint legado nem depender dele.\n if (!isNewWorld()) {\n try {\n const baseURL = config.baseURL.replace(/\\/+$/, '');\n const resp = await getFetch()(`${baseURL}/mitraspace/project/refreshedToken/${config.projectId}`, {\n method: 'GET',\n headers: { 'Authorization': formatToken(config.token) }\n });\n\n if (resp.ok) {\n const data = await resp.json();\n if (data.token) {\n const newToken = `Bearer ${stripBearer(data.token)}`;\n const session: LoginResponse = {\n token: newToken,\n baseURL: data.merge?.backURL || config.baseURL,\n ...(data.merge?.integrationURL ? { integrationURL: data.merge.integrationURL } : {})\n };\n updateGlobalToken(session.token);\n if (config.onTokenRefresh) config.onTokenRefresh(session);\n return true;\n }\n }\n } catch {\n // Falhou — cai pro fallback abaixo (iframe legacy)\n }\n }\n\n // 2. Novo mundo → BFF (/auth/refresh-token); legado → iframe. Via refreshTokenSilently.\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, session.refreshToken);\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, isJson } = parseBody(text);\n\n if (!response.ok) {\n // Sem JSON, o corpo cru entra na mensagem (senão o erro do backend some).\n const fallback = !isJson && text ? `HTTP ${response.status} — ${text}` : `HTTP ${response.status}`;\n const base = (isJson && (data?.message || data?.error)) || fallback;\n const msg = isJson && 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 // Status de token expirado difere por mundo:\n // - Novo Mitra: 401 \"token expired\" (403 lá é permissão negada — refresh não resolve).\n // - Legado: 403.\n const expiredStatus = isNewWorld() ? 401 : 403;\n\n if (response.status === expiredStatus) {\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 | string,\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 | string, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('GET', endpoint, tenantId, { params });\n },\n post<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\n },\n put<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\n },\n patch<T>(endpoint: string, tenantId: number | string, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\n },\n del<T>(endpoint: string, tenantId: number | string, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\n }\n};\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpTenant } from './client';\nimport { getConfig, resolveProjectId } from './config';\nimport type {\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} from './types';\n\n/**\n * POST /interactions/executeServerFunction\n * Executa uma Server Function de forma SÍNCRONA (timeout 60s no backend)\n */\nexport async function executeServerFunctionMitra(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunction', body);\n}\n\n/**\n * POST /interactions/executeServerFunctionAsync\n * Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)\n */\nexport async function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n serverFunctionId: options.serverFunctionId\n };\n\n if (options.input !== undefined) {\n body.input = options.input;\n }\n\n return http.post('/interactions/executeServerFunctionAsync', body);\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/execute\n * Executa uma Server Function pública de forma SÍNCRONA (sem autenticação).\n * A SF deve ter publicExecution = true. Timeout 5min.\n */\nexport async function executePublicServerFunctionMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/execute`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * POST /public/serverFunction/{projectId}/{serverFunctionId}/executeAsync\n * Executa uma Server Function pública de forma ASSÍNCRONA (sem autenticação).\n * Retorna executionId imediatamente. Use getPublicServerFunctionExecutionMitra para polling.\n */\nexport async function executePublicServerFunctionAsyncMitra(\n options: ExecutePublicServerFunctionOptions\n): Promise<ExecutePublicServerFunctionAsyncResponse> {\n const { projectId, serverFunctionId, input } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/${serverFunctionId}/executeAsync`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input || {})\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /public/serverFunction/{projectId}/execution/{executionId}\n * Consulta o status/resultado de uma execução pública de SF (sem autenticação).\n */\nexport async function getPublicServerFunctionExecutionMitra(\n options: GetPublicServerFunctionExecutionOptions\n): Promise<GetPublicServerFunctionExecutionResponse> {\n const { projectId, executionId } = options;\n const baseURL = getConfig().baseURL;\n const url = `${baseURL}/public/serverFunction/${projectId}/execution/${executionId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' }\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => null);\n const msg = data?.message || data?.error || `HTTP ${response.status}`;\n throw { message: msg, status: response.status, details: data };\n }\n\n return response.json();\n}\n\n/**\n * GET /interactions/integrations?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return http.get('/interactions/integrations', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /interactions/integrations/call\n * Chama uma API externa via serviço de integrações\n * Mapeia connection → integrationSlug no body\n */\nexport async function callIntegrationMitra(options: CallIntegrationOptions): Promise<CallIntegrationResponse> {\n const body: Record<string, unknown> = {\n integrationSlug: options.connection,\n projectId: resolveProjectId(options.projectId),\n method: options.method\n };\n\n if (options.endpoint !== undefined) {\n body.endpoint = options.endpoint;\n }\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n if (options.body !== undefined) {\n body.body = options.body;\n }\n\n return http.post('/interactions/integrations/call', body);\n}\n\n/**\n * POST /interactions/stopServerFunctionExecution\n * Para a execução de uma Server Function em andamento\n */\nexport async function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse> {\n return http.post('/interactions/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}`, pid, { page, size, jdbcConnectionConfigId, ...filters });\n}\n\nexport async function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>> {\n const { tableName, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function updateRecordMitra(options: UpdateRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.put(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function patchRecordMitra(options: PatchRecordOptions): Promise<Record<string, any>> {\n const { tableName, id, data, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.patch(`/interactions/records/${tableName}/${id}`, pid, data, { jdbcConnectionConfigId });\n}\n\nexport async function deleteRecordMitra(options: DeleteRecordOptions): Promise<void> {\n const { tableName, id, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.del(`/interactions/records/${tableName}/${id}`, pid, { jdbcConnectionConfigId });\n}\n\nexport async function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]> {\n const { tableName, records, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.post(`/interactions/records/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n"]}
|