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 +24 -16
- package/dist/index.d.mts +30 -1
- package/dist/index.d.ts +30 -1
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +46 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
package/dist/index.mjs.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.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"]}
|