@punks/backend-entity-manager 0.0.120 → 0.0.122

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 (52) hide show
  1. package/dist/cjs/index.js +314 -26
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/abstractions/files.d.ts +64 -0
  4. package/dist/cjs/types/abstractions/index.d.ts +1 -0
  5. package/dist/cjs/types/abstractions/settings.d.ts +2 -0
  6. package/dist/cjs/types/ioc/index.d.ts +4 -0
  7. package/dist/cjs/types/platforms/nest/__test__/server/database/core/entities/appFileReference.entity.d.ts +13 -0
  8. package/dist/cjs/types/platforms/nest/__test__/server/database/core/index.d.ts +4 -0
  9. package/dist/cjs/types/platforms/nest/__test__/server/database/core/repositories/appFileReference.repository.d.ts +11 -0
  10. package/dist/cjs/types/platforms/nest/__test__/server/database/core/repositories.d.ts +2 -1
  11. package/dist/cjs/types/platforms/nest/decorators/files.d.ts +7 -0
  12. package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +2 -0
  13. package/dist/cjs/types/platforms/nest/plugins/buckets/aws-s3/errors/index.d.ts +1 -1
  14. package/dist/cjs/types/platforms/nest/plugins/buckets/aws-s3/index.d.ts +2 -2
  15. package/dist/cjs/types/platforms/nest/plugins/buckets/aws-s3/provider/bucket.d.ts +14 -0
  16. package/dist/cjs/types/platforms/nest/plugins/buckets/aws-s3/provider/files.d.ts +12 -0
  17. package/dist/cjs/types/platforms/nest/plugins/buckets/aws-s3/provider/index.d.ts +2 -14
  18. package/dist/cjs/types/platforms/nest/plugins/buckets/aws-s3/settings/index.d.ts +5 -0
  19. package/dist/cjs/types/platforms/nest/plugins/buckets/testing/mock.d.ts +10 -0
  20. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +4 -0
  21. package/dist/cjs/types/platforms/nest/services/files/index.d.ts +12 -0
  22. package/dist/cjs/types/platforms/nest/services/index.d.ts +1 -0
  23. package/dist/cjs/types/platforms/nest/services/providers.d.ts +2 -1
  24. package/dist/cjs/types/providers/services.d.ts +12 -4
  25. package/dist/cjs/types/symbols/ioc.d.ts +7 -0
  26. package/dist/esm/index.js +315 -27
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/types/abstractions/files.d.ts +64 -0
  29. package/dist/esm/types/abstractions/index.d.ts +1 -0
  30. package/dist/esm/types/abstractions/settings.d.ts +2 -0
  31. package/dist/esm/types/ioc/index.d.ts +4 -0
  32. package/dist/esm/types/platforms/nest/__test__/server/database/core/entities/appFileReference.entity.d.ts +13 -0
  33. package/dist/esm/types/platforms/nest/__test__/server/database/core/index.d.ts +4 -0
  34. package/dist/esm/types/platforms/nest/__test__/server/database/core/repositories/appFileReference.repository.d.ts +11 -0
  35. package/dist/esm/types/platforms/nest/__test__/server/database/core/repositories.d.ts +2 -1
  36. package/dist/esm/types/platforms/nest/decorators/files.d.ts +7 -0
  37. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +2 -0
  38. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/errors/index.d.ts +1 -1
  39. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/index.d.ts +2 -2
  40. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/provider/bucket.d.ts +14 -0
  41. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/provider/files.d.ts +12 -0
  42. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/provider/index.d.ts +2 -14
  43. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/settings/index.d.ts +5 -0
  44. package/dist/esm/types/platforms/nest/plugins/buckets/testing/mock.d.ts +10 -0
  45. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +4 -0
  46. package/dist/esm/types/platforms/nest/services/files/index.d.ts +12 -0
  47. package/dist/esm/types/platforms/nest/services/index.d.ts +1 -0
  48. package/dist/esm/types/platforms/nest/services/providers.d.ts +2 -1
  49. package/dist/esm/types/providers/services.d.ts +12 -4
  50. package/dist/esm/types/symbols/ioc.d.ts +7 -0
  51. package/dist/index.d.ts +104 -4
  52. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -627,7 +627,7 @@ class EntitiesDeleteCommand {
627
627
  }
628
628
  }
629
629
 
630
- const createDayPath = (d) => `${d.getFullYear()}/${(d.getMonth() + 1).toString().padStart(2, "0")}/${d
630
+ const createDayPath$1 = (d) => `${d.getFullYear()}/${(d.getMonth() + 1).toString().padStart(2, "0")}/${d
631
631
  .getDate()
632
632
  .toString()
633
633
  .padStart(2, "0")}`;
@@ -666,13 +666,13 @@ class EntitiesExportCommand {
666
666
  });
667
667
  }
668
668
  buildAbsoluteBucketPath(relativePath) {
669
- return `${this.settings.exportBucket.rootFolderPath ?? ""}/exports/${createDayPath(new Date())}/${relativePath}`;
669
+ return `${this.settings.exportBucket.rootFolderPath ?? ""}/exports/${createDayPath$1(new Date())}/${relativePath}`;
670
670
  }
671
671
  async getExportEntities(filters) {
672
672
  return this.services.resolveSearchQuery().execute(filters ?? {});
673
673
  }
674
674
  get bucket() {
675
- return this.services.getRootServices().resolveBucketProvider();
675
+ return this.services.getRootServices().resolveDefaultBucketProvider();
676
676
  }
677
677
  }
678
678
 
@@ -723,10 +723,10 @@ class EntitiesImportCommand {
723
723
  });
724
724
  }
725
725
  buildAbsoluteBucketPath(relativePath) {
726
- return `${this.settings.exportBucket.rootFolderPath ?? ""}/imports/${createDayPath(new Date())}/${relativePath}`;
726
+ return `${this.settings.exportBucket.rootFolderPath ?? ""}/imports/${createDayPath$1(new Date())}/${relativePath}`;
727
727
  }
728
728
  get bucket() {
729
- return this.services.getRootServices().resolveBucketProvider();
729
+ return this.services.getRootServices().resolveDefaultBucketProvider();
730
730
  }
731
731
  }
732
732
 
@@ -763,10 +763,10 @@ class EntitiesSampleDownloadCommand {
763
763
  });
764
764
  }
765
765
  buildAbsoluteBucketPath(relativePath) {
766
- return `${this.settings.exportBucket.rootFolderPath ?? ""}/samples/${createDayPath(new Date())}/${relativePath}`;
766
+ return `${this.settings.exportBucket.rootFolderPath ?? ""}/samples/${createDayPath$1(new Date())}/${relativePath}`;
767
767
  }
768
768
  get bucket() {
769
- return this.services.getRootServices().resolveBucketProvider();
769
+ return this.services.getRootServices().resolveDefaultBucketProvider();
770
770
  }
771
771
  }
772
772
 
@@ -993,6 +993,7 @@ class EntityActions {
993
993
  class ServiceLocator {
994
994
  constructor() {
995
995
  this.services = {};
996
+ this.multipleServices = {};
996
997
  }
997
998
  all() {
998
999
  return this.services;
@@ -1000,6 +1001,15 @@ class ServiceLocator {
1000
1001
  register(name, service) {
1001
1002
  this.services[name] = service;
1002
1003
  }
1004
+ registerMultiple(serviceName, instanceName, service) {
1005
+ if (!this.services[serviceName]) {
1006
+ this.multipleServices[serviceName] = {};
1007
+ }
1008
+ if (this.multipleServices[serviceName][instanceName]) {
1009
+ throw new Error(`Service instance "${serviceName}" already registered in ServiceLocator`);
1010
+ }
1011
+ this.multipleServices[serviceName][instanceName] = service;
1012
+ }
1003
1013
  registerEntityService(serviceName, entityName, service) {
1004
1014
  this.register(this.buildServiceName(serviceName, entityName), service);
1005
1015
  }
@@ -1013,6 +1023,24 @@ class ServiceLocator {
1013
1023
  }
1014
1024
  return service;
1015
1025
  }
1026
+ resolveMultiple(serviceName, options) {
1027
+ const services = this.multipleServices[serviceName];
1028
+ if (!services && !options?.optional) {
1029
+ throw new Error(`Service type "${serviceName}" not found in ServiceLocator`);
1030
+ }
1031
+ return Object.entries(services).map(([, value]) => value);
1032
+ }
1033
+ resolveMultipleNamed(serviceName, instanceName, options) {
1034
+ const services = this.multipleServices[serviceName];
1035
+ if (!services && !options?.optional) {
1036
+ throw new Error(`Service type "${serviceName}" not found in ServiceLocator`);
1037
+ }
1038
+ const service = services[instanceName];
1039
+ if (!service && !options?.optional) {
1040
+ throw new Error(`Service instance "${serviceName}" not found in ServiceLocator`);
1041
+ }
1042
+ return service;
1043
+ }
1016
1044
  resolveEntityService(serviceName, entityName, options) {
1017
1045
  return this.resolve(this.buildServiceName(serviceName, entityName), options);
1018
1046
  }
@@ -1096,6 +1124,9 @@ const EntityServices = {
1096
1124
  },
1097
1125
  };
1098
1126
  const GlobalServices = {
1127
+ Files: {
1128
+ IFilesReferenceRepo: "IFilesReferenceRepo",
1129
+ },
1099
1130
  Events: {
1100
1131
  IEventEmitter: "IEventEmitter",
1101
1132
  IEventsTracker: "IEventsTracker",
@@ -1110,6 +1141,10 @@ const GlobalServices = {
1110
1141
  IEmailProvider: "IEmailProvider",
1111
1142
  IEmailTemplatesCollection: "IEmailTemplatesCollection",
1112
1143
  IBucketProvider: "IBucketProvider",
1144
+ IFileProvider: "IFileProvider",
1145
+ },
1146
+ Settings: {
1147
+ EntityManagerSettings: "EntityManagerSettings",
1113
1148
  },
1114
1149
  Versioning: {
1115
1150
  IEntityVersioningProvider: "IEntityVersioningProvider",
@@ -1267,6 +1302,13 @@ class EntitiesServiceLocator {
1267
1302
  getProvider() {
1268
1303
  return this.provider;
1269
1304
  }
1305
+ registerSettings(settings) {
1306
+ this.provider.register(GlobalServices.Settings.EntityManagerSettings, settings);
1307
+ return this;
1308
+ }
1309
+ resolveSettings() {
1310
+ return this.provider.resolve(GlobalServices.Settings.EntityManagerSettings);
1311
+ }
1270
1312
  resolveEventEmitter() {
1271
1313
  return this.provider.resolve(GlobalServices.Events.IEventEmitter, {
1272
1314
  optional: true,
@@ -1287,11 +1329,33 @@ class EntitiesServiceLocator {
1287
1329
  registerEntityVersioningProvider(instance) {
1288
1330
  this.provider.register(GlobalServices.Versioning.IEntityVersioningProvider, instance);
1289
1331
  }
1290
- resolveBucketProvider() {
1291
- return this.provider.resolve(GlobalServices.Plugins.IBucketProvider);
1332
+ resolveDefaultBucketProvider() {
1333
+ const settings = this.resolveSettings();
1334
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IBucketProvider, settings.defaultBucketProvider);
1292
1335
  }
1293
- registerBucketProvider(instance) {
1294
- this.provider.register(GlobalServices.Plugins.IBucketProvider, instance);
1336
+ resolveDefaultFilesProvider() {
1337
+ const settings = this.resolveSettings();
1338
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, settings.defaultFilesProvider);
1339
+ }
1340
+ resolveBucketProviders() {
1341
+ return this.provider.resolveMultiple(GlobalServices.Plugins.IFileProvider);
1342
+ }
1343
+ registerBucketProvider(name, instance) {
1344
+ this.provider.registerMultiple(GlobalServices.Plugins.IBucketProvider, name, instance);
1345
+ return this;
1346
+ }
1347
+ resolveFileProvider(providerId) {
1348
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, providerId);
1349
+ }
1350
+ registerFileProvider(name, instance) {
1351
+ this.provider.registerMultiple(GlobalServices.Plugins.IFileProvider, name, instance);
1352
+ return this;
1353
+ }
1354
+ resolveFilesReferenceRepositoryProviders() {
1355
+ return this.provider.resolve(GlobalServices.Files.IFilesReferenceRepo);
1356
+ }
1357
+ registerFilesReferenceRepositoryProviders(instance) {
1358
+ this.provider.register(GlobalServices.Files.IFilesReferenceRepo, instance);
1295
1359
  }
1296
1360
  resolveEventsTracker() {
1297
1361
  return this.provider.resolve(GlobalServices.Events.IEventsTracker);
@@ -2177,6 +2241,8 @@ const EntityManagerSymbols = {
2177
2241
  EmailProvider: Symbol.for("WP:EMAIL_PROVIDER"),
2178
2242
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
2179
2243
  BucketProvider: Symbol.for("WP:BUCKET_PROVIDER"),
2244
+ FileProvider: Symbol.for("WP:FILE_PROVIDER"),
2245
+ FileReferenceRepository: Symbol.for("WP:FILE_REFERENCE_REPO"),
2180
2246
  PipelineTemplate: Symbol.for("WP:PIPELINE_TEMPLATE"),
2181
2247
  };
2182
2248
 
@@ -20131,6 +20197,79 @@ exports.EmailService = __decorate([
20131
20197
  __metadata("design:paramtypes", [exports.EntityManagerRegistry])
20132
20198
  ], exports.EmailService);
20133
20199
 
20200
+ exports.FilesService = class FilesService {
20201
+ constructor(registry) {
20202
+ this.registry = registry;
20203
+ }
20204
+ async uploadFile(file) {
20205
+ const uploadResult = await this.defaultFileProvider.uploadFile({
20206
+ content: file.content,
20207
+ contentType: file.contentType,
20208
+ fileName: file.fileName,
20209
+ });
20210
+ const record = await this.referencesRepo.createReference({
20211
+ providerId: uploadResult.reference,
20212
+ reference: uploadResult.reference,
20213
+ contentType: file.contentType,
20214
+ fileName: file.fileName,
20215
+ filePath: file.folderPath,
20216
+ fileSize: file.content.length,
20217
+ metadata: file.metadata,
20218
+ });
20219
+ return {
20220
+ fileId: record.fileId,
20221
+ providerId: record.providerId,
20222
+ reference: record.reference,
20223
+ };
20224
+ }
20225
+ async getFileContent(fileId) {
20226
+ const ref = await this.referencesRepo.getReference(fileId);
20227
+ const content = await this.getFileProvider(ref.providerId).downloadFile({
20228
+ reference: ref.reference,
20229
+ });
20230
+ return {
20231
+ content: content.content,
20232
+ contentType: ref.contentType,
20233
+ fileName: ref.fileName,
20234
+ folderPath: ref.filePath,
20235
+ metadata: ref.metadata,
20236
+ };
20237
+ }
20238
+ async getFileDownloadUrl(fileId) {
20239
+ const ref = await this.referencesRepo.getReference(fileId);
20240
+ const downloadUrl = await this.getFileProvider(ref.providerId).getFileProviderDownloadUrl({
20241
+ reference: ref.reference,
20242
+ });
20243
+ return {
20244
+ contentType: ref.contentType,
20245
+ fileName: ref.fileName,
20246
+ downloadUrl: downloadUrl.downloadUrl,
20247
+ };
20248
+ }
20249
+ getFileProvider(providerId) {
20250
+ return this.registry
20251
+ .getContainer()
20252
+ .getEntitiesServicesLocator()
20253
+ .resolveFileProvider(providerId);
20254
+ }
20255
+ get defaultFileProvider() {
20256
+ return this.registry
20257
+ .getContainer()
20258
+ .getEntitiesServicesLocator()
20259
+ .resolveDefaultFilesProvider();
20260
+ }
20261
+ get referencesRepo() {
20262
+ return this.registry
20263
+ .getContainer()
20264
+ .getEntitiesServicesLocator()
20265
+ .resolveFilesReferenceRepositoryProviders();
20266
+ }
20267
+ };
20268
+ exports.FilesService = __decorate([
20269
+ common.Injectable(),
20270
+ __metadata("design:paramtypes", [exports.EntityManagerRegistry])
20271
+ ], exports.FilesService);
20272
+
20134
20273
  exports.EventsService = class EventsService {
20135
20274
  constructor(registry) {
20136
20275
  this.registry = registry;
@@ -20861,6 +21000,7 @@ const Services$1 = [
20861
21000
  exports.EntityManagerService,
20862
21001
  exports.EmailService,
20863
21002
  exports.EventsService,
21003
+ exports.FilesService,
20864
21004
  exports.TrackingService,
20865
21005
  ];
20866
21006
 
@@ -21160,6 +21300,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
21160
21300
  await this.registerEmailProviders();
21161
21301
  await this.registerEventTrackingProviders();
21162
21302
  await this.registerVersioningProviders();
21303
+ await this.registerFilesReferenceRepositoryProviders();
21304
+ await this.registerFileProviders();
21163
21305
  await this.registerBucketProviders();
21164
21306
  await this.executeInitializers(app);
21165
21307
  await this.executeSeeders();
@@ -21188,6 +21330,10 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
21188
21330
  this.logger.log(`Discovered entities: \n${sortedEntities
21189
21331
  .map((x) => x.discoveredClass.name)
21190
21332
  .join(" \n")}`);
21333
+ this.registry
21334
+ .getContainer()
21335
+ .getEntitiesServicesLocator()
21336
+ .registerSettings(staticProviders.settings);
21191
21337
  for (const entity of sortedEntities) {
21192
21338
  const entityName = entity.meta.name;
21193
21339
  const repository = repositoriesDict[entityName];
@@ -21241,18 +21387,45 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
21241
21387
  this.logger.log(`Entity seeder initializer ${initializer.discoveredClass.name} initialized 💪`);
21242
21388
  }
21243
21389
  }
21390
+ async registerFileProviders() {
21391
+ const providers = await this.discoverFileProviders();
21392
+ if (!providers.length) {
21393
+ this.logger.warn("No file providers found ⚠️");
21394
+ return;
21395
+ }
21396
+ for (const provider of providers) {
21397
+ this.registry
21398
+ .getContainer()
21399
+ .getEntitiesServicesLocator()
21400
+ .registerFileProvider(provider.meta.providerId, provider.discoveredClass.instance);
21401
+ this.logger.log(`File provider ${provider.discoveredClass.name} registered 🚜`);
21402
+ }
21403
+ }
21244
21404
  async registerBucketProviders() {
21245
21405
  const providers = await this.discoverBucketProviders();
21246
21406
  if (!providers.length) {
21247
21407
  this.logger.warn("No bucket providers found ⚠️");
21248
21408
  return;
21249
21409
  }
21250
- // todo: handle multiple trackers
21410
+ for (const provider of providers) {
21411
+ this.registry
21412
+ .getContainer()
21413
+ .getEntitiesServicesLocator()
21414
+ .registerBucketProvider(provider.meta.providerId, provider.discoveredClass.instance);
21415
+ this.logger.log(`Bucket provider ${provider.discoveredClass.name} registered 🚜`);
21416
+ }
21417
+ }
21418
+ async registerFilesReferenceRepositoryProviders() {
21419
+ const providers = await this.discoverFilesReferenceRepositoryProviders();
21420
+ if (!providers.length) {
21421
+ this.logger.warn("No files repository ⚠️");
21422
+ return;
21423
+ }
21251
21424
  this.registry
21252
21425
  .getContainer()
21253
21426
  .getEntitiesServicesLocator()
21254
- .registerBucketProvider(providers[0].discoveredClass.instance);
21255
- this.logger.log(`Bucket provider ${providers[0].discoveredClass.name} registered 🚜`);
21427
+ .registerFilesReferenceRepositoryProviders(providers[0].discoveredClass.instance);
21428
+ this.logger.log(`Files Reference Repository ${providers[0].discoveredClass.name} registered 🚜`);
21256
21429
  }
21257
21430
  async registerEventTrackingProviders() {
21258
21431
  const providers = await this.discoverEventTrackingProviders();
@@ -21358,6 +21531,12 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
21358
21531
  async discoverBucketProviders() {
21359
21532
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.BucketProvider);
21360
21533
  }
21534
+ async discoverFileProviders() {
21535
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.FileProvider);
21536
+ }
21537
+ async discoverFilesReferenceRepositoryProviders() {
21538
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.FileReferenceRepository);
21539
+ }
21361
21540
  };
21362
21541
  exports.EntityManagerInitializer = EntityManagerInitializer_1 = __decorate([
21363
21542
  common.Injectable(),
@@ -22287,10 +22466,10 @@ class NestPipelineTemplate {
22287
22466
  }
22288
22467
  }
22289
22468
 
22290
- class AwsS2BucketError extends Error {
22469
+ class AwsS3BucketError extends Error {
22291
22470
  constructor(message) {
22292
22471
  super(message);
22293
- this.name = "AwsS2BucketError";
22472
+ this.name = "AwsS3BucketError";
22294
22473
  }
22295
22474
  }
22296
22475
 
@@ -22318,7 +22497,7 @@ exports.AwsS3BucketProvider = class AwsS3BucketProvider {
22318
22497
  }));
22319
22498
  }
22320
22499
  catch (e) {
22321
- throw new AwsS2BucketError(`AWS BUCKET | listObjectsV2 | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22500
+ throw new AwsS3BucketError(`AWS BUCKET | listObjectsV2 | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22322
22501
  }
22323
22502
  }
22324
22503
  async folderEnsure(input) {
@@ -22335,7 +22514,7 @@ exports.AwsS3BucketProvider = class AwsS3BucketProvider {
22335
22514
  }));
22336
22515
  }
22337
22516
  catch (e) {
22338
- throw new AwsS2BucketError(`AwsS3Bucket | folderCreate | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22517
+ throw new AwsS3BucketError(`AwsS3Bucket | folderCreate | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22339
22518
  }
22340
22519
  }
22341
22520
  async folderExists(input) {
@@ -22347,7 +22526,7 @@ exports.AwsS3BucketProvider = class AwsS3BucketProvider {
22347
22526
  return (result.ContentLength ?? 0) > 0;
22348
22527
  }
22349
22528
  catch (e) {
22350
- throw new AwsS2BucketError(`AwsS3Bucket | folderExists | Error -> ${e.message}`);
22529
+ throw new AwsS3BucketError(`AwsS3Bucket | folderExists | Error -> ${e.message}`);
22351
22530
  }
22352
22531
  }
22353
22532
  async fileDownload(input) {
@@ -22359,7 +22538,7 @@ exports.AwsS3BucketProvider = class AwsS3BucketProvider {
22359
22538
  return result.Body;
22360
22539
  }
22361
22540
  catch (e) {
22362
- throw new AwsS2BucketError(`AWS BUCKET | downloadFile | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22541
+ throw new AwsS3BucketError(`AWS BUCKET | downloadFile | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22363
22542
  }
22364
22543
  }
22365
22544
  async filePublicUrlCreate(input) {
@@ -22372,7 +22551,7 @@ exports.AwsS3BucketProvider = class AwsS3BucketProvider {
22372
22551
  });
22373
22552
  }
22374
22553
  catch (e) {
22375
- throw new AwsS2BucketError(`AwsS3Bucket | filePublicUrlCreate | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22554
+ throw new AwsS3BucketError(`AwsS3Bucket | filePublicUrlCreate | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22376
22555
  }
22377
22556
  }
22378
22557
  async fileUpload(input) {
@@ -22385,7 +22564,7 @@ exports.AwsS3BucketProvider = class AwsS3BucketProvider {
22385
22564
  }));
22386
22565
  }
22387
22566
  catch (e) {
22388
- throw new AwsS2BucketError(`AwsS3Bucket | fileUpload | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22567
+ throw new AwsS3BucketError(`AwsS3Bucket | fileUpload | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22389
22568
  }
22390
22569
  }
22391
22570
  async fileDelete(input) {
@@ -22396,7 +22575,7 @@ exports.AwsS3BucketProvider = class AwsS3BucketProvider {
22396
22575
  }));
22397
22576
  }
22398
22577
  catch (e) {
22399
- throw new AwsS2BucketError(`AwsS3Bucket | fileDelete | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22578
+ throw new AwsS3BucketError(`AwsS3Bucket | fileDelete | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22400
22579
  }
22401
22580
  }
22402
22581
  };
@@ -22405,9 +22584,70 @@ exports.AwsS3BucketProvider = __decorate([
22405
22584
  __metadata("design:paramtypes", [])
22406
22585
  ], exports.AwsS3BucketProvider);
22407
22586
 
22587
+ const WpFileProvider = (providerId) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.FileProvider, {
22588
+ providerId,
22589
+ }));
22590
+
22591
+ const createDayPath = (d) => `${d.getFullYear()}/${(d.getMonth() + 1).toString().padStart(2, "0")}/${d
22592
+ .getDate()
22593
+ .toString()
22594
+ .padStart(2, "0")}`;
22595
+ let AwsS3FileProvider = class AwsS3FileProvider {
22596
+ constructor(bucket) {
22597
+ this.bucket = bucket;
22598
+ }
22599
+ getProviderId() {
22600
+ return "awsS3";
22601
+ }
22602
+ async uploadFile(file) {
22603
+ const path = this.getBucketFileUploadPath(file.fileName, new Date());
22604
+ await this.bucket.fileUpload({
22605
+ bucket: awsBucketSettings.value.defaultBucket,
22606
+ filePath: path,
22607
+ content: file.content,
22608
+ contentType: file.contentType,
22609
+ });
22610
+ return {
22611
+ reference: path,
22612
+ };
22613
+ }
22614
+ async deleteFile(reference) {
22615
+ await this.bucket.fileDelete({
22616
+ bucket: awsBucketSettings.value.defaultBucket,
22617
+ filePath: reference.reference,
22618
+ });
22619
+ }
22620
+ async downloadFile(reference) {
22621
+ const content = await this.bucket.fileDownload({
22622
+ bucket: awsBucketSettings.value.defaultBucket,
22623
+ filePath: reference.reference,
22624
+ });
22625
+ return {
22626
+ content,
22627
+ };
22628
+ }
22629
+ async getFileProviderDownloadUrl(reference) {
22630
+ const url = await this.bucket.filePublicUrlCreate({
22631
+ bucket: awsBucketSettings.value.defaultBucket,
22632
+ expirationMinutes: awsBucketSettings.value.publicLinksExpirationMinutes,
22633
+ filePath: reference.reference,
22634
+ });
22635
+ return {
22636
+ downloadUrl: url,
22637
+ };
22638
+ }
22639
+ getBucketFileUploadPath(fileName, date) {
22640
+ return `${backendCore.ensureTailingSlash(awsBucketSettings.value.paths.filesUpload)}${createDayPath(date)}${backendCore.ensureStartSlash(backendCore.newUuid())}_${fileName}`;
22641
+ }
22642
+ };
22643
+ AwsS3FileProvider = __decorate([
22644
+ WpFileProvider("awsS3"),
22645
+ __metadata("design:paramtypes", [exports.AwsS3BucketProvider])
22646
+ ], AwsS3FileProvider);
22647
+
22408
22648
  var AwsBucketModule_1;
22409
22649
  const ModuleData$2 = {
22410
- providers: [exports.AwsS3BucketProvider],
22650
+ providers: [exports.AwsS3BucketProvider, AwsS3FileProvider],
22411
22651
  };
22412
22652
  exports.AwsBucketModule = AwsBucketModule_1 = class AwsBucketModule {
22413
22653
  static forRoot(input) {
@@ -22424,6 +22664,54 @@ exports.AwsBucketModule = AwsBucketModule_1 = __decorate([
22424
22664
  })
22425
22665
  ], exports.AwsBucketModule);
22426
22666
 
22667
+ let InMemoryFileProvider = class InMemoryFileProvider {
22668
+ constructor() {
22669
+ this.provider = new exports.InMemoryBucketProvider();
22670
+ }
22671
+ getProviderId() {
22672
+ return "inMemory";
22673
+ }
22674
+ async uploadFile(file) {
22675
+ const filePath = `${backendCore.newUuid()}/${file.fileName}`;
22676
+ await this.provider.fileUpload({
22677
+ bucket: "test",
22678
+ content: file.content,
22679
+ contentType: file.contentType,
22680
+ filePath,
22681
+ });
22682
+ return {
22683
+ reference: filePath,
22684
+ };
22685
+ }
22686
+ async deleteFile(reference) {
22687
+ await this.provider.fileDelete({
22688
+ bucket: "test",
22689
+ filePath: reference.reference,
22690
+ });
22691
+ }
22692
+ async downloadFile(reference) {
22693
+ const content = await this.provider.fileDownload({
22694
+ bucket: "test",
22695
+ filePath: reference.reference,
22696
+ });
22697
+ return {
22698
+ content,
22699
+ };
22700
+ }
22701
+ async getFileProviderDownloadUrl(reference) {
22702
+ return {
22703
+ downloadUrl: await this.provider.filePublicUrlCreate({
22704
+ bucket: "test",
22705
+ filePath: reference.reference,
22706
+ expirationMinutes: 60,
22707
+ }),
22708
+ };
22709
+ }
22710
+ };
22711
+ InMemoryFileProvider = __decorate([
22712
+ WpFileProvider("inMemory"),
22713
+ __metadata("design:paramtypes", [])
22714
+ ], InMemoryFileProvider);
22427
22715
  exports.InMemoryBucketProvider = class InMemoryBucketProvider {
22428
22716
  constructor() {
22429
22717
  this.inMemoryStorage = {};
@@ -22485,7 +22773,7 @@ exports.InMemoryBucketProvider = class InMemoryBucketProvider {
22485
22773
  }
22486
22774
  };
22487
22775
  exports.InMemoryBucketProvider = __decorate([
22488
- WpBucketProvider("in-memory")
22776
+ WpBucketProvider("inMemory")
22489
22777
  ], exports.InMemoryBucketProvider);
22490
22778
 
22491
22779
  const AwsSesModuleSymbols = {
@@ -27735,7 +28023,7 @@ exports.AuthenticationEmailTemplates = AuthenticationEmailTemplates;
27735
28023
  exports.AuthenticationError = AuthenticationError;
27736
28024
  exports.AuthenticationEvents = AuthenticationEvents;
27737
28025
  exports.AuthenticationExtensionSymbols = AuthenticationExtensionSymbols;
27738
- exports.AwsS2BucketError = AwsS2BucketError;
28026
+ exports.AwsS2BucketError = AwsS3BucketError;
27739
28027
  exports.AwsSesEmailTemplate = AwsSesEmailTemplate;
27740
28028
  exports.BooleanFacet = BooleanFacet;
27741
28029
  exports.BooleanFacetItem = BooleanFacetItem;