@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/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Log, csvParse, excelParse, excelBuild, csvBuild, isNullOrUndefined, sort, byField, toDict, newUuid as newUuid$1, ensureTailingSlash, removeUndefinedProps } from '@punks/backend-core';
1
+ import { Log, csvParse, excelParse, excelBuild, csvBuild, isNullOrUndefined, sort, byField, toDict, newUuid as newUuid$1, ensureTailingSlash, ensureStartSlash, removeUndefinedProps } from '@punks/backend-core';
2
2
  import { applyDecorators, Injectable, SetMetadata, createParamDecorator, Global, Module, Scope, Logger, StreamableFile, HttpException, HttpStatus } from '@nestjs/common';
3
3
  import { ApiProperty } from '@nestjs/swagger';
4
4
  import { Reflector } from '@nestjs/core';
@@ -619,7 +619,7 @@ class EntitiesDeleteCommand {
619
619
  }
620
620
  }
621
621
 
622
- const createDayPath = (d) => `${d.getFullYear()}/${(d.getMonth() + 1).toString().padStart(2, "0")}/${d
622
+ const createDayPath$1 = (d) => `${d.getFullYear()}/${(d.getMonth() + 1).toString().padStart(2, "0")}/${d
623
623
  .getDate()
624
624
  .toString()
625
625
  .padStart(2, "0")}`;
@@ -658,13 +658,13 @@ class EntitiesExportCommand {
658
658
  });
659
659
  }
660
660
  buildAbsoluteBucketPath(relativePath) {
661
- return `${this.settings.exportBucket.rootFolderPath ?? ""}/exports/${createDayPath(new Date())}/${relativePath}`;
661
+ return `${this.settings.exportBucket.rootFolderPath ?? ""}/exports/${createDayPath$1(new Date())}/${relativePath}`;
662
662
  }
663
663
  async getExportEntities(filters) {
664
664
  return this.services.resolveSearchQuery().execute(filters ?? {});
665
665
  }
666
666
  get bucket() {
667
- return this.services.getRootServices().resolveBucketProvider();
667
+ return this.services.getRootServices().resolveDefaultBucketProvider();
668
668
  }
669
669
  }
670
670
 
@@ -715,10 +715,10 @@ class EntitiesImportCommand {
715
715
  });
716
716
  }
717
717
  buildAbsoluteBucketPath(relativePath) {
718
- return `${this.settings.exportBucket.rootFolderPath ?? ""}/imports/${createDayPath(new Date())}/${relativePath}`;
718
+ return `${this.settings.exportBucket.rootFolderPath ?? ""}/imports/${createDayPath$1(new Date())}/${relativePath}`;
719
719
  }
720
720
  get bucket() {
721
- return this.services.getRootServices().resolveBucketProvider();
721
+ return this.services.getRootServices().resolveDefaultBucketProvider();
722
722
  }
723
723
  }
724
724
 
@@ -755,10 +755,10 @@ class EntitiesSampleDownloadCommand {
755
755
  });
756
756
  }
757
757
  buildAbsoluteBucketPath(relativePath) {
758
- return `${this.settings.exportBucket.rootFolderPath ?? ""}/samples/${createDayPath(new Date())}/${relativePath}`;
758
+ return `${this.settings.exportBucket.rootFolderPath ?? ""}/samples/${createDayPath$1(new Date())}/${relativePath}`;
759
759
  }
760
760
  get bucket() {
761
- return this.services.getRootServices().resolveBucketProvider();
761
+ return this.services.getRootServices().resolveDefaultBucketProvider();
762
762
  }
763
763
  }
764
764
 
@@ -985,6 +985,7 @@ class EntityActions {
985
985
  class ServiceLocator {
986
986
  constructor() {
987
987
  this.services = {};
988
+ this.multipleServices = {};
988
989
  }
989
990
  all() {
990
991
  return this.services;
@@ -992,6 +993,15 @@ class ServiceLocator {
992
993
  register(name, service) {
993
994
  this.services[name] = service;
994
995
  }
996
+ registerMultiple(serviceName, instanceName, service) {
997
+ if (!this.services[serviceName]) {
998
+ this.multipleServices[serviceName] = {};
999
+ }
1000
+ if (this.multipleServices[serviceName][instanceName]) {
1001
+ throw new Error(`Service instance "${serviceName}" already registered in ServiceLocator`);
1002
+ }
1003
+ this.multipleServices[serviceName][instanceName] = service;
1004
+ }
995
1005
  registerEntityService(serviceName, entityName, service) {
996
1006
  this.register(this.buildServiceName(serviceName, entityName), service);
997
1007
  }
@@ -1005,6 +1015,24 @@ class ServiceLocator {
1005
1015
  }
1006
1016
  return service;
1007
1017
  }
1018
+ resolveMultiple(serviceName, options) {
1019
+ const services = this.multipleServices[serviceName];
1020
+ if (!services && !options?.optional) {
1021
+ throw new Error(`Service type "${serviceName}" not found in ServiceLocator`);
1022
+ }
1023
+ return Object.entries(services).map(([, value]) => value);
1024
+ }
1025
+ resolveMultipleNamed(serviceName, instanceName, options) {
1026
+ const services = this.multipleServices[serviceName];
1027
+ if (!services && !options?.optional) {
1028
+ throw new Error(`Service type "${serviceName}" not found in ServiceLocator`);
1029
+ }
1030
+ const service = services[instanceName];
1031
+ if (!service && !options?.optional) {
1032
+ throw new Error(`Service instance "${serviceName}" not found in ServiceLocator`);
1033
+ }
1034
+ return service;
1035
+ }
1008
1036
  resolveEntityService(serviceName, entityName, options) {
1009
1037
  return this.resolve(this.buildServiceName(serviceName, entityName), options);
1010
1038
  }
@@ -1088,6 +1116,9 @@ const EntityServices = {
1088
1116
  },
1089
1117
  };
1090
1118
  const GlobalServices = {
1119
+ Files: {
1120
+ IFilesReferenceRepo: "IFilesReferenceRepo",
1121
+ },
1091
1122
  Events: {
1092
1123
  IEventEmitter: "IEventEmitter",
1093
1124
  IEventsTracker: "IEventsTracker",
@@ -1102,6 +1133,10 @@ const GlobalServices = {
1102
1133
  IEmailProvider: "IEmailProvider",
1103
1134
  IEmailTemplatesCollection: "IEmailTemplatesCollection",
1104
1135
  IBucketProvider: "IBucketProvider",
1136
+ IFileProvider: "IFileProvider",
1137
+ },
1138
+ Settings: {
1139
+ EntityManagerSettings: "EntityManagerSettings",
1105
1140
  },
1106
1141
  Versioning: {
1107
1142
  IEntityVersioningProvider: "IEntityVersioningProvider",
@@ -1259,6 +1294,13 @@ class EntitiesServiceLocator {
1259
1294
  getProvider() {
1260
1295
  return this.provider;
1261
1296
  }
1297
+ registerSettings(settings) {
1298
+ this.provider.register(GlobalServices.Settings.EntityManagerSettings, settings);
1299
+ return this;
1300
+ }
1301
+ resolveSettings() {
1302
+ return this.provider.resolve(GlobalServices.Settings.EntityManagerSettings);
1303
+ }
1262
1304
  resolveEventEmitter() {
1263
1305
  return this.provider.resolve(GlobalServices.Events.IEventEmitter, {
1264
1306
  optional: true,
@@ -1279,11 +1321,33 @@ class EntitiesServiceLocator {
1279
1321
  registerEntityVersioningProvider(instance) {
1280
1322
  this.provider.register(GlobalServices.Versioning.IEntityVersioningProvider, instance);
1281
1323
  }
1282
- resolveBucketProvider() {
1283
- return this.provider.resolve(GlobalServices.Plugins.IBucketProvider);
1324
+ resolveDefaultBucketProvider() {
1325
+ const settings = this.resolveSettings();
1326
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IBucketProvider, settings.defaultBucketProvider);
1284
1327
  }
1285
- registerBucketProvider(instance) {
1286
- this.provider.register(GlobalServices.Plugins.IBucketProvider, instance);
1328
+ resolveDefaultFilesProvider() {
1329
+ const settings = this.resolveSettings();
1330
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, settings.defaultFilesProvider);
1331
+ }
1332
+ resolveBucketProviders() {
1333
+ return this.provider.resolveMultiple(GlobalServices.Plugins.IFileProvider);
1334
+ }
1335
+ registerBucketProvider(name, instance) {
1336
+ this.provider.registerMultiple(GlobalServices.Plugins.IBucketProvider, name, instance);
1337
+ return this;
1338
+ }
1339
+ resolveFileProvider(providerId) {
1340
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, providerId);
1341
+ }
1342
+ registerFileProvider(name, instance) {
1343
+ this.provider.registerMultiple(GlobalServices.Plugins.IFileProvider, name, instance);
1344
+ return this;
1345
+ }
1346
+ resolveFilesReferenceRepositoryProviders() {
1347
+ return this.provider.resolve(GlobalServices.Files.IFilesReferenceRepo);
1348
+ }
1349
+ registerFilesReferenceRepositoryProviders(instance) {
1350
+ this.provider.register(GlobalServices.Files.IFilesReferenceRepo, instance);
1287
1351
  }
1288
1352
  resolveEventsTracker() {
1289
1353
  return this.provider.resolve(GlobalServices.Events.IEventsTracker);
@@ -2169,6 +2233,8 @@ const EntityManagerSymbols = {
2169
2233
  EmailProvider: Symbol.for("WP:EMAIL_PROVIDER"),
2170
2234
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
2171
2235
  BucketProvider: Symbol.for("WP:BUCKET_PROVIDER"),
2236
+ FileProvider: Symbol.for("WP:FILE_PROVIDER"),
2237
+ FileReferenceRepository: Symbol.for("WP:FILE_REFERENCE_REPO"),
2172
2238
  PipelineTemplate: Symbol.for("WP:PIPELINE_TEMPLATE"),
2173
2239
  };
2174
2240
 
@@ -20123,6 +20189,79 @@ EmailService = __decorate([
20123
20189
  __metadata("design:paramtypes", [EntityManagerRegistry])
20124
20190
  ], EmailService);
20125
20191
 
20192
+ let FilesService = class FilesService {
20193
+ constructor(registry) {
20194
+ this.registry = registry;
20195
+ }
20196
+ async uploadFile(file) {
20197
+ const uploadResult = await this.defaultFileProvider.uploadFile({
20198
+ content: file.content,
20199
+ contentType: file.contentType,
20200
+ fileName: file.fileName,
20201
+ });
20202
+ const record = await this.referencesRepo.createReference({
20203
+ providerId: uploadResult.reference,
20204
+ reference: uploadResult.reference,
20205
+ contentType: file.contentType,
20206
+ fileName: file.fileName,
20207
+ filePath: file.folderPath,
20208
+ fileSize: file.content.length,
20209
+ metadata: file.metadata,
20210
+ });
20211
+ return {
20212
+ fileId: record.fileId,
20213
+ providerId: record.providerId,
20214
+ reference: record.reference,
20215
+ };
20216
+ }
20217
+ async getFileContent(fileId) {
20218
+ const ref = await this.referencesRepo.getReference(fileId);
20219
+ const content = await this.getFileProvider(ref.providerId).downloadFile({
20220
+ reference: ref.reference,
20221
+ });
20222
+ return {
20223
+ content: content.content,
20224
+ contentType: ref.contentType,
20225
+ fileName: ref.fileName,
20226
+ folderPath: ref.filePath,
20227
+ metadata: ref.metadata,
20228
+ };
20229
+ }
20230
+ async getFileDownloadUrl(fileId) {
20231
+ const ref = await this.referencesRepo.getReference(fileId);
20232
+ const downloadUrl = await this.getFileProvider(ref.providerId).getFileProviderDownloadUrl({
20233
+ reference: ref.reference,
20234
+ });
20235
+ return {
20236
+ contentType: ref.contentType,
20237
+ fileName: ref.fileName,
20238
+ downloadUrl: downloadUrl.downloadUrl,
20239
+ };
20240
+ }
20241
+ getFileProvider(providerId) {
20242
+ return this.registry
20243
+ .getContainer()
20244
+ .getEntitiesServicesLocator()
20245
+ .resolveFileProvider(providerId);
20246
+ }
20247
+ get defaultFileProvider() {
20248
+ return this.registry
20249
+ .getContainer()
20250
+ .getEntitiesServicesLocator()
20251
+ .resolveDefaultFilesProvider();
20252
+ }
20253
+ get referencesRepo() {
20254
+ return this.registry
20255
+ .getContainer()
20256
+ .getEntitiesServicesLocator()
20257
+ .resolveFilesReferenceRepositoryProviders();
20258
+ }
20259
+ };
20260
+ FilesService = __decorate([
20261
+ Injectable(),
20262
+ __metadata("design:paramtypes", [EntityManagerRegistry])
20263
+ ], FilesService);
20264
+
20126
20265
  let EventsService = class EventsService {
20127
20266
  constructor(registry) {
20128
20267
  this.registry = registry;
@@ -20853,6 +20992,7 @@ const Services$1 = [
20853
20992
  EntityManagerService,
20854
20993
  EmailService,
20855
20994
  EventsService,
20995
+ FilesService,
20856
20996
  TrackingService,
20857
20997
  ];
20858
20998
 
@@ -21152,6 +21292,8 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
21152
21292
  await this.registerEmailProviders();
21153
21293
  await this.registerEventTrackingProviders();
21154
21294
  await this.registerVersioningProviders();
21295
+ await this.registerFilesReferenceRepositoryProviders();
21296
+ await this.registerFileProviders();
21155
21297
  await this.registerBucketProviders();
21156
21298
  await this.executeInitializers(app);
21157
21299
  await this.executeSeeders();
@@ -21180,6 +21322,10 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
21180
21322
  this.logger.log(`Discovered entities: \n${sortedEntities
21181
21323
  .map((x) => x.discoveredClass.name)
21182
21324
  .join(" \n")}`);
21325
+ this.registry
21326
+ .getContainer()
21327
+ .getEntitiesServicesLocator()
21328
+ .registerSettings(staticProviders.settings);
21183
21329
  for (const entity of sortedEntities) {
21184
21330
  const entityName = entity.meta.name;
21185
21331
  const repository = repositoriesDict[entityName];
@@ -21233,18 +21379,45 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
21233
21379
  this.logger.log(`Entity seeder initializer ${initializer.discoveredClass.name} initialized 💪`);
21234
21380
  }
21235
21381
  }
21382
+ async registerFileProviders() {
21383
+ const providers = await this.discoverFileProviders();
21384
+ if (!providers.length) {
21385
+ this.logger.warn("No file providers found ⚠️");
21386
+ return;
21387
+ }
21388
+ for (const provider of providers) {
21389
+ this.registry
21390
+ .getContainer()
21391
+ .getEntitiesServicesLocator()
21392
+ .registerFileProvider(provider.meta.providerId, provider.discoveredClass.instance);
21393
+ this.logger.log(`File provider ${provider.discoveredClass.name} registered 🚜`);
21394
+ }
21395
+ }
21236
21396
  async registerBucketProviders() {
21237
21397
  const providers = await this.discoverBucketProviders();
21238
21398
  if (!providers.length) {
21239
21399
  this.logger.warn("No bucket providers found ⚠️");
21240
21400
  return;
21241
21401
  }
21242
- // todo: handle multiple trackers
21402
+ for (const provider of providers) {
21403
+ this.registry
21404
+ .getContainer()
21405
+ .getEntitiesServicesLocator()
21406
+ .registerBucketProvider(provider.meta.providerId, provider.discoveredClass.instance);
21407
+ this.logger.log(`Bucket provider ${provider.discoveredClass.name} registered 🚜`);
21408
+ }
21409
+ }
21410
+ async registerFilesReferenceRepositoryProviders() {
21411
+ const providers = await this.discoverFilesReferenceRepositoryProviders();
21412
+ if (!providers.length) {
21413
+ this.logger.warn("No files repository ⚠️");
21414
+ return;
21415
+ }
21243
21416
  this.registry
21244
21417
  .getContainer()
21245
21418
  .getEntitiesServicesLocator()
21246
- .registerBucketProvider(providers[0].discoveredClass.instance);
21247
- this.logger.log(`Bucket provider ${providers[0].discoveredClass.name} registered 🚜`);
21419
+ .registerFilesReferenceRepositoryProviders(providers[0].discoveredClass.instance);
21420
+ this.logger.log(`Files Reference Repository ${providers[0].discoveredClass.name} registered 🚜`);
21248
21421
  }
21249
21422
  async registerEventTrackingProviders() {
21250
21423
  const providers = await this.discoverEventTrackingProviders();
@@ -21350,6 +21523,12 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
21350
21523
  async discoverBucketProviders() {
21351
21524
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.BucketProvider);
21352
21525
  }
21526
+ async discoverFileProviders() {
21527
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.FileProvider);
21528
+ }
21529
+ async discoverFilesReferenceRepositoryProviders() {
21530
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.FileReferenceRepository);
21531
+ }
21353
21532
  };
21354
21533
  EntityManagerInitializer = EntityManagerInitializer_1 = __decorate([
21355
21534
  Injectable(),
@@ -22279,10 +22458,10 @@ class NestPipelineTemplate {
22279
22458
  }
22280
22459
  }
22281
22460
 
22282
- class AwsS2BucketError extends Error {
22461
+ class AwsS3BucketError extends Error {
22283
22462
  constructor(message) {
22284
22463
  super(message);
22285
- this.name = "AwsS2BucketError";
22464
+ this.name = "AwsS3BucketError";
22286
22465
  }
22287
22466
  }
22288
22467
 
@@ -22310,7 +22489,7 @@ let AwsS3BucketProvider = class AwsS3BucketProvider {
22310
22489
  }));
22311
22490
  }
22312
22491
  catch (e) {
22313
- throw new AwsS2BucketError(`AWS BUCKET | listObjectsV2 | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22492
+ throw new AwsS3BucketError(`AWS BUCKET | listObjectsV2 | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22314
22493
  }
22315
22494
  }
22316
22495
  async folderEnsure(input) {
@@ -22327,7 +22506,7 @@ let AwsS3BucketProvider = class AwsS3BucketProvider {
22327
22506
  }));
22328
22507
  }
22329
22508
  catch (e) {
22330
- throw new AwsS2BucketError(`AwsS3Bucket | folderCreate | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22509
+ throw new AwsS3BucketError(`AwsS3Bucket | folderCreate | ${input.bucket} | ${input.path} | Error -> ${e.message}`);
22331
22510
  }
22332
22511
  }
22333
22512
  async folderExists(input) {
@@ -22339,7 +22518,7 @@ let AwsS3BucketProvider = class AwsS3BucketProvider {
22339
22518
  return (result.ContentLength ?? 0) > 0;
22340
22519
  }
22341
22520
  catch (e) {
22342
- throw new AwsS2BucketError(`AwsS3Bucket | folderExists | Error -> ${e.message}`);
22521
+ throw new AwsS3BucketError(`AwsS3Bucket | folderExists | Error -> ${e.message}`);
22343
22522
  }
22344
22523
  }
22345
22524
  async fileDownload(input) {
@@ -22351,7 +22530,7 @@ let AwsS3BucketProvider = class AwsS3BucketProvider {
22351
22530
  return result.Body;
22352
22531
  }
22353
22532
  catch (e) {
22354
- throw new AwsS2BucketError(`AWS BUCKET | downloadFile | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22533
+ throw new AwsS3BucketError(`AWS BUCKET | downloadFile | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22355
22534
  }
22356
22535
  }
22357
22536
  async filePublicUrlCreate(input) {
@@ -22364,7 +22543,7 @@ let AwsS3BucketProvider = class AwsS3BucketProvider {
22364
22543
  });
22365
22544
  }
22366
22545
  catch (e) {
22367
- throw new AwsS2BucketError(`AwsS3Bucket | filePublicUrlCreate | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22546
+ throw new AwsS3BucketError(`AwsS3Bucket | filePublicUrlCreate | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22368
22547
  }
22369
22548
  }
22370
22549
  async fileUpload(input) {
@@ -22377,7 +22556,7 @@ let AwsS3BucketProvider = class AwsS3BucketProvider {
22377
22556
  }));
22378
22557
  }
22379
22558
  catch (e) {
22380
- throw new AwsS2BucketError(`AwsS3Bucket | fileUpload | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22559
+ throw new AwsS3BucketError(`AwsS3Bucket | fileUpload | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22381
22560
  }
22382
22561
  }
22383
22562
  async fileDelete(input) {
@@ -22388,7 +22567,7 @@ let AwsS3BucketProvider = class AwsS3BucketProvider {
22388
22567
  }));
22389
22568
  }
22390
22569
  catch (e) {
22391
- throw new AwsS2BucketError(`AwsS3Bucket | fileDelete | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22570
+ throw new AwsS3BucketError(`AwsS3Bucket | fileDelete | ${input.bucket} | ${input.filePath} | Error -> ${e.message}`);
22392
22571
  }
22393
22572
  }
22394
22573
  };
@@ -22397,9 +22576,70 @@ AwsS3BucketProvider = __decorate([
22397
22576
  __metadata("design:paramtypes", [])
22398
22577
  ], AwsS3BucketProvider);
22399
22578
 
22579
+ const WpFileProvider = (providerId) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.FileProvider, {
22580
+ providerId,
22581
+ }));
22582
+
22583
+ const createDayPath = (d) => `${d.getFullYear()}/${(d.getMonth() + 1).toString().padStart(2, "0")}/${d
22584
+ .getDate()
22585
+ .toString()
22586
+ .padStart(2, "0")}`;
22587
+ let AwsS3FileProvider = class AwsS3FileProvider {
22588
+ constructor(bucket) {
22589
+ this.bucket = bucket;
22590
+ }
22591
+ getProviderId() {
22592
+ return "awsS3";
22593
+ }
22594
+ async uploadFile(file) {
22595
+ const path = this.getBucketFileUploadPath(file.fileName, new Date());
22596
+ await this.bucket.fileUpload({
22597
+ bucket: awsBucketSettings.value.defaultBucket,
22598
+ filePath: path,
22599
+ content: file.content,
22600
+ contentType: file.contentType,
22601
+ });
22602
+ return {
22603
+ reference: path,
22604
+ };
22605
+ }
22606
+ async deleteFile(reference) {
22607
+ await this.bucket.fileDelete({
22608
+ bucket: awsBucketSettings.value.defaultBucket,
22609
+ filePath: reference.reference,
22610
+ });
22611
+ }
22612
+ async downloadFile(reference) {
22613
+ const content = await this.bucket.fileDownload({
22614
+ bucket: awsBucketSettings.value.defaultBucket,
22615
+ filePath: reference.reference,
22616
+ });
22617
+ return {
22618
+ content,
22619
+ };
22620
+ }
22621
+ async getFileProviderDownloadUrl(reference) {
22622
+ const url = await this.bucket.filePublicUrlCreate({
22623
+ bucket: awsBucketSettings.value.defaultBucket,
22624
+ expirationMinutes: awsBucketSettings.value.publicLinksExpirationMinutes,
22625
+ filePath: reference.reference,
22626
+ });
22627
+ return {
22628
+ downloadUrl: url,
22629
+ };
22630
+ }
22631
+ getBucketFileUploadPath(fileName, date) {
22632
+ return `${ensureTailingSlash(awsBucketSettings.value.paths.filesUpload)}${createDayPath(date)}${ensureStartSlash(newUuid$1())}_${fileName}`;
22633
+ }
22634
+ };
22635
+ AwsS3FileProvider = __decorate([
22636
+ WpFileProvider("awsS3"),
22637
+ __metadata("design:paramtypes", [AwsS3BucketProvider])
22638
+ ], AwsS3FileProvider);
22639
+
22400
22640
  var AwsBucketModule_1;
22401
22641
  const ModuleData$2 = {
22402
- providers: [AwsS3BucketProvider],
22642
+ providers: [AwsS3BucketProvider, AwsS3FileProvider],
22403
22643
  };
22404
22644
  let AwsBucketModule = AwsBucketModule_1 = class AwsBucketModule {
22405
22645
  static forRoot(input) {
@@ -22416,6 +22656,54 @@ AwsBucketModule = AwsBucketModule_1 = __decorate([
22416
22656
  })
22417
22657
  ], AwsBucketModule);
22418
22658
 
22659
+ let InMemoryFileProvider = class InMemoryFileProvider {
22660
+ constructor() {
22661
+ this.provider = new InMemoryBucketProvider();
22662
+ }
22663
+ getProviderId() {
22664
+ return "inMemory";
22665
+ }
22666
+ async uploadFile(file) {
22667
+ const filePath = `${newUuid$1()}/${file.fileName}`;
22668
+ await this.provider.fileUpload({
22669
+ bucket: "test",
22670
+ content: file.content,
22671
+ contentType: file.contentType,
22672
+ filePath,
22673
+ });
22674
+ return {
22675
+ reference: filePath,
22676
+ };
22677
+ }
22678
+ async deleteFile(reference) {
22679
+ await this.provider.fileDelete({
22680
+ bucket: "test",
22681
+ filePath: reference.reference,
22682
+ });
22683
+ }
22684
+ async downloadFile(reference) {
22685
+ const content = await this.provider.fileDownload({
22686
+ bucket: "test",
22687
+ filePath: reference.reference,
22688
+ });
22689
+ return {
22690
+ content,
22691
+ };
22692
+ }
22693
+ async getFileProviderDownloadUrl(reference) {
22694
+ return {
22695
+ downloadUrl: await this.provider.filePublicUrlCreate({
22696
+ bucket: "test",
22697
+ filePath: reference.reference,
22698
+ expirationMinutes: 60,
22699
+ }),
22700
+ };
22701
+ }
22702
+ };
22703
+ InMemoryFileProvider = __decorate([
22704
+ WpFileProvider("inMemory"),
22705
+ __metadata("design:paramtypes", [])
22706
+ ], InMemoryFileProvider);
22419
22707
  let InMemoryBucketProvider = class InMemoryBucketProvider {
22420
22708
  constructor() {
22421
22709
  this.inMemoryStorage = {};
@@ -22477,7 +22765,7 @@ let InMemoryBucketProvider = class InMemoryBucketProvider {
22477
22765
  }
22478
22766
  };
22479
22767
  InMemoryBucketProvider = __decorate([
22480
- WpBucketProvider("in-memory")
22768
+ WpBucketProvider("inMemory")
22481
22769
  ], InMemoryBucketProvider);
22482
22770
 
22483
22771
  const AwsSesModuleSymbols = {
@@ -27719,5 +28007,5 @@ InMemoryEmailProvider = __decorate([
27719
28007
  WpEmailProvider("in-memory")
27720
28008
  ], InMemoryEmailProvider);
27721
28009
 
27722
- export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsBucketModule, AwsEmailModule, AwsS2BucketError, AwsS3BucketProvider, AwsSesEmailTemplate, BooleanFacet, BooleanFacetItem, BucketItemType, CurrentUser, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EntitySerializationFormat, EntitySerializer, EntityVersionOperation, EventsService, IEntityVersionsCursor, InMemoryBucketProvider, InMemoryEmailProvider, InvalidCredentialsError, MemberOf, MissingEntityIdError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestEntitySerializer, NestPipelineTemplate, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, NumericFacet, NumericFacetItem, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PipelineController, PipelineErrorType, PipelineStatus, PipelineStepErrorType, PipelinesBuilder, PipelinesRunner, PlatformEvents, Public, QueryBuilderBase, ReplicationMode, Roles, SendgridEmailModule, SendgridEmailTemplate, SortDirection, StringFacet, StringFacetItem, TrackingService, UserCreationError, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpBucketProvider, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEntitySerializer, WpEntityVersioningProvider, WpEventsTracker, WpPipeline, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, buildRolesGuard, createContainer, createExpressFileResponse, getLocalizedText, newUuid, renderHandlebarsTemplate, toEntitiesImportInput };
28010
+ export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsBucketModule, AwsEmailModule, AwsS3BucketError as AwsS2BucketError, AwsS3BucketProvider, AwsSesEmailTemplate, BooleanFacet, BooleanFacetItem, BucketItemType, CurrentUser, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EntitySerializationFormat, EntitySerializer, EntityVersionOperation, EventsService, FilesService, IEntityVersionsCursor, InMemoryBucketProvider, InMemoryEmailProvider, InvalidCredentialsError, MemberOf, MissingEntityIdError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestEntitySerializer, NestPipelineTemplate, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, NumericFacet, NumericFacetItem, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PipelineController, PipelineErrorType, PipelineStatus, PipelineStepErrorType, PipelinesBuilder, PipelinesRunner, PlatformEvents, Public, QueryBuilderBase, ReplicationMode, Roles, SendgridEmailModule, SendgridEmailTemplate, SortDirection, StringFacet, StringFacetItem, TrackingService, UserCreationError, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpBucketProvider, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEntitySerializer, WpEntityVersioningProvider, WpEventsTracker, WpPipeline, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, buildRolesGuard, createContainer, createExpressFileResponse, getLocalizedText, newUuid, renderHandlebarsTemplate, toEntitiesImportInput };
27723
28011
  //# sourceMappingURL=index.js.map