mitra-interactions-sdk 1.0.31 → 1.0.32

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
@@ -130,22 +130,6 @@ configureSdkMitra({
130
130
  });
131
131
  ```
132
132
 
133
- ### Funções de Login Individuais
134
-
135
- Também disponíveis como funções separadas:
136
-
137
- ```typescript
138
- import {
139
- loginWithEmailMitra,
140
- loginWithGoogleMitra,
141
- loginWithMicrosoftMitra
142
- } from 'mitra-interactions-sdk';
143
-
144
- await loginWithEmailMitra({ mode: 'redirect', create: true });
145
- await loginWithGoogleMitra();
146
- await loginWithMicrosoftMitra({ mode: 'popup' });
147
- ```
148
-
149
133
  ## Métodos Disponíveis
150
134
 
151
135
  ### executeDbActionMitra
@@ -247,6 +231,28 @@ const result = await callIntegrationMitra({
247
231
  // result: { statusCode: number, body: any }
248
232
  ```
249
233
 
234
+ ### uploadFilePublicMitra / uploadFileLoadableMitra
235
+
236
+ Faz upload de um arquivo diretamente para a pasta PUBLIC ou LOADABLE do projeto. Usa `multipart/form-data`.
237
+
238
+ ```typescript
239
+ import { uploadFilePublicMitra, uploadFileLoadableMitra } from 'mitra-interactions-sdk';
240
+
241
+ // Upload para PUBLIC (arquivo fica acessível publicamente via URL)
242
+ const result = await uploadFilePublicMitra({
243
+ projectId: 123,
244
+ file: fileInput.files[0] // File ou Blob
245
+ });
246
+ // result: { status, result: { fileName, currentPath, publicUrl, message } }
247
+
248
+ // Upload para LOADABLE (arquivo disponível para carga via Spark/ETL)
249
+ const result2 = await uploadFileLoadableMitra({
250
+ projectId: 123,
251
+ file: myBlob
252
+ });
253
+ // result2: { status, result: { fileName, currentPath, publicUrl: null, message } }
254
+ ```
255
+
250
256
  ### setFileStatusMitra
251
257
 
252
258
  Move arquivo do chat para PUBLIC ou LOADABLE.
@@ -383,6 +389,7 @@ import type {
383
389
  ExecuteServerFunctionAsyncOptions,
384
390
  ListIntegrationsOptions,
385
391
  CallIntegrationOptions,
392
+ UploadFileOptions,
386
393
  StopServerFunctionExecutionOptions,
387
394
  SetFileStatusOptions,
388
395
  SetVariableOptions,
@@ -407,6 +414,7 @@ import type {
407
414
  ExecuteServerFunctionAsyncResponse,
408
415
  IntegrationResponse,
409
416
  CallIntegrationResponse,
417
+ UploadFileResponse,
410
418
  StopServerFunctionExecutionResponse,
411
419
  ListRecordsResponse
412
420
  } from 'mitra-interactions-sdk';
package/dist/index.d.mts CHANGED
@@ -169,6 +169,23 @@ interface CreateRecordsBatchOptions {
169
169
  records: Record<string, unknown>[];
170
170
  jdbcConnectionConfigId?: number;
171
171
  }
172
+ interface UploadFileOptions {
173
+ /** ID do projeto (opcional se já configurado via configureSdkMitra) */
174
+ projectId?: number;
175
+ /** Arquivo a ser enviado (File ou Blob) */
176
+ file: File | Blob;
177
+ /** Habilitar debug (opcional) */
178
+ debug?: boolean;
179
+ }
180
+ interface UploadFileResponse {
181
+ status: string;
182
+ result: {
183
+ fileName: string;
184
+ currentPath: string;
185
+ publicUrl: string | null;
186
+ message: string;
187
+ };
188
+ }
172
189
  interface ListVariablesOptions {
173
190
  /** ID do projeto (opcional se já configurado via configureSdkMitra) */
174
191
  projectId?: number;
@@ -280,6 +297,8 @@ interface MitraInstance {
280
297
  executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;
281
298
  executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;
282
299
  stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;
300
+ uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;
301
+ uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;
283
302
  listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;
284
303
  callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;
285
304
  listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;
@@ -426,6 +445,16 @@ declare function callIntegrationMitra(options: CallIntegrationOptions): Promise<
426
445
  * Para a execução de uma Server Function em andamento
427
446
  */
428
447
  declare function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;
448
+ /**
449
+ * POST /agentAiShortcut/uploadFilePublic (multipart/form-data)
450
+ * Faz upload de um arquivo para a pasta PUBLIC do projeto.
451
+ */
452
+ declare function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse>;
453
+ /**
454
+ * POST /agentAiShortcut/uploadFileLoadable (multipart/form-data)
455
+ * Faz upload de um arquivo para a pasta LOADABLE do projeto.
456
+ */
457
+ declare function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse>;
429
458
  declare function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse>;
430
459
  declare function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>>;
431
460
  declare function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>>;
@@ -434,4 +463,4 @@ declare function patchRecordMitra(options: PatchRecordOptions): Promise<Record<s
434
463
  declare function deleteRecordMitra(options: DeleteRecordOptions): Promise<void>;
435
464
  declare function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;
436
465
 
437
- export { type CallIntegrationOptions, type CallIntegrationResponse, type CreateRecordOptions, type CreateRecordsBatchOptions, type DeleteRecordOptions, type ExecuteDbActionOptions, type ExecuteDbActionResponse, type ExecuteServerFunctionAsyncOptions, type ExecuteServerFunctionAsyncResponse, type ExecuteServerFunctionOptions, type ExecuteServerFunctionResponse, type GetRecordOptions, type GetVariableOptions, type GetVariableResponse, type IntegrationResponse, type ListIntegrationsOptions, type ListRecordsOptions, type ListRecordsResponse, type ListVariablesOptions, type ListVariablesResponse, type LoginOptions, type LoginResponse, type MitraConfig, type MitraInstance, type PatchRecordOptions, type RunActionOptions, type RunActionResponse, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, callIntegrationMitra, configureSdkMitra, createMitraInstance, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, getVariableMitra, handleAuthRedirect, listIntegrationsMitra, listRecordsMitra, listVariablesMitra, loginMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, patchRecordMitra, refreshTokenSilently, resolveProjectId, runActionMitra, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
466
+ export { type CallIntegrationOptions, type CallIntegrationResponse, type CreateRecordOptions, type CreateRecordsBatchOptions, type DeleteRecordOptions, type ExecuteDbActionOptions, type ExecuteDbActionResponse, type ExecuteServerFunctionAsyncOptions, type ExecuteServerFunctionAsyncResponse, type ExecuteServerFunctionOptions, type ExecuteServerFunctionResponse, type GetRecordOptions, type GetVariableOptions, type GetVariableResponse, type IntegrationResponse, type ListIntegrationsOptions, type ListRecordsOptions, type ListRecordsResponse, type ListVariablesOptions, type ListVariablesResponse, type LoginOptions, type LoginResponse, type MitraConfig, type MitraInstance, type PatchRecordOptions, type RunActionOptions, type RunActionResponse, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, type UploadFileOptions, type UploadFileResponse, callIntegrationMitra, configureSdkMitra, createMitraInstance, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, getVariableMitra, handleAuthRedirect, listIntegrationsMitra, listRecordsMitra, listVariablesMitra, loginMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, patchRecordMitra, refreshTokenSilently, resolveProjectId, runActionMitra, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra, uploadFileLoadableMitra, uploadFilePublicMitra };
package/dist/index.d.ts CHANGED
@@ -169,6 +169,23 @@ interface CreateRecordsBatchOptions {
169
169
  records: Record<string, unknown>[];
170
170
  jdbcConnectionConfigId?: number;
171
171
  }
172
+ interface UploadFileOptions {
173
+ /** ID do projeto (opcional se já configurado via configureSdkMitra) */
174
+ projectId?: number;
175
+ /** Arquivo a ser enviado (File ou Blob) */
176
+ file: File | Blob;
177
+ /** Habilitar debug (opcional) */
178
+ debug?: boolean;
179
+ }
180
+ interface UploadFileResponse {
181
+ status: string;
182
+ result: {
183
+ fileName: string;
184
+ currentPath: string;
185
+ publicUrl: string | null;
186
+ message: string;
187
+ };
188
+ }
172
189
  interface ListVariablesOptions {
173
190
  /** ID do projeto (opcional se já configurado via configureSdkMitra) */
174
191
  projectId?: number;
@@ -280,6 +297,8 @@ interface MitraInstance {
280
297
  executeServerFunction(options: ExecuteServerFunctionOptions): Promise<ExecuteServerFunctionResponse>;
281
298
  executeServerFunctionAsync(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;
282
299
  stopServerFunctionExecution(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;
300
+ uploadFilePublic(options: UploadFileOptions): Promise<UploadFileResponse>;
301
+ uploadFileLoadable(options: UploadFileOptions): Promise<UploadFileResponse>;
283
302
  listIntegrations(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;
284
303
  callIntegration(options: CallIntegrationOptions): Promise<CallIntegrationResponse>;
285
304
  listRecords(options: ListRecordsOptions): Promise<ListRecordsResponse>;
@@ -426,6 +445,16 @@ declare function callIntegrationMitra(options: CallIntegrationOptions): Promise<
426
445
  * Para a execução de uma Server Function em andamento
427
446
  */
428
447
  declare function stopServerFunctionExecutionMitra(options: StopServerFunctionExecutionOptions): Promise<StopServerFunctionExecutionResponse>;
448
+ /**
449
+ * POST /agentAiShortcut/uploadFilePublic (multipart/form-data)
450
+ * Faz upload de um arquivo para a pasta PUBLIC do projeto.
451
+ */
452
+ declare function uploadFilePublicMitra(options: UploadFileOptions): Promise<UploadFileResponse>;
453
+ /**
454
+ * POST /agentAiShortcut/uploadFileLoadable (multipart/form-data)
455
+ * Faz upload de um arquivo para a pasta LOADABLE do projeto.
456
+ */
457
+ declare function uploadFileLoadableMitra(options: UploadFileOptions): Promise<UploadFileResponse>;
429
458
  declare function listRecordsMitra(options: ListRecordsOptions): Promise<ListRecordsResponse>;
430
459
  declare function getRecordMitra(options: GetRecordOptions): Promise<Record<string, any>>;
431
460
  declare function createRecordMitra(options: CreateRecordOptions): Promise<Record<string, any>>;
@@ -434,4 +463,4 @@ declare function patchRecordMitra(options: PatchRecordOptions): Promise<Record<s
434
463
  declare function deleteRecordMitra(options: DeleteRecordOptions): Promise<void>;
435
464
  declare function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Promise<Record<string, any>[]>;
436
465
 
437
- export { type CallIntegrationOptions, type CallIntegrationResponse, type CreateRecordOptions, type CreateRecordsBatchOptions, type DeleteRecordOptions, type ExecuteDbActionOptions, type ExecuteDbActionResponse, type ExecuteServerFunctionAsyncOptions, type ExecuteServerFunctionAsyncResponse, type ExecuteServerFunctionOptions, type ExecuteServerFunctionResponse, type GetRecordOptions, type GetVariableOptions, type GetVariableResponse, type IntegrationResponse, type ListIntegrationsOptions, type ListRecordsOptions, type ListRecordsResponse, type ListVariablesOptions, type ListVariablesResponse, type LoginOptions, type LoginResponse, type MitraConfig, type MitraInstance, type PatchRecordOptions, type RunActionOptions, type RunActionResponse, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, callIntegrationMitra, configureSdkMitra, createMitraInstance, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, getVariableMitra, handleAuthRedirect, listIntegrationsMitra, listRecordsMitra, listVariablesMitra, loginMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, patchRecordMitra, refreshTokenSilently, resolveProjectId, runActionMitra, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
466
+ export { type CallIntegrationOptions, type CallIntegrationResponse, type CreateRecordOptions, type CreateRecordsBatchOptions, type DeleteRecordOptions, type ExecuteDbActionOptions, type ExecuteDbActionResponse, type ExecuteServerFunctionAsyncOptions, type ExecuteServerFunctionAsyncResponse, type ExecuteServerFunctionOptions, type ExecuteServerFunctionResponse, type GetRecordOptions, type GetVariableOptions, type GetVariableResponse, type IntegrationResponse, type ListIntegrationsOptions, type ListRecordsOptions, type ListRecordsResponse, type ListVariablesOptions, type ListVariablesResponse, type LoginOptions, type LoginResponse, type MitraConfig, type MitraInstance, type PatchRecordOptions, type RunActionOptions, type RunActionResponse, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, type UploadFileOptions, type UploadFileResponse, callIntegrationMitra, configureSdkMitra, createMitraInstance, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, getVariableMitra, handleAuthRedirect, listIntegrationsMitra, listRecordsMitra, listVariablesMitra, loginMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, patchRecordMitra, refreshTokenSilently, resolveProjectId, runActionMitra, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra, uploadFileLoadableMitra, uploadFilePublicMitra };
package/dist/index.js CHANGED
@@ -272,6 +272,14 @@ function createMitraInstance(initialConfig) {
272
272
  body: (opts == null ? void 0 : opts.body) !== void 0 ? JSON.stringify(opts.body) : void 0
273
273
  });
274
274
  }
275
+ async function requestUpload(endpoint, formData) {
276
+ const url = `${_config.baseURL}${endpoint}`;
277
+ return fetchWithRefresh2(url, {
278
+ method: "POST",
279
+ headers: { "Authorization": formatToken(_config.token) },
280
+ body: formData
281
+ });
282
+ }
275
283
  async function requestIntegrations2(method, endpoint, opts) {
276
284
  if (!_config.integrationURL) throw new Error("integrationURL n\xE3o configurado.");
277
285
  const base = _config.integrationURL.replace(/\/+$/, "");
@@ -353,6 +361,21 @@ function createMitraInstance(initialConfig) {
353
361
  body: { projectId: resolveProjectId2(options.projectId), executionId: options.executionId }
354
362
  });
355
363
  },
364
+ // Upload de Arquivos
365
+ async uploadFilePublic(options) {
366
+ const formData = new FormData();
367
+ formData.append("file", options.file);
368
+ formData.append("projectId", String(resolveProjectId2(options.projectId)));
369
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
370
+ return requestUpload("/agentAiShortcut/uploadFilePublic", formData);
371
+ },
372
+ async uploadFileLoadable(options) {
373
+ const formData = new FormData();
374
+ formData.append("file", options.file);
375
+ formData.append("projectId", String(resolveProjectId2(options.projectId)));
376
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
377
+ return requestUpload("/agentAiShortcut/uploadFileLoadable", formData);
378
+ },
356
379
  // Integrations
357
380
  async listIntegrations(options = {}) {
358
381
  return requestIntegrations2("GET", "/integration", { params: { projectId: resolveProjectId2(options.projectId) } });
@@ -537,6 +560,14 @@ var http = {
537
560
  method: "DELETE",
538
561
  headers: buildHeaders()
539
562
  });
563
+ },
564
+ async upload(endpoint, formData) {
565
+ const config = getConfig();
566
+ return fetchWithRefresh(buildUrl(endpoint), {
567
+ method: "POST",
568
+ headers: { "Authorization": formatToken2(config.token) },
569
+ body: formData
570
+ });
540
571
  }
541
572
  };
542
573
  async function requestWithTenant(method, endpoint, tenantId, options) {
@@ -703,6 +734,20 @@ async function stopServerFunctionExecutionMitra(options) {
703
734
  executionId: options.executionId
704
735
  });
705
736
  }
737
+ async function uploadFilePublicMitra(options) {
738
+ const formData = new FormData();
739
+ formData.append("file", options.file);
740
+ formData.append("projectId", String(resolveProjectId(options.projectId)));
741
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
742
+ return http.upload("/agentAiShortcut/uploadFilePublic", formData);
743
+ }
744
+ async function uploadFileLoadableMitra(options) {
745
+ const formData = new FormData();
746
+ formData.append("file", options.file);
747
+ formData.append("projectId", String(resolveProjectId(options.projectId)));
748
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
749
+ return http.upload("/agentAiShortcut/uploadFileLoadable", formData);
750
+ }
706
751
  async function listRecordsMitra(options) {
707
752
  const { tableName, page, size, filters, jdbcConnectionConfigId } = options;
708
753
  const pid = resolveProjectId(options.projectId);
@@ -768,5 +813,7 @@ exports.setFileStatusMitra = setFileStatusMitra;
768
813
  exports.setVariableMitra = setVariableMitra;
769
814
  exports.stopServerFunctionExecutionMitra = stopServerFunctionExecutionMitra;
770
815
  exports.updateRecordMitra = updateRecordMitra;
816
+ exports.uploadFileLoadableMitra = uploadFileLoadableMitra;
817
+ exports.uploadFilePublicMitra = uploadFilePublicMitra;
771
818
  //# sourceMappingURL=index.js.map
772
819
  //# sourceMappingURL=index.js.map
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} 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 // 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 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 // 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\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} 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// === 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 }\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"]}
package/dist/index.mjs CHANGED
@@ -270,6 +270,14 @@ function createMitraInstance(initialConfig) {
270
270
  body: (opts == null ? void 0 : opts.body) !== void 0 ? JSON.stringify(opts.body) : void 0
271
271
  });
272
272
  }
273
+ async function requestUpload(endpoint, formData) {
274
+ const url = `${_config.baseURL}${endpoint}`;
275
+ return fetchWithRefresh2(url, {
276
+ method: "POST",
277
+ headers: { "Authorization": formatToken(_config.token) },
278
+ body: formData
279
+ });
280
+ }
273
281
  async function requestIntegrations2(method, endpoint, opts) {
274
282
  if (!_config.integrationURL) throw new Error("integrationURL n\xE3o configurado.");
275
283
  const base = _config.integrationURL.replace(/\/+$/, "");
@@ -351,6 +359,21 @@ function createMitraInstance(initialConfig) {
351
359
  body: { projectId: resolveProjectId2(options.projectId), executionId: options.executionId }
352
360
  });
353
361
  },
362
+ // Upload de Arquivos
363
+ async uploadFilePublic(options) {
364
+ const formData = new FormData();
365
+ formData.append("file", options.file);
366
+ formData.append("projectId", String(resolveProjectId2(options.projectId)));
367
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
368
+ return requestUpload("/agentAiShortcut/uploadFilePublic", formData);
369
+ },
370
+ async uploadFileLoadable(options) {
371
+ const formData = new FormData();
372
+ formData.append("file", options.file);
373
+ formData.append("projectId", String(resolveProjectId2(options.projectId)));
374
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
375
+ return requestUpload("/agentAiShortcut/uploadFileLoadable", formData);
376
+ },
354
377
  // Integrations
355
378
  async listIntegrations(options = {}) {
356
379
  return requestIntegrations2("GET", "/integration", { params: { projectId: resolveProjectId2(options.projectId) } });
@@ -535,6 +558,14 @@ var http = {
535
558
  method: "DELETE",
536
559
  headers: buildHeaders()
537
560
  });
561
+ },
562
+ async upload(endpoint, formData) {
563
+ const config = getConfig();
564
+ return fetchWithRefresh(buildUrl(endpoint), {
565
+ method: "POST",
566
+ headers: { "Authorization": formatToken2(config.token) },
567
+ body: formData
568
+ });
538
569
  }
539
570
  };
540
571
  async function requestWithTenant(method, endpoint, tenantId, options) {
@@ -701,6 +732,20 @@ async function stopServerFunctionExecutionMitra(options) {
701
732
  executionId: options.executionId
702
733
  });
703
734
  }
735
+ async function uploadFilePublicMitra(options) {
736
+ const formData = new FormData();
737
+ formData.append("file", options.file);
738
+ formData.append("projectId", String(resolveProjectId(options.projectId)));
739
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
740
+ return http.upload("/agentAiShortcut/uploadFilePublic", formData);
741
+ }
742
+ async function uploadFileLoadableMitra(options) {
743
+ const formData = new FormData();
744
+ formData.append("file", options.file);
745
+ formData.append("projectId", String(resolveProjectId(options.projectId)));
746
+ if (options.debug !== void 0) formData.append("debug", String(options.debug));
747
+ return http.upload("/agentAiShortcut/uploadFileLoadable", formData);
748
+ }
704
749
  async function listRecordsMitra(options) {
705
750
  const { tableName, page, size, filters, jdbcConnectionConfigId } = options;
706
751
  const pid = resolveProjectId(options.projectId);
@@ -737,6 +782,6 @@ async function createRecordsBatchMitra(options) {
737
782
  return httpTenant.post(`/api/v1/data/${tableName}/batch`, pid, records, { jdbcConnectionConfigId });
738
783
  }
739
784
 
740
- export { callIntegrationMitra, configureSdkMitra, createMitraInstance, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, getVariableMitra, handleAuthRedirect, listIntegrationsMitra, listRecordsMitra, listVariablesMitra, loginMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, patchRecordMitra, refreshTokenSilently, resolveProjectId, runActionMitra, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
785
+ export { callIntegrationMitra, configureSdkMitra, createMitraInstance, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, getVariableMitra, handleAuthRedirect, listIntegrationsMitra, listRecordsMitra, listVariablesMitra, loginMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, patchRecordMitra, refreshTokenSilently, resolveProjectId, runActionMitra, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra, uploadFileLoadableMitra, uploadFilePublicMitra };
741
786
  //# sourceMappingURL=index.mjs.map
742
787
  //# sourceMappingURL=index.mjs.map
@@ -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} 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 // 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 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 // 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\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} 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// === 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 }\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mitra-interactions-sdk",
3
- "version": "1.0.31",
3
+ "version": "1.0.32",
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",