@memberjunction/storage 2.31.0 → 2.32.1

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 (33) hide show
  1. package/dist/drivers/AWSFileStorage.d.ts +26 -1
  2. package/dist/drivers/AWSFileStorage.d.ts.map +1 -1
  3. package/dist/drivers/AWSFileStorage.js +287 -13
  4. package/dist/drivers/AWSFileStorage.js.map +1 -1
  5. package/dist/drivers/AzureFileStorage.d.ts +22 -1
  6. package/dist/drivers/AzureFileStorage.d.ts.map +1 -1
  7. package/dist/drivers/AzureFileStorage.js +264 -20
  8. package/dist/drivers/AzureFileStorage.js.map +1 -1
  9. package/dist/drivers/DropboxFileStorage.d.ts +73 -0
  10. package/dist/drivers/DropboxFileStorage.d.ts.map +1 -0
  11. package/dist/drivers/DropboxFileStorage.js +463 -0
  12. package/dist/drivers/DropboxFileStorage.js.map +1 -0
  13. package/dist/drivers/GoogleDriveFileStorage.d.ts +73 -0
  14. package/dist/drivers/GoogleDriveFileStorage.d.ts.map +1 -0
  15. package/dist/drivers/GoogleDriveFileStorage.js +542 -0
  16. package/dist/drivers/GoogleDriveFileStorage.js.map +1 -0
  17. package/dist/drivers/GoogleFileStorage.d.ts +20 -1
  18. package/dist/drivers/GoogleFileStorage.d.ts.map +1 -1
  19. package/dist/drivers/GoogleFileStorage.js +215 -2
  20. package/dist/drivers/GoogleFileStorage.js.map +1 -1
  21. package/dist/drivers/SharePointFileStorage.d.ts +81 -0
  22. package/dist/drivers/SharePointFileStorage.d.ts.map +1 -0
  23. package/dist/drivers/SharePointFileStorage.js +490 -0
  24. package/dist/drivers/SharePointFileStorage.js.map +1 -0
  25. package/dist/generic/FileStorageBase.d.ts +119 -0
  26. package/dist/generic/FileStorageBase.d.ts.map +1 -1
  27. package/dist/generic/FileStorageBase.js +18 -1
  28. package/dist/generic/FileStorageBase.js.map +1 -1
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -0
  32. package/dist/index.js.map +1 -1
  33. package/package.json +11 -4
@@ -0,0 +1,542 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.GoogleDriveFileStorage = void 0;
36
+ const googleapis_1 = require("googleapis");
37
+ const global_1 = require("@memberjunction/global");
38
+ const env = __importStar(require("env-var"));
39
+ const mime = __importStar(require("mime-types"));
40
+ const FileStorageBase_1 = require("../generic/FileStorageBase");
41
+ let GoogleDriveFileStorage = class GoogleDriveFileStorage extends FileStorageBase_1.FileStorageBase {
42
+ constructor() {
43
+ super();
44
+ this.providerName = 'Google Drive';
45
+ // Get credentials from environment
46
+ const keyFile = env.get('STORAGE_GDRIVE_KEY_FILE').asString();
47
+ const credentials = env.get('STORAGE_GDRIVE_CREDENTIALS_JSON').asJsonObject();
48
+ // Initialize the Google Drive client
49
+ if (keyFile) {
50
+ // Using key file
51
+ const auth = new googleapis_1.google.auth.GoogleAuth({
52
+ keyFile,
53
+ scopes: ['https://www.googleapis.com/auth/drive']
54
+ });
55
+ this._drive = googleapis_1.google.drive({ version: 'v3', auth });
56
+ }
57
+ else if (credentials) {
58
+ // Using credentials directly
59
+ const auth = new googleapis_1.google.auth.JWT(credentials.client_email, undefined, credentials.private_key, ['https://www.googleapis.com/auth/drive']);
60
+ this._drive = googleapis_1.google.drive({ version: 'v3', auth });
61
+ }
62
+ else {
63
+ throw new Error('Google Drive storage requires either STORAGE_GDRIVE_KEY_FILE or STORAGE_GDRIVE_CREDENTIALS_JSON to be set');
64
+ }
65
+ // Optionally set a root folder ID to restrict operations
66
+ this._rootFolderId = env.get('STORAGE_GDRIVE_ROOT_FOLDER_ID').asString();
67
+ }
68
+ /**
69
+ * Finds a file or folder by path
70
+ */
71
+ async _getItemByPath(path) {
72
+ if (!path || path === '/' || path === '') {
73
+ // Return the root folder or the specified root folder
74
+ return {
75
+ id: this._rootFolderId || 'root',
76
+ name: 'Root',
77
+ mimeType: 'application/vnd.google-apps.folder'
78
+ };
79
+ }
80
+ // Split path into parts
81
+ const pathParts = path.split('/').filter(p => p);
82
+ // Start with root folder or the specified root folder
83
+ let currentParentId = this._rootFolderId || 'root';
84
+ let currentItem = null;
85
+ // Navigate through path parts
86
+ for (let i = 0; i < pathParts.length; i++) {
87
+ const part = pathParts[i];
88
+ const isLastPart = i === pathParts.length - 1;
89
+ // Query for the item
90
+ const query = isLastPart
91
+ ? `name = '${part}' and '${currentParentId}' in parents and trashed = false`
92
+ : `name = '${part}' and '${currentParentId}' in parents and mimeType = 'application/vnd.google-apps.folder' and trashed = false`;
93
+ const response = await this._drive.files.list({
94
+ q: query,
95
+ fields: 'files(id, name, mimeType, size, modifiedTime, parents)',
96
+ spaces: 'drive'
97
+ });
98
+ if (!response.data.files || response.data.files.length === 0) {
99
+ throw new Error(`Path not found: ${path} (at part: ${part})`);
100
+ }
101
+ currentItem = response.data.files[0];
102
+ currentParentId = currentItem.id;
103
+ }
104
+ if (!currentItem) {
105
+ throw new Error(`Path not found: ${path}`);
106
+ }
107
+ return currentItem;
108
+ }
109
+ /**
110
+ * Finds a parent folder by path and creates it if it doesn't exist
111
+ */
112
+ async _getOrCreateParentFolder(path) {
113
+ if (!path || path === '/' || path === '') {
114
+ return this._rootFolderId || 'root';
115
+ }
116
+ // Split path into parts
117
+ const pathParts = path.split('/').filter(p => p);
118
+ // Start with root folder or the specified root folder
119
+ let currentParentId = this._rootFolderId || 'root';
120
+ // Navigate through path parts, creating folders as needed
121
+ for (const part of pathParts) {
122
+ // Check if folder exists
123
+ const query = `name = '${part}' and '${currentParentId}' in parents and mimeType = 'application/vnd.google-apps.folder' and trashed = false`;
124
+ const response = await this._drive.files.list({
125
+ q: query,
126
+ fields: 'files(id)',
127
+ spaces: 'drive'
128
+ });
129
+ if (response.data.files && response.data.files.length > 0) {
130
+ // Folder exists, use it
131
+ currentParentId = response.data.files[0].id;
132
+ }
133
+ else {
134
+ // Create the folder
135
+ const folderMetadata = {
136
+ name: part,
137
+ mimeType: 'application/vnd.google-apps.folder',
138
+ parents: [currentParentId]
139
+ };
140
+ const folder = await this._drive.files.create({
141
+ requestBody: folderMetadata,
142
+ fields: 'id'
143
+ });
144
+ currentParentId = folder.data.id;
145
+ }
146
+ }
147
+ return currentParentId;
148
+ }
149
+ /**
150
+ * Helper method to convert Google Drive file to StorageObjectMetadata
151
+ */
152
+ _fileToMetadata(file, parentPath = '') {
153
+ const isDirectory = file.mimeType === 'application/vnd.google-apps.folder';
154
+ const fullPath = parentPath ? `${parentPath}/${file.name}` : file.name;
155
+ return {
156
+ name: file.name,
157
+ path: parentPath,
158
+ fullPath,
159
+ size: parseInt(file.size || '0'),
160
+ contentType: file.mimeType || mime.lookup(file.name) || 'application/octet-stream',
161
+ lastModified: new Date(file.modifiedTime || Date.now()),
162
+ isDirectory,
163
+ etag: file.etag || undefined,
164
+ customMetadata: {
165
+ fileId: file.id
166
+ }
167
+ };
168
+ }
169
+ /**
170
+ * PreAuth upload URLs are not directly supported in Google Drive
171
+ */
172
+ async CreatePreAuthUploadUrl(objectName) {
173
+ // Google Drive doesn't support pre-signed upload URLs in the same way as S3
174
+ // Instead, use PutObject method for uploads
175
+ this.throwUnsupportedOperationError('CreatePreAuthUploadUrl');
176
+ }
177
+ /**
178
+ * Create a pre-authenticated download URL
179
+ */
180
+ async CreatePreAuthDownloadUrl(objectName) {
181
+ try {
182
+ // Get the file by path
183
+ const file = await this._getItemByPath(objectName);
184
+ if (!file.id) {
185
+ throw new Error(`File not found: ${objectName}`);
186
+ }
187
+ // Create a temporary web view link
188
+ const permission = await this._drive.permissions.create({
189
+ fileId: file.id,
190
+ requestBody: {
191
+ role: 'reader',
192
+ type: 'anyone',
193
+ expirationTime: new Date(Date.now() + 10 * 60 * 1000).toISOString() // 10 minutes
194
+ }
195
+ });
196
+ // Get web view link
197
+ const fileInfo = await this._drive.files.get({
198
+ fileId: file.id,
199
+ fields: 'webViewLink, webContentLink'
200
+ });
201
+ // Prefer direct download link if available
202
+ return fileInfo.data.webContentLink || fileInfo.data.webViewLink;
203
+ }
204
+ catch (error) {
205
+ console.error('Error creating pre-auth download URL', { objectName, error });
206
+ throw new Error(`Failed to create download URL for: ${objectName}`);
207
+ }
208
+ }
209
+ /**
210
+ * Move an object from one location to another
211
+ */
212
+ async MoveObject(oldObjectName, newObjectName) {
213
+ try {
214
+ // Get the file to move
215
+ const file = await this._getItemByPath(oldObjectName);
216
+ if (!file.id) {
217
+ throw new Error(`File not found: ${oldObjectName}`);
218
+ }
219
+ // Parse new path to get parent folder and new name
220
+ const newPathParts = newObjectName.split('/');
221
+ const newName = newPathParts.pop() || '';
222
+ const newParentPath = newPathParts.join('/');
223
+ // Get or create the destination folder
224
+ const newParentId = await this._getOrCreateParentFolder(newParentPath);
225
+ // Move the file by updating parent and name
226
+ await this._drive.files.update({
227
+ fileId: file.id,
228
+ requestBody: {
229
+ name: newName
230
+ }
231
+ });
232
+ // Update parents (remove old parents and add new parent)
233
+ await this._drive.files.update({
234
+ fileId: file.id,
235
+ removeParents: file.parents?.join(','),
236
+ addParents: newParentId,
237
+ fields: 'id, parents'
238
+ });
239
+ return true;
240
+ }
241
+ catch (error) {
242
+ console.error('Error moving object', { oldObjectName, newObjectName, error });
243
+ return false;
244
+ }
245
+ }
246
+ /**
247
+ * Delete an object
248
+ */
249
+ async DeleteObject(objectName) {
250
+ try {
251
+ // Get the file to delete
252
+ const file = await this._getItemByPath(objectName);
253
+ if (!file.id) {
254
+ // If file doesn't exist, consider it success for idempotency
255
+ return true;
256
+ }
257
+ // Delete the file (move to trash)
258
+ await this._drive.files.delete({
259
+ fileId: file.id
260
+ });
261
+ return true;
262
+ }
263
+ catch (error) {
264
+ // If file not found, consider it success
265
+ if (error.code === 404) {
266
+ return true;
267
+ }
268
+ console.error('Error deleting object', { objectName, error });
269
+ return false;
270
+ }
271
+ }
272
+ /**
273
+ * List objects in a directory
274
+ */
275
+ async ListObjects(prefix, delimiter = '/') {
276
+ try {
277
+ // Get the folder
278
+ const folder = await this._getItemByPath(prefix);
279
+ if (!folder.id) {
280
+ throw new Error(`Folder not found: ${prefix}`);
281
+ }
282
+ // List files in the folder
283
+ const response = await this._drive.files.list({
284
+ q: `'${folder.id}' in parents and trashed = false`,
285
+ fields: 'files(id, name, mimeType, size, modifiedTime, parents)',
286
+ spaces: 'drive'
287
+ });
288
+ const objects = [];
289
+ const prefixes = [];
290
+ if (response.data.files && response.data.files.length > 0) {
291
+ for (const file of response.data.files) {
292
+ // Add to objects list
293
+ objects.push(this._fileToMetadata(file, prefix));
294
+ // If it's a folder, add to prefixes
295
+ if (file.mimeType === 'application/vnd.google-apps.folder') {
296
+ const folderPath = prefix
297
+ ? (prefix.endsWith('/') ? `${prefix}${file.name}` : `${prefix}/${file.name}`)
298
+ : file.name;
299
+ prefixes.push(`${folderPath}/`);
300
+ }
301
+ }
302
+ }
303
+ return { objects, prefixes };
304
+ }
305
+ catch (error) {
306
+ console.error('Error listing objects', { prefix, error });
307
+ return { objects: [], prefixes: [] };
308
+ }
309
+ }
310
+ /**
311
+ * Create a directory
312
+ */
313
+ async CreateDirectory(directoryPath) {
314
+ try {
315
+ // Remove trailing slash if present
316
+ const normalizedPath = directoryPath.endsWith('/')
317
+ ? directoryPath.substring(0, directoryPath.length - 1)
318
+ : directoryPath;
319
+ // Parse path
320
+ const pathParts = normalizedPath.split('/');
321
+ const folderName = pathParts.pop() || '';
322
+ const parentPath = pathParts.join('/');
323
+ // Get parent folder
324
+ const parentId = await this._getOrCreateParentFolder(parentPath);
325
+ // Create the folder
326
+ const folderMetadata = {
327
+ name: folderName,
328
+ mimeType: 'application/vnd.google-apps.folder',
329
+ parents: [parentId]
330
+ };
331
+ await this._drive.files.create({
332
+ requestBody: folderMetadata,
333
+ fields: 'id'
334
+ });
335
+ return true;
336
+ }
337
+ catch (error) {
338
+ console.error('Error creating directory', { directoryPath, error });
339
+ return false;
340
+ }
341
+ }
342
+ /**
343
+ * Delete a directory and optionally its contents
344
+ */
345
+ async DeleteDirectory(directoryPath, recursive = false) {
346
+ try {
347
+ // Remove trailing slash if present
348
+ const normalizedPath = directoryPath.endsWith('/')
349
+ ? directoryPath.substring(0, directoryPath.length - 1)
350
+ : directoryPath;
351
+ // Get the folder
352
+ const folder = await this._getItemByPath(normalizedPath);
353
+ if (!folder.id) {
354
+ // If folder doesn't exist, consider it success
355
+ return true;
356
+ }
357
+ if (!recursive) {
358
+ // Check if folder is empty
359
+ const response = await this._drive.files.list({
360
+ q: `'${folder.id}' in parents and trashed = false`,
361
+ fields: 'files(id)',
362
+ spaces: 'drive'
363
+ });
364
+ if (response.data.files && response.data.files.length > 0) {
365
+ throw new Error('Directory is not empty');
366
+ }
367
+ }
368
+ // Delete the folder
369
+ await this._drive.files.delete({
370
+ fileId: folder.id
371
+ });
372
+ return true;
373
+ }
374
+ catch (error) {
375
+ console.error('Error deleting directory', { directoryPath, recursive, error });
376
+ return false;
377
+ }
378
+ }
379
+ /**
380
+ * Get object metadata
381
+ */
382
+ async GetObjectMetadata(objectName) {
383
+ try {
384
+ // Get the file
385
+ const file = await this._getItemByPath(objectName);
386
+ if (!file.id) {
387
+ throw new Error(`File not found: ${objectName}`);
388
+ }
389
+ // Parse path to get parent path
390
+ const pathParts = objectName.split('/');
391
+ pathParts.pop(); // Remove filename
392
+ const parentPath = pathParts.join('/');
393
+ return this._fileToMetadata(file, parentPath);
394
+ }
395
+ catch (error) {
396
+ console.error('Error getting object metadata', { objectName, error });
397
+ throw new Error(`Object not found: ${objectName}`);
398
+ }
399
+ }
400
+ /**
401
+ * Get object contents
402
+ */
403
+ async GetObject(objectName) {
404
+ try {
405
+ // Get the file
406
+ const file = await this._getItemByPath(objectName);
407
+ if (!file.id) {
408
+ throw new Error(`File not found: ${objectName}`);
409
+ }
410
+ // Download the file
411
+ const response = await this._drive.files.get({
412
+ fileId: file.id,
413
+ alt: 'media'
414
+ }, {
415
+ responseType: 'arraybuffer'
416
+ });
417
+ return Buffer.from(response.data);
418
+ }
419
+ catch (error) {
420
+ console.error('Error getting object', { objectName, error });
421
+ throw new Error(`Failed to get object: ${objectName}`);
422
+ }
423
+ }
424
+ /**
425
+ * Upload an object
426
+ */
427
+ async PutObject(objectName, data, contentType, metadata) {
428
+ try {
429
+ // Parse path
430
+ const pathParts = objectName.split('/');
431
+ const fileName = pathParts.pop() || '';
432
+ const parentPath = pathParts.join('/');
433
+ // Get or create parent folder
434
+ const parentId = await this._getOrCreateParentFolder(parentPath);
435
+ // Determine content type
436
+ const effectiveContentType = contentType || mime.lookup(objectName) || 'application/octet-stream';
437
+ // Check if file already exists to decide whether to create or update
438
+ let existingFileId = null;
439
+ try {
440
+ const existingFile = await this._getItemByPath(objectName);
441
+ existingFileId = existingFile.id || null;
442
+ }
443
+ catch (error) {
444
+ // File doesn't exist, will create new
445
+ }
446
+ if (existingFileId) {
447
+ // Update existing file
448
+ await this._drive.files.update({
449
+ fileId: existingFileId,
450
+ media: {
451
+ body: data,
452
+ mimeType: effectiveContentType
453
+ }
454
+ });
455
+ }
456
+ else {
457
+ // Create new file
458
+ await this._drive.files.create({
459
+ requestBody: {
460
+ name: fileName,
461
+ parents: [parentId]
462
+ },
463
+ media: {
464
+ body: data,
465
+ mimeType: effectiveContentType
466
+ },
467
+ fields: 'id'
468
+ });
469
+ }
470
+ return true;
471
+ }
472
+ catch (error) {
473
+ console.error('Error putting object', { objectName, error });
474
+ return false;
475
+ }
476
+ }
477
+ /**
478
+ * Copy an object
479
+ */
480
+ async CopyObject(sourceObjectName, destinationObjectName) {
481
+ try {
482
+ // Get source file
483
+ const sourceFile = await this._getItemByPath(sourceObjectName);
484
+ if (!sourceFile.id) {
485
+ throw new Error(`Source file not found: ${sourceObjectName}`);
486
+ }
487
+ // Parse destination path
488
+ const destPathParts = destinationObjectName.split('/');
489
+ const destFileName = destPathParts.pop() || '';
490
+ const destParentPath = destPathParts.join('/');
491
+ // Get or create destination parent folder
492
+ const destParentId = await this._getOrCreateParentFolder(destParentPath);
493
+ // Copy the file
494
+ await this._drive.files.copy({
495
+ fileId: sourceFile.id,
496
+ requestBody: {
497
+ name: destFileName,
498
+ parents: [destParentId]
499
+ }
500
+ });
501
+ return true;
502
+ }
503
+ catch (error) {
504
+ console.error('Error copying object', { sourceObjectName, destinationObjectName, error });
505
+ return false;
506
+ }
507
+ }
508
+ /**
509
+ * Check if an object exists
510
+ */
511
+ async ObjectExists(objectName) {
512
+ try {
513
+ await this._getItemByPath(objectName);
514
+ return true;
515
+ }
516
+ catch (error) {
517
+ return false;
518
+ }
519
+ }
520
+ /**
521
+ * Check if a directory exists
522
+ */
523
+ async DirectoryExists(directoryPath) {
524
+ try {
525
+ // Remove trailing slash if present
526
+ const normalizedPath = directoryPath.endsWith('/')
527
+ ? directoryPath.substring(0, directoryPath.length - 1)
528
+ : directoryPath;
529
+ const item = await this._getItemByPath(normalizedPath);
530
+ return item.mimeType === 'application/vnd.google-apps.folder';
531
+ }
532
+ catch (error) {
533
+ return false;
534
+ }
535
+ }
536
+ };
537
+ exports.GoogleDriveFileStorage = GoogleDriveFileStorage;
538
+ exports.GoogleDriveFileStorage = GoogleDriveFileStorage = __decorate([
539
+ (0, global_1.RegisterClass)(FileStorageBase_1.FileStorageBase, 'Google Drive Storage'),
540
+ __metadata("design:paramtypes", [])
541
+ ], GoogleDriveFileStorage);
542
+ //# sourceMappingURL=GoogleDriveFileStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoogleDriveFileStorage.js","sourceRoot":"","sources":["../../src/drivers/GoogleDriveFileStorage.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,30 @@
1
- import { CreatePreAuthUploadUrlPayload, FileStorageBase } from '../generic/FileStorageBase';
1
+ /// <reference types="node" />
2
+ import { CreatePreAuthUploadUrlPayload, FileStorageBase, StorageListResult, StorageObjectMetadata } from '../generic/FileStorageBase';
2
3
  export declare class GoogleFileStorage extends FileStorageBase {
4
+ protected readonly providerName = "Google Cloud Storage";
3
5
  private _bucket;
4
6
  private _client;
5
7
  constructor();
8
+ /**
9
+ * Normalizes directory paths to ensure they end with a slash
10
+ */
11
+ private _normalizeDirectoryPath;
12
+ /**
13
+ * Converts metadata to a string map for consistent handling
14
+ */
15
+ private _convertMetadataToStringMap;
6
16
  CreatePreAuthUploadUrl(objectName: string): Promise<CreatePreAuthUploadUrlPayload>;
7
17
  CreatePreAuthDownloadUrl(objectName: string): Promise<string>;
8
18
  MoveObject(oldObjectName: string, newObjectName: string): Promise<boolean>;
9
19
  DeleteObject(objectName: string): Promise<boolean>;
20
+ ListObjects(prefix: string, delimiter?: string): Promise<StorageListResult>;
21
+ CreateDirectory(directoryPath: string): Promise<boolean>;
22
+ DeleteDirectory(directoryPath: string, recursive?: boolean): Promise<boolean>;
23
+ GetObjectMetadata(objectName: string): Promise<StorageObjectMetadata>;
24
+ GetObject(objectName: string): Promise<Buffer>;
25
+ PutObject(objectName: string, data: Buffer, contentType?: string, metadata?: Record<string, string>): Promise<boolean>;
26
+ CopyObject(sourceObjectName: string, destinationObjectName: string): Promise<boolean>;
27
+ ObjectExists(objectName: string): Promise<boolean>;
28
+ DirectoryExists(directoryPath: string): Promise<boolean>;
10
29
  }
11
30
  //# sourceMappingURL=GoogleFileStorage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleFileStorage.d.ts","sourceRoot":"","sources":["../../src/drivers/GoogleFileStorage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE5F,qBACa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAU;;IASZ,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAalF,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa7D,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAWvD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAUhE"}
1
+ {"version":3,"file":"GoogleFileStorage.d.ts","sourceRoot":"","sources":["../../src/drivers/GoogleFileStorage.ts"],"names":[],"mappings":";AAIA,OAAO,EACL,6BAA6B,EAC7B,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AAEpC,qBACa,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,QAAQ,CAAC,YAAY,0BAA0B;IACzD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAU;;IASzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAI/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAUtB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAclF,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa7D,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1E,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkDxE,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBxD,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B3E,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA4BrE,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY9C,SAAS,CACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;IAsBN,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBrF,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAwBtE"}