@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,167 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ import type { PlataformaClient } from '../client/index.js';
3
+ import type { StorageAdapter } from '../adapters/storage.js';
4
+ import type { TenantUser, TenantLoginCredentials, TenantRegisterCredentials, TenantLoginResponse, AuthStateChangeCallback } from '../types/index.js';
5
+ /**
6
+ * Credenciais de login estilo Supabase.
7
+ */
8
+ export interface SignInWithPasswordCredentials {
9
+ email: string;
10
+ password: string;
11
+ }
12
+ /**
13
+ * Credenciais de registro estilo Supabase.
14
+ */
15
+ export interface SignUpCredentials {
16
+ email: string;
17
+ password: string;
18
+ data?: {
19
+ name?: string;
20
+ phone?: string;
21
+ metadata?: Record<string, unknown>;
22
+ };
23
+ }
24
+ export type { TenantUser, TenantLoginCredentials, TenantRegisterCredentials, TenantLoginResponse, };
25
+ /**
26
+ * Módulo de autenticação para usuários de apps (tenant).
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * // Login
31
+ * const { user, accessToken } = await aether.tenantAuth.signIn({
32
+ * email: 'user@example.com',
33
+ * password: 'password123'
34
+ * });
35
+ *
36
+ * // Registro
37
+ * const { user } = await aether.tenantAuth.signUp({
38
+ * email: 'user@example.com',
39
+ * password: 'password123',
40
+ * name: 'John Doe'
41
+ * });
42
+ *
43
+ * // Logout
44
+ * await aether.tenantAuth.signOut();
45
+ * ```
46
+ */
47
+ export declare class TenantAuthModule {
48
+ private client;
49
+ private http;
50
+ private storage;
51
+ private authStateListeners;
52
+ private currentUser;
53
+ constructor(client: PlataformaClient, http: AxiosInstance, storage: StorageAdapter);
54
+ /**
55
+ * Faz login com email e senha.
56
+ */
57
+ signIn(credentials: TenantLoginCredentials): Promise<TenantLoginResponse>;
58
+ /**
59
+ * Alias para signIn (compatibilidade com Supabase).
60
+ */
61
+ signInWithPassword(credentials: SignInWithPasswordCredentials): Promise<{
62
+ user: TenantUser | null;
63
+ error: string | null;
64
+ }>;
65
+ /**
66
+ * Registra um novo usuário.
67
+ */
68
+ signUp(credentials: TenantRegisterCredentials): Promise<TenantLoginResponse>;
69
+ signUp(credentials: SignUpCredentials): Promise<{
70
+ user: TenantUser | null;
71
+ error: string | null;
72
+ }>;
73
+ /**
74
+ * Faz logout do usuário atual.
75
+ */
76
+ signOut(): Promise<{
77
+ error: null;
78
+ }>;
79
+ /**
80
+ * Alias para signOut.
81
+ */
82
+ logout(): Promise<void>;
83
+ /**
84
+ * Renova o token de acesso usando refresh token.
85
+ */
86
+ refreshSession(): Promise<{
87
+ accessToken: string;
88
+ refreshToken?: string;
89
+ }>;
90
+ /**
91
+ * Retorna o usuário atual.
92
+ */
93
+ getUser(): TenantUser | null;
94
+ /**
95
+ * Alias para getUser.
96
+ */
97
+ getCurrentUser(): TenantUser | null;
98
+ /**
99
+ * Retorna a sessão atual.
100
+ */
101
+ getSession(): Promise<{
102
+ user: TenantUser;
103
+ access_token: string;
104
+ } | null>;
105
+ /**
106
+ * Verifica se está autenticado.
107
+ */
108
+ isAuthenticated(): boolean;
109
+ /**
110
+ * Busca o perfil do usuário atual do servidor.
111
+ */
112
+ getProfile(): Promise<TenantUser>;
113
+ /**
114
+ * Atualiza o perfil do usuário atual.
115
+ */
116
+ updateProfile(updates: Partial<Pick<TenantUser, 'name' | 'avatarUrl' | 'phone' | 'metadata'>>): Promise<TenantUser>;
117
+ /**
118
+ * Envia email de recuperação de senha.
119
+ */
120
+ forgotPassword(email: string): Promise<{
121
+ message: string;
122
+ }>;
123
+ /**
124
+ * Reseta a senha com token de recuperação.
125
+ */
126
+ resetPassword(token: string, newPassword: string): Promise<{
127
+ message: string;
128
+ }>;
129
+ /**
130
+ * Retorna URL para autenticação com Google.
131
+ */
132
+ getGoogleAuthUrl(redirectTo?: string): string;
133
+ /**
134
+ * Retorna URL para autenticação com GitHub.
135
+ */
136
+ getGitHubAuthUrl(redirectTo?: string): string;
137
+ /**
138
+ * Processa callback de OAuth.
139
+ */
140
+ handleOAuthCallback(code: string, provider: 'google' | 'github'): Promise<TenantLoginResponse>;
141
+ /**
142
+ * Registra um listener para mudanças no estado de autenticação.
143
+ *
144
+ * @returns Função para remover o listener
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * const unsubscribe = aether.tenantAuth.onAuthStateChange((event, session) => {
149
+ * if (event === 'SIGNED_IN') {
150
+ * console.log('Usuário logou:', session?.user);
151
+ * }
152
+ * if (event === 'SIGNED_OUT') {
153
+ * console.log('Usuário deslogou');
154
+ * }
155
+ * });
156
+ *
157
+ * // Para remover:
158
+ * unsubscribe();
159
+ * ```
160
+ */
161
+ onAuthStateChange(callback: AuthStateChangeCallback): () => void;
162
+ /**
163
+ * Notifica todos os listeners de mudança de auth.
164
+ */
165
+ private _notifyAuthChange;
166
+ }
167
+ //# sourceMappingURL=tenant-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-auth.d.ts","sourceRoot":"","sources":["../../src/modules/tenant-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,341 @@
1
+ // =============================================================================
2
+ // @aether/core - Tenant Auth Module
3
+ // =============================================================================
4
+ // Módulo de autenticação para usuários de apps (tenant).
5
+ // Usado por apps client-side para autenticar seus usuários finais.
6
+ // =============================================================================
7
+ // =============================================================================
8
+ // TENANT AUTH MODULE
9
+ // =============================================================================
10
+ /**
11
+ * Módulo de autenticação para usuários de apps (tenant).
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Login
16
+ * const { user, accessToken } = await aether.tenantAuth.signIn({
17
+ * email: 'user@example.com',
18
+ * password: 'password123'
19
+ * });
20
+ *
21
+ * // Registro
22
+ * const { user } = await aether.tenantAuth.signUp({
23
+ * email: 'user@example.com',
24
+ * password: 'password123',
25
+ * name: 'John Doe'
26
+ * });
27
+ *
28
+ * // Logout
29
+ * await aether.tenantAuth.signOut();
30
+ * ```
31
+ */
32
+ export class TenantAuthModule {
33
+ client;
34
+ http;
35
+ storage;
36
+ authStateListeners = new Set();
37
+ currentUser = null;
38
+ constructor(client, http, storage) {
39
+ this.client = client;
40
+ this.http = http;
41
+ this.storage = storage;
42
+ // Carrega usuário do storage
43
+ this.currentUser = client.getUser();
44
+ }
45
+ // ===========================================================================
46
+ // MÉTODOS PRINCIPAIS
47
+ // ===========================================================================
48
+ /**
49
+ * Faz login com email e senha.
50
+ */
51
+ async signIn(credentials) {
52
+ const projectId = this.client.projectId;
53
+ const { data } = await this.http.post(`/projects/${projectId}/tenant-auth/login`, credentials);
54
+ // Salva sessão
55
+ this.client.setToken(data.accessToken);
56
+ this.client.setRefreshToken(data.refreshToken);
57
+ this.client.setUser(data.user);
58
+ this.currentUser = data.user;
59
+ // Notifica listeners
60
+ this._notifyAuthChange('SIGNED_IN', data.user, data.accessToken);
61
+ return data;
62
+ }
63
+ /**
64
+ * Alias para signIn (compatibilidade com Supabase).
65
+ */
66
+ async signInWithPassword(credentials) {
67
+ try {
68
+ const data = await this.signIn(credentials);
69
+ return { user: data.user, error: null };
70
+ }
71
+ catch (err) {
72
+ const error = err;
73
+ return { user: null, error: error.response?.data?.message || error.message || 'Erro ao fazer login' };
74
+ }
75
+ }
76
+ async signUp(credentials) {
77
+ const projectId = this.client.projectId;
78
+ // Normaliza credentials para o formato do backend
79
+ const normalizedCredentials = 'data' in credentials
80
+ ? {
81
+ email: credentials.email,
82
+ password: credentials.password,
83
+ name: credentials.data?.name,
84
+ phone: credentials.data?.phone,
85
+ metadata: credentials.data?.metadata,
86
+ }
87
+ : credentials;
88
+ try {
89
+ const { data } = await this.http.post(`/projects/${projectId}/tenant-auth/register`, normalizedCredentials);
90
+ // Se retornou tokens, faz login automático
91
+ if (data.accessToken) {
92
+ this.client.setToken(data.accessToken);
93
+ this.client.setRefreshToken(data.refreshToken);
94
+ this.client.setUser(data.user);
95
+ this.currentUser = data.user;
96
+ this._notifyAuthChange('SIGNED_IN', data.user, data.accessToken);
97
+ }
98
+ // Retorna no formato apropriado
99
+ if ('data' in credentials) {
100
+ return { user: data.user, error: null };
101
+ }
102
+ return data;
103
+ }
104
+ catch (err) {
105
+ if ('data' in credentials) {
106
+ const error = err;
107
+ return { user: null, error: error.response?.data?.message || error.message || 'Erro ao registrar' };
108
+ }
109
+ throw err;
110
+ }
111
+ }
112
+ /**
113
+ * Faz logout do usuário atual.
114
+ */
115
+ async signOut() {
116
+ const refreshToken = this.client.getRefreshToken();
117
+ const projectId = this.client.projectId;
118
+ // Tenta invalidar no servidor
119
+ if (refreshToken) {
120
+ try {
121
+ await this.http.post(`/projects/${projectId}/tenant-auth/logout`, {
122
+ refreshToken,
123
+ });
124
+ }
125
+ catch {
126
+ // Ignora erro - limpa local de qualquer forma
127
+ }
128
+ }
129
+ // Limpa sessão local
130
+ this.client.clearSession();
131
+ this.currentUser = null;
132
+ // Notifica listeners
133
+ this._notifyAuthChange('SIGNED_OUT', null, null);
134
+ return { error: null };
135
+ }
136
+ /**
137
+ * Alias para signOut.
138
+ */
139
+ async logout() {
140
+ await this.signOut();
141
+ }
142
+ // ===========================================================================
143
+ // REFRESH TOKEN
144
+ // ===========================================================================
145
+ /**
146
+ * Renova o token de acesso usando refresh token.
147
+ */
148
+ async refreshSession() {
149
+ const refreshToken = this.client.getRefreshToken();
150
+ const projectId = this.client.projectId;
151
+ if (!refreshToken) {
152
+ throw new Error('Nenhum refresh token disponível');
153
+ }
154
+ const { data } = await this.http.post(`/projects/${projectId}/tenant-auth/refresh`, { refreshToken });
155
+ // Atualiza tokens
156
+ this.client.setToken(data.accessToken);
157
+ if (data.refreshToken) {
158
+ this.client.setRefreshToken(data.refreshToken);
159
+ }
160
+ // Notifica listeners
161
+ this._notifyAuthChange('TOKEN_REFRESHED', this.currentUser, data.accessToken);
162
+ return data;
163
+ }
164
+ // ===========================================================================
165
+ // SESSÃO E USUÁRIO
166
+ // ===========================================================================
167
+ /**
168
+ * Retorna o usuário atual.
169
+ */
170
+ getUser() {
171
+ return this.currentUser || this.client.getUser();
172
+ }
173
+ /**
174
+ * Alias para getUser.
175
+ */
176
+ getCurrentUser() {
177
+ return this.getUser();
178
+ }
179
+ /**
180
+ * Retorna a sessão atual.
181
+ */
182
+ async getSession() {
183
+ const token = this.client.getToken();
184
+ const user = this.getUser();
185
+ if (!token || !user) {
186
+ return null;
187
+ }
188
+ return {
189
+ user,
190
+ access_token: token,
191
+ };
192
+ }
193
+ /**
194
+ * Verifica se está autenticado.
195
+ */
196
+ isAuthenticated() {
197
+ return this.client.getToken() !== null && this.getUser() !== null;
198
+ }
199
+ // ===========================================================================
200
+ // PERFIL
201
+ // ===========================================================================
202
+ /**
203
+ * Busca o perfil do usuário atual do servidor.
204
+ */
205
+ async getProfile() {
206
+ const projectId = this.client.projectId;
207
+ const { data } = await this.http.get(`/projects/${projectId}/tenant-auth/me`);
208
+ // Atualiza cache local
209
+ this.currentUser = data.user;
210
+ this.client.setUser(data.user);
211
+ return data.user;
212
+ }
213
+ /**
214
+ * Atualiza o perfil do usuário atual.
215
+ */
216
+ async updateProfile(updates) {
217
+ const projectId = this.client.projectId;
218
+ const { data } = await this.http.put(`/projects/${projectId}/tenant-auth/profile`, updates);
219
+ // Atualiza cache local
220
+ this.currentUser = data.user;
221
+ this.client.setUser(data.user);
222
+ // Notifica listeners
223
+ this._notifyAuthChange('USER_UPDATED', data.user, this.client.getToken());
224
+ return data.user;
225
+ }
226
+ // ===========================================================================
227
+ // RECUPERAÇÃO DE SENHA
228
+ // ===========================================================================
229
+ /**
230
+ * Envia email de recuperação de senha.
231
+ */
232
+ async forgotPassword(email) {
233
+ const projectId = this.client.projectId;
234
+ const { data } = await this.http.post(`/projects/${projectId}/tenant-auth/forgot-password`, { email });
235
+ return data;
236
+ }
237
+ /**
238
+ * Reseta a senha com token de recuperação.
239
+ */
240
+ async resetPassword(token, newPassword) {
241
+ const projectId = this.client.projectId;
242
+ const { data } = await this.http.post(`/projects/${projectId}/tenant-auth/reset-password`, { token, newPassword });
243
+ this._notifyAuthChange('PASSWORD_RECOVERY', null, null);
244
+ return data;
245
+ }
246
+ // ===========================================================================
247
+ // OAUTH
248
+ // ===========================================================================
249
+ /**
250
+ * Retorna URL para autenticação com Google.
251
+ */
252
+ getGoogleAuthUrl(redirectTo) {
253
+ const projectId = this.client.projectId;
254
+ const baseUrl = `${this.client.apiUrl}/v1/projects/${projectId}/tenant-auth/google`;
255
+ if (redirectTo) {
256
+ return `${baseUrl}?redirect_to=${encodeURIComponent(redirectTo)}`;
257
+ }
258
+ return baseUrl;
259
+ }
260
+ /**
261
+ * Retorna URL para autenticação com GitHub.
262
+ */
263
+ getGitHubAuthUrl(redirectTo) {
264
+ const projectId = this.client.projectId;
265
+ const baseUrl = `${this.client.apiUrl}/v1/projects/${projectId}/tenant-auth/github`;
266
+ if (redirectTo) {
267
+ return `${baseUrl}?redirect_to=${encodeURIComponent(redirectTo)}`;
268
+ }
269
+ return baseUrl;
270
+ }
271
+ /**
272
+ * Processa callback de OAuth.
273
+ */
274
+ async handleOAuthCallback(code, provider) {
275
+ const projectId = this.client.projectId;
276
+ const { data } = await this.http.post(`/projects/${projectId}/tenant-auth/${provider}/callback`, { code });
277
+ // Salva sessão
278
+ this.client.setToken(data.accessToken);
279
+ this.client.setRefreshToken(data.refreshToken);
280
+ this.client.setUser(data.user);
281
+ this.currentUser = data.user;
282
+ this._notifyAuthChange('SIGNED_IN', data.user, data.accessToken);
283
+ return data;
284
+ }
285
+ // ===========================================================================
286
+ // AUTH STATE LISTENER
287
+ // ===========================================================================
288
+ /**
289
+ * Registra um listener para mudanças no estado de autenticação.
290
+ *
291
+ * @returns Função para remover o listener
292
+ *
293
+ * @example
294
+ * ```typescript
295
+ * const unsubscribe = aether.tenantAuth.onAuthStateChange((event, session) => {
296
+ * if (event === 'SIGNED_IN') {
297
+ * console.log('Usuário logou:', session?.user);
298
+ * }
299
+ * if (event === 'SIGNED_OUT') {
300
+ * console.log('Usuário deslogou');
301
+ * }
302
+ * });
303
+ *
304
+ * // Para remover:
305
+ * unsubscribe();
306
+ * ```
307
+ */
308
+ onAuthStateChange(callback) {
309
+ this.authStateListeners.add(callback);
310
+ // Notifica estado atual imediatamente
311
+ const user = this.getUser();
312
+ const token = this.client.getToken();
313
+ if (user && token) {
314
+ callback('SIGNED_IN', { user, accessToken: token });
315
+ }
316
+ return () => {
317
+ this.authStateListeners.delete(callback);
318
+ };
319
+ }
320
+ /**
321
+ * Notifica todos os listeners de mudança de auth.
322
+ */
323
+ _notifyAuthChange(event, user, accessToken) {
324
+ const session = user && accessToken ? { user, accessToken } : null;
325
+ this.authStateListeners.forEach((callback) => {
326
+ try {
327
+ callback(event, session);
328
+ }
329
+ catch (error) {
330
+ console.error('[Aether] Erro no auth state listener:', error);
331
+ }
332
+ });
333
+ // Emite evento global (para integração com outros sistemas)
334
+ if (typeof window !== 'undefined') {
335
+ window.dispatchEvent(new CustomEvent('aether:auth-state-change', {
336
+ detail: { event, session },
337
+ }));
338
+ }
339
+ }
340
+ }
341
+ //# sourceMappingURL=tenant-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-auth.js","sourceRoot":"","sources":["../../src/modules/tenant-auth.ts"],"names":[],"mappings":"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"}