@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,174 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ import type { PlataformaClient } from '../client/index.js';
3
+ import type { PushPlatform, PushEnvironment, PushDevice, RegisterDeviceParams, PushStats } from '../types/index.js';
4
+ export interface SendPushResponse {
5
+ sent: number;
6
+ total: number;
7
+ message: string;
8
+ }
9
+ export type PushStatus = 'sent' | 'failed';
10
+ export interface PushLogEntry {
11
+ id: string;
12
+ projectId: string;
13
+ userId?: string | null;
14
+ deviceId?: string | null;
15
+ title: string;
16
+ body: string;
17
+ data: Record<string, string>;
18
+ status: PushStatus;
19
+ errorMessage?: string | null;
20
+ createdAt: string;
21
+ }
22
+ export interface ListPushLogsOptions {
23
+ limit?: number;
24
+ offset?: number;
25
+ status?: PushStatus;
26
+ }
27
+ export type PushTriggerEvent = 'create' | 'update' | 'delete';
28
+ export interface PushTriggerCondition {
29
+ equals?: unknown;
30
+ notEquals?: unknown;
31
+ in?: unknown[];
32
+ notIn?: unknown[];
33
+ exists?: boolean;
34
+ gt?: number;
35
+ gte?: number;
36
+ lt?: number;
37
+ lte?: number;
38
+ }
39
+ export interface LookupFieldConfig {
40
+ collection: string;
41
+ foreignKey: string;
42
+ fields: string[];
43
+ }
44
+ export interface PushTrigger {
45
+ id: string;
46
+ projectId: string;
47
+ name: string;
48
+ description: string | null;
49
+ collectionName: string;
50
+ event: PushTriggerEvent;
51
+ conditions: Record<string, PushTriggerCondition>;
52
+ lookupFields: Record<string, LookupFieldConfig>;
53
+ targetUserField: string;
54
+ titleTemplate: string;
55
+ bodyTemplate: string;
56
+ dataTemplate: Record<string, unknown>;
57
+ enabled: boolean;
58
+ priority: string;
59
+ timesTriggered: number;
60
+ lastTriggeredAt: string | null;
61
+ createdAt: string;
62
+ updatedAt: string;
63
+ }
64
+ export interface CreatePushTriggerParams {
65
+ name: string;
66
+ description?: string;
67
+ collectionName: string;
68
+ event: PushTriggerEvent;
69
+ conditions?: Record<string, PushTriggerCondition>;
70
+ lookupFields?: Record<string, LookupFieldConfig>;
71
+ targetUserField: string;
72
+ titleTemplate: string;
73
+ bodyTemplate: string;
74
+ dataTemplate?: Record<string, unknown>;
75
+ enabled?: boolean;
76
+ priority?: string;
77
+ }
78
+ export type { PushPlatform, PushEnvironment, PushDevice, RegisterDeviceParams, PushStats };
79
+ /**
80
+ * Módulo de push notifications do Aether.
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * // Registrar dispositivo
85
+ * await aether.push.registerDevice({
86
+ * token: 'fcm-token',
87
+ * platform: 'android',
88
+ * environment: 'prod'
89
+ * });
90
+ *
91
+ * // Enviar para usuário
92
+ * await aether.push.sendToUser({
93
+ * userId: 'user-id',
94
+ * title: 'Olá!',
95
+ * body: 'Nova mensagem'
96
+ * });
97
+ * ```
98
+ */
99
+ export declare class PushModule {
100
+ private client;
101
+ private http;
102
+ constructor(client: PlataformaClient, http: AxiosInstance);
103
+ /**
104
+ * Obtém a chave pública VAPID para Web Push.
105
+ */
106
+ getVapidKey(): Promise<{
107
+ publicKey: string;
108
+ }>;
109
+ /**
110
+ * Registra um dispositivo para receber push notifications.
111
+ */
112
+ registerDevice(params: RegisterDeviceParams): Promise<PushDevice>;
113
+ /**
114
+ * Remove registro de dispositivo.
115
+ */
116
+ unregisterDevice(deviceId: string): Promise<void>;
117
+ /**
118
+ * Lista dispositivos do usuário atual.
119
+ */
120
+ listDevices(): Promise<PushDevice[]>;
121
+ /**
122
+ * Envia notificação para um usuário específico.
123
+ */
124
+ sendToUser(params: {
125
+ userId: string;
126
+ title: string;
127
+ body: string;
128
+ data?: Record<string, string>;
129
+ environment?: PushEnvironment;
130
+ }): Promise<SendPushResponse>;
131
+ /**
132
+ * Envia notificação para múltiplos usuários.
133
+ */
134
+ sendToMany(params: {
135
+ userIds: string[];
136
+ title: string;
137
+ body: string;
138
+ data?: Record<string, string>;
139
+ environment?: PushEnvironment;
140
+ }): Promise<SendPushResponse>;
141
+ /**
142
+ * Lista logs de push notifications.
143
+ */
144
+ listLogs(options?: ListPushLogsOptions): Promise<PushLogEntry[]>;
145
+ /**
146
+ * Obtém estatísticas de push.
147
+ */
148
+ getStats(): Promise<PushStats>;
149
+ /**
150
+ * Lista todos os triggers configurados.
151
+ */
152
+ listTriggers(): Promise<PushTrigger[]>;
153
+ /**
154
+ * Obtém um trigger específico.
155
+ */
156
+ getTrigger(triggerId: string): Promise<PushTrigger>;
157
+ /**
158
+ * Cria um novo trigger.
159
+ */
160
+ createTrigger(params: CreatePushTriggerParams): Promise<PushTrigger>;
161
+ /**
162
+ * Atualiza um trigger.
163
+ */
164
+ updateTrigger(triggerId: string, params: Partial<CreatePushTriggerParams>): Promise<PushTrigger>;
165
+ /**
166
+ * Remove um trigger.
167
+ */
168
+ deleteTrigger(triggerId: string): Promise<void>;
169
+ /**
170
+ * Ativa ou desativa um trigger.
171
+ */
172
+ toggleTrigger(triggerId: string, enabled: boolean): Promise<PushTrigger>;
173
+ }
174
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/modules/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ // =============================================================================
2
+ // @aether/core - Push Module
3
+ // =============================================================================
4
+ // Módulo de push notifications (FCM e Web Push).
5
+ // =============================================================================
6
+ // =============================================================================
7
+ // PUSH MODULE
8
+ // =============================================================================
9
+ /**
10
+ * Módulo de push notifications do Aether.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Registrar dispositivo
15
+ * await aether.push.registerDevice({
16
+ * token: 'fcm-token',
17
+ * platform: 'android',
18
+ * environment: 'prod'
19
+ * });
20
+ *
21
+ * // Enviar para usuário
22
+ * await aether.push.sendToUser({
23
+ * userId: 'user-id',
24
+ * title: 'Olá!',
25
+ * body: 'Nova mensagem'
26
+ * });
27
+ * ```
28
+ */
29
+ export class PushModule {
30
+ client;
31
+ http;
32
+ constructor(client, http) {
33
+ this.client = client;
34
+ this.http = http;
35
+ }
36
+ // ===========================================================================
37
+ // VAPID KEY (Web Push)
38
+ // ===========================================================================
39
+ /**
40
+ * Obtém a chave pública VAPID para Web Push.
41
+ */
42
+ async getVapidKey() {
43
+ const projectId = this.client.projectId;
44
+ const { data } = await this.http.get(`/projects/${projectId}/push/vapid-key`);
45
+ return data;
46
+ }
47
+ // ===========================================================================
48
+ // REGISTRO DE DISPOSITIVO
49
+ // ===========================================================================
50
+ /**
51
+ * Registra um dispositivo para receber push notifications.
52
+ */
53
+ async registerDevice(params) {
54
+ const projectId = this.client.projectId;
55
+ const { data } = await this.http.post(`/projects/${projectId}/push/devices`, {
56
+ ...params,
57
+ environment: params.environment ?? 'prod',
58
+ });
59
+ return data.data;
60
+ }
61
+ /**
62
+ * Remove registro de dispositivo.
63
+ */
64
+ async unregisterDevice(deviceId) {
65
+ const projectId = this.client.projectId;
66
+ await this.http.delete(`/projects/${projectId}/push/devices/${deviceId}`);
67
+ }
68
+ /**
69
+ * Lista dispositivos do usuário atual.
70
+ */
71
+ async listDevices() {
72
+ const projectId = this.client.projectId;
73
+ const { data } = await this.http.get(`/projects/${projectId}/push/devices`);
74
+ return data.data;
75
+ }
76
+ // ===========================================================================
77
+ // ENVIO DE NOTIFICAÇÕES
78
+ // ===========================================================================
79
+ /**
80
+ * Envia notificação para um usuário específico.
81
+ */
82
+ async sendToUser(params) {
83
+ const projectId = this.client.projectId;
84
+ const { data } = await this.http.post(`/projects/${projectId}/push/send`, {
85
+ userId: params.userId,
86
+ title: params.title,
87
+ body: params.body,
88
+ data: params.data ?? {},
89
+ environment: params.environment ?? 'prod',
90
+ });
91
+ return data;
92
+ }
93
+ /**
94
+ * Envia notificação para múltiplos usuários.
95
+ */
96
+ async sendToMany(params) {
97
+ const projectId = this.client.projectId;
98
+ const { data } = await this.http.post(`/projects/${projectId}/push/send-batch`, {
99
+ userIds: params.userIds,
100
+ title: params.title,
101
+ body: params.body,
102
+ data: params.data ?? {},
103
+ environment: params.environment ?? 'prod',
104
+ });
105
+ return data;
106
+ }
107
+ // ===========================================================================
108
+ // LOGS E ESTATÍSTICAS
109
+ // ===========================================================================
110
+ /**
111
+ * Lista logs de push notifications.
112
+ */
113
+ async listLogs(options = {}) {
114
+ const projectId = this.client.projectId;
115
+ const { data } = await this.http.get(`/projects/${projectId}/push/logs`, {
116
+ params: {
117
+ limit: options.limit,
118
+ offset: options.offset,
119
+ status: options.status,
120
+ },
121
+ });
122
+ return data.data;
123
+ }
124
+ /**
125
+ * Obtém estatísticas de push.
126
+ */
127
+ async getStats() {
128
+ const projectId = this.client.projectId;
129
+ const { data } = await this.http.get(`/projects/${projectId}/push/stats`);
130
+ return data;
131
+ }
132
+ // ===========================================================================
133
+ // TRIGGERS
134
+ // ===========================================================================
135
+ /**
136
+ * Lista todos os triggers configurados.
137
+ */
138
+ async listTriggers() {
139
+ const projectId = this.client.projectId;
140
+ const { data } = await this.http.get(`/projects/${projectId}/push/triggers`);
141
+ return data.data;
142
+ }
143
+ /**
144
+ * Obtém um trigger específico.
145
+ */
146
+ async getTrigger(triggerId) {
147
+ const projectId = this.client.projectId;
148
+ const { data } = await this.http.get(`/projects/${projectId}/push/triggers/${triggerId}`);
149
+ return data.data;
150
+ }
151
+ /**
152
+ * Cria um novo trigger.
153
+ */
154
+ async createTrigger(params) {
155
+ const projectId = this.client.projectId;
156
+ const { data } = await this.http.post(`/projects/${projectId}/push/triggers`, params);
157
+ return data.data;
158
+ }
159
+ /**
160
+ * Atualiza um trigger.
161
+ */
162
+ async updateTrigger(triggerId, params) {
163
+ const projectId = this.client.projectId;
164
+ const { data } = await this.http.put(`/projects/${projectId}/push/triggers/${triggerId}`, params);
165
+ return data.data;
166
+ }
167
+ /**
168
+ * Remove um trigger.
169
+ */
170
+ async deleteTrigger(triggerId) {
171
+ const projectId = this.client.projectId;
172
+ await this.http.delete(`/projects/${projectId}/push/triggers/${triggerId}`);
173
+ }
174
+ /**
175
+ * Ativa ou desativa um trigger.
176
+ */
177
+ async toggleTrigger(triggerId, enabled) {
178
+ return this.updateTrigger(triggerId, { enabled });
179
+ }
180
+ }
181
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/modules/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ import type { PlataformaClient } from '../client/index.js';
3
+ import type { FileObject, UploadProgress, ListFilesOptions } from '../types/index.js';
4
+ /**
5
+ * Módulo de storage do Aether.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Upload
10
+ * const { data } = await aether.storage.upload(file, 'avatar.png', 'image/png');
11
+ * console.log(data.downloadUrl);
12
+ *
13
+ * // Listar
14
+ * const files = await aether.storage.list('folder');
15
+ *
16
+ * // Deletar
17
+ * await aether.storage.delete('file-id');
18
+ * ```
19
+ */
20
+ export declare class StorageModule {
21
+ private client;
22
+ private http;
23
+ constructor(client: PlataformaClient, http: AxiosInstance);
24
+ /**
25
+ * Faz upload de um arquivo.
26
+ *
27
+ * @param file Arquivo a ser enviado (File, Blob ou Buffer)
28
+ * @param fileName Nome do arquivo (com extensão)
29
+ * @param contentType MIME type do arquivo (ex: 'image/png')
30
+ * @param folder Pasta de destino (opcional)
31
+ * @param onProgress Callback de progresso (opcional)
32
+ */
33
+ upload(file: File | Blob | Buffer, fileName: string, contentType?: string, folder?: string, onProgress?: (progress: UploadProgress) => void): Promise<{
34
+ data: FileObject;
35
+ error: null;
36
+ } | {
37
+ data: null;
38
+ error: string;
39
+ }>;
40
+ /**
41
+ * Lista arquivos de uma pasta.
42
+ */
43
+ list(folder?: string, options?: ListFilesOptions): Promise<FileObject[]>;
44
+ /**
45
+ * Busca um arquivo por ID.
46
+ */
47
+ get(fileId: string): Promise<FileObject>;
48
+ /**
49
+ * Deleta um arquivo.
50
+ */
51
+ delete(fileId: string): Promise<boolean>;
52
+ /**
53
+ * Gera URL assinada temporária para download.
54
+ */
55
+ getSignedUrl(fileId: string, expiresIn?: number): Promise<string>;
56
+ /**
57
+ * Retorna URL pública do arquivo (se bucket for público).
58
+ */
59
+ getPublicUrl(fileId: string): string;
60
+ /**
61
+ * Move arquivo para outra pasta.
62
+ */
63
+ move(fileId: string, newFolder: string): Promise<FileObject>;
64
+ /**
65
+ * Renomeia arquivo.
66
+ */
67
+ rename(fileId: string, newName: string): Promise<FileObject>;
68
+ }
69
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/modules/storage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMtF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,IAAI,CAAgB;gBAEhB,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa;IAKzD;;;;;;;;OAQG;IACG,MAAM,CACV,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAyD7E;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAgB9E;;OAEG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAU9C;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO9C;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrE;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKpC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWlE;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAUnE"}
@@ -0,0 +1,151 @@
1
+ // =============================================================================
2
+ // @aether/core - Storage Module
3
+ // =============================================================================
4
+ // Módulo de storage para upload/download de arquivos.
5
+ // =============================================================================
6
+ import axios from 'axios';
7
+ // =============================================================================
8
+ // STORAGE MODULE
9
+ // =============================================================================
10
+ /**
11
+ * Módulo de storage do Aether.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Upload
16
+ * const { data } = await aether.storage.upload(file, 'avatar.png', 'image/png');
17
+ * console.log(data.downloadUrl);
18
+ *
19
+ * // Listar
20
+ * const files = await aether.storage.list('folder');
21
+ *
22
+ * // Deletar
23
+ * await aether.storage.delete('file-id');
24
+ * ```
25
+ */
26
+ export class StorageModule {
27
+ client;
28
+ http;
29
+ constructor(client, http) {
30
+ this.client = client;
31
+ this.http = http;
32
+ }
33
+ /**
34
+ * Faz upload de um arquivo.
35
+ *
36
+ * @param file Arquivo a ser enviado (File, Blob ou Buffer)
37
+ * @param fileName Nome do arquivo (com extensão)
38
+ * @param contentType MIME type do arquivo (ex: 'image/png')
39
+ * @param folder Pasta de destino (opcional)
40
+ * @param onProgress Callback de progresso (opcional)
41
+ */
42
+ async upload(file, fileName, contentType, folder, onProgress) {
43
+ const projectId = this.client.projectId;
44
+ try {
45
+ // Primeiro obtém URL assinada para upload
46
+ const { data: uploadData } = await this.http.post(`/projects/${projectId}/storage/upload-url`, {
47
+ fileName,
48
+ contentType: contentType || 'application/octet-stream',
49
+ folder,
50
+ });
51
+ // Prepara o arquivo
52
+ let blob;
53
+ if (Buffer.isBuffer(file)) {
54
+ blob = new Blob([new Uint8Array(file)], { type: contentType });
55
+ }
56
+ else {
57
+ blob = file;
58
+ }
59
+ // Faz upload direto para S3/storage
60
+ await axios.put(uploadData.uploadUrl, blob, {
61
+ headers: {
62
+ 'Content-Type': contentType || 'application/octet-stream',
63
+ },
64
+ onUploadProgress: (event) => {
65
+ if (onProgress && event.total) {
66
+ onProgress({
67
+ loaded: event.loaded,
68
+ total: event.total,
69
+ percent: Math.round((event.loaded / event.total) * 100),
70
+ });
71
+ }
72
+ },
73
+ });
74
+ // Confirma upload
75
+ const { data: fileData } = await this.http.post(`/projects/${projectId}/storage/confirm`, {
76
+ fileId: uploadData.fileId,
77
+ });
78
+ return { data: fileData.data, error: null };
79
+ }
80
+ catch (err) {
81
+ const error = err;
82
+ return {
83
+ data: null,
84
+ error: error.response?.data?.message || error.message || 'Erro no upload'
85
+ };
86
+ }
87
+ }
88
+ /**
89
+ * Lista arquivos de uma pasta.
90
+ */
91
+ async list(folder, options) {
92
+ const projectId = this.client.projectId;
93
+ const params = {};
94
+ if (folder)
95
+ params.folder = folder;
96
+ if (options?.limit)
97
+ params.limit = options.limit;
98
+ if (options?.offset)
99
+ params.offset = options.offset;
100
+ const { data } = await this.http.get(`/projects/${projectId}/storage`, { params });
101
+ return data.data;
102
+ }
103
+ /**
104
+ * Busca um arquivo por ID.
105
+ */
106
+ async get(fileId) {
107
+ const projectId = this.client.projectId;
108
+ const { data } = await this.http.get(`/projects/${projectId}/storage/${fileId}`);
109
+ return data.data;
110
+ }
111
+ /**
112
+ * Deleta um arquivo.
113
+ */
114
+ async delete(fileId) {
115
+ const projectId = this.client.projectId;
116
+ await this.http.delete(`/projects/${projectId}/storage/${fileId}`);
117
+ return true;
118
+ }
119
+ /**
120
+ * Gera URL assinada temporária para download.
121
+ */
122
+ async getSignedUrl(fileId, expiresIn = 3600) {
123
+ const projectId = this.client.projectId;
124
+ const { data } = await this.http.post(`/projects/${projectId}/storage/${fileId}/signed-url`, { expiresIn });
125
+ return data.url;
126
+ }
127
+ /**
128
+ * Retorna URL pública do arquivo (se bucket for público).
129
+ */
130
+ getPublicUrl(fileId) {
131
+ const projectId = this.client.projectId;
132
+ return `${this.client.apiUrl}/v1/projects/${projectId}/storage/public/${fileId}`;
133
+ }
134
+ /**
135
+ * Move arquivo para outra pasta.
136
+ */
137
+ async move(fileId, newFolder) {
138
+ const projectId = this.client.projectId;
139
+ const { data } = await this.http.put(`/projects/${projectId}/storage/${fileId}/move`, { folder: newFolder });
140
+ return data.data;
141
+ }
142
+ /**
143
+ * Renomeia arquivo.
144
+ */
145
+ async rename(fileId, newName) {
146
+ const projectId = this.client.projectId;
147
+ const { data } = await this.http.put(`/projects/${projectId}/storage/${fileId}`, { name: newName });
148
+ return data.data;
149
+ }
150
+ }
151
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/modules/storage.ts"],"names":[],"mappings":"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"}