@aether-baas/core 3.0.0

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.
Files changed (49) hide show
  1. package/dist/adapters/storage.d.ts +126 -0
  2. package/dist/adapters/storage.d.ts.map +1 -0
  3. package/dist/adapters/storage.js +299 -0
  4. package/dist/adapters/storage.js.map +1 -0
  5. package/dist/client/index.d.ts +172 -0
  6. package/dist/client/index.d.ts.map +1 -0
  7. package/dist/client/index.js +409 -0
  8. package/dist/client/index.js.map +1 -0
  9. package/dist/errors/index.d.ts +251 -0
  10. package/dist/errors/index.d.ts.map +1 -0
  11. package/dist/errors/index.js +542 -0
  12. package/dist/errors/index.js.map +1 -0
  13. package/dist/http/client.d.ts +40 -0
  14. package/dist/http/client.d.ts.map +1 -0
  15. package/dist/http/client.js +247 -0
  16. package/dist/http/client.js.map +1 -0
  17. package/dist/index.d.ts +21 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +44 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/modules/ai.d.ts +165 -0
  22. package/dist/modules/ai.d.ts.map +1 -0
  23. package/dist/modules/ai.js +330 -0
  24. package/dist/modules/ai.js.map +1 -0
  25. package/dist/modules/database.d.ts +187 -0
  26. package/dist/modules/database.d.ts.map +1 -0
  27. package/dist/modules/database.js +428 -0
  28. package/dist/modules/database.js.map +1 -0
  29. package/dist/modules/functions.d.ts +48 -0
  30. package/dist/modules/functions.d.ts.map +1 -0
  31. package/dist/modules/functions.js +83 -0
  32. package/dist/modules/functions.js.map +1 -0
  33. package/dist/modules/push.d.ts +174 -0
  34. package/dist/modules/push.d.ts.map +1 -0
  35. package/dist/modules/push.js +181 -0
  36. package/dist/modules/push.js.map +1 -0
  37. package/dist/modules/storage.d.ts +69 -0
  38. package/dist/modules/storage.d.ts.map +1 -0
  39. package/dist/modules/storage.js +151 -0
  40. package/dist/modules/storage.js.map +1 -0
  41. package/dist/modules/tenant-auth.d.ts +167 -0
  42. package/dist/modules/tenant-auth.d.ts.map +1 -0
  43. package/dist/modules/tenant-auth.js +341 -0
  44. package/dist/modules/tenant-auth.js.map +1 -0
  45. package/dist/types/index.d.ts +470 -0
  46. package/dist/types/index.d.ts.map +1 -0
  47. package/dist/types/index.js +19 -0
  48. package/dist/types/index.js.map +1 -0
  49. package/package.json +80 -0
@@ -0,0 +1,542 @@
1
+ // =============================================================================
2
+ // @aether/core - Error System
3
+ // =============================================================================
4
+ // Sistema de erros tipados para o Aether SDK.
5
+ // Permite tratamento granular de erros por tipo.
6
+ // =============================================================================
7
+ /**
8
+ * Códigos de erro padronizados do Aether.
9
+ */
10
+ export const AetherErrorCodes = {
11
+ // Erros Gerais
12
+ UNKNOWN: 'UNKNOWN',
13
+ NETWORK_ERROR: 'NETWORK_ERROR',
14
+ TIMEOUT: 'TIMEOUT',
15
+ INVALID_REQUEST: 'INVALID_REQUEST',
16
+ INTERNAL_ERROR: 'INTERNAL_ERROR',
17
+ // Autenticação
18
+ INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',
19
+ EMAIL_ALREADY_EXISTS: 'EMAIL_ALREADY_EXISTS',
20
+ USER_NOT_FOUND: 'USER_NOT_FOUND',
21
+ SESSION_EXPIRED: 'SESSION_EXPIRED',
22
+ TOKEN_EXPIRED: 'TOKEN_EXPIRED',
23
+ TOKEN_INVALID: 'TOKEN_INVALID',
24
+ REFRESH_TOKEN_EXPIRED: 'REFRESH_TOKEN_EXPIRED',
25
+ UNAUTHORIZED: 'UNAUTHORIZED',
26
+ FORBIDDEN: 'FORBIDDEN',
27
+ // Database
28
+ DOCUMENT_NOT_FOUND: 'DOCUMENT_NOT_FOUND',
29
+ COLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',
30
+ PERMISSION_DENIED: 'PERMISSION_DENIED',
31
+ VALIDATION_ERROR: 'VALIDATION_ERROR',
32
+ DUPLICATE_KEY: 'DUPLICATE_KEY',
33
+ QUOTA_EXCEEDED: 'QUOTA_EXCEEDED',
34
+ // Storage
35
+ FILE_NOT_FOUND: 'FILE_NOT_FOUND',
36
+ FILE_TOO_LARGE: 'FILE_TOO_LARGE',
37
+ INVALID_FILE_TYPE: 'INVALID_FILE_TYPE',
38
+ UPLOAD_FAILED: 'UPLOAD_FAILED',
39
+ STORAGE_QUOTA_EXCEEDED: 'STORAGE_QUOTA_EXCEEDED',
40
+ // Functions
41
+ FUNCTION_NOT_FOUND: 'FUNCTION_NOT_FOUND',
42
+ FUNCTION_TIMEOUT: 'FUNCTION_TIMEOUT',
43
+ FUNCTION_ERROR: 'FUNCTION_ERROR',
44
+ // Push
45
+ DEVICE_NOT_REGISTERED: 'DEVICE_NOT_REGISTERED',
46
+ PUSH_FAILED: 'PUSH_FAILED',
47
+ INVALID_TOKEN: 'INVALID_TOKEN',
48
+ // AI
49
+ AI_QUOTA_EXCEEDED: 'AI_QUOTA_EXCEEDED',
50
+ AI_RATE_LIMITED: 'AI_RATE_LIMITED',
51
+ AI_CONTEXT_TOO_LONG: 'AI_CONTEXT_TOO_LONG',
52
+ // API Key
53
+ API_KEY_INVALID: 'API_KEY_INVALID',
54
+ API_KEY_EXPIRED: 'API_KEY_EXPIRED',
55
+ API_KEY_MISSING: 'API_KEY_MISSING',
56
+ // Rate Limit
57
+ RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',
58
+ };
59
+ /**
60
+ * Classe base de erro do Aether SDK.
61
+ * Todos os erros do SDK estendem esta classe.
62
+ */
63
+ export class AetherError extends Error {
64
+ /** Código padronizado do erro */
65
+ code;
66
+ /** Status HTTP (se aplicável) */
67
+ status;
68
+ /** Detalhes adicionais */
69
+ details;
70
+ /** Se o erro pode ser retentado */
71
+ retryable;
72
+ /** Dica para resolver o problema */
73
+ hint;
74
+ /** Timestamp do erro */
75
+ timestamp;
76
+ constructor(message, options) {
77
+ super(message, { cause: options?.cause });
78
+ this.name = 'AetherError';
79
+ this.code = options?.code ?? 'UNKNOWN';
80
+ this.status = options?.status;
81
+ this.details = options?.details;
82
+ this.retryable = options?.retryable ?? false;
83
+ this.hint = options?.hint;
84
+ this.timestamp = new Date().toISOString();
85
+ // Mantém stack trace correto
86
+ if (Error.captureStackTrace) {
87
+ Error.captureStackTrace(this, this.constructor);
88
+ }
89
+ }
90
+ /**
91
+ * Verifica se um erro é um AetherError.
92
+ */
93
+ static isAetherError(error) {
94
+ return error instanceof AetherError;
95
+ }
96
+ /**
97
+ * Cria um AetherError a partir de qualquer erro.
98
+ */
99
+ static from(error) {
100
+ if (error instanceof AetherError) {
101
+ return error;
102
+ }
103
+ if (error instanceof Error) {
104
+ // Tenta extrair informações de erros Axios
105
+ const axiosError = error;
106
+ if (axiosError.response) {
107
+ const data = axiosError.response.data;
108
+ const status = axiosError.response.status;
109
+ return new AetherError(data?.message || data?.error || error.message, {
110
+ code: mapStatusToCode(status, data?.code),
111
+ status,
112
+ details: data?.details || data,
113
+ retryable: isRetryableStatus(status),
114
+ cause: error,
115
+ });
116
+ }
117
+ if (axiosError.code === 'ECONNABORTED') {
118
+ return new AetherError('Tempo limite da requisição excedido', {
119
+ code: 'TIMEOUT',
120
+ retryable: true,
121
+ cause: error,
122
+ });
123
+ }
124
+ if (axiosError.code === 'ERR_NETWORK' || !navigator?.onLine) {
125
+ return new AetherError('Erro de conexão com o servidor', {
126
+ code: 'NETWORK_ERROR',
127
+ retryable: true,
128
+ cause: error,
129
+ });
130
+ }
131
+ return new AetherError(error.message, {
132
+ code: 'UNKNOWN',
133
+ cause: error,
134
+ });
135
+ }
136
+ return new AetherError(String(error), { code: 'UNKNOWN' });
137
+ }
138
+ /**
139
+ * Serializa o erro para JSON.
140
+ */
141
+ toJSON() {
142
+ return {
143
+ name: this.name,
144
+ message: this.message,
145
+ code: this.code,
146
+ status: this.status,
147
+ details: this.details,
148
+ retryable: this.retryable,
149
+ hint: this.hint,
150
+ timestamp: this.timestamp,
151
+ };
152
+ }
153
+ /**
154
+ * Representação em string.
155
+ */
156
+ toString() {
157
+ return `[${this.code}] ${this.message}${this.hint ? ` (${this.hint})` : ''}`;
158
+ }
159
+ }
160
+ // =============================================================================
161
+ // ERROS ESPECÍFICOS
162
+ // =============================================================================
163
+ /**
164
+ * Erro de autenticação.
165
+ */
166
+ export class AuthError extends AetherError {
167
+ constructor(message, options) {
168
+ super(message, {
169
+ code: options?.code ?? 'UNAUTHORIZED',
170
+ status: options?.status ?? 401,
171
+ retryable: false,
172
+ ...options,
173
+ });
174
+ this.name = 'AuthError';
175
+ }
176
+ static isAuthError(error) {
177
+ return error instanceof AuthError;
178
+ }
179
+ // Factory methods para erros comuns
180
+ static invalidCredentials() {
181
+ return new AuthError('Email ou senha incorretos', {
182
+ code: 'INVALID_CREDENTIALS',
183
+ status: 401,
184
+ hint: 'Verifique suas credenciais e tente novamente',
185
+ });
186
+ }
187
+ static emailExists(email) {
188
+ return new AuthError('Este email já está cadastrado', {
189
+ code: 'EMAIL_ALREADY_EXISTS',
190
+ status: 409,
191
+ details: { field: 'email', value: email },
192
+ hint: 'Tente fazer login ou use outro email',
193
+ });
194
+ }
195
+ static sessionExpired() {
196
+ return new AuthError('Sua sessão expirou', {
197
+ code: 'SESSION_EXPIRED',
198
+ status: 401,
199
+ hint: 'Faça login novamente',
200
+ });
201
+ }
202
+ static tokenExpired() {
203
+ return new AuthError('Token de acesso expirado', {
204
+ code: 'TOKEN_EXPIRED',
205
+ status: 401,
206
+ hint: 'O token será renovado automaticamente',
207
+ });
208
+ }
209
+ static unauthorized() {
210
+ return new AuthError('Acesso não autorizado', {
211
+ code: 'UNAUTHORIZED',
212
+ status: 401,
213
+ hint: 'Faça login para continuar',
214
+ });
215
+ }
216
+ static forbidden() {
217
+ return new AuthError('Você não tem permissão para esta ação', {
218
+ code: 'FORBIDDEN',
219
+ status: 403,
220
+ });
221
+ }
222
+ }
223
+ /**
224
+ * Erro de banco de dados.
225
+ */
226
+ export class DatabaseError extends AetherError {
227
+ constructor(message, options) {
228
+ super(message, {
229
+ code: options?.code ?? 'INTERNAL_ERROR',
230
+ retryable: false,
231
+ ...options,
232
+ });
233
+ this.name = 'DatabaseError';
234
+ }
235
+ static isDatabaseError(error) {
236
+ return error instanceof DatabaseError;
237
+ }
238
+ static notFound(collection, id) {
239
+ return new DatabaseError(id
240
+ ? `Documento '${id}' não encontrado em '${collection}'`
241
+ : `Nenhum documento encontrado em '${collection}'`, {
242
+ code: 'DOCUMENT_NOT_FOUND',
243
+ status: 404,
244
+ details: { collection, id },
245
+ });
246
+ }
247
+ static permissionDenied(collection) {
248
+ return new DatabaseError(`Sem permissão para acessar '${collection}'`, {
249
+ code: 'PERMISSION_DENIED',
250
+ status: 403,
251
+ details: { collection },
252
+ });
253
+ }
254
+ static validationFailed(errors) {
255
+ return new DatabaseError('Dados inválidos', {
256
+ code: 'VALIDATION_ERROR',
257
+ status: 400,
258
+ details: { errors },
259
+ hint: 'Verifique os campos e tente novamente',
260
+ });
261
+ }
262
+ static duplicateKey(field, value) {
263
+ return new DatabaseError(`Valor duplicado para '${field}'`, {
264
+ code: 'DUPLICATE_KEY',
265
+ status: 409,
266
+ details: { field, value },
267
+ });
268
+ }
269
+ static quotaExceeded() {
270
+ return new DatabaseError('Limite de armazenamento excedido', {
271
+ code: 'QUOTA_EXCEEDED',
272
+ status: 429,
273
+ hint: 'Faça upgrade do seu plano para mais espaço',
274
+ });
275
+ }
276
+ }
277
+ /**
278
+ * Erro de storage (arquivos).
279
+ */
280
+ export class StorageError extends AetherError {
281
+ constructor(message, options) {
282
+ super(message, {
283
+ code: options?.code ?? 'INTERNAL_ERROR',
284
+ retryable: false,
285
+ ...options,
286
+ });
287
+ this.name = 'StorageError';
288
+ }
289
+ static isStorageError(error) {
290
+ return error instanceof StorageError;
291
+ }
292
+ static fileNotFound(path) {
293
+ return new StorageError(`Arquivo não encontrado: ${path}`, {
294
+ code: 'FILE_NOT_FOUND',
295
+ status: 404,
296
+ details: { path },
297
+ });
298
+ }
299
+ static fileTooLarge(size, maxSize) {
300
+ return new StorageError(`Arquivo muito grande (${formatBytes(size)}). Máximo: ${formatBytes(maxSize)}`, {
301
+ code: 'FILE_TOO_LARGE',
302
+ status: 413,
303
+ details: { size, maxSize },
304
+ hint: 'Comprima o arquivo ou divida em partes menores',
305
+ });
306
+ }
307
+ static invalidFileType(type, allowed) {
308
+ return new StorageError(`Tipo de arquivo não permitido: ${type}`, {
309
+ code: 'INVALID_FILE_TYPE',
310
+ status: 400,
311
+ details: { type, allowed },
312
+ hint: `Tipos permitidos: ${allowed.join(', ')}`,
313
+ });
314
+ }
315
+ static uploadFailed(reason) {
316
+ return new StorageError(reason ?? 'Falha no upload do arquivo', {
317
+ code: 'UPLOAD_FAILED',
318
+ status: 500,
319
+ retryable: true,
320
+ });
321
+ }
322
+ static quotaExceeded() {
323
+ return new StorageError('Limite de storage excedido', {
324
+ code: 'STORAGE_QUOTA_EXCEEDED',
325
+ status: 429,
326
+ hint: 'Exclua arquivos ou faça upgrade do plano',
327
+ });
328
+ }
329
+ }
330
+ /**
331
+ * Erro de rede/conexão.
332
+ */
333
+ export class NetworkError extends AetherError {
334
+ constructor(message, options) {
335
+ super(message, {
336
+ code: options?.code ?? 'NETWORK_ERROR',
337
+ retryable: true,
338
+ ...options,
339
+ });
340
+ this.name = 'NetworkError';
341
+ }
342
+ static isNetworkError(error) {
343
+ return error instanceof NetworkError;
344
+ }
345
+ static timeout() {
346
+ return new NetworkError('Tempo limite da requisição excedido', {
347
+ code: 'TIMEOUT',
348
+ hint: 'Verifique sua conexão e tente novamente',
349
+ });
350
+ }
351
+ static offline() {
352
+ return new NetworkError('Sem conexão com a internet', {
353
+ code: 'NETWORK_ERROR',
354
+ hint: 'Verifique sua conexão de rede',
355
+ });
356
+ }
357
+ static connectionFailed() {
358
+ return new NetworkError('Não foi possível conectar ao servidor', {
359
+ code: 'NETWORK_ERROR',
360
+ hint: 'O servidor pode estar indisponível. Tente novamente em instantes.',
361
+ });
362
+ }
363
+ }
364
+ /**
365
+ * Erro de functions (serverless).
366
+ */
367
+ export class FunctionError extends AetherError {
368
+ constructor(message, options) {
369
+ super(message, {
370
+ code: options?.code ?? 'FUNCTION_ERROR',
371
+ ...options,
372
+ });
373
+ this.name = 'FunctionError';
374
+ }
375
+ static isFunctionError(error) {
376
+ return error instanceof FunctionError;
377
+ }
378
+ static notFound(name) {
379
+ return new FunctionError(`Função '${name}' não encontrada`, {
380
+ code: 'FUNCTION_NOT_FOUND',
381
+ status: 404,
382
+ details: { functionName: name },
383
+ });
384
+ }
385
+ static timeout(name) {
386
+ return new FunctionError(`Tempo limite excedido para '${name}'`, {
387
+ code: 'FUNCTION_TIMEOUT',
388
+ status: 504,
389
+ retryable: true,
390
+ details: { functionName: name },
391
+ });
392
+ }
393
+ static executionFailed(name, reason) {
394
+ return new FunctionError(reason ?? `Erro na execução de '${name}'`, {
395
+ code: 'FUNCTION_ERROR',
396
+ status: 500,
397
+ details: { functionName: name },
398
+ });
399
+ }
400
+ }
401
+ /**
402
+ * Erro de rate limit.
403
+ */
404
+ export class RateLimitError extends AetherError {
405
+ resetAt;
406
+ limit;
407
+ remaining;
408
+ constructor(message, options) {
409
+ super(message, {
410
+ code: 'RATE_LIMIT_EXCEEDED',
411
+ status: 429,
412
+ retryable: true,
413
+ details: {
414
+ rateLimit: {
415
+ limit: options.limit,
416
+ remaining: options.remaining,
417
+ resetAt: typeof options.resetAt === 'string'
418
+ ? options.resetAt
419
+ : options.resetAt.toISOString(),
420
+ },
421
+ },
422
+ hint: options.hint,
423
+ });
424
+ this.name = 'RateLimitError';
425
+ this.resetAt = typeof options.resetAt === 'string'
426
+ ? new Date(options.resetAt)
427
+ : options.resetAt;
428
+ this.limit = options.limit;
429
+ this.remaining = options.remaining;
430
+ }
431
+ static isRateLimitError(error) {
432
+ return error instanceof RateLimitError;
433
+ }
434
+ /**
435
+ * Tempo em ms até o reset.
436
+ */
437
+ getRetryAfter() {
438
+ return Math.max(0, this.resetAt.getTime() - Date.now());
439
+ }
440
+ }
441
+ /**
442
+ * Erro de AI/quota.
443
+ */
444
+ export class AIError extends AetherError {
445
+ constructor(message, options) {
446
+ super(message, {
447
+ code: options?.code ?? 'INTERNAL_ERROR',
448
+ ...options,
449
+ });
450
+ this.name = 'AIError';
451
+ }
452
+ static isAIError(error) {
453
+ return error instanceof AIError;
454
+ }
455
+ static quotaExceeded(quota) {
456
+ return new AIError('Limite de uso de IA excedido', {
457
+ code: 'AI_QUOTA_EXCEEDED',
458
+ status: 429,
459
+ details: {
460
+ quota: {
461
+ ...quota,
462
+ percentUsed: Math.round((quota.used / quota.limit) * 100),
463
+ },
464
+ },
465
+ hint: quota.upgradeUrl
466
+ ? 'Faça upgrade do plano para mais requests'
467
+ : 'Aguarde o reset do limite mensal',
468
+ });
469
+ }
470
+ static rateLimited(resetAt) {
471
+ return new AIError('Muitas requisições de IA. Aguarde um momento.', {
472
+ code: 'AI_RATE_LIMITED',
473
+ status: 429,
474
+ details: { resetAt },
475
+ hint: 'Aguarde alguns segundos e tente novamente',
476
+ });
477
+ }
478
+ }
479
+ // =============================================================================
480
+ // HELPERS
481
+ // =============================================================================
482
+ /**
483
+ * Mapeia status HTTP para código de erro.
484
+ */
485
+ function mapStatusToCode(status, serverCode) {
486
+ // Se o servidor enviou um código, usa ele
487
+ if (serverCode && serverCode in AetherErrorCodes) {
488
+ return serverCode;
489
+ }
490
+ // Mapeia por status HTTP
491
+ switch (status) {
492
+ case 400:
493
+ return 'INVALID_REQUEST';
494
+ case 401:
495
+ return 'UNAUTHORIZED';
496
+ case 403:
497
+ return 'FORBIDDEN';
498
+ case 404:
499
+ return 'DOCUMENT_NOT_FOUND';
500
+ case 409:
501
+ return 'DUPLICATE_KEY';
502
+ case 413:
503
+ return 'FILE_TOO_LARGE';
504
+ case 429:
505
+ return 'RATE_LIMIT_EXCEEDED';
506
+ case 500:
507
+ return 'INTERNAL_ERROR';
508
+ case 502:
509
+ case 503:
510
+ case 504:
511
+ return 'NETWORK_ERROR';
512
+ default:
513
+ return 'UNKNOWN';
514
+ }
515
+ }
516
+ /**
517
+ * Verifica se um status HTTP é retentável.
518
+ */
519
+ function isRetryableStatus(status) {
520
+ return [408, 429, 500, 502, 503, 504].includes(status);
521
+ }
522
+ /**
523
+ * Formata bytes para exibição.
524
+ */
525
+ function formatBytes(bytes) {
526
+ if (bytes < 1024)
527
+ return `${bytes} B`;
528
+ if (bytes < 1024 * 1024)
529
+ return `${(bytes / 1024).toFixed(1)} KB`;
530
+ if (bytes < 1024 * 1024 * 1024)
531
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
532
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
533
+ }
534
+ // =============================================================================
535
+ // COMPATIBILIDADE COM SDK ATUAL
536
+ // =============================================================================
537
+ /**
538
+ * Alias para retrocompatibilidade com código existente.
539
+ * @deprecated Use as classes específicas (AuthError, DatabaseError, etc)
540
+ */
541
+ export { AetherError as default };
542
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { AxiosInstance, AxiosError, InternalAxiosRequestConfig } from 'axios';
2
+ /**
3
+ * Configuração de retry.
4
+ */
5
+ export interface RetryConfig {
6
+ /** Número máximo de retries */
7
+ maxRetries: number;
8
+ /** Delay base em ms */
9
+ baseDelay: number;
10
+ /** Delay máximo em ms */
11
+ maxDelay: number;
12
+ /** Status codes que devem ser retentados */
13
+ retryableStatuses: number[];
14
+ /** Métodos HTTP que podem ser retentados */
15
+ retryableMethods: string[];
16
+ /** Callback chamado a cada retry */
17
+ onRetry?: (attempt: number, error: AxiosError, config: InternalAxiosRequestConfig) => void;
18
+ }
19
+ /**
20
+ * Interface do cliente Aether para obter tokens.
21
+ */
22
+ export interface TokenProvider {
23
+ getToken(): string | null;
24
+ getRefreshToken(): string | null;
25
+ setToken(token: string | null): void;
26
+ setRefreshToken(token: string | null): void;
27
+ clearSession(): void;
28
+ projectId: string;
29
+ apiUrl: string;
30
+ serviceApiKey?: string | null;
31
+ }
32
+ /**
33
+ * Cria uma instância do HTTP client configurada com:
34
+ * - Injeção automática de headers (Auth, Project, API Key)
35
+ * - Refresh automático de token (401)
36
+ * - Retry automático com exponential backoff
37
+ * - Tratamento de erros padronizado
38
+ */
39
+ export declare function createHttpClient(tokenProvider: TokenProvider, retryConfig?: Partial<RetryConfig>): AxiosInstance;
40
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,OAAO,CAAC;AAOnF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC;CAC5F;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5C,YAAY,IAAI,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAuHD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,aAAa,EAC5B,WAAW,GAAE,OAAO,CAAC,WAAW,CAAM,GACrC,aAAa,CAgLf"}