@memberjunction/storage 3.3.0 → 4.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 (47) hide show
  1. package/dist/__tests__/FileStorageBase.test.js +76 -14
  2. package/dist/__tests__/FileStorageBase.test.js.map +1 -1
  3. package/dist/__tests__/util.test.js +29 -49
  4. package/dist/__tests__/util.test.js.map +1 -1
  5. package/dist/config.js +56 -63
  6. package/dist/config.js.map +1 -1
  7. package/dist/drivers/AWSFileStorage.d.ts +28 -6
  8. package/dist/drivers/AWSFileStorage.d.ts.map +1 -1
  9. package/dist/drivers/AWSFileStorage.js +92 -73
  10. package/dist/drivers/AWSFileStorage.js.map +1 -1
  11. package/dist/drivers/AzureFileStorage.d.ts +26 -3
  12. package/dist/drivers/AzureFileStorage.d.ts.map +1 -1
  13. package/dist/drivers/AzureFileStorage.js +101 -65
  14. package/dist/drivers/AzureFileStorage.js.map +1 -1
  15. package/dist/drivers/BoxFileStorage.d.ts +21 -17
  16. package/dist/drivers/BoxFileStorage.d.ts.map +1 -1
  17. package/dist/drivers/BoxFileStorage.js +76 -107
  18. package/dist/drivers/BoxFileStorage.js.map +1 -1
  19. package/dist/drivers/DropboxFileStorage.d.ts +23 -6
  20. package/dist/drivers/DropboxFileStorage.d.ts.map +1 -1
  21. package/dist/drivers/DropboxFileStorage.js +62 -61
  22. package/dist/drivers/DropboxFileStorage.js.map +1 -1
  23. package/dist/drivers/GoogleDriveFileStorage.d.ts +23 -6
  24. package/dist/drivers/GoogleDriveFileStorage.d.ts.map +1 -1
  25. package/dist/drivers/GoogleDriveFileStorage.js +78 -61
  26. package/dist/drivers/GoogleDriveFileStorage.js.map +1 -1
  27. package/dist/drivers/GoogleFileStorage.d.ts +25 -2
  28. package/dist/drivers/GoogleFileStorage.d.ts.map +1 -1
  29. package/dist/drivers/GoogleFileStorage.js +93 -46
  30. package/dist/drivers/GoogleFileStorage.js.map +1 -1
  31. package/dist/drivers/SharePointFileStorage.d.ts +32 -8
  32. package/dist/drivers/SharePointFileStorage.d.ts.map +1 -1
  33. package/dist/drivers/SharePointFileStorage.js +92 -137
  34. package/dist/drivers/SharePointFileStorage.js.map +1 -1
  35. package/dist/generic/FileStorageBase.d.ts +77 -43
  36. package/dist/generic/FileStorageBase.d.ts.map +1 -1
  37. package/dist/generic/FileStorageBase.js +60 -52
  38. package/dist/generic/FileStorageBase.js.map +1 -1
  39. package/dist/index.d.ts +10 -10
  40. package/dist/index.js +10 -26
  41. package/dist/index.js.map +1 -1
  42. package/dist/util.d.ts +2 -2
  43. package/dist/util.d.ts.map +1 -1
  44. package/dist/util.js +30 -47
  45. package/dist/util.js.map +1 -1
  46. package/package.json +24 -23
  47. package/readme.md +103 -30
package/dist/util.js CHANGED
@@ -1,14 +1,8 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.searchAcrossAccounts = exports.searchAcrossProviders = exports.copyObjectBetweenProviders = exports.listObjects = exports.deleteObject = exports.copyObject = exports.moveObject = exports.createDownloadUrl = exports.createUploadUrl = exports.initializeDriverWithAccountCredentials = exports.initializeDriverWithUserCredentials = void 0;
7
- const global_1 = require("@memberjunction/global");
8
- const core_1 = require("@memberjunction/core");
9
- const credentials_1 = require("@memberjunction/credentials");
10
- const mime_types_1 = __importDefault(require("mime-types"));
11
- const FileStorageBase_1 = require("./generic/FileStorageBase");
1
+ import { MJGlobal } from '@memberjunction/global';
2
+ import { LogStatus } from '@memberjunction/core';
3
+ import { CredentialEngine } from '@memberjunction/credentials';
4
+ import mime from 'mime-types';
5
+ import { FileStorageBase } from './generic/FileStorageBase.js';
12
6
  /**
13
7
  * @deprecated This function is being replaced by the enterprise file storage model.
14
8
  * Use FileStorageAccount with Credential Engine instead.
@@ -21,10 +15,10 @@ const FileStorageBase_1 = require("./generic/FileStorageBase");
21
15
  * @returns A promise resolving to an initialized FileStorageBase driver
22
16
  * @throws Error if the provider requires OAuth (not yet supported in enterprise model)
23
17
  */
24
- async function initializeDriverWithUserCredentials(options) {
18
+ export async function initializeDriverWithUserCredentials(options) {
25
19
  const { providerEntity } = options;
26
20
  // Create the driver instance
27
- const driver = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(FileStorageBase_1.FileStorageBase, providerEntity.ServerDriverKey);
21
+ const driver = MJGlobal.Instance.ClassFactory.CreateInstance(FileStorageBase, providerEntity.ServerDriverKey);
28
22
  // Check if this provider requires OAuth authentication
29
23
  if (providerEntity.RequiresOAuth) {
30
24
  // TODO: Implement Credential Engine integration for OAuth providers
@@ -42,7 +36,6 @@ async function initializeDriverWithUserCredentials(options) {
42
36
  }
43
37
  return driver;
44
38
  }
45
- exports.initializeDriverWithUserCredentials = initializeDriverWithUserCredentials;
46
39
  /**
47
40
  * Initializes a storage driver using account-based credentials from the Credential Engine.
48
41
  * This is the enterprise model where credentials are stored in the Credential entity
@@ -67,10 +60,10 @@ exports.initializeDriverWithUserCredentials = initializeDriverWithUserCredential
67
60
  * const objects = await driver.ListObjects('/');
68
61
  * ```
69
62
  */
70
- async function initializeDriverWithAccountCredentials(options) {
63
+ export async function initializeDriverWithAccountCredentials(options) {
71
64
  const { accountEntity, providerEntity, contextUser } = options;
72
65
  // Create the driver instance using the provider's driver key
73
- const driver = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(FileStorageBase_1.FileStorageBase, providerEntity.ServerDriverKey);
66
+ const driver = MJGlobal.Instance.ClassFactory.CreateInstance(FileStorageBase, providerEntity.ServerDriverKey);
74
67
  if (!driver) {
75
68
  throw new Error(`Failed to create storage driver for provider "${providerEntity.Name}" ` + `with driver key "${providerEntity.ServerDriverKey}"`);
76
69
  }
@@ -82,24 +75,24 @@ async function initializeDriverWithAccountCredentials(options) {
82
75
  // Check if the account has a credential configured
83
76
  if (accountEntity.CredentialID) {
84
77
  // Initialize the Credential Engine if not already done
85
- await credentials_1.CredentialEngine.Instance.Config(false, contextUser);
78
+ await CredentialEngine.Instance.Config(false, contextUser);
86
79
  // Get the credential by ID and decrypt it
87
- const credentialEntity = credentials_1.CredentialEngine.Instance.getCredentialById(accountEntity.CredentialID);
80
+ const credentialEntity = CredentialEngine.Instance.getCredentialById(accountEntity.CredentialID);
88
81
  if (!credentialEntity) {
89
82
  throw new Error(`Credential with ID ${accountEntity.CredentialID} not found for account "${accountEntity.Name}"`);
90
83
  }
91
84
  // Resolve the credential to get decrypted values
92
- const resolved = await credentials_1.CredentialEngine.Instance.getCredential(credentialEntity.Name, {
85
+ const resolved = await CredentialEngine.Instance.getCredential(credentialEntity.Name, {
93
86
  credentialId: accountEntity.CredentialID,
94
87
  contextUser,
95
88
  subsystem: 'FileStorage',
96
89
  });
97
- (0, core_1.LogStatus)(`[initializeDriverWithAccountCredentials] Decrypted credential "${credentialEntity.Name}" for account "${accountEntity.Name}"`);
90
+ LogStatus(`[initializeDriverWithAccountCredentials] Decrypted credential "${credentialEntity.Name}" for account "${accountEntity.Name}"`);
98
91
  // Create a token refresh callback to persist new tokens back to the database
99
92
  // This is critical for providers like Box.com that issue new refresh tokens on each refresh
100
93
  const onTokenRefresh = async (newRefreshToken, newAccessToken) => {
101
94
  try {
102
- (0, core_1.LogStatus)(`[initializeDriverWithAccountCredentials] Token refresh callback invoked for account "${accountEntity.Name}"`);
95
+ LogStatus(`[initializeDriverWithAccountCredentials] Token refresh callback invoked for account "${accountEntity.Name}"`);
103
96
  // Get the current credential values and update with new tokens
104
97
  const updatedValues = { ...resolved.values };
105
98
  updatedValues.refreshToken = newRefreshToken;
@@ -107,8 +100,8 @@ async function initializeDriverWithAccountCredentials(options) {
107
100
  updatedValues.accessToken = newAccessToken;
108
101
  }
109
102
  // Update the credential in the database using the Credential Engine
110
- await credentials_1.CredentialEngine.Instance.updateCredential(accountEntity.CredentialID, updatedValues, contextUser);
111
- (0, core_1.LogStatus)(`[initializeDriverWithAccountCredentials] Successfully persisted new tokens for account "${accountEntity.Name}"`);
103
+ await CredentialEngine.Instance.updateCredential(accountEntity.CredentialID, updatedValues, contextUser);
104
+ LogStatus(`[initializeDriverWithAccountCredentials] Successfully persisted new tokens for account "${accountEntity.Name}"`);
112
105
  }
113
106
  catch (error) {
114
107
  // Log the error but don't throw - the driver still has the tokens in memory
@@ -136,17 +129,16 @@ async function initializeDriverWithAccountCredentials(options) {
136
129
  ...baseConfig,
137
130
  ...config,
138
131
  });
139
- (0, core_1.LogStatus)(`[initializeDriverWithAccountCredentials] Initialized "${accountEntity.Name}" with provider configuration (no credential)`);
132
+ LogStatus(`[initializeDriverWithAccountCredentials] Initialized "${accountEntity.Name}" with provider configuration (no credential)`);
140
133
  }
141
134
  else {
142
135
  // Initialize with just account info (driver may use env vars or other config)
143
136
  await driver.initialize(baseConfig);
144
- (0, core_1.LogStatus)(`[initializeDriverWithAccountCredentials] Warning: No credential or configuration for account "${accountEntity.Name}"`);
137
+ LogStatus(`[initializeDriverWithAccountCredentials] Warning: No credential or configuration for account "${accountEntity.Name}"`);
145
138
  }
146
139
  }
147
140
  return driver;
148
141
  }
149
- exports.initializeDriverWithAccountCredentials = initializeDriverWithAccountCredentials;
150
142
  /**
151
143
  * Internal helper to initialize a storage driver with appropriate credentials.
152
144
  *
@@ -177,7 +169,7 @@ async function initializeDriver(providerEntity, userContext) {
177
169
  });
178
170
  }
179
171
  // No user context - use admin/legacy initialization
180
- const driver = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(FileStorageBase_1.FileStorageBase, providerEntity.ServerDriverKey);
172
+ const driver = MJGlobal.Instance.ClassFactory.CreateInstance(FileStorageBase, providerEntity.ServerDriverKey);
181
173
  // Check if this provider requires OAuth but no user context was provided
182
174
  if (providerEntity.RequiresOAuth) {
183
175
  throw new Error(`Provider "${providerEntity.Name}" requires OAuth authentication. ` + `Please provide userContext parameter with userID and contextUser.`);
@@ -239,9 +231,9 @@ async function initializeDriver(providerEntity, userContext) {
239
231
  * console.log(result.UploadUrl);
240
232
  * ```
241
233
  */
242
- const createUploadUrl = async (providerEntity, input, userContext) => {
234
+ export const createUploadUrl = async (providerEntity, input, userContext) => {
243
235
  const { Name, ProviderID } = input;
244
- const ContentType = input.ContentType ?? mime_types_1.default.lookup(input.Name) ?? 'application/octet-stream';
236
+ const ContentType = input.ContentType ?? mime.lookup(input.Name) ?? 'application/octet-stream';
245
237
  const Status = 'Uploading';
246
238
  await providerEntity.Load(ProviderID);
247
239
  // Initialize driver with user credentials if available, otherwise use admin config
@@ -250,7 +242,6 @@ const createUploadUrl = async (providerEntity, input, userContext) => {
250
242
  const updatedInput = { ...input, ...maybeProviderKey, ContentType, Status };
251
243
  return { updatedInput, UploadUrl };
252
244
  };
253
- exports.createUploadUrl = createUploadUrl;
254
245
  /**
255
246
  * Creates a pre-authenticated download URL for a file from the specified file storage provider.
256
247
  *
@@ -280,11 +271,10 @@ exports.createUploadUrl = createUploadUrl;
280
271
  * console.log(downloadUrl);
281
272
  * ```
282
273
  */
283
- const createDownloadUrl = async (providerEntity, providerKeyOrName, userContext) => {
274
+ export const createDownloadUrl = async (providerEntity, providerKeyOrName, userContext) => {
284
275
  const driver = await initializeDriver(providerEntity, userContext);
285
276
  return driver.CreatePreAuthDownloadUrl(providerKeyOrName);
286
277
  };
287
- exports.createDownloadUrl = createDownloadUrl;
288
278
  /**
289
279
  * Moves an object from one location to another within the specified file storage provider.
290
280
  *
@@ -319,11 +309,10 @@ exports.createDownloadUrl = createDownloadUrl;
319
309
  * }
320
310
  * ```
321
311
  */
322
- const moveObject = async (providerEntity, oldProviderKeyOrName, newProviderKeyOrName, userContext) => {
312
+ export const moveObject = async (providerEntity, oldProviderKeyOrName, newProviderKeyOrName, userContext) => {
323
313
  const driver = await initializeDriver(providerEntity, userContext);
324
314
  return driver.MoveObject(oldProviderKeyOrName, newProviderKeyOrName);
325
315
  };
326
- exports.moveObject = moveObject;
327
316
  /**
328
317
  * Copies an object from one location to another within the specified file storage provider.
329
318
  *
@@ -354,11 +343,10 @@ exports.moveObject = moveObject;
354
343
  * }
355
344
  * ```
356
345
  */
357
- const copyObject = async (providerEntity, sourceProviderKeyOrName, destinationProviderKeyOrName, userContext) => {
346
+ export const copyObject = async (providerEntity, sourceProviderKeyOrName, destinationProviderKeyOrName, userContext) => {
358
347
  const driver = await initializeDriver(providerEntity, userContext);
359
348
  return driver.CopyObject(sourceProviderKeyOrName, destinationProviderKeyOrName);
360
349
  };
361
- exports.copyObject = copyObject;
362
350
  /**
363
351
  * Deletes a file from the specified file storage provider.
364
352
  *
@@ -390,7 +378,7 @@ exports.copyObject = copyObject;
390
378
  * }
391
379
  * ```
392
380
  */
393
- const deleteObject = async (providerEntity, providerKeyOrName, userContext) => {
381
+ export const deleteObject = async (providerEntity, providerKeyOrName, userContext) => {
394
382
  console.log('[deleteObject] Called with:', {
395
383
  providerName: providerEntity.Name,
396
384
  providerID: providerEntity.ID,
@@ -407,7 +395,6 @@ const deleteObject = async (providerEntity, providerKeyOrName, userContext) => {
407
395
  console.log('[deleteObject] Result:', result);
408
396
  return result;
409
397
  };
410
- exports.deleteObject = deleteObject;
411
398
  /**
412
399
  * Lists objects (files) and prefixes (directories) in a storage provider at the specified path.
413
400
  *
@@ -443,7 +430,7 @@ exports.deleteObject = deleteObject;
443
430
  * const docsResult = await listObjects(fileStorageProvider, 'documents/', '/', userContext);
444
431
  * ```
445
432
  */
446
- const listObjects = async (providerEntity, prefix, delimiter = '/', userContext) => {
433
+ export const listObjects = async (providerEntity, prefix, delimiter = '/', userContext) => {
447
434
  console.log('[listObjects] Starting with:', {
448
435
  providerName: providerEntity.Name,
449
436
  serverDriverKey: providerEntity.ServerDriverKey,
@@ -463,7 +450,6 @@ const listObjects = async (providerEntity, prefix, delimiter = '/', userContext)
463
450
  });
464
451
  return result;
465
452
  };
466
- exports.listObjects = listObjects;
467
453
  /**
468
454
  * Copies a file from one storage provider to another.
469
455
  *
@@ -500,7 +486,7 @@ exports.listObjects = listObjects;
500
486
  * }
501
487
  * ```
502
488
  */
503
- const copyObjectBetweenProviders = async (sourceProviderEntity, destinationProviderEntity, sourcePath, destinationPath, options) => {
489
+ export const copyObjectBetweenProviders = async (sourceProviderEntity, destinationProviderEntity, sourcePath, destinationPath, options) => {
504
490
  console.log('[copyObjectBetweenProviders] Starting transfer:', {
505
491
  sourceProvider: sourceProviderEntity.Name,
506
492
  destinationProvider: destinationProviderEntity.Name,
@@ -546,7 +532,7 @@ const copyObjectBetweenProviders = async (sourceProviderEntity, destinationProvi
546
532
  }
547
533
  catch {
548
534
  // Use mime-types to guess content type from filename
549
- const mimeType = mime_types_1.default.lookup(sourcePath);
535
+ const mimeType = mime.lookup(sourcePath);
550
536
  if (mimeType) {
551
537
  contentType = mimeType;
552
538
  }
@@ -573,7 +559,6 @@ const copyObjectBetweenProviders = async (sourceProviderEntity, destinationProvi
573
559
  return result;
574
560
  }
575
561
  };
576
- exports.copyObjectBetweenProviders = copyObjectBetweenProviders;
577
562
  /**
578
563
  * Searches for files across multiple storage providers in parallel.
579
564
  *
@@ -614,7 +599,7 @@ exports.copyObjectBetweenProviders = copyObjectBetweenProviders;
614
599
  * }
615
600
  * ```
616
601
  */
617
- const searchAcrossProviders = async (providerEntities, query, options) => {
602
+ export const searchAcrossProviders = async (providerEntities, query, options) => {
618
603
  console.log('[searchAcrossProviders] Starting search:', {
619
604
  providerCount: providerEntities.length,
620
605
  providers: providerEntities.map((p) => p.Name),
@@ -702,7 +687,6 @@ const searchAcrossProviders = async (providerEntities, query, options) => {
702
687
  });
703
688
  return aggregatedResult;
704
689
  };
705
- exports.searchAcrossProviders = searchAcrossProviders;
706
690
  /**
707
691
  * Searches for files across multiple storage accounts in parallel.
708
692
  *
@@ -736,7 +720,7 @@ exports.searchAcrossProviders = searchAcrossProviders;
736
720
  * }
737
721
  * ```
738
722
  */
739
- const searchAcrossAccounts = async (accounts, query, options) => {
723
+ export const searchAcrossAccounts = async (accounts, query, options) => {
740
724
  console.log('[searchAcrossAccounts] Starting search:', {
741
725
  accountCount: accounts.length,
742
726
  accounts: accounts.map((a) => ({ account: a.accountEntity.Name, provider: a.providerEntity.Name })),
@@ -830,5 +814,4 @@ const searchAcrossAccounts = async (accounts, query, options) => {
830
814
  });
831
815
  return aggregatedResult;
832
816
  };
833
- exports.searchAcrossAccounts = searchAcrossAccounts;
834
817
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;AACA,mDAAkD;AAClD,+CAA2D;AAC3D,6DAA+D;AAC/D,4DAA8B;AAC9B,+DAAwH;AAwCxH;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,mCAAmC,CAAC,OAAiC;IACzF,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAEnC,6BAA6B;IAC7B,MAAM,MAAM,GAAG,iBAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAkB,iCAAe,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAE/H,uDAAuD;IACvD,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;QACjC,oEAAoE;QACpE,mEAAmE;QACnE,MAAM,IAAI,KAAK,CACb,aAAa,cAAc,CAAC,IAAI,mCAAmC,GAAG,wEAAwE,CAC/I,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,kEAAkE;QAClE,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,qDAAqD,cAAc,CAAC,IAAI,2BAA2B,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAxBD,kFAwBC;AA+BD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,sCAAsC,CAAC,OAAoC;IAC/F,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAE/D,6DAA6D;IAC7D,MAAM,MAAM,GAAG,iBAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAkB,iCAAe,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAE/H,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,cAAc,CAAC,IAAI,IAAI,GAAG,oBAAoB,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;IACpJ,CAAC;IAED,gFAAgF;IAChF,MAAM,UAAU,GAA0B;QACxC,SAAS,EAAE,aAAa,CAAC,EAAE;QAC3B,WAAW,EAAE,aAAa,CAAC,IAAI;KAChC,CAAC;IAEF,mDAAmD;IACnD,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;QAC/B,uDAAuD;QACvD,MAAM,8BAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAE3D,0CAA0C;QAC1C,MAAM,gBAAgB,GAAG,8BAAgB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEjG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,aAAa,CAAC,YAAY,2BAA2B,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;QACpH,CAAC;QAED,iDAAiD;QACjD,MAAM,QAAQ,GAAG,MAAM,8BAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE;YACpF,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,WAAW;YACX,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;QAEH,IAAA,gBAAS,EAAC,kEAAkE,gBAAgB,CAAC,IAAI,kBAAkB,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;QAE1I,6EAA6E;QAC7E,4FAA4F;QAC5F,MAAM,cAAc,GAAyB,KAAK,EAAE,eAAuB,EAAE,cAAuB,EAAE,EAAE;YACtG,IAAI,CAAC;gBACH,IAAA,gBAAS,EAAC,wFAAwF,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;gBAEzH,+DAA+D;gBAC/D,MAAM,aAAa,GAA2B,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrE,aAAa,CAAC,YAAY,GAAG,eAAe,CAAC;gBAC7C,IAAI,cAAc,EAAE,CAAC;oBACnB,aAAa,CAAC,WAAW,GAAG,cAAc,CAAC;gBAC7C,CAAC;gBAED,oEAAoE;gBACpE,MAAM,8BAAgB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;gBAEzG,IAAA,gBAAS,EAAC,2FAA2F,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;YAC9H,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4EAA4E;gBAC5E,0EAA0E;gBAC1E,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5E,OAAO,CAAC,KAAK,CAAC,sFAAsF,aAAa,CAAC,IAAI,MAAM,YAAY,EAAE,CAAC,CAAC;gBAC5I,OAAO,CAAC,KAAK,CAAC,iGAAiG,CAAC,CAAC;YACnH,CAAC;QACH,CAAC,CAAC;QAEF,+CAA+C;QAC/C,UAAU,CAAC,cAAc,GAAG,cAAc,CAAC;QAE3C,iGAAiG;QACjG,MAAM,MAAM,CAAC,UAAU,CAAC;YACtB,GAAG,UAAU;YACb,GAAG,QAAQ,CAAC,MAAM;SACnB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,0EAA0E;QAC1E,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtC,iDAAiD;YACjD,MAAM,MAAM,CAAC,UAAU,CAAC;gBACtB,GAAG,UAAU;gBACb,GAAG,MAAM;aACV,CAAC,CAAC;YACH,IAAA,gBAAS,EAAC,yDAAyD,aAAa,CAAC,IAAI,+CAA+C,CAAC,CAAC;QACxI,CAAC;aAAM,CAAC;YACN,8EAA8E;YAC9E,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACpC,IAAA,gBAAS,EAAC,iGAAiG,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;QACpI,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA1FD,wFA0FC;AAWD;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,gBAAgB,CAAC,cAAyC,EAAE,WAAwC;IACjH,+EAA+E;IAC/E,IAAI,WAAW,EAAE,aAAa,EAAE,CAAC;QAC/B,OAAO,sCAAsC,CAAC;YAC5C,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,cAAc;YACd,WAAW,EAAE,WAAW,CAAC,WAAW;SACrC,CAAC,CAAC;IACL,CAAC;IAED,6DAA6D;IAC7D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,mCAAmC,CAAC;YACzC,cAAc;YACd,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,WAAW,EAAE,WAAW,CAAC,WAAW;SACrC,CAAC,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,MAAM,MAAM,GAAG,iBAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAkB,iCAAe,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAE/H,yEAAyE;IACzE,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,aAAa,cAAc,CAAC,IAAI,mCAAmC,GAAG,mEAAmE,CAAC,CAAC;IAC7J,CAAC;IAED,sCAAsC;IACtC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAkB,CAAC;IACxE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACI,MAAM,eAAe,GAAG,KAAK,EAClC,cAAyC,EACzC,KAAa,EACb,WAAgC,EAI/B,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAEnC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,oBAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC;IAC/F,MAAM,MAAM,GAAG,WAAW,CAAC;IAE3B,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEtC,mFAAmF;IACnF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAE5E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACrC,CAAC,CAAC;AAtBW,QAAA,eAAe,mBAsB1B;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACI,MAAM,iBAAiB,GAAG,KAAK,EACpC,cAAyC,EACzC,iBAAyB,EACzB,WAAgC,EACf,EAAE;IACnB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;AAC5D,CAAC,CAAC;AAPW,QAAA,iBAAiB,qBAO5B;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACI,MAAM,UAAU,GAAG,KAAK,EAC7B,cAAyC,EACzC,oBAA4B,EAC5B,oBAA4B,EAC5B,WAAgC,EACd,EAAE;IACpB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AACvE,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACI,MAAM,UAAU,GAAG,KAAK,EAC7B,cAAyC,EACzC,uBAA+B,EAC/B,4BAAoC,EACpC,WAAgC,EACd,EAAE;IACpB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,UAAU,CAAC,uBAAuB,EAAE,4BAA4B,CAAC,CAAC;AAClF,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACI,MAAM,YAAY,GAAG,KAAK,EAC/B,cAAyC,EACzC,iBAAyB,EACzB,WAAgC,EACd,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE;QACzC,YAAY,EAAE,cAAc,CAAC,IAAI;QACjC,UAAU,EAAE,cAAc,CAAC,EAAE;QAC7B,eAAe,EAAE,cAAc,CAAC,eAAe;QAC/C,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE;QAChD,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;QACnC,eAAe,EAAE,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU;KAC3D,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAE9C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAxBW,QAAA,YAAY,gBAwBvB;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACI,MAAM,WAAW,GAAG,KAAK,EAC9B,cAAyC,EACzC,MAAc,EACd,YAAoB,GAAG,EACvB,WAAgC,EACgC,EAAE;IAClE,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE;QAC1C,YAAY,EAAE,cAAc,CAAC,IAAI;QACjC,eAAe,EAAE,cAAc,CAAC,eAAe;QAC/C,MAAM;QACN,SAAS;QACT,cAAc,EAAE,CAAC,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE;QAC/C,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE;QACnC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;KACtC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA5BW,QAAA,WAAW,eA4BtB;AAyBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACI,MAAM,0BAA0B,GAAG,KAAK,EAC7C,oBAA+C,EAC/C,yBAAoD,EACpD,UAAkB,EAClB,eAAuB,EACvB,OAAqC,EACA,EAAE;IACvC,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE;QAC7D,cAAc,EAAE,oBAAoB,CAAC,IAAI;QACzC,mBAAmB,EAAE,yBAAyB,CAAC,IAAI;QACnD,UAAU;QACV,eAAe;KAChB,CAAC,CAAC;IAEH,MAAM,MAAM,GAA+B;QACzC,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,oBAAoB,CAAC,IAAI;QACzC,mBAAmB,EAAE,yBAAyB,CAAC,IAAI;QACnD,UAAU;QACV,eAAe;KAChB,CAAC;IAEF,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAE9F,mEAAmE;QACnE,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,yBAAyB,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAEtG,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;QAE9F,uFAAuF;QACvF,2EAA2E;QAC3E,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE;YAC9D,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,oBAAoB;SACjC,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAElF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,GAAG,wCAAwC,oBAAoB,EAAE,CAAC;YAChF,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oDAAoD,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE5F,gCAAgC;QAChC,IAAI,WAAW,GAAG,0BAA0B,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC1F,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;YACrD,MAAM,QAAQ,GAAG,oBAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,QAAQ,EAAE,CAAC;gBACb,WAAW,GAAG,QAAQ,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yEAAyE,EAAE,WAAW,CAAC,CAAC;QAEpG,iCAAiC;QACjC,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEzF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC1C,MAAM,CAAC,OAAO,GAAG,uBAAuB,QAAQ,CAAC,MAAM,eAAe,oBAAoB,CAAC,IAAI,OAAO,yBAAyB,CAAC,IAAI,EAAE,CAAC;YACvI,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,GAAG,yCAAyC,eAAe,EAAE,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,MAAM,CAAC,OAAO,GAAG,oBAAoB,YAAY,EAAE,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAxFW,QAAA,0BAA0B,8BAwFrC;AAoDF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACI,MAAM,qBAAqB,GAAG,KAAK,EACxC,gBAA6C,EAC7C,KAAa,EACb,OAAsC,EACF,EAAE;IACtC,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE;QACtD,aAAa,EAAE,gBAAgB,CAAC,MAAM;QACtC,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,KAAK;QACL,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE;KACnG,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,OAAO,EAAE,qBAAqB,IAAI,EAAE,CAAC;IACxD,MAAM,aAAa,GAAsB;QACvC,UAAU;QACV,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,KAAK;KAC/C,CAAC;IAEF,2CAA2C;IAC3C,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,EAAiC,EAAE;QAClG,MAAM,cAAc,GAAyB;YAC3C,UAAU,EAAE,cAAc,CAAC,EAAE;YAC7B,YAAY,EAAE,cAAc,CAAC,IAAI;YACjC,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;gBACnC,cAAc,CAAC,YAAY,GAAG,uCAAuC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,CAAC,IAAI,2BAA2B,CAAC,CAAC;gBACvF,OAAO,cAAc,CAAC;YACxB,CAAC;YAED,kDAAkD;YAClD,MAAM,WAAW,GAAG,OAAO,EAAE,oBAAoB,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAE1E,uDAAuD;YACvD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAEnE,iBAAiB;YACjB,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,CAAC,IAAI,uBAAuB,CAAC,CAAC;YACnF,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAEpE,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,cAAc,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YAC9C,cAAc,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;YACxD,cAAc,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YAC9C,cAAc,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;YAE1D,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,CAAC,IAAI,WAAW,YAAY,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;QAC9G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC9E,cAAc,CAAC,YAAY,GAAG,YAAY,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,2BAA2B,cAAc,CAAC,IAAI,WAAW,EAAE,YAAY,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAEhE,oBAAoB;IACpB,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;YAC7B,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,mBAAmB,EAAE,CAAC;gBACtB,oBAAoB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,eAAe,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,eAAe,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAA8B;QAClD,eAAe;QACf,oBAAoB;QACpB,mBAAmB;QACnB,eAAe;KAChB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE;QACtD,oBAAoB;QACpB,mBAAmB;QACnB,eAAe;KAChB,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAxGW,QAAA,qBAAqB,yBAwGhC;AAkEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACI,MAAM,oBAAoB,GAAG,KAAK,EACvC,QAA8B,EAC9B,KAAa,EACb,OAAoC,EACD,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE;QACrD,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACnG,KAAK;QACL,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;IACtD,MAAM,aAAa,GAAsB;QACvC,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,KAAK;KAC9C,CAAC;IAEF,0CAA0C;IAC1C,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,EAAgC,EAAE;QAC5G,MAAM,aAAa,GAAwB;YACzC,SAAS,EAAE,aAAa,CAAC,EAAE;YAC3B,WAAW,EAAE,aAAa,CAAC,IAAI;YAC/B,UAAU,EAAE,cAAc,CAAC,EAAE;YAC7B,YAAY,EAAE,cAAc,CAAC,IAAI;YACjC,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;gBACnC,aAAa,CAAC,YAAY,GAAG,uCAAuC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,0BAA0B,aAAa,CAAC,IAAI,oCAAoC,CAAC,CAAC;gBAC9F,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,mDAAmD;YACnD,MAAM,MAAM,GAAG,MAAM,sCAAsC,CAAC;gBAC1D,aAAa;gBACb,cAAc;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,iBAAiB;YACjB,OAAO,CAAC,GAAG,CAAC,0BAA0B,aAAa,CAAC,IAAI,uBAAuB,CAAC,CAAC;YACjF,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAEpE,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;YAC7B,aAAa,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YAC7C,aAAa,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;YACvD,aAAa,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YAC7C,aAAa,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC;YAEzD,OAAO,CAAC,GAAG,CAAC,0BAA0B,aAAa,CAAC,IAAI,WAAW,YAAY,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC9E,aAAa,CAAC,YAAY,GAAG,YAAY,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,0BAA0B,aAAa,CAAC,IAAI,WAAW,EAAE,YAAY,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAEhE,oBAAoB;IACpB,MAAM,cAAc,GAA0B,EAAE,CAAC;IACjD,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;YAC7B,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE5B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,kBAAkB,EAAE,CAAC;gBACrB,oBAAoB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,cAAc,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAA6B;QACjD,cAAc;QACd,oBAAoB;QACpB,kBAAkB;QAClB,cAAc;KACf,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE;QACrD,oBAAoB;QACpB,kBAAkB;QAClB,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AA7GW,QAAA,oBAAoB,wBA6G/B"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/storage",
3
- "version": "3.3.0",
3
+ "type": "module",
4
+ "version": "4.0.0",
4
5
  "description": "This library provides a set of objects that handle the interface between the server-side API and various cloud storage providers.",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
@@ -9,7 +10,7 @@
9
10
  ],
10
11
  "scripts": {
11
12
  "start": "ts-node-dev src/index.ts",
12
- "build": "tsc",
13
+ "build": "tsc && tsc-alias -f",
13
14
  "watch": "tsc -w",
14
15
  "test": "jest",
15
16
  "test:watch": "jest --watch",
@@ -18,34 +19,34 @@
18
19
  "author": "MemberJunction.com",
19
20
  "license": "ISC",
20
21
  "devDependencies": {
21
- "@types/jest": "^29.5.12",
22
- "jest": "^29.7.0",
23
- "ts-jest": "^29.1.2",
22
+ "@types/jest": "^30.0.0",
23
+ "jest": "^30.2.0",
24
+ "ts-jest": "^29.4.6",
24
25
  "ts-node-dev": "^2.0.0",
25
- "typescript": "^5.4.5"
26
+ "typescript": "^5.9.3"
26
27
  },
27
28
  "dependencies": {
28
- "@aws-sdk/client-s3": "^3.537.0",
29
- "@aws-sdk/s3-request-presigner": "^3.537.0",
30
- "@azure/identity": "^4.0.1",
31
- "@azure/storage-blob": "^12.17.0",
32
- "@google-cloud/storage": "^7.9.0",
33
- "@memberjunction/core": "3.3.0",
34
- "@memberjunction/core-entities": "3.3.0",
35
- "@memberjunction/credentials": "3.3.0",
36
- "@memberjunction/global": "3.3.0",
37
- "@microsoft/mgt-element": "^3.1.3",
38
- "@microsoft/mgt-msal2-provider": "^3.1.3",
39
- "@microsoft/mgt-sharepoint-provider": "^3.1.3",
29
+ "@aws-sdk/client-s3": "^3.984.0",
30
+ "@aws-sdk/s3-request-presigner": "^3.984.0",
31
+ "@azure/identity": "^4.13.0",
32
+ "@azure/storage-blob": "^12.30.0",
33
+ "@google-cloud/storage": "^7.19.0",
34
+ "@memberjunction/core": "4.0.0",
35
+ "@memberjunction/core-entities": "4.0.0",
36
+ "@memberjunction/credentials": "4.0.0",
37
+ "@memberjunction/global": "4.0.0",
38
+ "@microsoft/mgt-element": "^4.6.0",
39
+ "@microsoft/mgt-msal2-provider": "^4.6.0",
40
+ "@microsoft/mgt-sharepoint-provider": "^4.6.0",
40
41
  "@microsoft/microsoft-graph-client": "^3.0.7",
41
- "@microsoft/microsoft-graph-types": "^2.40.0",
42
- "box-node-sdk": "^10.0.0",
42
+ "@microsoft/microsoft-graph-types": "^2.43.1",
43
+ "box-node-sdk": "^10.3.0",
43
44
  "cosmiconfig": "^9.0.0",
44
45
  "dropbox": "^10.34.0",
45
46
  "env-var": "^7.4.1",
46
- "googleapis": "^134.0.0",
47
- "mime-types": "^2.1.35",
48
- "zod": "^3.24.2"
47
+ "googleapis": "^171.4.0",
48
+ "mime-types": "^3.0.2",
49
+ "zod": "~3.24.4"
49
50
  },
50
51
  "repository": {
51
52
  "type": "git",
package/readme.md CHANGED
@@ -53,19 +53,71 @@ This package depends on:
53
53
 
54
54
  ## Usage
55
55
 
56
- ### Basic Setup
56
+ ### Standard Usage Pattern
57
57
 
58
- First, configure the environment variables required for your chosen storage provider(s). You can implement multiple providers simultaneously and switch between them based on your application requirements.
58
+ **CRITICAL**: Always follow these steps when using storage providers:
59
59
 
60
- Refer to the documentation for each storage provider for detailed configuration requirements (see the "Storage Provider Configuration" section below).
60
+ 1. Create provider instance
61
+ 2. **Call `initialize()`** (with or without config)
62
+ 3. Use provider
63
+
64
+ The `initialize()` method is smart enough to handle both simple deployments (environment variables) and multi-tenant deployments (database credentials).
65
+
66
+ ### Basic Setup - Simple Deployment (Environment Variables)
67
+
68
+ For single-tenant applications, development, testing, or simple production deployments:
61
69
 
62
- #### Azure Blob Storage Example
63
70
  ```bash
64
- STORAGE_AZURE_CONTAINER=your-container-name
65
- STORAGE_AZURE_ACCOUNT_NAME=your-account-name
66
- STORAGE_AZURE_ACCOUNT_KEY=your-account-key
71
+ # Example: Azure Blob Storage
72
+ export STORAGE_AZURE_CONTAINER=your-container-name
73
+ export STORAGE_AZURE_ACCOUNT_NAME=your-account-name
74
+ export STORAGE_AZURE_ACCOUNT_KEY=your-account-key
75
+ ```
76
+
77
+ ```typescript
78
+ import { AzureFileStorage } from '@memberjunction/storage';
79
+
80
+ // Constructor loads environment variables
81
+ const storage = new AzureFileStorage();
82
+
83
+ // ALWAYS call initialize() - no config needed for env var deployments
84
+ await storage.initialize();
85
+
86
+ // Provider is now ready to use
87
+ await storage.ListObjects('/');
88
+ ```
89
+
90
+ ### Multi-Tenant Enterprise (Database Credentials)
91
+
92
+ For enterprise applications managing multiple storage accounts:
93
+
94
+ ```typescript
95
+ import { FileStorageEngine } from '@memberjunction/core-entities';
96
+ import { initializeDriverWithAccountCredentials } from '@memberjunction/storage/util';
97
+
98
+ // Load account from database
99
+ const engine = FileStorageEngine.Instance;
100
+ await engine.Config(false, contextUser);
101
+
102
+ const accountWithProvider = engine.GetAccountWithProvider(accountId);
103
+
104
+ // Infrastructure utility handles credential decryption and initialization
105
+ const storage = await initializeDriverWithAccountCredentials({
106
+ accountEntity: accountWithProvider.account,
107
+ providerEntity: accountWithProvider.provider,
108
+ contextUser
109
+ });
110
+
111
+ // Provider is ready - credentials were automatically decrypted and initialized
112
+ await storage.ListObjects('/');
67
113
  ```
68
114
 
115
+ **Key Advantage**: The `initializeDriverWithAccountCredentials()` utility:
116
+ - Automatically retrieves the credential by ID
117
+ - Decrypts it using CredentialEngine
118
+ - Calls `initialize()` with the decrypted values
119
+ - Returns a fully configured provider instance
120
+
69
121
  ### Using Utility Functions (Recommended)
70
122
 
71
123
  The library provides high-level utility functions that work with MemberJunction's entity system:
@@ -119,27 +171,41 @@ async function fileOperationsExample() {
119
171
 
120
172
  ### Direct Provider Usage
121
173
 
122
- You can also work directly with a storage provider by instantiating it using the MemberJunction class factory:
174
+ You can work directly with a storage provider by instantiating it:
123
175
 
124
176
  ```typescript
125
177
  import { FileStorageBase } from '@memberjunction/storage';
126
178
  import { MJGlobal } from '@memberjunction/global';
127
179
 
128
180
  async function directProviderExample() {
129
- // Create storage instance using the class factory (recommended)
130
- const storage = MJGlobal.Instance.ClassFactory.CreateInstance<FileStorageBase>(
131
- FileStorageBase,
181
+ // Method 1: Direct instantiation (simple deployment with env vars)
182
+ const storage = new AzureFileStorage(); // Constructor loads env vars
183
+ await storage.initialize(); // ALWAYS call initialize()
184
+
185
+ // Method 2: Using class factory (dynamic provider selection)
186
+ const storage2 = MJGlobal.Instance.ClassFactory.CreateInstance<FileStorageBase>(
187
+ FileStorageBase,
132
188
  'Azure Blob Storage'
133
189
  );
134
-
135
- // Initialize the storage provider if needed
136
- await storage.initialize();
137
-
190
+ await storage2.initialize(); // ALWAYS call initialize()
191
+
192
+ // Method 3: Multi-tenant with manual initialization
193
+ const storage3 = new AzureFileStorage();
194
+ await storage3.initialize({
195
+ accountId: '12345',
196
+ accountName: 'Azure Account',
197
+ accountName: 'myaccount',
198
+ accountKey: '...',
199
+ defaultContainer: 'my-container'
200
+ });
201
+
202
+ // Now you can use any of the storage methods:
203
+
138
204
  // List all files in a directory
139
205
  const result = await storage.ListObjects('documents/');
140
206
  console.log('Files:', result.objects);
141
207
  console.log('Directories:', result.prefixes);
142
-
208
+
143
209
  // Display detailed metadata for each file
144
210
  for (const file of result.objects) {
145
211
  console.log(`\nFile: ${file.name}`);
@@ -150,54 +216,61 @@ async function directProviderExample() {
150
216
  console.log(` Modified: ${file.lastModified}`);
151
217
  console.log(` Is Directory: ${file.isDirectory}`);
152
218
  }
153
-
219
+
154
220
  // Create a directory
155
221
  const dirCreated = await storage.CreateDirectory('documents/reports/');
156
222
  console.log(`Directory created: ${dirCreated}`);
157
-
223
+
158
224
  // Upload a file directly with metadata
159
225
  const content = Buffer.from('Hello, World!');
160
226
  const uploaded = await storage.PutObject(
161
- 'documents/reports/hello.txt',
162
- content,
227
+ 'documents/reports/hello.txt',
228
+ content,
163
229
  'text/plain',
164
- {
230
+ {
165
231
  author: 'John Doe',
166
232
  department: 'Engineering',
167
- version: '1.0'
233
+ version: '1.0'
168
234
  }
169
235
  );
170
236
  console.log(`File uploaded: ${uploaded}`);
171
-
237
+
172
238
  // Get file metadata without downloading content
173
239
  const metadata = await storage.GetObjectMetadata('documents/reports/hello.txt');
174
240
  console.log('File metadata:', metadata);
175
-
241
+
176
242
  // Download file content
177
243
  const fileContent = await storage.GetObject('documents/reports/hello.txt');
178
244
  console.log('File content:', fileContent.toString('utf8'));
179
-
245
+
180
246
  // Copy a file
181
247
  const copied = await storage.CopyObject(
182
- 'documents/reports/hello.txt',
248
+ 'documents/reports/hello.txt',
183
249
  'documents/archive/hello-backup.txt'
184
250
  );
185
251
  console.log(`File copied: ${copied}`);
186
-
252
+
187
253
  // Check if a file exists
188
254
  const exists = await storage.ObjectExists('documents/reports/hello.txt');
189
255
  console.log(`File exists: ${exists}`);
190
-
256
+
191
257
  // Check if a directory exists
192
258
  const dirExists = await storage.DirectoryExists('documents/reports/');
193
259
  console.log(`Directory exists: ${dirExists}`);
194
-
260
+
195
261
  // Delete a directory and all its contents
196
262
  const dirDeleted = await storage.DeleteDirectory('documents/reports/', true);
197
263
  console.log(`Directory deleted: ${dirDeleted}`);
198
264
  }
199
265
  ```
200
266
 
267
+ ### Key Principle
268
+
269
+ **Always call `initialize()`** after creating a provider instance. It's smart enough to:
270
+ - Use environment variables when called with no config
271
+ - Override with database credentials when called with config
272
+ - Handle both simple and multi-tenant deployments seamlessly
273
+
201
274
  ### Searching Files
202
275
 
203
276
  Providers with native search capabilities support the `SearchFiles` method for finding files by name, content, and metadata:
@@ -345,6 +418,7 @@ type FileSearchResultSet = {
345
418
 
346
419
  All storage providers implement these methods:
347
420
 
421
+ - **`initialize(config?: StorageProviderConfig): Promise<void>`** - **REQUIRED**: Always call after creating instance. Omit config for env vars, provide config for multi-tenant.
348
422
  - `CreatePreAuthUploadUrl(objectName: string): Promise<CreatePreAuthUploadUrlPayload>`
349
423
  - `CreatePreAuthDownloadUrl(objectName: string): Promise<string>`
350
424
  - `MoveObject(oldObjectName: string, newObjectName: string): Promise<boolean>`
@@ -359,7 +433,6 @@ All storage providers implement these methods:
359
433
  - `ObjectExists(objectName: string): Promise<boolean>`
360
434
  - `DirectoryExists(directoryPath: string): Promise<boolean>`
361
435
  - `SearchFiles(query: string, options?: FileSearchOptions): Promise<FileSearchResultSet>` (throws `UnsupportedOperationError` for providers without native search)
362
- - `initialize(): Promise<void>` (optional, for async initialization)
363
436
 
364
437
  ### Utility Functions
365
438