mitra-interactions-sdk 1.0.32 → 1.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -52,6 +52,7 @@ Login via popup ou redirect seguro hospedado no domínio Mitra. Credenciais nunc
52
52
  ```typescript
53
53
  import { loginMitra } from 'mitra-interactions-sdk';
54
54
 
55
+ // Métodos disponíveis: 'email', 'google', 'microsoft', 'mitra'
55
56
  // Primeira vez — sem configureSdkMitra: authUrl e projectId são obrigatórios
56
57
  const result = await loginMitra('email', {
57
58
  authUrl: 'https://coder.mitralab.io/sdk-auth/',
@@ -65,6 +66,18 @@ const result = await loginMitra('microsoft');
65
66
  // result: { token, baseURL, integrationURL? }
66
67
  ```
67
68
 
69
+ ### Login Completo (method 'mitra')
70
+
71
+ Abre uma tela com todas as opções (Google, Microsoft, Email) e toggle entre Login/Cadastro.
72
+
73
+ ```typescript
74
+ await loginMitra('mitra', {
75
+ authUrl: 'https://coder.mitralab.io/sdk-auth/',
76
+ projectId: 123,
77
+ title: 'Meu App' // Opcional — título exibido na tela de login (default: "Mitra")
78
+ });
79
+ ```
80
+
68
81
  ### Login via Redirect
69
82
 
70
83
  Navega o usuário para a página de auth. Após o login, redireciona de volta com token nos query params.
@@ -85,10 +98,11 @@ await loginMitra('google', {
85
98
  // create funciona tanto em popup quanto redirect
86
99
  await loginMitra('email', { create: true });
87
100
 
88
- await loginMitra('email', {
101
+ await loginMitra('mitra', {
89
102
  mode: 'redirect',
90
- create: true,
91
- returnTo: '/onboarding'
103
+ create: true, // Abre direto no modo cadastro
104
+ returnTo: '/onboarding',
105
+ title: 'Meu App'
92
106
  });
93
107
  ```
94
108
 
package/dist/index.d.mts CHANGED
@@ -12,6 +12,8 @@ interface LoginOptions {
12
12
  returnTo?: string;
13
13
  /** Se true, abre o fluxo de criar conta em vez de login. */
14
14
  create?: boolean;
15
+ /** Título exibido na página de auth (ex: nome da aplicação). */
16
+ title?: string;
15
17
  }
16
18
  interface LoginResponse {
17
19
  /** Token JWT (já com prefixo Bearer) */
@@ -360,7 +362,7 @@ declare function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginR
360
362
  /**
361
363
  * Login genérico via popup/redirect seguro Mitra.
362
364
  */
363
- declare function loginMitra(method: 'email' | 'google' | 'microsoft', options?: LoginOptions): Promise<LoginResponse>;
365
+ declare function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse>;
364
366
  /**
365
367
  * Processa o retorno de um login com mode 'redirect'.
366
368
  *
package/dist/index.d.ts CHANGED
@@ -12,6 +12,8 @@ interface LoginOptions {
12
12
  returnTo?: string;
13
13
  /** Se true, abre o fluxo de criar conta em vez de login. */
14
14
  create?: boolean;
15
+ /** Título exibido na página de auth (ex: nome da aplicação). */
16
+ title?: string;
15
17
  }
16
18
  interface LoginResponse {
17
19
  /** Token JWT (já com prefixo Bearer) */
@@ -360,7 +362,7 @@ declare function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginR
360
362
  /**
361
363
  * Login genérico via popup/redirect seguro Mitra.
362
364
  */
363
- declare function loginMitra(method: 'email' | 'google' | 'microsoft', options?: LoginOptions): Promise<LoginResponse>;
365
+ declare function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse>;
364
366
  /**
365
367
  * Processa o retorno de um login com mode 'redirect'.
366
368
  *
package/dist/index.js CHANGED
@@ -63,6 +63,7 @@ function buildAuthUrl(authUrl, method, projectId, opts) {
63
63
  let url = `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;
64
64
  if (opts == null ? void 0 : opts.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;
65
65
  if (opts == null ? void 0 : opts.create) url += `&create=true`;
66
+ if (opts == null ? void 0 : opts.title) url += `&title=${encodeURIComponent(opts.title)}`;
66
67
  if (typeof window !== "undefined") {
67
68
  url += `&originUrl=${encodeURIComponent(window.location.href)}`;
68
69
  }
@@ -93,7 +94,8 @@ async function doLogin(method, options) {
93
94
  const origin = getOriginFromUrl(authUrl);
94
95
  const url = buildAuthUrl(authUrl, method, projectId, {
95
96
  returnTo: mode === "redirect" ? resolveReturnTo(options == null ? void 0 : options.returnTo) : void 0,
96
- create: options == null ? void 0 : options.create
97
+ create: options == null ? void 0 : options.create,
98
+ title: options == null ? void 0 : options.title
97
99
  });
98
100
  if (mode === "redirect") {
99
101
  window.location.href = url;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth.ts","../src/instance.ts","../src/config.ts","../src/client.ts","../src/services.ts"],"names":["resolveProjectId","handleResponse","tryRefreshToken","fetchWithRefresh","requestIntegrations","getFetch","formatToken"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Mitra Interactions SDK - Autenticação\r\n *\r\n * Login via popup seguro hospedado no domínio Mitra.\r\n * Credenciais nunca passam pelo código do desenvolvedor.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type { LoginOptions, LoginResponse } from './types';\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────────\r\n\r\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\r\nconst POPUP_WIDTH = 420;\r\nconst POPUP_HEIGHT = 520;\r\n\r\n/**\r\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\r\n */\r\nfunction getOriginFromUrl(url: string): string {\r\n try {\r\n const parsed = new URL(url);\r\n return parsed.origin;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Abre popup de autenticação e aguarda o resultado via postMessage.\r\n * Valida que a mensagem veio do origin da authUrl.\r\n */\r\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\r\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n url,\r\n 'mitra-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n\r\n function onMessage(event: MessageEvent) {\r\n // Ignora mensagens de outros origins\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n // Detecta se o popup foi fechado sem completar\r\n const pollTimer = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário'));\r\n }\r\n }, 500);\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearInterval(pollTimer);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/**\r\n * Auto-configura o SDK a partir da resposta de login.\r\n * Preserva authUrl e projectId usados no login para chamadas subsequentes.\r\n */\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number): void {\r\n if (!response.baseURL) return;\r\n\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * Monta a URL do popup/redirect de autenticação.\r\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\r\n */\r\nfunction buildAuthUrl(\r\n authUrl: string,\r\n method: string,\r\n projectId: number,\r\n opts?: { returnTo?: string; create?: boolean }\r\n): string {\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n let url = `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\r\n if (opts?.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;\r\n if (opts?.create) url += `&create=true`;\r\n // Passa a URL completa de origem — document.referrer cross-origin perde path/query\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n return url;\r\n}\r\n\r\n// ── Resolução de opções ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\r\n const config = isConfigured() ? getConfig() : null;\r\n\r\n const authUrl = options?.authUrl || config?.authUrl;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n return { authUrl, projectId };\r\n}\r\n\r\n// ── Helpers de redirect ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Converte returnTo relativo para absoluto. Se não informado, usa a URL atual.\r\n */\r\nfunction resolveReturnTo(returnTo?: string): string {\r\n if (typeof window === 'undefined') return returnTo || '';\r\n if (!returnTo) return window.location.href;\r\n if (/^https?:\\/\\//.test(returnTo)) return returnTo;\r\n // Caminho relativo → absoluto\r\n return new URL(returnTo, window.location.origin).href;\r\n}\r\n\r\n// ── Funções de Login ────────────────────────────────────────────────────\r\n\r\n/**\r\n * Função central de login: decide popup vs redirect, monta URL com opts extras.\r\n */\r\nasync function doLogin(method: string, options?: LoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const mode = options?.mode || 'popup';\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, method, projectId, {\r\n returnTo: mode === 'redirect' ? resolveReturnTo(options?.returnTo) : undefined,\r\n create: options?.create\r\n });\r\n\r\n if (mode === 'redirect') {\r\n window.location.href = url;\r\n // Nunca resolve — o navegador navega para fora\r\n return new Promise(() => {});\r\n }\r\n\r\n const response = await openAuthPopup(url, origin);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Login com email e senha via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('email', options);\r\n}\r\n\r\n/**\r\n * Login com Google via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('google', options);\r\n}\r\n\r\n/**\r\n * Login com Microsoft via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('microsoft', options);\r\n}\r\n\r\n/**\r\n * Login genérico via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft', options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin(method, options);\r\n}\r\n\r\n// ── Handle Auth Redirect ─────────────────────────────────────────────\r\n\r\n/**\r\n * Processa o retorno de um login com mode 'redirect'.\r\n *\r\n * Após o redirect, a página de auth redireciona de volta com query params:\r\n * ?tokenMitra={token}&backURLMitra={baseURL}&integrationURLMitra={integrationURL}\r\n *\r\n * Esta função:\r\n * - Lê os query params da URL atual\r\n * - Se `tokenMitra=error`, lança erro\r\n * - Se encontrou tokens, limpa a URL e retorna LoginResponse\r\n * - Se não encontrou nada, retorna null\r\n */\r\nexport function handleAuthRedirect(): LoginResponse | null {\r\n if (typeof window === 'undefined') return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n const tokenMitra = params.get('tokenMitra');\r\n\r\n if (!tokenMitra) return null;\r\n\r\n if (tokenMitra === 'error') {\r\n cleanUrlParams(['tokenMitra']);\r\n throw new Error('Erro na autenticação. Tente novamente.');\r\n }\r\n\r\n const baseURL = params.get('backURLMitra') || '';\r\n const integrationURL = params.get('integrationURLMitra') || undefined;\r\n\r\n cleanUrlParams(['tokenMitra', 'backURLMitra', 'integrationURLMitra']);\r\n\r\n const response: LoginResponse = {\r\n token: tokenMitra,\r\n baseURL,\r\n ...(integrationURL ? { integrationURL } : {})\r\n };\r\n\r\n return response;\r\n}\r\n\r\nfunction cleanUrlParams(keysToRemove: string[]): void {\r\n const url = new URL(window.location.href);\r\n for (const key of keysToRemove) {\r\n url.searchParams.delete(key);\r\n }\r\n const newUrl = url.searchParams.toString()\r\n ? `${url.pathname}?${url.searchParams.toString()}${url.hash}`\r\n : `${url.pathname}${url.hash}`;\r\n window.history.replaceState({}, '', newUrl);\r\n}\r\n\r\n// ── Token Refresh Silencioso ─────────────────────────────────────────\r\n\r\nconst REFRESH_TIMEOUT_MS = 15000;\r\n\r\n/** Promise do refresh em andamento (deduplicação — evita múltiplos iframes) */\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\n/**\r\n * Cria iframe invisível para renovar o token silenciosamente.\r\n * O sdk-auth detecta a sessão existente (cookie do provider) e retorna\r\n * um novo token via postMessage, sem interação do usuário.\r\n */\r\nfunction openAuthIframe(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n iframe.src = url;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Token refresh timeout'));\r\n }, REFRESH_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro no refresh do token'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Renova o token silenciosamente via iframe invisível.\r\n * Se já houver um refresh em andamento, reaproveita a mesma promise.\r\n */\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, 'refresh', projectId);\r\n const response = await openAuthIframe(url, origin);\r\n return response;\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\n * Mitra Interactions SDK - Instance\n *\n * Permite múltiplas instâncias configuradas independentemente.\n */\n\nimport type { MitraConfig } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n// ── HTTP Helpers ──────────────────────────────────────────────────────\n\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${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 runQuery(options: RunQueryOptions): Promise<RunQueryResponse>;\n executeDbAction(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse>;\n setFileStatus(options: SetFileStatusOptions): Promise<SetFileStatusResponse>;\n setVariable(options: SetVariableOptions): Promise<SetVariableResponse>;\n listVariables(options?: ListVariablesOptions): Promise<ListVariablesResponse>;\n getVariable(options: GetVariableOptions): Promise<GetVariableResponse>;\n runAction(options: RunActionOptions): Promise<RunActionResponse>;\n executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;\n executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;\n stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;\n\n // Upload de Arquivos\n uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\n\n // Integrations\n listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;\n callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;\n\n // Dynamic Schema CRUD\n listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;\n getRecord(options: GetRecordOptions): Promise<Record<string, any>>;\n createRecord(options: CreateRecordOptions): Promise<Record<string, any>>;\n updateRecord(options: UpdateRecordOptions): Promise<Record<string, any>>;\n patchRecord(options: PatchRecordOptions): Promise<Record<string, any>>;\n deleteRecord(options: DeleteRecordOptions): Promise<void>;\n createRecordsBatch(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;\n}\n\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\n let _config: MitraConfig = {\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\n token: initialConfig.token || '',\n integrationURL: initialConfig.integrationURL,\n authUrl: initialConfig.authUrl,\n projectId: initialConfig.projectId\n };\n\n // ── Internal helpers ──\n\n function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (_config.projectId != null) return _config.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n }\n\n function authHeaders(): Record<string, string> {\n return {\n 'Authorization': formatToken(_config.token),\n 'Content-Type': 'application/json'\n };\n }\n\n async function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw { message: msg, status: response.status, details: data };\n }\n return data as T;\n }\n\n // ── Token refresh silencioso ──\n\n async function tryRefreshToken(): Promise<boolean> {\n if (!_config.authUrl || _config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId);\n _config = { ..._config, token: session.token };\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n const newHeaders = { ...authHeaders() };\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n }\n\n // HTTP main API (baseURL)\n async function request<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: authHeaders(),\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // HTTP upload (multipart/form-data)\n async function requestUpload<T>(endpoint: string, formData: FormData): Promise<T> {\n const url = `${_config.baseURL}${endpoint}`;\n return fetchWithRefresh(url, {\n method: 'POST',\n headers: { 'Authorization': formatToken(_config.token) },\n body: formData\n });\n }\n\n // HTTP integrations (integrationURL)\n async function requestIntegrations<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n if (!_config.integrationURL) throw new Error('integrationURL não configurado.');\n const base = _config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${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 tenant (baseURL + X-TenantID)\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: { ...authHeaders(), 'X-TenantID': String(tenantId) },\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // ── Instance ──\n\n const instance: MitraInstance & { _updateToken(token: string): void } = {\n get config() { return _config; },\n\n /** @internal — usado pelo MitraSDK para propagar token refresh */\n _updateToken(token: string) {\n _config = { ..._config, token };\n },\n\n // Services\n async runQuery(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), sql: options.sql };\n if (options.jdbcId !== undefined) body.jdbcId = options.jdbcId;\n return request('POST', '/agentAiShortcut/runQuery', { body });\n },\n\n async executeDbAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dbActionId: options.dbActionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/executeDbAction', { body });\n },\n\n async setFileStatus(options) {\n return request('POST', '/agentAiShortcut/setFileStatus', {\n body: { projectId: resolveProjectId(options.projectId), fileName: options.fileName, targetPath: options.targetPath }\n });\n },\n\n async setVariable(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), key: options.key };\n if (options.value !== undefined) body.value = options.value;\n return request('POST', '/agentAiShortcut/setVariable', { body });\n },\n\n async listVariables(options = {}) {\n return request('GET', '/agentAiShortcut/listVariables', { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async getVariable(options) {\n return request('GET', '/agentAiShortcut/getVariable', { params: { projectId: resolveProjectId(options.projectId), key: options.key } });\n },\n\n async runAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), actionId: options.actionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/runAction', { body });\n },\n\n async executeServerFunction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/agentAiShortcut/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', '/agentAiShortcut/executeServerFunctionAsync', { body });\n },\n\n async stopServerFunctionExecution(options) {\n return request('POST', '/agentAiShortcut/stopServerFunctionExecution', {\n body: { projectId: resolveProjectId(options.projectId), executionId: options.executionId }\n });\n },\n\n // Upload de Arquivos\n async uploadFilePublic(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFilePublic', formData);\n },\n\n async uploadFileLoadable(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFileLoadable', formData);\n },\n\n // Integrations\n async listIntegrations(options = {}) {\n return requestIntegrations('GET', '/integration', { 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 requestIntegrations('POST', '/integration/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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${tableName}/batch`, pid, { body: records, params: { jdbcConnectionConfigId } });\n }\n };\n\n return instance;\n}\n","/**\n * Mitra Interactions SDK - Configuração\n */\n\nimport { createMitraInstance, type MitraInstance } from './instance';\n\nexport interface MitraConfig {\n /** URL base da API (ex: https://api.mitra.com) */\n baseURL: string;\n /** Token JWT para autenticação */\n token: string;\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\n integrationURL?: string;\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e retorna uma instância configurada.\n */\nexport function configureSdkMitra(config: MitraConfig): MitraInstance {\n if (!config.baseURL) {\n throw new Error('baseURL é obrigatório');\n }\n if (!config.token) {\n throw new Error('token é obrigatório');\n }\n\n globalConfig = {\n ...config,\n baseURL: config.baseURL.replace(/\\/+$/, '')\n };\n\n if (typeof window !== 'undefined' && (window as any).__cbTracker) {\n (window as any).__cbTracker.setToken(config.token);\n }\n\n return createMitraInstance(config);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Atualiza o token global (usado internamente pelo refresh automático).\n */\nexport function updateGlobalToken(token: string): void {\n if (globalConfig) {\n globalConfig = { ...globalConfig, token };\n }\n}\n\n/**\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\n */\nexport function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (globalConfig?.projectId != null) return globalConfig.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig, updateGlobalToken } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\n\n/**\n * Obtém a função fetch\n */\nfunction getFetch(): typeof fetch {\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch;\n }\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\n}\n\n/**\n * Formata o token para Authorization\n */\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${token}`;\n}\n\n/**\n * Constrói os headers\n */\nfunction buildHeaders(): Record<string, string> {\n const config = getConfig();\n return {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n };\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 via popup invisível no sdk-auth.\n * O popup usa o cookie de sessão do provider (Google/Microsoft/email)\n * para obter um novo token sem interação do usuário.\n */\nasync function tryRefreshToken(): Promise<boolean> {\n const config = getConfig();\n\n if (!config.authUrl || config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(config.authUrl, config.projectId);\n updateGlobalToken(session.token);\n if (config.onTokenRefresh) config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Cliente HTTP\n */\nasync function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw {\n message: msg,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\n}\n\n/**\n * Executa um fetch. Se retornar AUTH_EXPIRED_STATUS, tenta refresh e retenta uma vez.\n */\nasync function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n // Retenta com o novo token\n const newHeaders = { ...buildHeaders() };\n // Preserva headers extras (ex: X-TenantID)\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n}\n\nexport const http = {\n async get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint, params), {\n method: 'GET',\n headers: buildHeaders()\n });\n },\n\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n },\n\n async 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 upload<T>(endpoint: string, formData: FormData): Promise<T> {\n const config = getConfig();\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: { 'Authorization': formatToken(config.token) },\n body: formData\n });\n }\n};\n\n// HTTP client para Dynamic Schema (usa X-TenantID header)\nasync function requestWithTenant<T>(\n method: string,\n endpoint: string,\n tenantId: number,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n return fetchWithRefresh(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\n/**\n * Requisição genérica para o serviço de integrações (porta 1003)\n */\nasync function requestIntegrations<T>(\n method: string,\n endpoint: string,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const config = getConfig();\n if (!config.integrationURL) {\n throw new Error('integrationURL não configurado. Passe integrationURL em configureSdkMitra() ou via query param.');\n }\n\n const base = config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${endpoint}`;\n\n if (options?.params) {\n const query = Object.entries(options.params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n\n return fetchWithRefresh(url, {\n method,\n headers: {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n },\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\nexport const httpIntegrations = {\n get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return requestIntegrations('GET', endpoint, { params });\n },\n post<T>(endpoint: string, body?: unknown): Promise<T> {\n return requestIntegrations('POST', endpoint, { body });\n }\n};\n\nexport const httpTenant = {\n get<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('GET', endpoint, tenantId, { params });\n },\n post<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\n },\n put<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\n },\n patch<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\n },\n del<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\n }\n};\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpIntegrations, httpTenant } from './client';\nimport { resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n/**\n * POST /agentAiShortcut/runQuery\n * Executa query SELECT em um projeto\n */\nexport async function runQueryMitra(options: RunQueryOptions): Promise<RunQueryResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n sql: options.sql\n };\n\n if (options.jdbcId !== undefined) {\n body.jdbcId = options.jdbcId;\n }\n\n return http.post('/agentAiShortcut/runQuery', body);\n}\n\n/**\n * POST /agentAiShortcut/executeDbAction\n * Executa uma DBAction (DML) cadastrada\n */\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dbActionId: options.dbActionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/executeDbAction', body);\n}\n\n/**\n * POST /agentAiShortcut/setFileStatus\n * Move arquivo do chat para PUBLIC ou LOADABLE\n */\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\n return http.post('/agentAiShortcut/setFileStatus', {\n projectId: resolveProjectId(options.projectId),\n fileName: options.fileName,\n targetPath: options.targetPath\n });\n}\n\n/**\n * POST /agentAiShortcut/setVariable\n * Cria ou atualiza uma variável customizada\n */\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n };\n\n if (options.value !== undefined) {\n body.value = options.value;\n }\n\n return http.post('/agentAiShortcut/setVariable', body);\n}\n\n/**\n * GET /agentAiShortcut/listVariables?projectId={id}\n * Lista variáveis de um projeto\n */\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\n return http.get('/agentAiShortcut/listVariables', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * GET /agentAiShortcut/getVariable?projectId={id}&key={key}\n * Busca o valor de uma variável específica\n */\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\n return http.get('/agentAiShortcut/getVariable', {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n });\n}\n\n/**\n * POST /agentAiShortcut/runAction\n * Executa uma Action (fluxo de ação) cadastrada\n */\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n actionId: options.actionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/runAction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunctionAsync', body);\n}\n\n/**\n * GET /integration?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return httpIntegrations.get('/integration', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /integration/call\n * Chama uma API externa via serviço de integrações (porta separada)\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 httpIntegrations.post('/integration/call', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n// === Upload de Arquivos ===\n\n/**\n * POST /agentAiShortcut/uploadFilePublic (multipart/form-data)\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\n */\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFilePublic', formData);\n}\n\n/**\n * POST /agentAiShortcut/uploadFileLoadable (multipart/form-data)\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\n */\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFileLoadable', formData);\n}\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n"]}
1
+ {"version":3,"sources":["../src/auth.ts","../src/instance.ts","../src/config.ts","../src/client.ts","../src/services.ts"],"names":["resolveProjectId","handleResponse","tryRefreshToken","fetchWithRefresh","requestIntegrations","getFetch","formatToken"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Mitra Interactions SDK - Autenticação\r\n *\r\n * Login via popup seguro hospedado no domínio Mitra.\r\n * Credenciais nunca passam pelo código do desenvolvedor.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type { LoginOptions, LoginResponse } from './types';\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────────\r\n\r\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\r\nconst POPUP_WIDTH = 420;\r\nconst POPUP_HEIGHT = 520;\r\n\r\n/**\r\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\r\n */\r\nfunction getOriginFromUrl(url: string): string {\r\n try {\r\n const parsed = new URL(url);\r\n return parsed.origin;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Abre popup de autenticação e aguarda o resultado via postMessage.\r\n * Valida que a mensagem veio do origin da authUrl.\r\n */\r\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\r\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n url,\r\n 'mitra-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n\r\n function onMessage(event: MessageEvent) {\r\n // Ignora mensagens de outros origins\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n // Detecta se o popup foi fechado sem completar\r\n const pollTimer = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário'));\r\n }\r\n }, 500);\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearInterval(pollTimer);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/**\r\n * Auto-configura o SDK a partir da resposta de login.\r\n * Preserva authUrl e projectId usados no login para chamadas subsequentes.\r\n */\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number): void {\r\n if (!response.baseURL) return;\r\n\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * Monta a URL do popup/redirect de autenticação.\r\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\r\n */\r\nfunction buildAuthUrl(\r\n authUrl: string,\r\n method: string,\r\n projectId: number,\r\n opts?: { returnTo?: string; create?: boolean; title?: string }\r\n): string {\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n let url = `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\r\n if (opts?.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;\r\n if (opts?.create) url += `&create=true`;\r\n if (opts?.title) url += `&title=${encodeURIComponent(opts.title)}`;\r\n // Passa a URL completa de origem — document.referrer cross-origin perde path/query\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n return url;\r\n}\r\n\r\n// ── Resolução de opções ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\r\n const config = isConfigured() ? getConfig() : null;\r\n\r\n const authUrl = options?.authUrl || config?.authUrl;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n return { authUrl, projectId };\r\n}\r\n\r\n// ── Helpers de redirect ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Converte returnTo relativo para absoluto. Se não informado, usa a URL atual.\r\n */\r\nfunction resolveReturnTo(returnTo?: string): string {\r\n if (typeof window === 'undefined') return returnTo || '';\r\n if (!returnTo) return window.location.href;\r\n if (/^https?:\\/\\//.test(returnTo)) return returnTo;\r\n // Caminho relativo → absoluto\r\n return new URL(returnTo, window.location.origin).href;\r\n}\r\n\r\n// ── Funções de Login ────────────────────────────────────────────────────\r\n\r\n/**\r\n * Função central de login: decide popup vs redirect, monta URL com opts extras.\r\n */\r\nasync function doLogin(method: string, options?: LoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const mode = options?.mode || 'popup';\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, method, projectId, {\r\n returnTo: mode === 'redirect' ? resolveReturnTo(options?.returnTo) : undefined,\r\n create: options?.create,\r\n title: options?.title\r\n });\r\n\r\n if (mode === 'redirect') {\r\n window.location.href = url;\r\n // Nunca resolve — o navegador navega para fora\r\n return new Promise(() => {});\r\n }\r\n\r\n const response = await openAuthPopup(url, origin);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Login com email e senha via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('email', options);\r\n}\r\n\r\n/**\r\n * Login com Google via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('google', options);\r\n}\r\n\r\n/**\r\n * Login com Microsoft via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('microsoft', options);\r\n}\r\n\r\n/**\r\n * Login genérico via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin(method, options);\r\n}\r\n\r\n// ── Handle Auth Redirect ─────────────────────────────────────────────\r\n\r\n/**\r\n * Processa o retorno de um login com mode 'redirect'.\r\n *\r\n * Após o redirect, a página de auth redireciona de volta com query params:\r\n * ?tokenMitra={token}&backURLMitra={baseURL}&integrationURLMitra={integrationURL}\r\n *\r\n * Esta função:\r\n * - Lê os query params da URL atual\r\n * - Se `tokenMitra=error`, lança erro\r\n * - Se encontrou tokens, limpa a URL e retorna LoginResponse\r\n * - Se não encontrou nada, retorna null\r\n */\r\nexport function handleAuthRedirect(): LoginResponse | null {\r\n if (typeof window === 'undefined') return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n const tokenMitra = params.get('tokenMitra');\r\n\r\n if (!tokenMitra) return null;\r\n\r\n if (tokenMitra === 'error') {\r\n cleanUrlParams(['tokenMitra']);\r\n throw new Error('Erro na autenticação. Tente novamente.');\r\n }\r\n\r\n const baseURL = params.get('backURLMitra') || '';\r\n const integrationURL = params.get('integrationURLMitra') || undefined;\r\n\r\n cleanUrlParams(['tokenMitra', 'backURLMitra', 'integrationURLMitra']);\r\n\r\n const response: LoginResponse = {\r\n token: tokenMitra,\r\n baseURL,\r\n ...(integrationURL ? { integrationURL } : {})\r\n };\r\n\r\n return response;\r\n}\r\n\r\nfunction cleanUrlParams(keysToRemove: string[]): void {\r\n const url = new URL(window.location.href);\r\n for (const key of keysToRemove) {\r\n url.searchParams.delete(key);\r\n }\r\n const newUrl = url.searchParams.toString()\r\n ? `${url.pathname}?${url.searchParams.toString()}${url.hash}`\r\n : `${url.pathname}${url.hash}`;\r\n window.history.replaceState({}, '', newUrl);\r\n}\r\n\r\n// ── Token Refresh Silencioso ─────────────────────────────────────────\r\n\r\nconst REFRESH_TIMEOUT_MS = 15000;\r\n\r\n/** Promise do refresh em andamento (deduplicação — evita múltiplos iframes) */\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\n/**\r\n * Cria iframe invisível para renovar o token silenciosamente.\r\n * O sdk-auth detecta a sessão existente (cookie do provider) e retorna\r\n * um novo token via postMessage, sem interação do usuário.\r\n */\r\nfunction openAuthIframe(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n iframe.src = url;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Token refresh timeout'));\r\n }, REFRESH_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro no refresh do token'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Renova o token silenciosamente via iframe invisível.\r\n * Se já houver um refresh em andamento, reaproveita a mesma promise.\r\n */\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, 'refresh', projectId);\r\n const response = await openAuthIframe(url, origin);\r\n return response;\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\n * Mitra Interactions SDK - Instance\n *\n * Permite múltiplas instâncias configuradas independentemente.\n */\n\nimport type { MitraConfig } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n// ── HTTP Helpers ──────────────────────────────────────────────────────\n\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${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 runQuery(options: RunQueryOptions): Promise<RunQueryResponse>;\n executeDbAction(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse>;\n setFileStatus(options: SetFileStatusOptions): Promise<SetFileStatusResponse>;\n setVariable(options: SetVariableOptions): Promise<SetVariableResponse>;\n listVariables(options?: ListVariablesOptions): Promise<ListVariablesResponse>;\n getVariable(options: GetVariableOptions): Promise<GetVariableResponse>;\n runAction(options: RunActionOptions): Promise<RunActionResponse>;\n executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;\n executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;\n stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;\n\n // Upload de Arquivos\n uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\n\n // Integrations\n listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;\n callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;\n\n // Dynamic Schema CRUD\n listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;\n getRecord(options: GetRecordOptions): Promise<Record<string, any>>;\n createRecord(options: CreateRecordOptions): Promise<Record<string, any>>;\n updateRecord(options: UpdateRecordOptions): Promise<Record<string, any>>;\n patchRecord(options: PatchRecordOptions): Promise<Record<string, any>>;\n deleteRecord(options: DeleteRecordOptions): Promise<void>;\n createRecordsBatch(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;\n}\n\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\n let _config: MitraConfig = {\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\n token: initialConfig.token || '',\n integrationURL: initialConfig.integrationURL,\n authUrl: initialConfig.authUrl,\n projectId: initialConfig.projectId\n };\n\n // ── Internal helpers ──\n\n function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (_config.projectId != null) return _config.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n }\n\n function authHeaders(): Record<string, string> {\n return {\n 'Authorization': formatToken(_config.token),\n 'Content-Type': 'application/json'\n };\n }\n\n async function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw { message: msg, status: response.status, details: data };\n }\n return data as T;\n }\n\n // ── Token refresh silencioso ──\n\n async function tryRefreshToken(): Promise<boolean> {\n if (!_config.authUrl || _config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId);\n _config = { ..._config, token: session.token };\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n const newHeaders = { ...authHeaders() };\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n }\n\n // HTTP main API (baseURL)\n async function request<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: authHeaders(),\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // HTTP upload (multipart/form-data)\n async function requestUpload<T>(endpoint: string, formData: FormData): Promise<T> {\n const url = `${_config.baseURL}${endpoint}`;\n return fetchWithRefresh(url, {\n method: 'POST',\n headers: { 'Authorization': formatToken(_config.token) },\n body: formData\n });\n }\n\n // HTTP integrations (integrationURL)\n async function requestIntegrations<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n if (!_config.integrationURL) throw new Error('integrationURL não configurado.');\n const base = _config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${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 tenant (baseURL + X-TenantID)\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: { ...authHeaders(), 'X-TenantID': String(tenantId) },\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // ── Instance ──\n\n const instance: MitraInstance & { _updateToken(token: string): void } = {\n get config() { return _config; },\n\n /** @internal — usado pelo MitraSDK para propagar token refresh */\n _updateToken(token: string) {\n _config = { ..._config, token };\n },\n\n // Services\n async runQuery(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), sql: options.sql };\n if (options.jdbcId !== undefined) body.jdbcId = options.jdbcId;\n return request('POST', '/agentAiShortcut/runQuery', { body });\n },\n\n async executeDbAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dbActionId: options.dbActionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/executeDbAction', { body });\n },\n\n async setFileStatus(options) {\n return request('POST', '/agentAiShortcut/setFileStatus', {\n body: { projectId: resolveProjectId(options.projectId), fileName: options.fileName, targetPath: options.targetPath }\n });\n },\n\n async setVariable(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), key: options.key };\n if (options.value !== undefined) body.value = options.value;\n return request('POST', '/agentAiShortcut/setVariable', { body });\n },\n\n async listVariables(options = {}) {\n return request('GET', '/agentAiShortcut/listVariables', { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async getVariable(options) {\n return request('GET', '/agentAiShortcut/getVariable', { params: { projectId: resolveProjectId(options.projectId), key: options.key } });\n },\n\n async runAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), actionId: options.actionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/runAction', { body });\n },\n\n async executeServerFunction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/agentAiShortcut/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', '/agentAiShortcut/executeServerFunctionAsync', { body });\n },\n\n async stopServerFunctionExecution(options) {\n return request('POST', '/agentAiShortcut/stopServerFunctionExecution', {\n body: { projectId: resolveProjectId(options.projectId), executionId: options.executionId }\n });\n },\n\n // Upload de Arquivos\n async uploadFilePublic(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFilePublic', formData);\n },\n\n async uploadFileLoadable(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFileLoadable', formData);\n },\n\n // Integrations\n async listIntegrations(options = {}) {\n return requestIntegrations('GET', '/integration', { 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 requestIntegrations('POST', '/integration/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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${tableName}/batch`, pid, { body: records, params: { jdbcConnectionConfigId } });\n }\n };\n\n return instance;\n}\n","/**\n * Mitra Interactions SDK - Configuração\n */\n\nimport { createMitraInstance, type MitraInstance } from './instance';\n\nexport interface MitraConfig {\n /** URL base da API (ex: https://api.mitra.com) */\n baseURL: string;\n /** Token JWT para autenticação */\n token: string;\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\n integrationURL?: string;\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e retorna uma instância configurada.\n */\nexport function configureSdkMitra(config: MitraConfig): MitraInstance {\n if (!config.baseURL) {\n throw new Error('baseURL é obrigatório');\n }\n if (!config.token) {\n throw new Error('token é obrigatório');\n }\n\n globalConfig = {\n ...config,\n baseURL: config.baseURL.replace(/\\/+$/, '')\n };\n\n if (typeof window !== 'undefined' && (window as any).__cbTracker) {\n (window as any).__cbTracker.setToken(config.token);\n }\n\n return createMitraInstance(config);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Atualiza o token global (usado internamente pelo refresh automático).\n */\nexport function updateGlobalToken(token: string): void {\n if (globalConfig) {\n globalConfig = { ...globalConfig, token };\n }\n}\n\n/**\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\n */\nexport function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (globalConfig?.projectId != null) return globalConfig.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig, updateGlobalToken } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\n\n/**\n * Obtém a função fetch\n */\nfunction getFetch(): typeof fetch {\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch;\n }\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\n}\n\n/**\n * Formata o token para Authorization\n */\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${token}`;\n}\n\n/**\n * Constrói os headers\n */\nfunction buildHeaders(): Record<string, string> {\n const config = getConfig();\n return {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n };\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 via popup invisível no sdk-auth.\n * O popup usa o cookie de sessão do provider (Google/Microsoft/email)\n * para obter um novo token sem interação do usuário.\n */\nasync function tryRefreshToken(): Promise<boolean> {\n const config = getConfig();\n\n if (!config.authUrl || config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(config.authUrl, config.projectId);\n updateGlobalToken(session.token);\n if (config.onTokenRefresh) config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Cliente HTTP\n */\nasync function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw {\n message: msg,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\n}\n\n/**\n * Executa um fetch. Se retornar AUTH_EXPIRED_STATUS, tenta refresh e retenta uma vez.\n */\nasync function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n // Retenta com o novo token\n const newHeaders = { ...buildHeaders() };\n // Preserva headers extras (ex: X-TenantID)\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n}\n\nexport const http = {\n async get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint, params), {\n method: 'GET',\n headers: buildHeaders()\n });\n },\n\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n },\n\n async 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 upload<T>(endpoint: string, formData: FormData): Promise<T> {\n const config = getConfig();\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: { 'Authorization': formatToken(config.token) },\n body: formData\n });\n }\n};\n\n// HTTP client para Dynamic Schema (usa X-TenantID header)\nasync function requestWithTenant<T>(\n method: string,\n endpoint: string,\n tenantId: number,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n return fetchWithRefresh(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\n/**\n * Requisição genérica para o serviço de integrações (porta 1003)\n */\nasync function requestIntegrations<T>(\n method: string,\n endpoint: string,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const config = getConfig();\n if (!config.integrationURL) {\n throw new Error('integrationURL não configurado. Passe integrationURL em configureSdkMitra() ou via query param.');\n }\n\n const base = config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${endpoint}`;\n\n if (options?.params) {\n const query = Object.entries(options.params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n\n return fetchWithRefresh(url, {\n method,\n headers: {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n },\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\nexport const httpIntegrations = {\n get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return requestIntegrations('GET', endpoint, { params });\n },\n post<T>(endpoint: string, body?: unknown): Promise<T> {\n return requestIntegrations('POST', endpoint, { body });\n }\n};\n\nexport const httpTenant = {\n get<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('GET', endpoint, tenantId, { params });\n },\n post<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\n },\n put<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\n },\n patch<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\n },\n del<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\n }\n};\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpIntegrations, httpTenant } from './client';\nimport { resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n/**\n * POST /agentAiShortcut/runQuery\n * Executa query SELECT em um projeto\n */\nexport async function runQueryMitra(options: RunQueryOptions): Promise<RunQueryResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n sql: options.sql\n };\n\n if (options.jdbcId !== undefined) {\n body.jdbcId = options.jdbcId;\n }\n\n return http.post('/agentAiShortcut/runQuery', body);\n}\n\n/**\n * POST /agentAiShortcut/executeDbAction\n * Executa uma DBAction (DML) cadastrada\n */\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dbActionId: options.dbActionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/executeDbAction', body);\n}\n\n/**\n * POST /agentAiShortcut/setFileStatus\n * Move arquivo do chat para PUBLIC ou LOADABLE\n */\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\n return http.post('/agentAiShortcut/setFileStatus', {\n projectId: resolveProjectId(options.projectId),\n fileName: options.fileName,\n targetPath: options.targetPath\n });\n}\n\n/**\n * POST /agentAiShortcut/setVariable\n * Cria ou atualiza uma variável customizada\n */\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n };\n\n if (options.value !== undefined) {\n body.value = options.value;\n }\n\n return http.post('/agentAiShortcut/setVariable', body);\n}\n\n/**\n * GET /agentAiShortcut/listVariables?projectId={id}\n * Lista variáveis de um projeto\n */\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\n return http.get('/agentAiShortcut/listVariables', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * GET /agentAiShortcut/getVariable?projectId={id}&key={key}\n * Busca o valor de uma variável específica\n */\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\n return http.get('/agentAiShortcut/getVariable', {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n });\n}\n\n/**\n * POST /agentAiShortcut/runAction\n * Executa uma Action (fluxo de ação) cadastrada\n */\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n actionId: options.actionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/runAction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunctionAsync', body);\n}\n\n/**\n * GET /integration?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return httpIntegrations.get('/integration', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /integration/call\n * Chama uma API externa via serviço de integrações (porta separada)\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 httpIntegrations.post('/integration/call', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n// === Upload de Arquivos ===\n\n/**\n * POST /agentAiShortcut/uploadFilePublic (multipart/form-data)\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\n */\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFilePublic', formData);\n}\n\n/**\n * POST /agentAiShortcut/uploadFileLoadable (multipart/form-data)\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\n */\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFileLoadable', formData);\n}\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n"]}
package/dist/index.mjs CHANGED
@@ -61,6 +61,7 @@ function buildAuthUrl(authUrl, method, projectId, opts) {
61
61
  let url = `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;
62
62
  if (opts == null ? void 0 : opts.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;
63
63
  if (opts == null ? void 0 : opts.create) url += `&create=true`;
64
+ if (opts == null ? void 0 : opts.title) url += `&title=${encodeURIComponent(opts.title)}`;
64
65
  if (typeof window !== "undefined") {
65
66
  url += `&originUrl=${encodeURIComponent(window.location.href)}`;
66
67
  }
@@ -91,7 +92,8 @@ async function doLogin(method, options) {
91
92
  const origin = getOriginFromUrl(authUrl);
92
93
  const url = buildAuthUrl(authUrl, method, projectId, {
93
94
  returnTo: mode === "redirect" ? resolveReturnTo(options == null ? void 0 : options.returnTo) : void 0,
94
- create: options == null ? void 0 : options.create
95
+ create: options == null ? void 0 : options.create,
96
+ title: options == null ? void 0 : options.title
95
97
  });
96
98
  if (mode === "redirect") {
97
99
  window.location.href = url;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth.ts","../src/instance.ts","../src/config.ts","../src/client.ts","../src/services.ts"],"names":["resolveProjectId","handleResponse","tryRefreshToken","fetchWithRefresh","requestIntegrations","getFetch","formatToken"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Mitra Interactions SDK - Autenticação\r\n *\r\n * Login via popup seguro hospedado no domínio Mitra.\r\n * Credenciais nunca passam pelo código do desenvolvedor.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type { LoginOptions, LoginResponse } from './types';\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────────\r\n\r\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\r\nconst POPUP_WIDTH = 420;\r\nconst POPUP_HEIGHT = 520;\r\n\r\n/**\r\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\r\n */\r\nfunction getOriginFromUrl(url: string): string {\r\n try {\r\n const parsed = new URL(url);\r\n return parsed.origin;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Abre popup de autenticação e aguarda o resultado via postMessage.\r\n * Valida que a mensagem veio do origin da authUrl.\r\n */\r\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\r\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n url,\r\n 'mitra-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n\r\n function onMessage(event: MessageEvent) {\r\n // Ignora mensagens de outros origins\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n // Detecta se o popup foi fechado sem completar\r\n const pollTimer = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário'));\r\n }\r\n }, 500);\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearInterval(pollTimer);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/**\r\n * Auto-configura o SDK a partir da resposta de login.\r\n * Preserva authUrl e projectId usados no login para chamadas subsequentes.\r\n */\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number): void {\r\n if (!response.baseURL) return;\r\n\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * Monta a URL do popup/redirect de autenticação.\r\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\r\n */\r\nfunction buildAuthUrl(\r\n authUrl: string,\r\n method: string,\r\n projectId: number,\r\n opts?: { returnTo?: string; create?: boolean }\r\n): string {\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n let url = `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\r\n if (opts?.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;\r\n if (opts?.create) url += `&create=true`;\r\n // Passa a URL completa de origem — document.referrer cross-origin perde path/query\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n return url;\r\n}\r\n\r\n// ── Resolução de opções ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\r\n const config = isConfigured() ? getConfig() : null;\r\n\r\n const authUrl = options?.authUrl || config?.authUrl;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n return { authUrl, projectId };\r\n}\r\n\r\n// ── Helpers de redirect ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Converte returnTo relativo para absoluto. Se não informado, usa a URL atual.\r\n */\r\nfunction resolveReturnTo(returnTo?: string): string {\r\n if (typeof window === 'undefined') return returnTo || '';\r\n if (!returnTo) return window.location.href;\r\n if (/^https?:\\/\\//.test(returnTo)) return returnTo;\r\n // Caminho relativo → absoluto\r\n return new URL(returnTo, window.location.origin).href;\r\n}\r\n\r\n// ── Funções de Login ────────────────────────────────────────────────────\r\n\r\n/**\r\n * Função central de login: decide popup vs redirect, monta URL com opts extras.\r\n */\r\nasync function doLogin(method: string, options?: LoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const mode = options?.mode || 'popup';\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, method, projectId, {\r\n returnTo: mode === 'redirect' ? resolveReturnTo(options?.returnTo) : undefined,\r\n create: options?.create\r\n });\r\n\r\n if (mode === 'redirect') {\r\n window.location.href = url;\r\n // Nunca resolve — o navegador navega para fora\r\n return new Promise(() => {});\r\n }\r\n\r\n const response = await openAuthPopup(url, origin);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Login com email e senha via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('email', options);\r\n}\r\n\r\n/**\r\n * Login com Google via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('google', options);\r\n}\r\n\r\n/**\r\n * Login com Microsoft via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('microsoft', options);\r\n}\r\n\r\n/**\r\n * Login genérico via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft', options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin(method, options);\r\n}\r\n\r\n// ── Handle Auth Redirect ─────────────────────────────────────────────\r\n\r\n/**\r\n * Processa o retorno de um login com mode 'redirect'.\r\n *\r\n * Após o redirect, a página de auth redireciona de volta com query params:\r\n * ?tokenMitra={token}&backURLMitra={baseURL}&integrationURLMitra={integrationURL}\r\n *\r\n * Esta função:\r\n * - Lê os query params da URL atual\r\n * - Se `tokenMitra=error`, lança erro\r\n * - Se encontrou tokens, limpa a URL e retorna LoginResponse\r\n * - Se não encontrou nada, retorna null\r\n */\r\nexport function handleAuthRedirect(): LoginResponse | null {\r\n if (typeof window === 'undefined') return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n const tokenMitra = params.get('tokenMitra');\r\n\r\n if (!tokenMitra) return null;\r\n\r\n if (tokenMitra === 'error') {\r\n cleanUrlParams(['tokenMitra']);\r\n throw new Error('Erro na autenticação. Tente novamente.');\r\n }\r\n\r\n const baseURL = params.get('backURLMitra') || '';\r\n const integrationURL = params.get('integrationURLMitra') || undefined;\r\n\r\n cleanUrlParams(['tokenMitra', 'backURLMitra', 'integrationURLMitra']);\r\n\r\n const response: LoginResponse = {\r\n token: tokenMitra,\r\n baseURL,\r\n ...(integrationURL ? { integrationURL } : {})\r\n };\r\n\r\n return response;\r\n}\r\n\r\nfunction cleanUrlParams(keysToRemove: string[]): void {\r\n const url = new URL(window.location.href);\r\n for (const key of keysToRemove) {\r\n url.searchParams.delete(key);\r\n }\r\n const newUrl = url.searchParams.toString()\r\n ? `${url.pathname}?${url.searchParams.toString()}${url.hash}`\r\n : `${url.pathname}${url.hash}`;\r\n window.history.replaceState({}, '', newUrl);\r\n}\r\n\r\n// ── Token Refresh Silencioso ─────────────────────────────────────────\r\n\r\nconst REFRESH_TIMEOUT_MS = 15000;\r\n\r\n/** Promise do refresh em andamento (deduplicação — evita múltiplos iframes) */\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\n/**\r\n * Cria iframe invisível para renovar o token silenciosamente.\r\n * O sdk-auth detecta a sessão existente (cookie do provider) e retorna\r\n * um novo token via postMessage, sem interação do usuário.\r\n */\r\nfunction openAuthIframe(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n iframe.src = url;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Token refresh timeout'));\r\n }, REFRESH_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro no refresh do token'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Renova o token silenciosamente via iframe invisível.\r\n * Se já houver um refresh em andamento, reaproveita a mesma promise.\r\n */\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, 'refresh', projectId);\r\n const response = await openAuthIframe(url, origin);\r\n return response;\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\n * Mitra Interactions SDK - Instance\n *\n * Permite múltiplas instâncias configuradas independentemente.\n */\n\nimport type { MitraConfig } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n// ── HTTP Helpers ──────────────────────────────────────────────────────\n\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${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 runQuery(options: RunQueryOptions): Promise<RunQueryResponse>;\n executeDbAction(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse>;\n setFileStatus(options: SetFileStatusOptions): Promise<SetFileStatusResponse>;\n setVariable(options: SetVariableOptions): Promise<SetVariableResponse>;\n listVariables(options?: ListVariablesOptions): Promise<ListVariablesResponse>;\n getVariable(options: GetVariableOptions): Promise<GetVariableResponse>;\n runAction(options: RunActionOptions): Promise<RunActionResponse>;\n executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;\n executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;\n stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;\n\n // Upload de Arquivos\n uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\n\n // Integrations\n listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;\n callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;\n\n // Dynamic Schema CRUD\n listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;\n getRecord(options: GetRecordOptions): Promise<Record<string, any>>;\n createRecord(options: CreateRecordOptions): Promise<Record<string, any>>;\n updateRecord(options: UpdateRecordOptions): Promise<Record<string, any>>;\n patchRecord(options: PatchRecordOptions): Promise<Record<string, any>>;\n deleteRecord(options: DeleteRecordOptions): Promise<void>;\n createRecordsBatch(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;\n}\n\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\n let _config: MitraConfig = {\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\n token: initialConfig.token || '',\n integrationURL: initialConfig.integrationURL,\n authUrl: initialConfig.authUrl,\n projectId: initialConfig.projectId\n };\n\n // ── Internal helpers ──\n\n function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (_config.projectId != null) return _config.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n }\n\n function authHeaders(): Record<string, string> {\n return {\n 'Authorization': formatToken(_config.token),\n 'Content-Type': 'application/json'\n };\n }\n\n async function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw { message: msg, status: response.status, details: data };\n }\n return data as T;\n }\n\n // ── Token refresh silencioso ──\n\n async function tryRefreshToken(): Promise<boolean> {\n if (!_config.authUrl || _config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId);\n _config = { ..._config, token: session.token };\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n const newHeaders = { ...authHeaders() };\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n }\n\n // HTTP main API (baseURL)\n async function request<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: authHeaders(),\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // HTTP upload (multipart/form-data)\n async function requestUpload<T>(endpoint: string, formData: FormData): Promise<T> {\n const url = `${_config.baseURL}${endpoint}`;\n return fetchWithRefresh(url, {\n method: 'POST',\n headers: { 'Authorization': formatToken(_config.token) },\n body: formData\n });\n }\n\n // HTTP integrations (integrationURL)\n async function requestIntegrations<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n if (!_config.integrationURL) throw new Error('integrationURL não configurado.');\n const base = _config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${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 tenant (baseURL + X-TenantID)\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: { ...authHeaders(), 'X-TenantID': String(tenantId) },\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // ── Instance ──\n\n const instance: MitraInstance & { _updateToken(token: string): void } = {\n get config() { return _config; },\n\n /** @internal — usado pelo MitraSDK para propagar token refresh */\n _updateToken(token: string) {\n _config = { ..._config, token };\n },\n\n // Services\n async runQuery(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), sql: options.sql };\n if (options.jdbcId !== undefined) body.jdbcId = options.jdbcId;\n return request('POST', '/agentAiShortcut/runQuery', { body });\n },\n\n async executeDbAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dbActionId: options.dbActionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/executeDbAction', { body });\n },\n\n async setFileStatus(options) {\n return request('POST', '/agentAiShortcut/setFileStatus', {\n body: { projectId: resolveProjectId(options.projectId), fileName: options.fileName, targetPath: options.targetPath }\n });\n },\n\n async setVariable(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), key: options.key };\n if (options.value !== undefined) body.value = options.value;\n return request('POST', '/agentAiShortcut/setVariable', { body });\n },\n\n async listVariables(options = {}) {\n return request('GET', '/agentAiShortcut/listVariables', { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async getVariable(options) {\n return request('GET', '/agentAiShortcut/getVariable', { params: { projectId: resolveProjectId(options.projectId), key: options.key } });\n },\n\n async runAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), actionId: options.actionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/runAction', { body });\n },\n\n async executeServerFunction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/agentAiShortcut/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', '/agentAiShortcut/executeServerFunctionAsync', { body });\n },\n\n async stopServerFunctionExecution(options) {\n return request('POST', '/agentAiShortcut/stopServerFunctionExecution', {\n body: { projectId: resolveProjectId(options.projectId), executionId: options.executionId }\n });\n },\n\n // Upload de Arquivos\n async uploadFilePublic(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFilePublic', formData);\n },\n\n async uploadFileLoadable(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFileLoadable', formData);\n },\n\n // Integrations\n async listIntegrations(options = {}) {\n return requestIntegrations('GET', '/integration', { 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 requestIntegrations('POST', '/integration/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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${tableName}/batch`, pid, { body: records, params: { jdbcConnectionConfigId } });\n }\n };\n\n return instance;\n}\n","/**\n * Mitra Interactions SDK - Configuração\n */\n\nimport { createMitraInstance, type MitraInstance } from './instance';\n\nexport interface MitraConfig {\n /** URL base da API (ex: https://api.mitra.com) */\n baseURL: string;\n /** Token JWT para autenticação */\n token: string;\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\n integrationURL?: string;\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e retorna uma instância configurada.\n */\nexport function configureSdkMitra(config: MitraConfig): MitraInstance {\n if (!config.baseURL) {\n throw new Error('baseURL é obrigatório');\n }\n if (!config.token) {\n throw new Error('token é obrigatório');\n }\n\n globalConfig = {\n ...config,\n baseURL: config.baseURL.replace(/\\/+$/, '')\n };\n\n if (typeof window !== 'undefined' && (window as any).__cbTracker) {\n (window as any).__cbTracker.setToken(config.token);\n }\n\n return createMitraInstance(config);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Atualiza o token global (usado internamente pelo refresh automático).\n */\nexport function updateGlobalToken(token: string): void {\n if (globalConfig) {\n globalConfig = { ...globalConfig, token };\n }\n}\n\n/**\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\n */\nexport function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (globalConfig?.projectId != null) return globalConfig.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig, updateGlobalToken } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\n\n/**\n * Obtém a função fetch\n */\nfunction getFetch(): typeof fetch {\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch;\n }\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\n}\n\n/**\n * Formata o token para Authorization\n */\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${token}`;\n}\n\n/**\n * Constrói os headers\n */\nfunction buildHeaders(): Record<string, string> {\n const config = getConfig();\n return {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n };\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 via popup invisível no sdk-auth.\n * O popup usa o cookie de sessão do provider (Google/Microsoft/email)\n * para obter um novo token sem interação do usuário.\n */\nasync function tryRefreshToken(): Promise<boolean> {\n const config = getConfig();\n\n if (!config.authUrl || config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(config.authUrl, config.projectId);\n updateGlobalToken(session.token);\n if (config.onTokenRefresh) config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Cliente HTTP\n */\nasync function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw {\n message: msg,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\n}\n\n/**\n * Executa um fetch. Se retornar AUTH_EXPIRED_STATUS, tenta refresh e retenta uma vez.\n */\nasync function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n // Retenta com o novo token\n const newHeaders = { ...buildHeaders() };\n // Preserva headers extras (ex: X-TenantID)\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n}\n\nexport const http = {\n async get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint, params), {\n method: 'GET',\n headers: buildHeaders()\n });\n },\n\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n },\n\n async 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 upload<T>(endpoint: string, formData: FormData): Promise<T> {\n const config = getConfig();\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: { 'Authorization': formatToken(config.token) },\n body: formData\n });\n }\n};\n\n// HTTP client para Dynamic Schema (usa X-TenantID header)\nasync function requestWithTenant<T>(\n method: string,\n endpoint: string,\n tenantId: number,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n return fetchWithRefresh(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\n/**\n * Requisição genérica para o serviço de integrações (porta 1003)\n */\nasync function requestIntegrations<T>(\n method: string,\n endpoint: string,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const config = getConfig();\n if (!config.integrationURL) {\n throw new Error('integrationURL não configurado. Passe integrationURL em configureSdkMitra() ou via query param.');\n }\n\n const base = config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${endpoint}`;\n\n if (options?.params) {\n const query = Object.entries(options.params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n\n return fetchWithRefresh(url, {\n method,\n headers: {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n },\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\nexport const httpIntegrations = {\n get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return requestIntegrations('GET', endpoint, { params });\n },\n post<T>(endpoint: string, body?: unknown): Promise<T> {\n return requestIntegrations('POST', endpoint, { body });\n }\n};\n\nexport const httpTenant = {\n get<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('GET', endpoint, tenantId, { params });\n },\n post<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\n },\n put<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\n },\n patch<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\n },\n del<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\n }\n};\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpIntegrations, httpTenant } from './client';\nimport { resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n/**\n * POST /agentAiShortcut/runQuery\n * Executa query SELECT em um projeto\n */\nexport async function runQueryMitra(options: RunQueryOptions): Promise<RunQueryResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n sql: options.sql\n };\n\n if (options.jdbcId !== undefined) {\n body.jdbcId = options.jdbcId;\n }\n\n return http.post('/agentAiShortcut/runQuery', body);\n}\n\n/**\n * POST /agentAiShortcut/executeDbAction\n * Executa uma DBAction (DML) cadastrada\n */\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dbActionId: options.dbActionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/executeDbAction', body);\n}\n\n/**\n * POST /agentAiShortcut/setFileStatus\n * Move arquivo do chat para PUBLIC ou LOADABLE\n */\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\n return http.post('/agentAiShortcut/setFileStatus', {\n projectId: resolveProjectId(options.projectId),\n fileName: options.fileName,\n targetPath: options.targetPath\n });\n}\n\n/**\n * POST /agentAiShortcut/setVariable\n * Cria ou atualiza uma variável customizada\n */\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n };\n\n if (options.value !== undefined) {\n body.value = options.value;\n }\n\n return http.post('/agentAiShortcut/setVariable', body);\n}\n\n/**\n * GET /agentAiShortcut/listVariables?projectId={id}\n * Lista variáveis de um projeto\n */\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\n return http.get('/agentAiShortcut/listVariables', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * GET /agentAiShortcut/getVariable?projectId={id}&key={key}\n * Busca o valor de uma variável específica\n */\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\n return http.get('/agentAiShortcut/getVariable', {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n });\n}\n\n/**\n * POST /agentAiShortcut/runAction\n * Executa uma Action (fluxo de ação) cadastrada\n */\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n actionId: options.actionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/runAction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunctionAsync', body);\n}\n\n/**\n * GET /integration?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return httpIntegrations.get('/integration', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /integration/call\n * Chama uma API externa via serviço de integrações (porta separada)\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 httpIntegrations.post('/integration/call', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n// === Upload de Arquivos ===\n\n/**\n * POST /agentAiShortcut/uploadFilePublic (multipart/form-data)\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\n */\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFilePublic', formData);\n}\n\n/**\n * POST /agentAiShortcut/uploadFileLoadable (multipart/form-data)\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\n */\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFileLoadable', formData);\n}\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n"]}
1
+ {"version":3,"sources":["../src/auth.ts","../src/instance.ts","../src/config.ts","../src/client.ts","../src/services.ts"],"names":["resolveProjectId","handleResponse","tryRefreshToken","fetchWithRefresh","requestIntegrations","getFetch","formatToken"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Mitra Interactions SDK - Autenticação\r\n *\r\n * Login via popup seguro hospedado no domínio Mitra.\r\n * Credenciais nunca passam pelo código do desenvolvedor.\r\n */\r\n\r\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\r\nimport type { LoginOptions, LoginResponse } from './types';\r\n\r\n// ── Helpers ─────────────────────────────────────────────────────────────\r\n\r\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\r\nconst POPUP_WIDTH = 420;\r\nconst POPUP_HEIGHT = 520;\r\n\r\n/**\r\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\r\n */\r\nfunction getOriginFromUrl(url: string): string {\r\n try {\r\n const parsed = new URL(url);\r\n return parsed.origin;\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Abre popup de autenticação e aguarda o resultado via postMessage.\r\n * Valida que a mensagem veio do origin da authUrl.\r\n */\r\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\r\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n url,\r\n 'mitra-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\r\n return;\r\n }\r\n\r\n function onMessage(event: MessageEvent) {\r\n // Ignora mensagens de outros origins\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro na autenticação'));\r\n }\r\n }\r\n\r\n // Detecta se o popup foi fechado sem completar\r\n const pollTimer = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Login cancelado pelo usuário'));\r\n }\r\n }, 500);\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearInterval(pollTimer);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n });\r\n}\r\n\r\n/**\r\n * Auto-configura o SDK a partir da resposta de login.\r\n * Preserva authUrl e projectId usados no login para chamadas subsequentes.\r\n */\r\nfunction autoConfigureFromLogin(response: LoginResponse, authUrl: string, projectId: number): void {\r\n if (!response.baseURL) return;\r\n\r\n configureSdkMitra({\r\n baseURL: response.baseURL,\r\n token: response.token,\r\n authUrl,\r\n projectId,\r\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\r\n });\r\n}\r\n\r\n/**\r\n * Monta a URL do popup/redirect de autenticação.\r\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\r\n */\r\nfunction buildAuthUrl(\r\n authUrl: string,\r\n method: string,\r\n projectId: number,\r\n opts?: { returnTo?: string; create?: boolean; title?: string }\r\n): string {\r\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\r\n let url = `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\r\n if (opts?.returnTo) url += `&returnTo=${encodeURIComponent(opts.returnTo)}`;\r\n if (opts?.create) url += `&create=true`;\r\n if (opts?.title) url += `&title=${encodeURIComponent(opts.title)}`;\r\n // Passa a URL completa de origem — document.referrer cross-origin perde path/query\r\n if (typeof window !== 'undefined') {\r\n url += `&originUrl=${encodeURIComponent(window.location.href)}`;\r\n }\r\n return url;\r\n}\r\n\r\n// ── Resolução de opções ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\r\n */\r\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\r\n const config = isConfigured() ? getConfig() : null;\r\n\r\n const authUrl = options?.authUrl || config?.authUrl;\r\n const projectId = options?.projectId ?? config?.projectId;\r\n\r\n if (!authUrl) {\r\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\r\n }\r\n if (projectId == null) {\r\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\r\n }\r\n\r\n return { authUrl, projectId };\r\n}\r\n\r\n// ── Helpers de redirect ─────────────────────────────────────────────────\r\n\r\n/**\r\n * Converte returnTo relativo para absoluto. Se não informado, usa a URL atual.\r\n */\r\nfunction resolveReturnTo(returnTo?: string): string {\r\n if (typeof window === 'undefined') return returnTo || '';\r\n if (!returnTo) return window.location.href;\r\n if (/^https?:\\/\\//.test(returnTo)) return returnTo;\r\n // Caminho relativo → absoluto\r\n return new URL(returnTo, window.location.origin).href;\r\n}\r\n\r\n// ── Funções de Login ────────────────────────────────────────────────────\r\n\r\n/**\r\n * Função central de login: decide popup vs redirect, monta URL com opts extras.\r\n */\r\nasync function doLogin(method: string, options?: LoginOptions): Promise<LoginResponse> {\r\n const { authUrl, projectId } = resolveLoginOptions(options);\r\n const mode = options?.mode || 'popup';\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, method, projectId, {\r\n returnTo: mode === 'redirect' ? resolveReturnTo(options?.returnTo) : undefined,\r\n create: options?.create,\r\n title: options?.title\r\n });\r\n\r\n if (mode === 'redirect') {\r\n window.location.href = url;\r\n // Nunca resolve — o navegador navega para fora\r\n return new Promise(() => {});\r\n }\r\n\r\n const response = await openAuthPopup(url, origin);\r\n autoConfigureFromLogin(response, authUrl, projectId);\r\n return response;\r\n}\r\n\r\n/**\r\n * Login com email e senha via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('email', options);\r\n}\r\n\r\n/**\r\n * Login com Google via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('google', options);\r\n}\r\n\r\n/**\r\n * Login com Microsoft via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin('microsoft', options);\r\n}\r\n\r\n/**\r\n * Login genérico via popup/redirect seguro Mitra.\r\n */\r\nexport async function loginMitra(method: 'email' | 'google' | 'microsoft' | 'mitra', options?: LoginOptions): Promise<LoginResponse> {\r\n return doLogin(method, options);\r\n}\r\n\r\n// ── Handle Auth Redirect ─────────────────────────────────────────────\r\n\r\n/**\r\n * Processa o retorno de um login com mode 'redirect'.\r\n *\r\n * Após o redirect, a página de auth redireciona de volta com query params:\r\n * ?tokenMitra={token}&backURLMitra={baseURL}&integrationURLMitra={integrationURL}\r\n *\r\n * Esta função:\r\n * - Lê os query params da URL atual\r\n * - Se `tokenMitra=error`, lança erro\r\n * - Se encontrou tokens, limpa a URL e retorna LoginResponse\r\n * - Se não encontrou nada, retorna null\r\n */\r\nexport function handleAuthRedirect(): LoginResponse | null {\r\n if (typeof window === 'undefined') return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n const tokenMitra = params.get('tokenMitra');\r\n\r\n if (!tokenMitra) return null;\r\n\r\n if (tokenMitra === 'error') {\r\n cleanUrlParams(['tokenMitra']);\r\n throw new Error('Erro na autenticação. Tente novamente.');\r\n }\r\n\r\n const baseURL = params.get('backURLMitra') || '';\r\n const integrationURL = params.get('integrationURLMitra') || undefined;\r\n\r\n cleanUrlParams(['tokenMitra', 'backURLMitra', 'integrationURLMitra']);\r\n\r\n const response: LoginResponse = {\r\n token: tokenMitra,\r\n baseURL,\r\n ...(integrationURL ? { integrationURL } : {})\r\n };\r\n\r\n return response;\r\n}\r\n\r\nfunction cleanUrlParams(keysToRemove: string[]): void {\r\n const url = new URL(window.location.href);\r\n for (const key of keysToRemove) {\r\n url.searchParams.delete(key);\r\n }\r\n const newUrl = url.searchParams.toString()\r\n ? `${url.pathname}?${url.searchParams.toString()}${url.hash}`\r\n : `${url.pathname}${url.hash}`;\r\n window.history.replaceState({}, '', newUrl);\r\n}\r\n\r\n// ── Token Refresh Silencioso ─────────────────────────────────────────\r\n\r\nconst REFRESH_TIMEOUT_MS = 15000;\r\n\r\n/** Promise do refresh em andamento (deduplicação — evita múltiplos iframes) */\r\nlet _refreshPromise: Promise<LoginResponse> | null = null;\r\n\r\n/**\r\n * Cria iframe invisível para renovar o token silenciosamente.\r\n * O sdk-auth detecta a sessão existente (cookie do provider) e retorna\r\n * um novo token via postMessage, sem interação do usuário.\r\n */\r\nfunction openAuthIframe(url: string, expectedOrigin: string): Promise<LoginResponse> {\r\n return new Promise((resolve, reject) => {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n iframe.src = url;\r\n\r\n const timer = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('Token refresh timeout'));\r\n }, REFRESH_TIMEOUT_MS);\r\n\r\n function onMessage(event: MessageEvent) {\r\n if (event.origin !== expectedOrigin) return;\r\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\r\n\r\n cleanup();\r\n\r\n if (event.data.success) {\r\n resolve(event.data.data);\r\n } else {\r\n reject(new Error(event.data.error || 'Erro no refresh do token'));\r\n }\r\n }\r\n\r\n function cleanup() {\r\n window.removeEventListener('message', onMessage);\r\n clearTimeout(timer);\r\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\r\n }\r\n\r\n window.addEventListener('message', onMessage);\r\n document.body.appendChild(iframe);\r\n });\r\n}\r\n\r\n/**\r\n * Renova o token silenciosamente via iframe invisível.\r\n * Se já houver um refresh em andamento, reaproveita a mesma promise.\r\n */\r\nexport async function refreshTokenSilently(authUrl: string, projectId: number): Promise<LoginResponse> {\r\n if (_refreshPromise) return _refreshPromise;\r\n\r\n _refreshPromise = (async () => {\r\n try {\r\n const origin = getOriginFromUrl(authUrl);\r\n const url = buildAuthUrl(authUrl, 'refresh', projectId);\r\n const response = await openAuthIframe(url, origin);\r\n return response;\r\n } finally {\r\n _refreshPromise = null;\r\n }\r\n })();\r\n\r\n return _refreshPromise;\r\n}\r\n","/**\n * Mitra Interactions SDK - Instance\n *\n * Permite múltiplas instâncias configuradas independentemente.\n */\n\nimport type { MitraConfig } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n// ── HTTP Helpers ──────────────────────────────────────────────────────\n\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${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 runQuery(options: RunQueryOptions): Promise<RunQueryResponse>;\n executeDbAction(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse>;\n setFileStatus(options: SetFileStatusOptions): Promise<SetFileStatusResponse>;\n setVariable(options: SetVariableOptions): Promise<SetVariableResponse>;\n listVariables(options?: ListVariablesOptions): Promise<ListVariablesResponse>;\n getVariable(options: GetVariableOptions): Promise<GetVariableResponse>;\n runAction(options: RunActionOptions): Promise<RunActionResponse>;\n executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;\n executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;\n stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;\n\n // Upload de Arquivos\n uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;\n uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;\n\n // Integrations\n listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;\n callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;\n\n // Dynamic Schema CRUD\n listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;\n getRecord(options: GetRecordOptions): Promise<Record<string, any>>;\n createRecord(options: CreateRecordOptions): Promise<Record<string, any>>;\n updateRecord(options: UpdateRecordOptions): Promise<Record<string, any>>;\n patchRecord(options: PatchRecordOptions): Promise<Record<string, any>>;\n deleteRecord(options: DeleteRecordOptions): Promise<void>;\n createRecordsBatch(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;\n}\n\nexport function createMitraInstance(initialConfig: Partial<MitraConfig>): MitraInstance {\n let _config: MitraConfig = {\n baseURL: initialConfig.baseURL?.replace(/\\/+$/, '') || '',\n token: initialConfig.token || '',\n integrationURL: initialConfig.integrationURL,\n authUrl: initialConfig.authUrl,\n projectId: initialConfig.projectId\n };\n\n // ── Internal helpers ──\n\n function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (_config.projectId != null) return _config.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n }\n\n function authHeaders(): Record<string, string> {\n return {\n 'Authorization': formatToken(_config.token),\n 'Content-Type': 'application/json'\n };\n }\n\n async function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw { message: msg, status: response.status, details: data };\n }\n return data as T;\n }\n\n // ── Token refresh silencioso ──\n\n async function tryRefreshToken(): Promise<boolean> {\n if (!_config.authUrl || _config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(_config.authUrl, _config.projectId);\n _config = { ..._config, token: session.token };\n if (_config.onTokenRefresh) _config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n }\n\n async function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n const newHeaders = { ...authHeaders() };\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n }\n\n // HTTP main API (baseURL)\n async function request<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: authHeaders(),\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // HTTP upload (multipart/form-data)\n async function requestUpload<T>(endpoint: string, formData: FormData): Promise<T> {\n const url = `${_config.baseURL}${endpoint}`;\n return fetchWithRefresh(url, {\n method: 'POST',\n headers: { 'Authorization': formatToken(_config.token) },\n body: formData\n });\n }\n\n // HTTP integrations (integrationURL)\n async function requestIntegrations<T>(method: string, endpoint: string, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n if (!_config.integrationURL) throw new Error('integrationURL não configurado.');\n const base = _config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${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 tenant (baseURL + X-TenantID)\n async function requestTenant<T>(method: string, endpoint: string, tenantId: number, opts?: { params?: Record<string, unknown>; body?: unknown }): Promise<T> {\n let url = `${_config.baseURL}${endpoint}`;\n if (opts?.params) { const q = buildQuery(opts.params); if (q) url += `?${q}`; }\n return fetchWithRefresh(url, {\n method, headers: { ...authHeaders(), 'X-TenantID': String(tenantId) },\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined\n });\n }\n\n // ── Instance ──\n\n const instance: MitraInstance & { _updateToken(token: string): void } = {\n get config() { return _config; },\n\n /** @internal — usado pelo MitraSDK para propagar token refresh */\n _updateToken(token: string) {\n _config = { ..._config, token };\n },\n\n // Services\n async runQuery(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), sql: options.sql };\n if (options.jdbcId !== undefined) body.jdbcId = options.jdbcId;\n return request('POST', '/agentAiShortcut/runQuery', { body });\n },\n\n async executeDbAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), dbActionId: options.dbActionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/executeDbAction', { body });\n },\n\n async setFileStatus(options) {\n return request('POST', '/agentAiShortcut/setFileStatus', {\n body: { projectId: resolveProjectId(options.projectId), fileName: options.fileName, targetPath: options.targetPath }\n });\n },\n\n async setVariable(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), key: options.key };\n if (options.value !== undefined) body.value = options.value;\n return request('POST', '/agentAiShortcut/setVariable', { body });\n },\n\n async listVariables(options = {}) {\n return request('GET', '/agentAiShortcut/listVariables', { params: { projectId: resolveProjectId(options.projectId) } });\n },\n\n async getVariable(options) {\n return request('GET', '/agentAiShortcut/getVariable', { params: { projectId: resolveProjectId(options.projectId), key: options.key } });\n },\n\n async runAction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), actionId: options.actionId };\n if (options.params !== undefined) body.params = options.params;\n return request('POST', '/agentAiShortcut/runAction', { body });\n },\n\n async executeServerFunction(options) {\n const body: Record<string, unknown> = { projectId: resolveProjectId(options.projectId), serverFunctionId: options.serverFunctionId };\n if (options.input !== undefined) body.input = options.input;\n return request('POST', '/agentAiShortcut/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', '/agentAiShortcut/executeServerFunctionAsync', { body });\n },\n\n async stopServerFunctionExecution(options) {\n return request('POST', '/agentAiShortcut/stopServerFunctionExecution', {\n body: { projectId: resolveProjectId(options.projectId), executionId: options.executionId }\n });\n },\n\n // Upload de Arquivos\n async uploadFilePublic(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFilePublic', formData);\n },\n\n async uploadFileLoadable(options: UploadFileOptions) {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return requestUpload('/agentAiShortcut/uploadFileLoadable', formData);\n },\n\n // Integrations\n async listIntegrations(options = {}) {\n return requestIntegrations('GET', '/integration', { 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 requestIntegrations('POST', '/integration/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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${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', `/api/v1/data/${tableName}/batch`, pid, { body: records, params: { jdbcConnectionConfigId } });\n }\n };\n\n return instance;\n}\n","/**\n * Mitra Interactions SDK - Configuração\n */\n\nimport { createMitraInstance, type MitraInstance } from './instance';\n\nexport interface MitraConfig {\n /** URL base da API (ex: https://api.mitra.com) */\n baseURL: string;\n /** Token JWT para autenticação */\n token: string;\n /** URL base do serviço de integrações (ex: https://api0.mitraecp.com:1003) */\n integrationURL?: string;\n /** URL da página de autenticação Mitra (ex: https://coder.mitralab.io/sdk-auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n /** Callback chamado quando o token é renovado automaticamente (após 401/403). Recebe a nova sessão. */\n onTokenRefresh?: (session: import('./types').LoginResponse) => void;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e retorna uma instância configurada.\n */\nexport function configureSdkMitra(config: MitraConfig): MitraInstance {\n if (!config.baseURL) {\n throw new Error('baseURL é obrigatório');\n }\n if (!config.token) {\n throw new Error('token é obrigatório');\n }\n\n globalConfig = {\n ...config,\n baseURL: config.baseURL.replace(/\\/+$/, '')\n };\n\n if (typeof window !== 'undefined' && (window as any).__cbTracker) {\n (window as any).__cbTracker.setToken(config.token);\n }\n\n return createMitraInstance(config);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Atualiza o token global (usado internamente pelo refresh automático).\n */\nexport function updateGlobalToken(token: string): void {\n if (globalConfig) {\n globalConfig = { ...globalConfig, token };\n }\n}\n\n/**\n * Resolve projectId: usa o valor passado, senão pega do config salvo.\n */\nexport function resolveProjectId(projectId?: number): number {\n if (projectId != null) return projectId;\n if (globalConfig?.projectId != null) return globalConfig.projectId;\n throw new Error('projectId é obrigatório. Passe nas options ou configure via configureSdkMitra({ projectId }).');\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig, updateGlobalToken } from './config';\nimport { refreshTokenSilently } from './auth';\nimport type { LoginResponse } from './types';\n\n/**\n * Obtém a função fetch\n */\nfunction getFetch(): typeof fetch {\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch;\n }\n throw new Error('fetch não disponível. Use Node.js 18+ ou instale node-fetch.');\n}\n\n/**\n * Formata o token para Authorization\n */\nfunction formatToken(token: string): string {\n return token.startsWith('Bearer ') ? token : `Bearer ${token}`;\n}\n\n/**\n * Constrói os headers\n */\nfunction buildHeaders(): Record<string, string> {\n const config = getConfig();\n return {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n };\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 via popup invisível no sdk-auth.\n * O popup usa o cookie de sessão do provider (Google/Microsoft/email)\n * para obter um novo token sem interação do usuário.\n */\nasync function tryRefreshToken(): Promise<boolean> {\n const config = getConfig();\n\n if (!config.authUrl || config.projectId == null) return false;\n if (typeof window === 'undefined') return false;\n\n try {\n const session: LoginResponse = await refreshTokenSilently(config.authUrl, config.projectId);\n updateGlobalToken(session.token);\n if (config.onTokenRefresh) config.onTokenRefresh(session);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Cliente HTTP\n */\nasync function handleResponse<T>(response: Response): Promise<T> {\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n const base = data?.message || data?.error || `HTTP ${response.status}`;\n const msg = data?.hint ? `${base} — ${data.hint}` : base;\n throw {\n message: msg,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\n}\n\n/**\n * Executa um fetch. Se retornar AUTH_EXPIRED_STATUS, tenta refresh e retenta uma vez.\n */\nasync function fetchWithRefresh<T>(url: string, init: RequestInit): Promise<T> {\n const fetchFn = getFetch();\n const response = await fetchFn(url, init);\n\n if (response.status === 403) {\n const refreshed = await tryRefreshToken();\n if (refreshed) {\n // Retenta com o novo token\n const newHeaders = { ...buildHeaders() };\n // Preserva headers extras (ex: X-TenantID)\n const oldHeaders = init.headers as Record<string, string> | undefined;\n if (oldHeaders) {\n for (const [k, v] of Object.entries(oldHeaders)) {\n if (k !== 'Authorization') newHeaders[k] = v;\n }\n }\n const retryResponse = await fetchFn(url, { ...init, headers: newHeaders });\n return handleResponse(retryResponse);\n }\n }\n\n return handleResponse(response);\n}\n\nexport const http = {\n async get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint, params), {\n method: 'GET',\n headers: buildHeaders()\n });\n },\n\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n },\n\n async 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 upload<T>(endpoint: string, formData: FormData): Promise<T> {\n const config = getConfig();\n return fetchWithRefresh(buildUrl(endpoint), {\n method: 'POST',\n headers: { 'Authorization': formatToken(config.token) },\n body: formData\n });\n }\n};\n\n// HTTP client para Dynamic Schema (usa X-TenantID header)\nasync function requestWithTenant<T>(\n method: string,\n endpoint: string,\n tenantId: number,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n return fetchWithRefresh(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\n/**\n * Requisição genérica para o serviço de integrações (porta 1003)\n */\nasync function requestIntegrations<T>(\n method: string,\n endpoint: string,\n options?: { params?: Record<string, unknown>; body?: unknown }\n): Promise<T> {\n const config = getConfig();\n if (!config.integrationURL) {\n throw new Error('integrationURL não configurado. Passe integrationURL em configureSdkMitra() ou via query param.');\n }\n\n const base = config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${endpoint}`;\n\n if (options?.params) {\n const query = Object.entries(options.params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n\n return fetchWithRefresh(url, {\n method,\n headers: {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n },\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n}\n\nexport const httpIntegrations = {\n get<T>(endpoint: string, params?: Record<string, unknown>): Promise<T> {\n return requestIntegrations('GET', endpoint, { params });\n },\n post<T>(endpoint: string, body?: unknown): Promise<T> {\n return requestIntegrations('POST', endpoint, { body });\n }\n};\n\nexport const httpTenant = {\n get<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('GET', endpoint, tenantId, { params });\n },\n post<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('POST', endpoint, tenantId, { body, params });\n },\n put<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PUT', endpoint, tenantId, { body, params });\n },\n patch<T>(endpoint: string, tenantId: number, body?: unknown, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('PATCH', endpoint, tenantId, { body, params });\n },\n del<T>(endpoint: string, tenantId: number, params?: Record<string, unknown>): Promise<T> {\n return requestWithTenant('DELETE', endpoint, tenantId, { params });\n }\n};\n","/**\n * Mitra Interactions SDK - Services\n */\n\nimport { http, httpIntegrations, httpTenant } from './client';\nimport { resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ListVariablesOptions,\n ListVariablesResponse,\n GetVariableOptions,\n GetVariableResponse,\n RunActionOptions,\n RunActionResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\n ListIntegrationsOptions,\n IntegrationResponse,\n StopServerFunctionExecutionOptions,\n StopServerFunctionExecutionResponse,\n ListRecordsOptions,\n ListRecordsResponse,\n GetRecordOptions,\n CreateRecordOptions,\n UpdateRecordOptions,\n PatchRecordOptions,\n DeleteRecordOptions,\n CreateRecordsBatchOptions,\n UploadFileOptions,\n UploadFileResponse\n} from './types';\n\n/**\n * POST /agentAiShortcut/runQuery\n * Executa query SELECT em um projeto\n */\nexport async function runQueryMitra(options: RunQueryOptions): Promise<RunQueryResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n sql: options.sql\n };\n\n if (options.jdbcId !== undefined) {\n body.jdbcId = options.jdbcId;\n }\n\n return http.post('/agentAiShortcut/runQuery', body);\n}\n\n/**\n * POST /agentAiShortcut/executeDbAction\n * Executa uma DBAction (DML) cadastrada\n */\nexport async function executeDbActionMitra(options: ExecuteDbActionOptions): Promise<ExecuteDbActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n dbActionId: options.dbActionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/executeDbAction', body);\n}\n\n/**\n * POST /agentAiShortcut/setFileStatus\n * Move arquivo do chat para PUBLIC ou LOADABLE\n */\nexport async function setFileStatusMitra(options: SetFileStatusOptions): Promise<SetFileStatusResponse> {\n return http.post('/agentAiShortcut/setFileStatus', {\n projectId: resolveProjectId(options.projectId),\n fileName: options.fileName,\n targetPath: options.targetPath\n });\n}\n\n/**\n * POST /agentAiShortcut/setVariable\n * Cria ou atualiza uma variável customizada\n */\nexport async function setVariableMitra(options: SetVariableOptions): Promise<SetVariableResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n };\n\n if (options.value !== undefined) {\n body.value = options.value;\n }\n\n return http.post('/agentAiShortcut/setVariable', body);\n}\n\n/**\n * GET /agentAiShortcut/listVariables?projectId={id}\n * Lista variáveis de um projeto\n */\nexport async function listVariablesMitra(options: ListVariablesOptions = {}): Promise<ListVariablesResponse> {\n return http.get('/agentAiShortcut/listVariables', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * GET /agentAiShortcut/getVariable?projectId={id}&key={key}\n * Busca o valor de uma variável específica\n */\nexport async function getVariableMitra(options: GetVariableOptions): Promise<GetVariableResponse> {\n return http.get('/agentAiShortcut/getVariable', {\n projectId: resolveProjectId(options.projectId),\n key: options.key\n });\n}\n\n/**\n * POST /agentAiShortcut/runAction\n * Executa uma Action (fluxo de ação) cadastrada\n */\nexport async function runActionMitra(options: RunActionOptions): Promise<RunActionResponse> {\n const body: Record<string, unknown> = {\n projectId: resolveProjectId(options.projectId),\n actionId: options.actionId\n };\n\n if (options.params !== undefined) {\n body.params = options.params;\n }\n\n return http.post('/agentAiShortcut/runAction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunction', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/executeServerFunctionAsync', body);\n}\n\n/**\n * GET /integration?projectId=X\n * Lista integrações configuradas no projeto\n */\nexport async function listIntegrationsMitra(options: ListIntegrationsOptions = {}): Promise<IntegrationResponse[]> {\n return httpIntegrations.get('/integration', {\n projectId: resolveProjectId(options.projectId)\n });\n}\n\n/**\n * POST /integration/call\n * Chama uma API externa via serviço de integrações (porta separada)\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 httpIntegrations.post('/integration/call', body);\n}\n\n/**\n * POST /agentAiShortcut/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('/agentAiShortcut/stopServerFunctionExecution', {\n projectId: resolveProjectId(options.projectId),\n executionId: options.executionId\n });\n}\n\n// === Upload de Arquivos ===\n\n/**\n * POST /agentAiShortcut/uploadFilePublic (multipart/form-data)\n * Faz upload de um arquivo para a pasta PUBLIC do projeto.\n */\nexport async function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFilePublic', formData);\n}\n\n/**\n * POST /agentAiShortcut/uploadFileLoadable (multipart/form-data)\n * Faz upload de um arquivo para a pasta LOADABLE do projeto.\n */\nexport async function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse> {\n const formData = new FormData();\n formData.append('file', options.file);\n formData.append('projectId', String(resolveProjectId(options.projectId)));\n if (options.debug !== undefined) formData.append('debug', String(options.debug));\n return http.upload('/agentAiShortcut/uploadFileLoadable', formData);\n}\n\n// === Dynamic Schema CRUD ===\n\nexport async function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse> {\n const { tableName, page, size, filters, jdbcConnectionConfigId } = options;\n const pid = resolveProjectId(options.projectId);\n return httpTenant.get(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${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(`/api/v1/data/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });\n}\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mitra-interactions-sdk",
3
- "version": "1.0.32",
3
+ "version": "1.0.34",
4
4
  "description": "SDK agnóstico para interações com a plataforma Mitra",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",