@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,247 @@
1
+ // =============================================================================
2
+ // @aether/core - HTTP Client
3
+ // =============================================================================
4
+ // Cliente HTTP com interceptors, retry automático e refresh token.
5
+ // Usa axios internamente mas abstrai a implementação.
6
+ // =============================================================================
7
+ import axios from 'axios';
8
+ import { AetherError } from '../errors/index.js';
9
+ // =============================================================================
10
+ // CONFIGURAÇÃO PADRÃO DE RETRY
11
+ // =============================================================================
12
+ const DEFAULT_RETRY_CONFIG = {
13
+ maxRetries: 3,
14
+ baseDelay: 1000,
15
+ maxDelay: 30000,
16
+ retryableStatuses: [408, 429, 500, 502, 503, 504],
17
+ retryableMethods: ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE'],
18
+ onRetry: undefined,
19
+ };
20
+ // =============================================================================
21
+ // FLAGS GLOBAIS (Refresh Token)
22
+ // =============================================================================
23
+ let isRefreshing = false;
24
+ let failedQueue = [];
25
+ const processQueue = (error, token = null) => {
26
+ failedQueue.forEach((prom) => {
27
+ if (error) {
28
+ prom.reject(error);
29
+ }
30
+ else {
31
+ prom.resolve(token);
32
+ }
33
+ });
34
+ failedQueue = [];
35
+ };
36
+ // =============================================================================
37
+ // HELPERS
38
+ // =============================================================================
39
+ /**
40
+ * Calcula delay com exponential backoff + jitter.
41
+ */
42
+ function calculateDelay(retryCount, config) {
43
+ const exponentialDelay = config.baseDelay * Math.pow(2, retryCount);
44
+ const jitter = exponentialDelay * 0.25 * Math.random(); // ±25% jitter
45
+ const delay = exponentialDelay + jitter;
46
+ return Math.min(delay, config.maxDelay);
47
+ }
48
+ /**
49
+ * Extrai Retry-After header (em ms).
50
+ */
51
+ function getRetryAfterMs(error) {
52
+ const retryAfter = error.response?.headers?.['retry-after'];
53
+ if (!retryAfter)
54
+ return null;
55
+ // Se for número, é segundos
56
+ const seconds = parseInt(retryAfter, 10);
57
+ if (!isNaN(seconds)) {
58
+ return seconds * 1000;
59
+ }
60
+ // Se for data, calcula diferença
61
+ const date = new Date(retryAfter);
62
+ if (!isNaN(date.getTime())) {
63
+ return Math.max(0, date.getTime() - Date.now());
64
+ }
65
+ return null;
66
+ }
67
+ /**
68
+ * Verifica se o erro é retentável.
69
+ */
70
+ function isRetryable(error, config) {
71
+ // Erros de rede são retentáveis
72
+ if (!error.response) {
73
+ return true;
74
+ }
75
+ // Verifica status
76
+ return config.retryableStatuses.includes(error.response.status);
77
+ }
78
+ /**
79
+ * Verifica se o método HTTP é retentável.
80
+ */
81
+ function isMethodRetryable(method, config) {
82
+ if (!method)
83
+ return false;
84
+ return config.retryableMethods.includes(method.toUpperCase());
85
+ }
86
+ /**
87
+ * Aguarda um tempo.
88
+ */
89
+ function sleep(ms) {
90
+ return new Promise((resolve) => setTimeout(resolve, ms));
91
+ }
92
+ /**
93
+ * Converte erro do Axios para AetherError.
94
+ */
95
+ function handleAxiosError(error) {
96
+ throw AetherError.from(error);
97
+ }
98
+ // =============================================================================
99
+ // CRIAR HTTP CLIENT
100
+ // =============================================================================
101
+ /**
102
+ * Cria uma instância do HTTP client configurada com:
103
+ * - Injeção automática de headers (Auth, Project, API Key)
104
+ * - Refresh automático de token (401)
105
+ * - Retry automático com exponential backoff
106
+ * - Tratamento de erros padronizado
107
+ */
108
+ export function createHttpClient(tokenProvider, retryConfig = {}) {
109
+ const config = { ...DEFAULT_RETRY_CONFIG, ...retryConfig };
110
+ const http = axios.create({
111
+ baseURL: `${tokenProvider.apiUrl}/v1`,
112
+ timeout: 30000, // 30 segundos
113
+ headers: {
114
+ 'Content-Type': 'application/json',
115
+ },
116
+ });
117
+ // ===========================================================================
118
+ // INTERCEPTOR DE REQUEST
119
+ // Injeta token, projectId e API Key em todas as requisições
120
+ // ===========================================================================
121
+ http.interceptors.request.use((reqConfig) => {
122
+ const token = tokenProvider.getToken();
123
+ if (token) {
124
+ reqConfig.headers.Authorization = `Bearer ${token}`;
125
+ }
126
+ if (tokenProvider.projectId) {
127
+ reqConfig.headers['X-Project-ID'] = tokenProvider.projectId;
128
+ }
129
+ // Envia API Key para autenticação de operações de banco de dados
130
+ if (tokenProvider.serviceApiKey) {
131
+ reqConfig.headers['X-API-Key'] = tokenProvider.serviceApiKey;
132
+ }
133
+ // Inicializa contador de retry
134
+ if (reqConfig._retryCount === undefined) {
135
+ reqConfig._retryCount = 0;
136
+ }
137
+ return reqConfig;
138
+ });
139
+ // ===========================================================================
140
+ // INTERCEPTOR DE RESPONSE
141
+ // 1. Retry automático para erros de rede/servidor
142
+ // 2. Refresh automático de token (401)
143
+ // ===========================================================================
144
+ http.interceptors.response.use((response) => response, async (error) => {
145
+ const originalRequest = error.config;
146
+ if (!originalRequest) {
147
+ return handleAxiosError(error);
148
+ }
149
+ // -----------------------------------------------------------------
150
+ // PARTE 1: RETRY AUTOMÁTICO (erros de rede e servidor)
151
+ // -----------------------------------------------------------------
152
+ const retryCount = originalRequest._retryCount || 0;
153
+ const canRetry = retryCount < config.maxRetries;
154
+ const isRetryableError = isRetryable(error, config);
155
+ const isRetryableMethod = isMethodRetryable(originalRequest.method, config);
156
+ // Não faz retry para 401 (tratado pelo refresh token)
157
+ const is401 = error.response?.status === 401;
158
+ if (canRetry && isRetryableError && isRetryableMethod && !is401) {
159
+ originalRequest._retryCount = retryCount + 1;
160
+ // Calcula delay (respeita Retry-After se presente)
161
+ const delay = getRetryAfterMs(error) || calculateDelay(retryCount, config);
162
+ // Callback de retry (para logging/métricas)
163
+ if (config.onRetry) {
164
+ config.onRetry(originalRequest._retryCount, error, originalRequest);
165
+ }
166
+ // Emite evento para monitoramento (apenas em browser)
167
+ if (typeof window !== 'undefined') {
168
+ window.dispatchEvent(new CustomEvent('aether:retry', {
169
+ detail: {
170
+ attempt: originalRequest._retryCount,
171
+ maxRetries: config.maxRetries,
172
+ delay,
173
+ url: originalRequest.url,
174
+ method: originalRequest.method,
175
+ status: error.response?.status,
176
+ error: error.message,
177
+ }
178
+ }));
179
+ }
180
+ // Log em desenvolvimento
181
+ if (process.env.NODE_ENV === 'development') {
182
+ console.log(`[Aether SDK] Retry ${originalRequest._retryCount}/${config.maxRetries}`, `em ${delay}ms para ${originalRequest.method} ${originalRequest.url}`, `(${error.response?.status || error.message})`);
183
+ }
184
+ // Aguarda e refaz a requisição
185
+ await sleep(delay);
186
+ return http(originalRequest);
187
+ }
188
+ // -----------------------------------------------------------------
189
+ // PARTE 2: REFRESH TOKEN (erro 401)
190
+ // -----------------------------------------------------------------
191
+ const isUnauthorized = error.response?.status === 401;
192
+ const isRetry = originalRequest._retry;
193
+ const isAuthRoute = originalRequest.url?.includes('/auth/');
194
+ // Não tenta refresh se:
195
+ // - Não é 401
196
+ // - Já é um retry de refresh
197
+ // - É uma rota de auth (login, register, refresh)
198
+ if (!isUnauthorized || isRetry || isAuthRoute) {
199
+ return handleAxiosError(error);
200
+ }
201
+ const refreshToken = tokenProvider.getRefreshToken();
202
+ if (!refreshToken) {
203
+ tokenProvider.clearSession();
204
+ return handleAxiosError(error);
205
+ }
206
+ // Se já está fazendo refresh, aguarda na fila
207
+ if (isRefreshing) {
208
+ return new Promise((resolve, reject) => {
209
+ failedQueue.push({ resolve, reject });
210
+ })
211
+ .then((token) => {
212
+ originalRequest.headers.Authorization = `Bearer ${token}`;
213
+ return http(originalRequest);
214
+ })
215
+ .catch((err) => handleAxiosError(err));
216
+ }
217
+ // Marca como retry e inicia refresh
218
+ originalRequest._retry = true;
219
+ isRefreshing = true;
220
+ try {
221
+ const { data } = await axios.post(`${tokenProvider.apiUrl}/v1/auth/refresh`, { refreshToken }, { headers: { 'Content-Type': 'application/json' } });
222
+ const newAccessToken = data.accessToken;
223
+ const newRefreshToken = data.refreshToken;
224
+ tokenProvider.setToken(newAccessToken);
225
+ if (newRefreshToken) {
226
+ tokenProvider.setRefreshToken(newRefreshToken);
227
+ }
228
+ processQueue(null, newAccessToken);
229
+ originalRequest.headers.Authorization = `Bearer ${newAccessToken}`;
230
+ return http(originalRequest);
231
+ }
232
+ catch (refreshError) {
233
+ processQueue(refreshError, null);
234
+ tokenProvider.clearSession();
235
+ // Emite evento de sessão expirada
236
+ if (typeof window !== 'undefined') {
237
+ window.dispatchEvent(new CustomEvent('aether:session-expired'));
238
+ }
239
+ return handleAxiosError(refreshError);
240
+ }
241
+ finally {
242
+ isRefreshing = false;
243
+ }
244
+ });
245
+ return http;
246
+ }
247
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export { PlataformaClient, createClient, initializeClient, getClient, destroyClient, } from './client/index.js';
2
+ export { DatabaseModule, CollectionReference, QueryBuilder } from './modules/database.js';
3
+ export { StorageModule } from './modules/storage.js';
4
+ export { FunctionsModule } from './modules/functions.js';
5
+ export { PushModule } from './modules/push.js';
6
+ export { TenantAuthModule } from './modules/tenant-auth.js';
7
+ export { AIModule } from './modules/ai.js';
8
+ export { AetherError, AetherErrorCodes, AuthError, DatabaseError, StorageError, NetworkError, FunctionError, RateLimitError, AIError, } from './errors/index.js';
9
+ export type { AetherErrorCode, AetherErrorDetails } from './errors/index.js';
10
+ export { BrowserStorageAdapter, MemoryStorageAdapter, CookieStorageAdapter, NoopStorageAdapter, AsyncStorageWrapper, createDefaultStorageAdapter, isBrowser, isLocalStorageAvailable, } from './adapters/storage.js';
11
+ export type { StorageAdapter, CookieOptions } from './adapters/storage.js';
12
+ export { createHttpClient } from './http/client.js';
13
+ export type { RetryConfig, TokenProvider } from './http/client.js';
14
+ export type { PartialBy, RequiredBy, NonNullableFields, StringKeyOf, User, LoginResponse, Session, TenantUser, TenantLoginCredentials, TenantRegisterCredentials, TenantLoginResponse, OAuthProvider, AuthState, AuthChangeEvent, AuthStateChangeCallback, BaseDocument, Document, CreateData, UpdateData, FilterOperator, FilterCondition, SortDirection, SortOption, PaginationOptions, QueryOptions, PaginatedResult, ListOptions, BatchOperation, RealtimeEvent, RealtimePayload, RealtimeCallback, Unsubscribe, RealtimeConnectionState, FileObject, UploadOptions, UploadProgress, ListFilesOptions, InvokeFunctionOptions, FunctionResult, PushPlatform, PushEnvironment, PushDevice, RegisterDeviceParams, SendPushParams, PushNotificationData, PushStatus, PushStats, AIMessageRole, AIMessage, AISource, AIAskOptions, AIChatOptions, AIChatMetadata, AIResponse, AIUsageInfo, AIPersonaConfig, ClientConfig, SuccessResult, ErrorResult, Result, } from './types/index.js';
15
+ export { success, failure } from './types/index.js';
16
+ export type { SendPushResponse, PushLogEntry, ListPushLogsOptions, PushTriggerEvent, PushTriggerCondition, LookupFieldConfig, PushTrigger, CreatePushTriggerParams, } from './modules/push.js';
17
+ export type { ChatOptions, AskResponse, Conversation, Message, FeedbackType, SemanticSearchOptions, SemanticSearchResult, GenerateOptions, } from './modules/ai.js';
18
+ export type { SignInWithPasswordCredentials, SignUpCredentials, } from './modules/tenant-auth.js';
19
+ export declare const VERSION = "3.0.0";
20
+ export { PlataformaClient as default } from './client/index.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAM3C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,OAAO,GACR,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM7E,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,SAAS,EACT,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAM3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMnE,YAAY,EAEV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,WAAW,EAGX,IAAI,EACJ,aAAa,EACb,OAAO,EACP,UAAU,EACV,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,eAAe,EACf,uBAAuB,EAGvB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,cAAc,EAGd,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EAGvB,UAAU,EACV,aAAa,EACb,cAAc,EACd,gBAAgB,EAGhB,qBAAqB,EACrB,cAAc,EAGd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,SAAS,EAGT,aAAa,EACb,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EAGf,YAAY,EAGZ,aAAa,EACb,WAAW,EACX,MAAM,GACP,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMpD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAM3B,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAMzB,YAAY,EACV,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAMlC,eAAO,MAAM,OAAO,UAAU,CAAC;AAM/B,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ // =============================================================================
2
+ // @aether/core
3
+ // =============================================================================
4
+ // SDK Core do Aether - Cliente principal e todos os módulos.
5
+ //
6
+ // Este pacote é a base para todos os outros pacotes do Aether SDK.
7
+ // Pode ser usado diretamente ou através de pacotes específicos como
8
+ // @aether/react, @aether/react-native e @aether/nextjs.
9
+ // =============================================================================
10
+ // =============================================================================
11
+ // CLIENT
12
+ // =============================================================================
13
+ export { PlataformaClient, createClient, initializeClient, getClient, destroyClient, } from './client/index.js';
14
+ // =============================================================================
15
+ // MODULES
16
+ // =============================================================================
17
+ export { DatabaseModule, CollectionReference, QueryBuilder } from './modules/database.js';
18
+ export { StorageModule } from './modules/storage.js';
19
+ export { FunctionsModule } from './modules/functions.js';
20
+ export { PushModule } from './modules/push.js';
21
+ export { TenantAuthModule } from './modules/tenant-auth.js';
22
+ export { AIModule } from './modules/ai.js';
23
+ // =============================================================================
24
+ // ERRORS
25
+ // =============================================================================
26
+ export { AetherError, AetherErrorCodes, AuthError, DatabaseError, StorageError, NetworkError, FunctionError, RateLimitError, AIError, } from './errors/index.js';
27
+ // =============================================================================
28
+ // STORAGE ADAPTERS
29
+ // =============================================================================
30
+ export { BrowserStorageAdapter, MemoryStorageAdapter, CookieStorageAdapter, NoopStorageAdapter, AsyncStorageWrapper, createDefaultStorageAdapter, isBrowser, isLocalStorageAvailable, } from './adapters/storage.js';
31
+ // =============================================================================
32
+ // HTTP CLIENT
33
+ // =============================================================================
34
+ export { createHttpClient } from './http/client.js';
35
+ export { success, failure } from './types/index.js';
36
+ // =============================================================================
37
+ // VERSION
38
+ // =============================================================================
39
+ export const VERSION = '3.0.0';
40
+ // =============================================================================
41
+ // DEFAULT EXPORT
42
+ // =============================================================================
43
+ export { PlataformaClient as default } from './client/index.js';
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAChF,6DAA6D;AAC7D,GAAG;AACH,mEAAmE;AACnE,oEAAoE;AACpE,wDAAwD;AACxD,gFAAgF;AAEhF,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,OAAO,GACR,MAAM,mBAAmB,CAAC;AAI3B,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,SAAS,EACT,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAI/B,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAyFpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAyCpD,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,165 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ import type { PlataformaClient } from '../client/index.js';
3
+ import type { AISource, AIChatMetadata, AIUsageInfo, AIPersonaConfig } from '../types/index.js';
4
+ export interface ChatOptions {
5
+ conversationId?: string;
6
+ context?: string;
7
+ onChunk?: (chunk: string) => void;
8
+ onComplete?: (fullResponse: string, metadata: AIChatMetadata) => void;
9
+ onError?: (error: Error) => void;
10
+ timeout?: number;
11
+ }
12
+ export interface AskResponse {
13
+ text: string;
14
+ conversationId: string;
15
+ sources?: AISource[];
16
+ }
17
+ export interface Conversation {
18
+ id: string;
19
+ title: string;
20
+ context: string;
21
+ createdAt: string;
22
+ updatedAt: string;
23
+ messageCount?: number;
24
+ }
25
+ export interface Message {
26
+ id: string;
27
+ conversationId: string;
28
+ role: 'user' | 'assistant';
29
+ content: string;
30
+ metadata?: Record<string, unknown>;
31
+ createdAt: string;
32
+ }
33
+ export type FeedbackType = 'thumbs_up' | 'thumbs_down';
34
+ export interface SemanticSearchOptions {
35
+ limit?: number;
36
+ minScore?: number;
37
+ collection?: string;
38
+ }
39
+ export interface SemanticSearchResult {
40
+ id: string;
41
+ content: string;
42
+ collection: string;
43
+ similarity: number;
44
+ metadata?: Record<string, unknown>;
45
+ }
46
+ export interface GenerateOptions {
47
+ tone?: 'formal' | 'casual' | 'technical' | 'friendly';
48
+ length?: 'short' | 'medium' | 'long';
49
+ language?: string;
50
+ context?: string;
51
+ }
52
+ export type { AIUsageInfo as UsageInfo, AIPersonaConfig as PersonaConfig };
53
+ /**
54
+ * API de conversas.
55
+ */
56
+ declare class ConversationsAPI {
57
+ private client;
58
+ private http;
59
+ constructor(client: PlataformaClient, http: AxiosInstance);
60
+ list(): Promise<Conversation[]>;
61
+ get(conversationId: string): Promise<Conversation>;
62
+ getMessages(conversationId: string): Promise<Message[]>;
63
+ rename(conversationId: string, title: string): Promise<Conversation>;
64
+ delete(conversationId: string): Promise<void>;
65
+ }
66
+ /**
67
+ * API de memória de usuário.
68
+ */
69
+ declare class MemoryAPI {
70
+ private client;
71
+ private http;
72
+ constructor(client: PlataformaClient, http: AxiosInstance);
73
+ get(userId: string, key: string): Promise<unknown>;
74
+ set(userId: string, key: string, value: unknown): Promise<void>;
75
+ delete(userId: string, key: string): Promise<void>;
76
+ listKeys(userId: string): Promise<string[]>;
77
+ }
78
+ /**
79
+ * API administrativa de IA.
80
+ */
81
+ declare class AIAdminAPI {
82
+ private client;
83
+ private http;
84
+ constructor(client: PlataformaClient, http: AxiosInstance);
85
+ stats(): Promise<{
86
+ totalConversations: number;
87
+ totalMessages: number;
88
+ tokensUsed: number;
89
+ }>;
90
+ reindex(): Promise<{
91
+ indexed: number;
92
+ }>;
93
+ setIndexedCollections(collections: string[]): Promise<void>;
94
+ clear(): Promise<void>;
95
+ setPersona(config: AIPersonaConfig): Promise<void>;
96
+ getPersona(): Promise<AIPersonaConfig | null>;
97
+ }
98
+ /**
99
+ * Módulo de IA do Aether.
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * // Pergunta simples
104
+ * const { text } = await aether.ai.ask("Quais produtos estão em promoção?");
105
+ *
106
+ * // Chat com streaming
107
+ * await aether.ai.chat("Explique o sistema", {
108
+ * onChunk: (chunk) => console.log(chunk),
109
+ * onComplete: (full, meta) => console.log("Conversa:", meta.conversationId)
110
+ * });
111
+ * ```
112
+ */
113
+ export declare class AIModule {
114
+ private client;
115
+ private http;
116
+ /** API de conversas */
117
+ conversations: ConversationsAPI;
118
+ /** API de memória */
119
+ memory: MemoryAPI;
120
+ /** API administrativa */
121
+ admin: AIAdminAPI;
122
+ constructor(client: PlataformaClient, http: AxiosInstance);
123
+ /**
124
+ * Faz uma pergunta simples e aguarda resposta completa.
125
+ */
126
+ ask(message: string, conversationId?: string): Promise<AskResponse>;
127
+ /**
128
+ * Chat com streaming de resposta.
129
+ */
130
+ chat(message: string, options?: ChatOptions): Promise<void>;
131
+ /**
132
+ * Busca semântica usando embeddings.
133
+ */
134
+ search(query: string, options?: SemanticSearchOptions): Promise<SemanticSearchResult[]>;
135
+ /**
136
+ * Gera texto baseado em prompt e dados.
137
+ */
138
+ generate(prompt: string, data?: Record<string, unknown>, options?: GenerateOptions): Promise<string>;
139
+ /**
140
+ * Analisa dados de uma collection.
141
+ */
142
+ analyze(collection: string, options: {
143
+ question: string;
144
+ period?: string;
145
+ }): Promise<{
146
+ insights: string;
147
+ data: unknown;
148
+ }>;
149
+ /**
150
+ * Converte linguagem natural em query estruturada.
151
+ */
152
+ parseQuery(text: string): Promise<{
153
+ filter: Record<string, unknown>;
154
+ sort?: Record<string, string>;
155
+ }>;
156
+ /**
157
+ * Envia feedback sobre uma resposta.
158
+ */
159
+ feedback(messageId: string, type: FeedbackType, comment?: string): Promise<void>;
160
+ /**
161
+ * Retorna informações de uso/quota.
162
+ */
163
+ getUsage(): Promise<AIUsageInfo>;
164
+ }
165
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/modules/ai.ts"],"names":[],"mappings":"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"}