mitra-interactions-sdk 1.0.21 → 1.0.23
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 +18 -3
- package/dist/index.d.mts +24 -1
- package/dist/index.d.ts +24 -1
- package/dist/index.js +42 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +42 -26
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -177,12 +177,25 @@ const result = await stopServerFunctionExecutionMitra({
|
|
|
177
177
|
// result: { status, result: { executionId, executionStatus: "CANCELLED" | "ALREADY_FINISHED" } }
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
-
###
|
|
181
|
-
|
|
182
|
-
Chama uma API externa via serviço de integrações do Mitra. O serviço de integrações roda em uma URL separada (ex: porta 1003) e cuida de autenticação, tokens e refresh automaticamente.
|
|
180
|
+
### Integrações
|
|
183
181
|
|
|
184
182
|
> **Requisito:** A `integrationURL` deve ser configurada via `configureSdkMitra({ ..., integrationURL: 'https://api0.mitraecp.com:1003' })` ou via query param `integrationURL` (auto-config com `configureMitra()`).
|
|
185
183
|
|
|
184
|
+
#### listIntegrationsMitra
|
|
185
|
+
|
|
186
|
+
Lista as integrações configuradas no projeto.
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
import { listIntegrationsMitra } from 'mitra-interactions-sdk';
|
|
190
|
+
|
|
191
|
+
const integrations = await listIntegrationsMitra({ projectId: 123 });
|
|
192
|
+
// result: IntegrationRecord[] — [{ id, projectId, name, slug, blueprintId, blueprintType, authType, credentials, status, lastCheckedAt, createdAt, updatedAt }]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### callIntegrationMitra
|
|
196
|
+
|
|
197
|
+
Chama uma API externa via serviço de integrações do Mitra. O serviço cuida de autenticação, tokens e refresh automaticamente.
|
|
198
|
+
|
|
186
199
|
```typescript
|
|
187
200
|
import { callIntegrationMitra } from 'mitra-interactions-sdk';
|
|
188
201
|
|
|
@@ -315,6 +328,7 @@ import type {
|
|
|
315
328
|
ExecuteDbActionOptions,
|
|
316
329
|
ExecuteServerFunctionOptions,
|
|
317
330
|
ExecuteServerFunctionAsyncOptions,
|
|
331
|
+
ListIntegrationsOptions,
|
|
318
332
|
CallIntegrationOptions,
|
|
319
333
|
StopServerFunctionExecutionOptions,
|
|
320
334
|
SetFileStatusOptions,
|
|
@@ -333,6 +347,7 @@ import type {
|
|
|
333
347
|
SetVariableResponse,
|
|
334
348
|
ExecuteServerFunctionResponse,
|
|
335
349
|
ExecuteServerFunctionAsyncResponse,
|
|
350
|
+
IntegrationRecord,
|
|
336
351
|
CallIntegrationResponse,
|
|
337
352
|
StopServerFunctionExecutionResponse,
|
|
338
353
|
ListRecordsResponse
|
package/dist/index.d.mts
CHANGED
|
@@ -221,6 +221,24 @@ interface CallIntegrationResponse {
|
|
|
221
221
|
/** Resposta crua do serviço externo */
|
|
222
222
|
body: any;
|
|
223
223
|
}
|
|
224
|
+
interface ListIntegrationsOptions {
|
|
225
|
+
/** ID do projeto (opcional se já configurado via configureSdkMitra) */
|
|
226
|
+
projectId?: number;
|
|
227
|
+
}
|
|
228
|
+
interface IntegrationResponse {
|
|
229
|
+
id: string;
|
|
230
|
+
projectId: number;
|
|
231
|
+
name: string;
|
|
232
|
+
slug: string;
|
|
233
|
+
blueprintId: string | null;
|
|
234
|
+
blueprintType: string;
|
|
235
|
+
authType: string;
|
|
236
|
+
credentials: Record<string, unknown>;
|
|
237
|
+
status: string;
|
|
238
|
+
lastCheckedAt: string | null;
|
|
239
|
+
createdAt: string;
|
|
240
|
+
updatedAt: string;
|
|
241
|
+
}
|
|
224
242
|
interface StopServerFunctionExecutionOptions {
|
|
225
243
|
/** ID do projeto (opcional se já configurado via configureSdkMitra) */
|
|
226
244
|
projectId?: number;
|
|
@@ -298,6 +316,11 @@ declare function executeServerFunctionMitra(options: ExecuteServerFunctionOption
|
|
|
298
316
|
* Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)
|
|
299
317
|
*/
|
|
300
318
|
declare function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;
|
|
319
|
+
/**
|
|
320
|
+
* GET /integration?projectId=X
|
|
321
|
+
* Lista integrações configuradas no projeto
|
|
322
|
+
*/
|
|
323
|
+
declare function listIntegrationsMitra(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;
|
|
301
324
|
/**
|
|
302
325
|
* POST /integration/call
|
|
303
326
|
* Chama uma API externa via serviço de integrações (porta separada)
|
|
@@ -323,4 +346,4 @@ declare function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Pr
|
|
|
323
346
|
*/
|
|
324
347
|
declare function logoutMitra(redirectPath?: string): void;
|
|
325
348
|
|
|
326
|
-
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 ListRecordsOptions, type ListRecordsResponse, type LoginOptions, type LoginResponse, type MitraConfig, type PatchRecordOptions, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, callIntegrationMitra, configureMitra, configureSdkMitra, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, listRecordsMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, logoutMitra, patchRecordMitra, resolveProjectId, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
|
|
349
|
+
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 IntegrationResponse, type ListIntegrationsOptions, type ListRecordsOptions, type ListRecordsResponse, type LoginOptions, type LoginResponse, type MitraConfig, type PatchRecordOptions, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, callIntegrationMitra, configureMitra, configureSdkMitra, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, listIntegrationsMitra, listRecordsMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, logoutMitra, patchRecordMitra, resolveProjectId, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
|
package/dist/index.d.ts
CHANGED
|
@@ -221,6 +221,24 @@ interface CallIntegrationResponse {
|
|
|
221
221
|
/** Resposta crua do serviço externo */
|
|
222
222
|
body: any;
|
|
223
223
|
}
|
|
224
|
+
interface ListIntegrationsOptions {
|
|
225
|
+
/** ID do projeto (opcional se já configurado via configureSdkMitra) */
|
|
226
|
+
projectId?: number;
|
|
227
|
+
}
|
|
228
|
+
interface IntegrationResponse {
|
|
229
|
+
id: string;
|
|
230
|
+
projectId: number;
|
|
231
|
+
name: string;
|
|
232
|
+
slug: string;
|
|
233
|
+
blueprintId: string | null;
|
|
234
|
+
blueprintType: string;
|
|
235
|
+
authType: string;
|
|
236
|
+
credentials: Record<string, unknown>;
|
|
237
|
+
status: string;
|
|
238
|
+
lastCheckedAt: string | null;
|
|
239
|
+
createdAt: string;
|
|
240
|
+
updatedAt: string;
|
|
241
|
+
}
|
|
224
242
|
interface StopServerFunctionExecutionOptions {
|
|
225
243
|
/** ID do projeto (opcional se já configurado via configureSdkMitra) */
|
|
226
244
|
projectId?: number;
|
|
@@ -298,6 +316,11 @@ declare function executeServerFunctionMitra(options: ExecuteServerFunctionOption
|
|
|
298
316
|
* Executa uma Server Function de forma ASSÍNCRONA (retorna executionId imediatamente)
|
|
299
317
|
*/
|
|
300
318
|
declare function executeServerFunctionAsyncMitra(options: ExecuteServerFunctionAsyncOptions): Promise<ExecuteServerFunctionAsyncResponse>;
|
|
319
|
+
/**
|
|
320
|
+
* GET /integration?projectId=X
|
|
321
|
+
* Lista integrações configuradas no projeto
|
|
322
|
+
*/
|
|
323
|
+
declare function listIntegrationsMitra(options?: ListIntegrationsOptions): Promise<IntegrationResponse[]>;
|
|
301
324
|
/**
|
|
302
325
|
* POST /integration/call
|
|
303
326
|
* Chama uma API externa via serviço de integrações (porta separada)
|
|
@@ -323,4 +346,4 @@ declare function createRecordsBatchMitra(options: CreateRecordsBatchOptions): Pr
|
|
|
323
346
|
*/
|
|
324
347
|
declare function logoutMitra(redirectPath?: string): void;
|
|
325
348
|
|
|
326
|
-
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 ListRecordsOptions, type ListRecordsResponse, type LoginOptions, type LoginResponse, type MitraConfig, type PatchRecordOptions, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, callIntegrationMitra, configureMitra, configureSdkMitra, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, listRecordsMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, logoutMitra, patchRecordMitra, resolveProjectId, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
|
|
349
|
+
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 IntegrationResponse, type ListIntegrationsOptions, type ListRecordsOptions, type ListRecordsResponse, type LoginOptions, type LoginResponse, type MitraConfig, type PatchRecordOptions, type RunQueryOptions, type RunQueryResponse, type SetFileStatusOptions, type SetFileStatusResponse, type SetVariableOptions, type SetVariableResponse, type StopServerFunctionExecutionOptions, type StopServerFunctionExecutionResponse, type UpdateRecordOptions, callIntegrationMitra, configureMitra, configureSdkMitra, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, listIntegrationsMitra, listRecordsMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, logoutMitra, patchRecordMitra, resolveProjectId, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
|
package/dist/index.js
CHANGED
|
@@ -248,32 +248,43 @@ async function requestWithTenant(method, endpoint, tenantId, options) {
|
|
|
248
248
|
}
|
|
249
249
|
return data;
|
|
250
250
|
}
|
|
251
|
+
async function requestIntegrations(method, endpoint, options) {
|
|
252
|
+
const config = getConfig();
|
|
253
|
+
if (!config.integrationURL) {
|
|
254
|
+
throw new Error("integrationURL n\xE3o configurado. Passe integrationURL em configureSdkMitra() ou via query param.");
|
|
255
|
+
}
|
|
256
|
+
const fetchFn = getFetch();
|
|
257
|
+
const base = config.integrationURL.replace(/\/+$/, "");
|
|
258
|
+
let url = `${base}${endpoint}`;
|
|
259
|
+
if (options == null ? void 0 : options.params) {
|
|
260
|
+
const query = Object.entries(options.params).filter(([, v]) => v !== void 0 && v !== null).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`).join("&");
|
|
261
|
+
if (query) url += `?${query}`;
|
|
262
|
+
}
|
|
263
|
+
const response = await fetchFn(url, {
|
|
264
|
+
method,
|
|
265
|
+
headers: {
|
|
266
|
+
"Authorization": formatToken(config.token),
|
|
267
|
+
"Content-Type": "application/json"
|
|
268
|
+
},
|
|
269
|
+
body: (options == null ? void 0 : options.body) !== void 0 ? JSON.stringify(options.body) : void 0
|
|
270
|
+
});
|
|
271
|
+
const text = await response.text();
|
|
272
|
+
const data = text ? JSON.parse(text) : null;
|
|
273
|
+
if (!response.ok) {
|
|
274
|
+
throw {
|
|
275
|
+
message: (data == null ? void 0 : data.message) || (data == null ? void 0 : data.error) || `HTTP ${response.status}`,
|
|
276
|
+
status: response.status,
|
|
277
|
+
details: data
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
return data;
|
|
281
|
+
}
|
|
251
282
|
var httpIntegrations = {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
}
|
|
257
|
-
const fetchFn = getFetch();
|
|
258
|
-
const url = `${config.integrationURL.replace(/\/+$/, "")}${endpoint}`;
|
|
259
|
-
const response = await fetchFn(url, {
|
|
260
|
-
method: "POST",
|
|
261
|
-
headers: {
|
|
262
|
-
"Authorization": formatToken(config.token),
|
|
263
|
-
"Content-Type": "application/json"
|
|
264
|
-
},
|
|
265
|
-
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
266
|
-
});
|
|
267
|
-
const text = await response.text();
|
|
268
|
-
const data = text ? JSON.parse(text) : null;
|
|
269
|
-
if (!response.ok) {
|
|
270
|
-
throw {
|
|
271
|
-
message: (data == null ? void 0 : data.message) || (data == null ? void 0 : data.error) || `HTTP ${response.status}`,
|
|
272
|
-
status: response.status,
|
|
273
|
-
details: data
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
return data;
|
|
283
|
+
get(endpoint, params) {
|
|
284
|
+
return requestIntegrations("GET", endpoint, { params });
|
|
285
|
+
},
|
|
286
|
+
post(endpoint, body) {
|
|
287
|
+
return requestIntegrations("POST", endpoint, { body });
|
|
277
288
|
}
|
|
278
289
|
};
|
|
279
290
|
var httpTenant = {
|
|
@@ -352,6 +363,11 @@ async function executeServerFunctionAsyncMitra(options) {
|
|
|
352
363
|
}
|
|
353
364
|
return http.post("/agentAiShortcut/executeServerFunctionAsync", body);
|
|
354
365
|
}
|
|
366
|
+
async function listIntegrationsMitra(options = {}) {
|
|
367
|
+
return httpIntegrations.get("/integration", {
|
|
368
|
+
projectId: resolveProjectId(options.projectId)
|
|
369
|
+
});
|
|
370
|
+
}
|
|
355
371
|
async function callIntegrationMitra(options) {
|
|
356
372
|
const body = {
|
|
357
373
|
integrationSlug: options.connection,
|
|
@@ -434,6 +450,7 @@ exports.executeServerFunctionAsyncMitra = executeServerFunctionAsyncMitra;
|
|
|
434
450
|
exports.executeServerFunctionMitra = executeServerFunctionMitra;
|
|
435
451
|
exports.getConfig = getConfig;
|
|
436
452
|
exports.getRecordMitra = getRecordMitra;
|
|
453
|
+
exports.listIntegrationsMitra = listIntegrationsMitra;
|
|
437
454
|
exports.listRecordsMitra = listRecordsMitra;
|
|
438
455
|
exports.loginWithEmailMitra = loginWithEmailMitra;
|
|
439
456
|
exports.loginWithGoogleMitra = loginWithGoogleMitra;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/auth.ts","../src/client.ts","../src/services.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Mitra Interactions SDK - Configuração\n */\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/auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\nconst STORE_KEY = 'mitra-sdk-config';\n\n// ── Persistência (localStorage) ──────────────────────────────────────\n\nfunction saveToStore(config: MitraConfig): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(STORE_KEY, JSON.stringify(config));\n } catch { /* quota exceeded, etc */ }\n}\n\nfunction loadFromStore(): MitraConfig | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n const raw = localStorage.getItem(STORE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n if (parsed && parsed.baseURL && parsed.token) return parsed as MitraConfig;\n return null;\n } catch {\n return null;\n }\n}\n\nfunction clearStore(): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.removeItem(STORE_KEY);\n } catch { /* ignore */ }\n}\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e persiste no localStorage.\n */\nexport function configureSdkMitra(config: MitraConfig): void {\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 saveToStore(globalConfig);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Limpa a configuração (memória + localStorage)\n */\nexport function clearConfig(): void {\n globalConfig = null;\n clearStore();\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/**\n * Auto-configura o SDK.\n * 1. Verifica query params (token + backURL) — se encontrar, salva no store e configura.\n * 2. Se não tem params, tenta carregar do localStorage.\n * Retorna { configured: true } se configurou, ou { configured: false } caso contrário.\n */\nexport function configureMitra(): { configured: boolean } {\n if (typeof window === 'undefined') return { configured: false };\n\n // 1. Tenta via query params\n const params = new URLSearchParams(window.location.search);\n const token = params.get('token');\n const backURL = params.get('backURL');\n const integrationURL = params.get('integrationURL');\n\n if (token && backURL) {\n configureSdkMitra({\n baseURL: backURL,\n token: token.startsWith('Bearer ') ? token : `Bearer ${token}`,\n ...(integrationURL ? { integrationURL } : {})\n });\n return { configured: true };\n }\n\n // 2. Tenta via localStorage\n const stored = loadFromStore();\n if (stored) {\n configureSdkMitra(stored);\n return { configured: true };\n }\n\n return { configured: false };\n}\n","/**\n * Mitra Interactions SDK - Autenticação\n *\n * Login via popup seguro hospedado no domínio Mitra.\n * Credenciais nunca passam pelo código do desenvolvedor.\n */\n\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\nimport type { LoginOptions, LoginResponse } from './types';\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\nconst POPUP_WIDTH = 420;\nconst POPUP_HEIGHT = 520;\n\n/**\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\n */\nfunction getOriginFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n return parsed.origin;\n } catch {\n return '';\n }\n}\n\n/**\n * Abre popup de autenticação e aguarda o resultado via postMessage.\n * Valida que a mensagem veio do origin da authUrl.\n */\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\n return new Promise((resolve, reject) => {\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\n\n const popup = window.open(\n url,\n 'mitra-auth',\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\n );\n\n if (!popup) {\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\n return;\n }\n\n function onMessage(event: MessageEvent) {\n // Ignora mensagens de outros origins\n if (event.origin !== expectedOrigin) return;\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\n\n cleanup();\n\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error || 'Erro na autenticação'));\n }\n }\n\n // Detecta se o popup foi fechado sem completar\n const pollTimer = setInterval(() => {\n if (popup.closed) {\n cleanup();\n reject(new Error('Login cancelado pelo usuário'));\n }\n }, 500);\n\n function cleanup() {\n window.removeEventListener('message', onMessage);\n clearInterval(pollTimer);\n }\n\n window.addEventListener('message', onMessage);\n });\n}\n\n/**\n * Auto-configura o SDK a partir da resposta de login.\n * A auth page já processa tudo e envia apenas token, baseURL e integrationURL.\n */\nfunction autoConfigureFromLogin(response: LoginResponse): void {\n if (!response.baseURL) return;\n\n configureSdkMitra({\n baseURL: response.baseURL,\n token: response.token,\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\n });\n}\n\n/**\n * Monta a URL do popup de autenticação.\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\n */\nfunction buildAuthUrl(authUrl: string, method: string, projectId: number): string {\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\n return `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\n}\n\n// ── Resolução de opções ─────────────────────────────────────────────────\n\n/**\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\n */\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\n const config = isConfigured() ? getConfig() : null;\n\n const authUrl = options?.authUrl || config?.authUrl;\n const projectId = options?.projectId ?? config?.projectId;\n\n if (!authUrl) {\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\n }\n if (projectId == null) {\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\n }\n\n return { authUrl, projectId };\n}\n\n// ── Funções de Login ────────────────────────────────────────────────────\n\n/**\n * Login com email e senha via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'email', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Google via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'google', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Microsoft via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'microsoft', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig } from './config';\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 * Cliente HTTP\n */\nexport const http = {\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n const fetchFn = getFetch();\n\n const response = await fetchFn(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 fetchFn = getFetch();\n\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n const response = await fetchFn(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\n}\n\n/**\n * Cliente HTTP para o serviço de integrações (porta diferente)\n */\nexport const httpIntegrations = {\n async post<T>(endpoint: string, body?: unknown): 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 fetchFn = getFetch();\n const url = `${config.integrationURL.replace(/\\/+$/, '')}${endpoint}`;\n\n const response = await fetchFn(url, {\n method: 'POST',\n headers: {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n },\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 { clearConfig, resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\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 * 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 * 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// === Logout ===\n\n/**\n * Realiza logout do SDK.\n * - Se embarcado no Mitra (iframe): envia postMessage pro app pai solicitando logout.\n * - Se standalone: limpa config (memória + localStorage) e redireciona pro redirectPath se informado.\n */\nexport function logoutMitra(redirectPath?: string): void {\n if (typeof window === 'undefined') return;\n\n const isEmbedded = window.parent !== window;\n\n if (isEmbedded) {\n window.parent.postMessage(JSON.stringify({ type: 'mitra-sdk:logout' }), '*');\n } else {\n clearConfig();\n if (redirectPath) {\n window.location.href = redirectPath;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/auth.ts","../src/client.ts","../src/services.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Mitra Interactions SDK - Configuração\n */\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/auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\nconst STORE_KEY = 'mitra-sdk-config';\n\n// ── Persistência (localStorage) ──────────────────────────────────────\n\nfunction saveToStore(config: MitraConfig): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(STORE_KEY, JSON.stringify(config));\n } catch { /* quota exceeded, etc */ }\n}\n\nfunction loadFromStore(): MitraConfig | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n const raw = localStorage.getItem(STORE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n if (parsed && parsed.baseURL && parsed.token) return parsed as MitraConfig;\n return null;\n } catch {\n return null;\n }\n}\n\nfunction clearStore(): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.removeItem(STORE_KEY);\n } catch { /* ignore */ }\n}\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e persiste no localStorage.\n */\nexport function configureSdkMitra(config: MitraConfig): void {\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 saveToStore(globalConfig);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Limpa a configuração (memória + localStorage)\n */\nexport function clearConfig(): void {\n globalConfig = null;\n clearStore();\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/**\n * Auto-configura o SDK.\n * 1. Verifica query params (token + backURL) — se encontrar, salva no store e configura.\n * 2. Se não tem params, tenta carregar do localStorage.\n * Retorna { configured: true } se configurou, ou { configured: false } caso contrário.\n */\nexport function configureMitra(): { configured: boolean } {\n if (typeof window === 'undefined') return { configured: false };\n\n // 1. Tenta via query params\n const params = new URLSearchParams(window.location.search);\n const token = params.get('token');\n const backURL = params.get('backURL');\n const integrationURL = params.get('integrationURL');\n\n if (token && backURL) {\n configureSdkMitra({\n baseURL: backURL,\n token: token.startsWith('Bearer ') ? token : `Bearer ${token}`,\n ...(integrationURL ? { integrationURL } : {})\n });\n return { configured: true };\n }\n\n // 2. Tenta via localStorage\n const stored = loadFromStore();\n if (stored) {\n configureSdkMitra(stored);\n return { configured: true };\n }\n\n return { configured: false };\n}\n","/**\n * Mitra Interactions SDK - Autenticação\n *\n * Login via popup seguro hospedado no domínio Mitra.\n * Credenciais nunca passam pelo código do desenvolvedor.\n */\n\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\nimport type { LoginOptions, LoginResponse } from './types';\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\nconst POPUP_WIDTH = 420;\nconst POPUP_HEIGHT = 520;\n\n/**\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\n */\nfunction getOriginFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n return parsed.origin;\n } catch {\n return '';\n }\n}\n\n/**\n * Abre popup de autenticação e aguarda o resultado via postMessage.\n * Valida que a mensagem veio do origin da authUrl.\n */\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\n return new Promise((resolve, reject) => {\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\n\n const popup = window.open(\n url,\n 'mitra-auth',\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\n );\n\n if (!popup) {\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\n return;\n }\n\n function onMessage(event: MessageEvent) {\n // Ignora mensagens de outros origins\n if (event.origin !== expectedOrigin) return;\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\n\n cleanup();\n\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error || 'Erro na autenticação'));\n }\n }\n\n // Detecta se o popup foi fechado sem completar\n const pollTimer = setInterval(() => {\n if (popup.closed) {\n cleanup();\n reject(new Error('Login cancelado pelo usuário'));\n }\n }, 500);\n\n function cleanup() {\n window.removeEventListener('message', onMessage);\n clearInterval(pollTimer);\n }\n\n window.addEventListener('message', onMessage);\n });\n}\n\n/**\n * Auto-configura o SDK a partir da resposta de login.\n * A auth page já processa tudo e envia apenas token, baseURL e integrationURL.\n */\nfunction autoConfigureFromLogin(response: LoginResponse): void {\n if (!response.baseURL) return;\n\n configureSdkMitra({\n baseURL: response.baseURL,\n token: response.token,\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\n });\n}\n\n/**\n * Monta a URL do popup de autenticação.\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\n */\nfunction buildAuthUrl(authUrl: string, method: string, projectId: number): string {\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\n return `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\n}\n\n// ── Resolução de opções ─────────────────────────────────────────────────\n\n/**\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\n */\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\n const config = isConfigured() ? getConfig() : null;\n\n const authUrl = options?.authUrl || config?.authUrl;\n const projectId = options?.projectId ?? config?.projectId;\n\n if (!authUrl) {\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\n }\n if (projectId == null) {\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\n }\n\n return { authUrl, projectId };\n}\n\n// ── Funções de Login ────────────────────────────────────────────────────\n\n/**\n * Login com email e senha via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'email', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Google via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'google', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Microsoft via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'microsoft', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig } from './config';\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 * Cliente HTTP\n */\nexport const http = {\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n const fetchFn = getFetch();\n\n const response = await fetchFn(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 fetchFn = getFetch();\n\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n const response = await fetchFn(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 fetchFn = getFetch();\n const base = config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${endpoint}`;\n\n if (options?.params) {\n const query = Object.entries(options.params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n\n const response = await fetchFn(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 const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 { clearConfig, resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\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 * 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// === Logout ===\n\n/**\n * Realiza logout do SDK.\n * - Se embarcado no Mitra (iframe): envia postMessage pro app pai solicitando logout.\n * - Se standalone: limpa config (memória + localStorage) e redireciona pro redirectPath se informado.\n */\nexport function logoutMitra(redirectPath?: string): void {\n if (typeof window === 'undefined') return;\n\n const isEmbedded = window.parent !== window;\n\n if (isEmbedded) {\n window.parent.postMessage(JSON.stringify({ type: 'mitra-sdk:logout' }), '*');\n } else {\n clearConfig();\n if (redirectPath) {\n window.location.href = redirectPath;\n }\n }\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -246,32 +246,43 @@ async function requestWithTenant(method, endpoint, tenantId, options) {
|
|
|
246
246
|
}
|
|
247
247
|
return data;
|
|
248
248
|
}
|
|
249
|
+
async function requestIntegrations(method, endpoint, options) {
|
|
250
|
+
const config = getConfig();
|
|
251
|
+
if (!config.integrationURL) {
|
|
252
|
+
throw new Error("integrationURL n\xE3o configurado. Passe integrationURL em configureSdkMitra() ou via query param.");
|
|
253
|
+
}
|
|
254
|
+
const fetchFn = getFetch();
|
|
255
|
+
const base = config.integrationURL.replace(/\/+$/, "");
|
|
256
|
+
let url = `${base}${endpoint}`;
|
|
257
|
+
if (options == null ? void 0 : options.params) {
|
|
258
|
+
const query = Object.entries(options.params).filter(([, v]) => v !== void 0 && v !== null).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`).join("&");
|
|
259
|
+
if (query) url += `?${query}`;
|
|
260
|
+
}
|
|
261
|
+
const response = await fetchFn(url, {
|
|
262
|
+
method,
|
|
263
|
+
headers: {
|
|
264
|
+
"Authorization": formatToken(config.token),
|
|
265
|
+
"Content-Type": "application/json"
|
|
266
|
+
},
|
|
267
|
+
body: (options == null ? void 0 : options.body) !== void 0 ? JSON.stringify(options.body) : void 0
|
|
268
|
+
});
|
|
269
|
+
const text = await response.text();
|
|
270
|
+
const data = text ? JSON.parse(text) : null;
|
|
271
|
+
if (!response.ok) {
|
|
272
|
+
throw {
|
|
273
|
+
message: (data == null ? void 0 : data.message) || (data == null ? void 0 : data.error) || `HTTP ${response.status}`,
|
|
274
|
+
status: response.status,
|
|
275
|
+
details: data
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
return data;
|
|
279
|
+
}
|
|
249
280
|
var httpIntegrations = {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
const fetchFn = getFetch();
|
|
256
|
-
const url = `${config.integrationURL.replace(/\/+$/, "")}${endpoint}`;
|
|
257
|
-
const response = await fetchFn(url, {
|
|
258
|
-
method: "POST",
|
|
259
|
-
headers: {
|
|
260
|
-
"Authorization": formatToken(config.token),
|
|
261
|
-
"Content-Type": "application/json"
|
|
262
|
-
},
|
|
263
|
-
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
264
|
-
});
|
|
265
|
-
const text = await response.text();
|
|
266
|
-
const data = text ? JSON.parse(text) : null;
|
|
267
|
-
if (!response.ok) {
|
|
268
|
-
throw {
|
|
269
|
-
message: (data == null ? void 0 : data.message) || (data == null ? void 0 : data.error) || `HTTP ${response.status}`,
|
|
270
|
-
status: response.status,
|
|
271
|
-
details: data
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
return data;
|
|
281
|
+
get(endpoint, params) {
|
|
282
|
+
return requestIntegrations("GET", endpoint, { params });
|
|
283
|
+
},
|
|
284
|
+
post(endpoint, body) {
|
|
285
|
+
return requestIntegrations("POST", endpoint, { body });
|
|
275
286
|
}
|
|
276
287
|
};
|
|
277
288
|
var httpTenant = {
|
|
@@ -350,6 +361,11 @@ async function executeServerFunctionAsyncMitra(options) {
|
|
|
350
361
|
}
|
|
351
362
|
return http.post("/agentAiShortcut/executeServerFunctionAsync", body);
|
|
352
363
|
}
|
|
364
|
+
async function listIntegrationsMitra(options = {}) {
|
|
365
|
+
return httpIntegrations.get("/integration", {
|
|
366
|
+
projectId: resolveProjectId(options.projectId)
|
|
367
|
+
});
|
|
368
|
+
}
|
|
353
369
|
async function callIntegrationMitra(options) {
|
|
354
370
|
const body = {
|
|
355
371
|
integrationSlug: options.connection,
|
|
@@ -421,6 +437,6 @@ function logoutMitra(redirectPath) {
|
|
|
421
437
|
}
|
|
422
438
|
}
|
|
423
439
|
|
|
424
|
-
export { callIntegrationMitra, configureMitra, configureSdkMitra, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, listRecordsMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, logoutMitra, patchRecordMitra, resolveProjectId, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
|
|
440
|
+
export { callIntegrationMitra, configureMitra, configureSdkMitra, createRecordMitra, createRecordsBatchMitra, deleteRecordMitra, executeDbActionMitra, executeServerFunctionAsyncMitra, executeServerFunctionMitra, getConfig, getRecordMitra, listIntegrationsMitra, listRecordsMitra, loginWithEmailMitra, loginWithGoogleMitra, loginWithMicrosoftMitra, logoutMitra, patchRecordMitra, resolveProjectId, runQueryMitra, setFileStatusMitra, setVariableMitra, stopServerFunctionExecutionMitra, updateRecordMitra };
|
|
425
441
|
//# sourceMappingURL=index.mjs.map
|
|
426
442
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/auth.ts","../src/client.ts","../src/services.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Mitra Interactions SDK - Configuração\n */\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/auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\nconst STORE_KEY = 'mitra-sdk-config';\n\n// ── Persistência (localStorage) ──────────────────────────────────────\n\nfunction saveToStore(config: MitraConfig): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(STORE_KEY, JSON.stringify(config));\n } catch { /* quota exceeded, etc */ }\n}\n\nfunction loadFromStore(): MitraConfig | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n const raw = localStorage.getItem(STORE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n if (parsed && parsed.baseURL && parsed.token) return parsed as MitraConfig;\n return null;\n } catch {\n return null;\n }\n}\n\nfunction clearStore(): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.removeItem(STORE_KEY);\n } catch { /* ignore */ }\n}\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e persiste no localStorage.\n */\nexport function configureSdkMitra(config: MitraConfig): void {\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 saveToStore(globalConfig);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Limpa a configuração (memória + localStorage)\n */\nexport function clearConfig(): void {\n globalConfig = null;\n clearStore();\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/**\n * Auto-configura o SDK.\n * 1. Verifica query params (token + backURL) — se encontrar, salva no store e configura.\n * 2. Se não tem params, tenta carregar do localStorage.\n * Retorna { configured: true } se configurou, ou { configured: false } caso contrário.\n */\nexport function configureMitra(): { configured: boolean } {\n if (typeof window === 'undefined') return { configured: false };\n\n // 1. Tenta via query params\n const params = new URLSearchParams(window.location.search);\n const token = params.get('token');\n const backURL = params.get('backURL');\n const integrationURL = params.get('integrationURL');\n\n if (token && backURL) {\n configureSdkMitra({\n baseURL: backURL,\n token: token.startsWith('Bearer ') ? token : `Bearer ${token}`,\n ...(integrationURL ? { integrationURL } : {})\n });\n return { configured: true };\n }\n\n // 2. Tenta via localStorage\n const stored = loadFromStore();\n if (stored) {\n configureSdkMitra(stored);\n return { configured: true };\n }\n\n return { configured: false };\n}\n","/**\n * Mitra Interactions SDK - Autenticação\n *\n * Login via popup seguro hospedado no domínio Mitra.\n * Credenciais nunca passam pelo código do desenvolvedor.\n */\n\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\nimport type { LoginOptions, LoginResponse } from './types';\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\nconst POPUP_WIDTH = 420;\nconst POPUP_HEIGHT = 520;\n\n/**\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\n */\nfunction getOriginFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n return parsed.origin;\n } catch {\n return '';\n }\n}\n\n/**\n * Abre popup de autenticação e aguarda o resultado via postMessage.\n * Valida que a mensagem veio do origin da authUrl.\n */\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\n return new Promise((resolve, reject) => {\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\n\n const popup = window.open(\n url,\n 'mitra-auth',\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\n );\n\n if (!popup) {\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\n return;\n }\n\n function onMessage(event: MessageEvent) {\n // Ignora mensagens de outros origins\n if (event.origin !== expectedOrigin) return;\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\n\n cleanup();\n\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error || 'Erro na autenticação'));\n }\n }\n\n // Detecta se o popup foi fechado sem completar\n const pollTimer = setInterval(() => {\n if (popup.closed) {\n cleanup();\n reject(new Error('Login cancelado pelo usuário'));\n }\n }, 500);\n\n function cleanup() {\n window.removeEventListener('message', onMessage);\n clearInterval(pollTimer);\n }\n\n window.addEventListener('message', onMessage);\n });\n}\n\n/**\n * Auto-configura o SDK a partir da resposta de login.\n * A auth page já processa tudo e envia apenas token, baseURL e integrationURL.\n */\nfunction autoConfigureFromLogin(response: LoginResponse): void {\n if (!response.baseURL) return;\n\n configureSdkMitra({\n baseURL: response.baseURL,\n token: response.token,\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\n });\n}\n\n/**\n * Monta a URL do popup de autenticação.\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\n */\nfunction buildAuthUrl(authUrl: string, method: string, projectId: number): string {\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\n return `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\n}\n\n// ── Resolução de opções ─────────────────────────────────────────────────\n\n/**\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\n */\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\n const config = isConfigured() ? getConfig() : null;\n\n const authUrl = options?.authUrl || config?.authUrl;\n const projectId = options?.projectId ?? config?.projectId;\n\n if (!authUrl) {\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\n }\n if (projectId == null) {\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\n }\n\n return { authUrl, projectId };\n}\n\n// ── Funções de Login ────────────────────────────────────────────────────\n\n/**\n * Login com email e senha via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'email', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Google via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'google', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Microsoft via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'microsoft', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig } from './config';\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 * Cliente HTTP\n */\nexport const http = {\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n const fetchFn = getFetch();\n\n const response = await fetchFn(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 fetchFn = getFetch();\n\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n const response = await fetchFn(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\n}\n\n/**\n * Cliente HTTP para o serviço de integrações (porta diferente)\n */\nexport const httpIntegrations = {\n async post<T>(endpoint: string, body?: unknown): 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 fetchFn = getFetch();\n const url = `${config.integrationURL.replace(/\\/+$/, '')}${endpoint}`;\n\n const response = await fetchFn(url, {\n method: 'POST',\n headers: {\n 'Authorization': formatToken(config.token),\n 'Content-Type': 'application/json'\n },\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 { clearConfig, resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\n ExecuteServerFunctionOptions,\n ExecuteServerFunctionResponse,\n ExecuteServerFunctionAsyncOptions,\n ExecuteServerFunctionAsyncResponse,\n CallIntegrationOptions,\n CallIntegrationResponse,\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 * 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 * 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// === Logout ===\n\n/**\n * Realiza logout do SDK.\n * - Se embarcado no Mitra (iframe): envia postMessage pro app pai solicitando logout.\n * - Se standalone: limpa config (memória + localStorage) e redireciona pro redirectPath se informado.\n */\nexport function logoutMitra(redirectPath?: string): void {\n if (typeof window === 'undefined') return;\n\n const isEmbedded = window.parent !== window;\n\n if (isEmbedded) {\n window.parent.postMessage(JSON.stringify({ type: 'mitra-sdk:logout' }), '*');\n } else {\n clearConfig();\n if (redirectPath) {\n window.location.href = redirectPath;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/auth.ts","../src/client.ts","../src/services.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Mitra Interactions SDK - Configuração\n */\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/auth/) */\n authUrl?: string;\n /** ID do projeto (usado como fallback nos métodos de login e serviços) */\n projectId?: number;\n}\n\nlet globalConfig: MitraConfig | null = null;\n\nconst STORE_KEY = 'mitra-sdk-config';\n\n// ── Persistência (localStorage) ──────────────────────────────────────\n\nfunction saveToStore(config: MitraConfig): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(STORE_KEY, JSON.stringify(config));\n } catch { /* quota exceeded, etc */ }\n}\n\nfunction loadFromStore(): MitraConfig | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n const raw = localStorage.getItem(STORE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n if (parsed && parsed.baseURL && parsed.token) return parsed as MitraConfig;\n return null;\n } catch {\n return null;\n }\n}\n\nfunction clearStore(): void {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.removeItem(STORE_KEY);\n } catch { /* ignore */ }\n}\n\n// ── API Pública ──────────────────────────────────────────────────────\n\n/**\n * Configura o SDK globalmente e persiste no localStorage.\n */\nexport function configureSdkMitra(config: MitraConfig): void {\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 saveToStore(globalConfig);\n}\n\n/**\n * Obtém a configuração atual\n */\nexport function getConfig(): MitraConfig {\n if (!globalConfig) {\n throw new Error('SDK não configurado. Chame configureSdkMitra() primeiro.');\n }\n return globalConfig;\n}\n\n/**\n * Verifica se o SDK está configurado\n */\nexport function isConfigured(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Limpa a configuração (memória + localStorage)\n */\nexport function clearConfig(): void {\n globalConfig = null;\n clearStore();\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/**\n * Auto-configura o SDK.\n * 1. Verifica query params (token + backURL) — se encontrar, salva no store e configura.\n * 2. Se não tem params, tenta carregar do localStorage.\n * Retorna { configured: true } se configurou, ou { configured: false } caso contrário.\n */\nexport function configureMitra(): { configured: boolean } {\n if (typeof window === 'undefined') return { configured: false };\n\n // 1. Tenta via query params\n const params = new URLSearchParams(window.location.search);\n const token = params.get('token');\n const backURL = params.get('backURL');\n const integrationURL = params.get('integrationURL');\n\n if (token && backURL) {\n configureSdkMitra({\n baseURL: backURL,\n token: token.startsWith('Bearer ') ? token : `Bearer ${token}`,\n ...(integrationURL ? { integrationURL } : {})\n });\n return { configured: true };\n }\n\n // 2. Tenta via localStorage\n const stored = loadFromStore();\n if (stored) {\n configureSdkMitra(stored);\n return { configured: true };\n }\n\n return { configured: false };\n}\n","/**\n * Mitra Interactions SDK - Autenticação\n *\n * Login via popup seguro hospedado no domínio Mitra.\n * Credenciais nunca passam pelo código do desenvolvedor.\n */\n\nimport { configureSdkMitra, isConfigured, getConfig } from './config';\nimport type { LoginOptions, LoginResponse } from './types';\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nconst AUTH_MESSAGE_TYPE = 'mitra-auth-result';\nconst POPUP_WIDTH = 420;\nconst POPUP_HEIGHT = 520;\n\n/**\n * Extrai o origin de uma URL (ex: \"https://validacao.mitralab.io/auth/\" → \"https://validacao.mitralab.io\")\n */\nfunction getOriginFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n return parsed.origin;\n } catch {\n return '';\n }\n}\n\n/**\n * Abre popup de autenticação e aguarda o resultado via postMessage.\n * Valida que a mensagem veio do origin da authUrl.\n */\nfunction openAuthPopup(url: string, expectedOrigin: string): Promise<LoginResponse> {\n return new Promise((resolve, reject) => {\n const left = (typeof window.screenX === 'number' ? window.screenX : 0) + (window.outerWidth - POPUP_WIDTH) / 2;\n const top = (typeof window.screenY === 'number' ? window.screenY : 0) + (window.outerHeight - POPUP_HEIGHT) / 2;\n\n const popup = window.open(\n url,\n 'mitra-auth',\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},menubar=no,toolbar=no,status=no`\n );\n\n if (!popup) {\n reject(new Error('Popup bloqueado pelo navegador. Permita popups para este site.'));\n return;\n }\n\n function onMessage(event: MessageEvent) {\n // Ignora mensagens de outros origins\n if (event.origin !== expectedOrigin) return;\n if (!event.data || event.data.type !== AUTH_MESSAGE_TYPE) return;\n\n cleanup();\n\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error || 'Erro na autenticação'));\n }\n }\n\n // Detecta se o popup foi fechado sem completar\n const pollTimer = setInterval(() => {\n if (popup.closed) {\n cleanup();\n reject(new Error('Login cancelado pelo usuário'));\n }\n }, 500);\n\n function cleanup() {\n window.removeEventListener('message', onMessage);\n clearInterval(pollTimer);\n }\n\n window.addEventListener('message', onMessage);\n });\n}\n\n/**\n * Auto-configura o SDK a partir da resposta de login.\n * A auth page já processa tudo e envia apenas token, baseURL e integrationURL.\n */\nfunction autoConfigureFromLogin(response: LoginResponse): void {\n if (!response.baseURL) return;\n\n configureSdkMitra({\n baseURL: response.baseURL,\n token: response.token,\n ...(response.integrationURL ? { integrationURL: response.integrationURL } : {})\n });\n}\n\n/**\n * Monta a URL do popup de autenticação.\n * baseURL não é passado — fica hardcoded na página de auth (segurança).\n */\nfunction buildAuthUrl(authUrl: string, method: string, projectId: number): string {\n const base = authUrl.endsWith('/') ? authUrl : authUrl + '/';\n return `${base}?method=${method}&projectId=${encodeURIComponent(projectId)}`;\n}\n\n// ── Resolução de opções ─────────────────────────────────────────────────\n\n/**\n * Resolve authUrl e projectId: usa o valor passado, senão pega do config salvo.\n */\nfunction resolveLoginOptions(options?: LoginOptions): { authUrl: string; projectId: number } {\n const config = isConfigured() ? getConfig() : null;\n\n const authUrl = options?.authUrl || config?.authUrl;\n const projectId = options?.projectId ?? config?.projectId;\n\n if (!authUrl) {\n throw new Error('authUrl é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ authUrl }).');\n }\n if (projectId == null) {\n throw new Error('projectId é obrigatório. Passe em LoginOptions ou configure via configureSdkMitra({ projectId }).');\n }\n\n return { authUrl, projectId };\n}\n\n// ── Funções de Login ────────────────────────────────────────────────────\n\n/**\n * Login com email e senha via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithEmailMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'email', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Google via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithGoogleMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'google', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n\n/**\n * Login com Microsoft via popup seguro Mitra.\n *\n * authUrl e projectId são opcionais se já configurados via configureSdkMitra().\n * Se passados, sobrescrevem os valores salvos.\n */\nexport async function loginWithMicrosoftMitra(options?: LoginOptions): Promise<LoginResponse> {\n const { authUrl, projectId } = resolveLoginOptions(options);\n const origin = getOriginFromUrl(authUrl);\n const url = buildAuthUrl(authUrl, 'microsoft', projectId);\n const response = await openAuthPopup(url, origin);\n autoConfigureFromLogin(response);\n return response;\n}\n","/**\n * Mitra Interactions SDK - HTTP Client\n */\n\nimport { getConfig } from './config';\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 * Cliente HTTP\n */\nexport const http = {\n async post<T>(endpoint: string, body?: unknown): Promise<T> {\n const fetchFn = getFetch();\n\n const response = await fetchFn(buildUrl(endpoint), {\n method: 'POST',\n headers: buildHeaders(),\n body: body !== undefined ? JSON.stringify(body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 fetchFn = getFetch();\n\n const headers = {\n ...buildHeaders(),\n 'X-TenantID': String(tenantId)\n };\n\n const response = await fetchFn(buildUrl(endpoint, options?.params), {\n method,\n headers,\n body: options?.body !== undefined ? JSON.stringify(options.body) : undefined\n });\n\n const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 fetchFn = getFetch();\n const base = config.integrationURL.replace(/\\/+$/, '');\n let url = `${base}${endpoint}`;\n\n if (options?.params) {\n const query = Object.entries(options.params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (query) url += `?${query}`;\n }\n\n const response = await fetchFn(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 const text = await response.text();\n const data = text ? JSON.parse(text) : null;\n\n if (!response.ok) {\n throw {\n message: data?.message || data?.error || `HTTP ${response.status}`,\n status: response.status,\n details: data\n };\n }\n\n return data as T;\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 { clearConfig, resolveProjectId } from './config';\nimport type {\n RunQueryOptions,\n RunQueryResponse,\n ExecuteDbActionOptions,\n ExecuteDbActionResponse,\n SetFileStatusOptions,\n SetFileStatusResponse,\n SetVariableOptions,\n SetVariableResponse,\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 * 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// === Logout ===\n\n/**\n * Realiza logout do SDK.\n * - Se embarcado no Mitra (iframe): envia postMessage pro app pai solicitando logout.\n * - Se standalone: limpa config (memória + localStorage) e redireciona pro redirectPath se informado.\n */\nexport function logoutMitra(redirectPath?: string): void {\n if (typeof window === 'undefined') return;\n\n const isEmbedded = window.parent !== window;\n\n if (isEmbedded) {\n window.parent.postMessage(JSON.stringify({ type: 'mitra-sdk:logout' }), '*');\n } else {\n clearConfig();\n if (redirectPath) {\n window.location.href = redirectPath;\n }\n }\n}\n"]}
|