@memberjunction/storage 2.32.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.
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ export * from './drivers/AzureFileStorage';
3
3
  export * from './drivers/GoogleFileStorage';
4
4
  export * from './drivers/GoogleDriveFileStorage';
5
5
  export * from './drivers/SharePointFileStorage';
6
- export * from './drivers/BoxFileStorage';
7
6
  export * from './drivers/DropboxFileStorage';
8
7
  export * from './generic/FileStorageBase';
9
8
  export * from './util';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,QAAQ,CAAC"}
package/dist/index.js CHANGED
@@ -19,7 +19,6 @@ __exportStar(require("./drivers/AzureFileStorage"), exports);
19
19
  __exportStar(require("./drivers/GoogleFileStorage"), exports);
20
20
  __exportStar(require("./drivers/GoogleDriveFileStorage"), exports);
21
21
  __exportStar(require("./drivers/SharePointFileStorage"), exports);
22
- __exportStar(require("./drivers/BoxFileStorage"), exports);
23
22
  __exportStar(require("./drivers/DropboxFileStorage"), exports);
24
23
  __exportStar(require("./generic/FileStorageBase"), exports);
25
24
  __exportStar(require("./util"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,6DAA2C;AAC3C,8DAA4C;AAC5C,mEAAiD;AACjD,kEAAgD;AAChD,2DAAyC;AACzC,+DAA6C;AAC7C,4DAA0C;AAC1C,yCAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,6DAA2C;AAC3C,8DAA4C;AAC5C,mEAAiD;AACjD,kEAAgD;AAChD,+DAA6C;AAC7C,4DAA0C;AAC1C,yCAAuB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/storage",
3
- "version": "2.32.0",
3
+ "version": "2.32.1",
4
4
  "description": "This library provides a set of objects that handle the interface between the server-side API and various cloud storage providers.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -31,11 +31,10 @@
31
31
  "@microsoft/mgt-msal2-provider": "^3.1.3",
32
32
  "@microsoft/mgt-sharepoint-provider": "^3.1.3",
33
33
  "googleapis": "^134.0.0",
34
- "box-node-sdk": "^3.5.0",
35
34
  "dropbox": "^10.34.0",
36
- "@memberjunction/core": "2.32.0",
37
- "@memberjunction/core-entities": "2.32.0",
38
- "@memberjunction/global": "2.32.0",
35
+ "@memberjunction/core": "2.32.1",
36
+ "@memberjunction/core-entities": "2.32.1",
37
+ "@memberjunction/global": "2.32.1",
39
38
  "env-var": "^7.4.1",
40
39
  "mime-types": "^2.1.35"
41
40
  }
@@ -1,73 +0,0 @@
1
- /// <reference types="node" />
2
- import { CreatePreAuthUploadUrlPayload, FileStorageBase, StorageListResult, StorageObjectMetadata } from '../generic/FileStorageBase';
3
- export declare class BoxFileStorage extends FileStorageBase {
4
- protected readonly providerName = "Box.com";
5
- private _client;
6
- private _rootFolderId;
7
- constructor();
8
- /**
9
- * Find a file or folder by path
10
- */
11
- private _getItemByPath;
12
- /**
13
- * Ensures a folder exists at the given path, creating it if necessary
14
- */
15
- private _getOrCreateFolder;
16
- /**
17
- * Converts a Box item to StorageObjectMetadata
18
- */
19
- private _convertToMetadata;
20
- /**
21
- * Box doesn't support pre-auth upload URLs directly
22
- */
23
- CreatePreAuthUploadUrl(objectName: string): Promise<CreatePreAuthUploadUrlPayload>;
24
- /**
25
- * Create a pre-authenticated download URL
26
- */
27
- CreatePreAuthDownloadUrl(objectName: string): Promise<string>;
28
- /**
29
- * Move an object
30
- */
31
- MoveObject(oldObjectName: string, newObjectName: string): Promise<boolean>;
32
- /**
33
- * Delete an object
34
- */
35
- DeleteObject(objectName: string): Promise<boolean>;
36
- /**
37
- * List objects in a directory
38
- */
39
- ListObjects(prefix: string, delimiter?: string): Promise<StorageListResult>;
40
- /**
41
- * Create a directory
42
- */
43
- CreateDirectory(directoryPath: string): Promise<boolean>;
44
- /**
45
- * Delete a directory
46
- */
47
- DeleteDirectory(directoryPath: string, recursive?: boolean): Promise<boolean>;
48
- /**
49
- * Get object metadata
50
- */
51
- GetObjectMetadata(objectName: string): Promise<StorageObjectMetadata>;
52
- /**
53
- * Get an object's contents
54
- */
55
- GetObject(objectName: string): Promise<Buffer>;
56
- /**
57
- * Upload an object
58
- */
59
- PutObject(objectName: string, data: Buffer, contentType?: string, metadata?: Record<string, string>): Promise<boolean>;
60
- /**
61
- * Copy an object
62
- */
63
- CopyObject(sourceObjectName: string, destinationObjectName: string): Promise<boolean>;
64
- /**
65
- * Check if an object exists
66
- */
67
- ObjectExists(objectName: string): Promise<boolean>;
68
- /**
69
- * Check if a directory exists
70
- */
71
- DirectoryExists(directoryPath: string): Promise<boolean>;
72
- }
73
- //# sourceMappingURL=BoxFileStorage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BoxFileStorage.d.ts","sourceRoot":"","sources":["../../src/drivers/BoxFileStorage.ts"],"names":[],"mappings":";AAIA,OAAO,EACL,6BAA6B,EAC7B,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AAEpC,qBACa,cAAe,SAAQ,eAAe;IACjD,SAAS,CAAC,QAAQ,CAAC,YAAY,aAAa;IAC5C,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,aAAa,CAAS;;IAyD9B;;OAEG;YACW,cAAc;IAmD5B;;OAEG;YACW,kBAAkB;IAoChC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACU,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAM/F;;OAEG;IACU,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB1E;;OAEG;IACU,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BvF;;OAEG;IACU,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB/D;;OAEG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuCrF;;OAEG;IACU,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBrE;;OAEG;IACU,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCxF;;OAEG;IACU,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiBlF;;OAEG;IACU,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkC3D;;OAEG;IACU,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;IAuCnB;;OAEG;IACU,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BlG;;OAEG;IACU,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/D;;OAEG;IACU,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAatE"}
@@ -1,517 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.BoxFileStorage = void 0;
39
- const box_node_sdk_1 = __importDefault(require("box-node-sdk"));
40
- const global_1 = require("@memberjunction/global");
41
- const env = __importStar(require("env-var"));
42
- const mime = __importStar(require("mime-types"));
43
- const FileStorageBase_1 = require("../generic/FileStorageBase");
44
- let BoxFileStorage = class BoxFileStorage extends FileStorageBase_1.FileStorageBase {
45
- constructor() {
46
- super();
47
- this.providerName = 'Box.com';
48
- const clientId = env.get('STORAGE_BOX_CLIENT_ID').required().asString();
49
- const clientSecret = env.get('STORAGE_BOX_CLIENT_SECRET').required().asString();
50
- const enterpriseId = env.get('STORAGE_BOX_ENTERPRISE_ID').asString();
51
- const userId = env.get('STORAGE_BOX_USER_ID').asString();
52
- // Configuration for Box SDK
53
- const config = {
54
- boxAppSettings: {
55
- clientID: clientId,
56
- clientSecret: clientSecret
57
- }
58
- };
59
- // Private key auth or app token auth
60
- if (env.get('STORAGE_BOX_PRIVATE_KEY').asString()) {
61
- // Using JWT auth
62
- const privateKey = env.get('STORAGE_BOX_PRIVATE_KEY').required().asString();
63
- const passphrase = env.get('STORAGE_BOX_PASSPHRASE').asString();
64
- config.boxAppSettings.appAuth = {
65
- publicKeyID: env.get('STORAGE_BOX_PUBLIC_KEY_ID').required().asString(),
66
- privateKey: privateKey,
67
- passphrase: passphrase
68
- };
69
- const sdk = box_node_sdk_1.default.getPreconfiguredInstance(config);
70
- // Get client using JWT auth
71
- if (enterpriseId) {
72
- // Enterprise auth
73
- this._client = sdk.getAppAuthClient('enterprise', enterpriseId);
74
- }
75
- else if (userId) {
76
- // User auth
77
- this._client = sdk.getAppAuthClient('user', userId);
78
- }
79
- else {
80
- throw new Error('Either STORAGE_BOX_ENTERPRISE_ID or STORAGE_BOX_USER_ID must be provided when using JWT authentication');
81
- }
82
- }
83
- else {
84
- // Using developer token
85
- const developerToken = env.get('STORAGE_BOX_DEVELOPER_TOKEN').required().asString();
86
- const sdk = new box_node_sdk_1.default({
87
- clientID: clientId,
88
- clientSecret: clientSecret
89
- });
90
- this._client = sdk.getBasicClient(developerToken);
91
- }
92
- // Set root folder ID, defaults to '0' which is the root of Box
93
- this._rootFolderId = env.get('STORAGE_BOX_ROOT_FOLDER_ID').default('0').asString();
94
- }
95
- /**
96
- * Find a file or folder by path
97
- */
98
- async _getItemByPath(path) {
99
- if (!path || path === '/' || path === '') {
100
- // Return the root folder
101
- try {
102
- return await this._client.folders.get(this._rootFolderId);
103
- }
104
- catch (error) {
105
- throw new Error(`Root folder not found: ${this._rootFolderId}`);
106
- }
107
- }
108
- // Split path into parts
109
- const pathParts = path.split('/').filter(p => p);
110
- let currentId = this._rootFolderId;
111
- let currentItem = null;
112
- let isFolder = true;
113
- // Traverse the path
114
- for (let i = 0; i < pathParts.length; i++) {
115
- const part = pathParts[i];
116
- const isLastPart = i === pathParts.length - 1;
117
- // Get folder items
118
- const items = await this._client.folders.getItems(currentId, {
119
- fields: 'name,type,id,size,modified_at,parent'
120
- });
121
- // Find the matching item
122
- const matchingItem = items.entries.find(item => item.name === part);
123
- if (!matchingItem) {
124
- throw new Error(`Path not found: ${path} (at part: ${part})`);
125
- }
126
- currentItem = matchingItem;
127
- currentId = matchingItem.id;
128
- isFolder = matchingItem.type === 'folder';
129
- // If not the last part, it must be a folder
130
- if (!isLastPart && !isFolder) {
131
- throw new Error(`Path not found: ${path} (at part: ${part}, expected folder but got file)`);
132
- }
133
- }
134
- // Return either the file or folder object
135
- if (isFolder) {
136
- return await this._client.folders.get(currentId);
137
- }
138
- else {
139
- return await this._client.files.get(currentId);
140
- }
141
- }
142
- /**
143
- * Ensures a folder exists at the given path, creating it if necessary
144
- */
145
- async _getOrCreateFolder(path) {
146
- if (!path || path === '/' || path === '') {
147
- return this._rootFolderId;
148
- }
149
- // Split path into parts
150
- const pathParts = path.split('/').filter(p => p);
151
- let currentId = this._rootFolderId;
152
- // Traverse/create the path
153
- for (const part of pathParts) {
154
- // Check if folder exists
155
- try {
156
- const items = await this._client.folders.getItems(currentId, {
157
- fields: 'name,type,id'
158
- });
159
- const matchingFolder = items.entries.find(item => item.name === part && item.type === 'folder');
160
- if (matchingFolder) {
161
- currentId = matchingFolder.id;
162
- }
163
- else {
164
- // Create the folder
165
- const newFolder = await this._client.folders.create(currentId, part);
166
- currentId = newFolder.id;
167
- }
168
- }
169
- catch (error) {
170
- throw new Error(`Error creating folder path: ${path} (at part: ${part}): ${error.message}`);
171
- }
172
- }
173
- return currentId;
174
- }
175
- /**
176
- * Converts a Box item to StorageObjectMetadata
177
- */
178
- _convertToMetadata(item, parentPath = '') {
179
- const isDirectory = item.type === 'folder';
180
- const fullPath = parentPath ? `${parentPath}/${item.name}` : item.name;
181
- const modifiedDate = new Date(item.modified_at || Date.now());
182
- return {
183
- name: item.name,
184
- path: parentPath,
185
- fullPath,
186
- size: parseInt(item.size || '0'),
187
- contentType: item.type === 'file' ?
188
- (mime.lookup(item.name) || 'application/octet-stream') :
189
- 'application/x-directory',
190
- lastModified: modifiedDate,
191
- isDirectory,
192
- etag: item.etag,
193
- customMetadata: {
194
- id: item.id
195
- }
196
- };
197
- }
198
- /**
199
- * Box doesn't support pre-auth upload URLs directly
200
- */
201
- async CreatePreAuthUploadUrl(objectName) {
202
- // Box doesn't support pre-signed URLs for uploads in the same way as S3
203
- // Instead, use PutObject method for uploads
204
- this.throwUnsupportedOperationError('CreatePreAuthUploadUrl');
205
- }
206
- /**
207
- * Create a pre-authenticated download URL
208
- */
209
- async CreatePreAuthDownloadUrl(objectName) {
210
- try {
211
- // Get the file
212
- const file = await this._getItemByPath(objectName);
213
- if (file.type !== 'file') {
214
- throw new Error(`Not a file: ${objectName}`);
215
- }
216
- // Create a temporary download URL
217
- const downloadUrl = await this._client.files.getDownloadURL(file.id);
218
- return downloadUrl;
219
- }
220
- catch (error) {
221
- console.error('Error creating pre-auth download URL', { objectName, error });
222
- throw new Error(`Failed to create download URL for: ${objectName}`);
223
- }
224
- }
225
- /**
226
- * Move an object
227
- */
228
- async MoveObject(oldObjectName, newObjectName) {
229
- try {
230
- // Get the source file/folder
231
- const sourceItem = await this._getItemByPath(oldObjectName);
232
- // Parse destination path
233
- const destPathParts = newObjectName.split('/');
234
- const destName = destPathParts.pop() || '';
235
- const destParentPath = destPathParts.join('/');
236
- // Get or create destination parent folder
237
- const destParentId = await this._getOrCreateFolder(destParentPath);
238
- // Move the item
239
- if (sourceItem.type === 'file') {
240
- await this._client.files.move(sourceItem.id, destParentId, { name: destName });
241
- }
242
- else {
243
- await this._client.folders.move(sourceItem.id, destParentId, { name: destName });
244
- }
245
- return true;
246
- }
247
- catch (error) {
248
- console.error('Error moving object', { oldObjectName, newObjectName, error });
249
- return false;
250
- }
251
- }
252
- /**
253
- * Delete an object
254
- */
255
- async DeleteObject(objectName) {
256
- try {
257
- // Get the file/folder
258
- const item = await this._getItemByPath(objectName);
259
- // Delete the item
260
- if (item.type === 'file') {
261
- await this._client.files.delete(item.id);
262
- }
263
- else {
264
- // For folders, this will fail if not empty and recursive=false
265
- await this._client.folders.delete(item.id);
266
- }
267
- return true;
268
- }
269
- catch (error) {
270
- // If item not found, consider it success for idempotency
271
- if (error.statusCode === 404) {
272
- return true;
273
- }
274
- console.error('Error deleting object', { objectName, error });
275
- return false;
276
- }
277
- }
278
- /**
279
- * List objects in a directory
280
- */
281
- async ListObjects(prefix, delimiter = '/') {
282
- try {
283
- // Get the folder
284
- const folder = await this._getItemByPath(prefix);
285
- if (folder.type !== 'folder') {
286
- throw new Error(`Not a folder: ${prefix}`);
287
- }
288
- // List items in the folder
289
- const items = await this._client.folders.getItems(folder.id, {
290
- fields: 'name,type,id,size,modified_at,parent'
291
- });
292
- const objects = [];
293
- const prefixes = [];
294
- // Process items
295
- for (const item of items.entries) {
296
- // Add to objects list
297
- objects.push(this._convertToMetadata(item, prefix));
298
- // If it's a folder, add to prefixes
299
- if (item.type === 'folder') {
300
- const folderPath = prefix
301
- ? (prefix.endsWith('/') ? `${prefix}${item.name}` : `${prefix}/${item.name}`)
302
- : item.name;
303
- prefixes.push(`${folderPath}/`);
304
- }
305
- }
306
- return { objects, prefixes };
307
- }
308
- catch (error) {
309
- console.error('Error listing objects', { prefix, error });
310
- return { objects: [], prefixes: [] };
311
- }
312
- }
313
- /**
314
- * Create a directory
315
- */
316
- async CreateDirectory(directoryPath) {
317
- try {
318
- // Remove trailing slash if present
319
- const normalizedPath = directoryPath.endsWith('/')
320
- ? directoryPath.substring(0, directoryPath.length - 1)
321
- : directoryPath;
322
- // Parse the path
323
- const pathParts = normalizedPath.split('/');
324
- const folderName = pathParts.pop() || '';
325
- const parentPath = pathParts.join('/');
326
- // Get the parent folder
327
- const parentId = await this._getOrCreateFolder(parentPath);
328
- // Create the folder
329
- await this._client.folders.create(parentId, folderName);
330
- return true;
331
- }
332
- catch (error) {
333
- console.error('Error creating directory', { directoryPath, error });
334
- return false;
335
- }
336
- }
337
- /**
338
- * Delete a directory
339
- */
340
- async DeleteDirectory(directoryPath, recursive = false) {
341
- try {
342
- // Remove trailing slash if present
343
- const normalizedPath = directoryPath.endsWith('/')
344
- ? directoryPath.substring(0, directoryPath.length - 1)
345
- : directoryPath;
346
- // Get the folder
347
- const folder = await this._getItemByPath(normalizedPath);
348
- if (folder.type !== 'folder') {
349
- throw new Error(`Not a folder: ${normalizedPath}`);
350
- }
351
- // Delete the folder
352
- await this._client.folders.delete(folder.id, {
353
- recursive: recursive
354
- });
355
- return true;
356
- }
357
- catch (error) {
358
- // If folder not found, consider it success
359
- if (error.statusCode === 404) {
360
- return true;
361
- }
362
- // If trying to delete non-empty folder without recursive flag
363
- if (error.statusCode === 400 && !recursive) {
364
- throw new Error('Directory is not empty');
365
- }
366
- console.error('Error deleting directory', { directoryPath, recursive, error });
367
- return false;
368
- }
369
- }
370
- /**
371
- * Get object metadata
372
- */
373
- async GetObjectMetadata(objectName) {
374
- try {
375
- // Get the file/folder
376
- const item = await this._getItemByPath(objectName);
377
- // Parse path to get parent path
378
- const pathParts = objectName.split('/');
379
- pathParts.pop(); // Remove filename/foldername
380
- const parentPath = pathParts.join('/');
381
- return this._convertToMetadata(item, parentPath);
382
- }
383
- catch (error) {
384
- console.error('Error getting object metadata', { objectName, error });
385
- throw new Error(`Object not found: ${objectName}`);
386
- }
387
- }
388
- /**
389
- * Get an object's contents
390
- */
391
- async GetObject(objectName) {
392
- try {
393
- // Get the file
394
- const file = await this._getItemByPath(objectName);
395
- if (file.type !== 'file') {
396
- throw new Error(`Not a file: ${objectName}`);
397
- }
398
- // Get download stream
399
- const stream = await this._client.files.getReadStream(file.id);
400
- // Convert stream to buffer
401
- return new Promise((resolve, reject) => {
402
- const chunks = [];
403
- stream.on('data', (chunk) => {
404
- chunks.push(chunk);
405
- });
406
- stream.on('end', () => {
407
- resolve(Buffer.concat(chunks));
408
- });
409
- stream.on('error', (err) => {
410
- reject(err);
411
- });
412
- });
413
- }
414
- catch (error) {
415
- console.error('Error getting object', { objectName, error });
416
- throw new Error(`Failed to get object: ${objectName}`);
417
- }
418
- }
419
- /**
420
- * Upload an object
421
- */
422
- async PutObject(objectName, data, contentType, metadata) {
423
- try {
424
- // Parse path
425
- const pathParts = objectName.split('/');
426
- const fileName = pathParts.pop() || '';
427
- const parentPath = pathParts.join('/');
428
- // Get or create parent folder
429
- const parentId = await this._getOrCreateFolder(parentPath);
430
- // Check if file already exists
431
- let existingFileId = null;
432
- try {
433
- const existingFile = await this._getItemByPath(objectName);
434
- if (existingFile.type === 'file') {
435
- existingFileId = existingFile.id;
436
- }
437
- }
438
- catch (error) {
439
- // File doesn't exist, will create new
440
- }
441
- // Determine content type if not provided
442
- const effectiveContentType = contentType || mime.lookup(objectName) || 'application/octet-stream';
443
- if (existingFileId) {
444
- // Update existing file
445
- await this._client.files.uploadNewFileVersion(existingFileId, data);
446
- }
447
- else {
448
- // Create new file
449
- await this._client.files.uploadFile(parentId, fileName, data);
450
- }
451
- return true;
452
- }
453
- catch (error) {
454
- console.error('Error putting object', { objectName, error });
455
- return false;
456
- }
457
- }
458
- /**
459
- * Copy an object
460
- */
461
- async CopyObject(sourceObjectName, destinationObjectName) {
462
- try {
463
- // Get source file
464
- const sourceFile = await this._getItemByPath(sourceObjectName);
465
- if (sourceFile.type !== 'file') {
466
- throw new Error(`Not a file: ${sourceObjectName}`);
467
- }
468
- // Parse destination path
469
- const destPathParts = destinationObjectName.split('/');
470
- const destFileName = destPathParts.pop() || '';
471
- const destParentPath = destPathParts.join('/');
472
- // Get or create destination parent folder
473
- const destParentId = await this._getOrCreateFolder(destParentPath);
474
- // Copy the file
475
- await this._client.files.copy(sourceFile.id, destParentId, { name: destFileName });
476
- return true;
477
- }
478
- catch (error) {
479
- console.error('Error copying object', { sourceObjectName, destinationObjectName, error });
480
- return false;
481
- }
482
- }
483
- /**
484
- * Check if an object exists
485
- */
486
- async ObjectExists(objectName) {
487
- try {
488
- await this._getItemByPath(objectName);
489
- return true;
490
- }
491
- catch (error) {
492
- return false;
493
- }
494
- }
495
- /**
496
- * Check if a directory exists
497
- */
498
- async DirectoryExists(directoryPath) {
499
- try {
500
- // Remove trailing slash if present
501
- const normalizedPath = directoryPath.endsWith('/')
502
- ? directoryPath.substring(0, directoryPath.length - 1)
503
- : directoryPath;
504
- const item = await this._getItemByPath(normalizedPath);
505
- return item.type === 'folder';
506
- }
507
- catch (error) {
508
- return false;
509
- }
510
- }
511
- };
512
- exports.BoxFileStorage = BoxFileStorage;
513
- exports.BoxFileStorage = BoxFileStorage = __decorate([
514
- (0, global_1.RegisterClass)(FileStorageBase_1.FileStorageBase, 'Box.com Storage'),
515
- __metadata("design:paramtypes", [])
516
- ], BoxFileStorage);
517
- //# sourceMappingURL=BoxFileStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BoxFileStorage.js","sourceRoot":"","sources":["../../src/drivers/BoxFileStorage.ts"],"names":[],"mappings":"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"}