@punks/backend-entity-manager 0.0.210 → 0.0.212

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 (46) hide show
  1. package/dist/cjs/index.js +190 -3
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/abstractions/buckets.d.ts +2 -2
  4. package/dist/cjs/types/abstractions/index.d.ts +2 -1
  5. package/dist/cjs/types/abstractions/media.d.ts +77 -0
  6. package/dist/cjs/types/abstractions/settings.d.ts +1 -0
  7. package/dist/cjs/types/platforms/nest/decorators/index.d.ts +1 -0
  8. package/dist/cjs/types/platforms/nest/decorators/media.d.ts +4 -0
  9. package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +3 -0
  10. package/dist/cjs/types/platforms/nest/plugins/buckets/aws-s3/index.d.ts +1 -1
  11. package/dist/cjs/types/platforms/nest/plugins/media/aws-s3/errors/index.d.ts +3 -0
  12. package/dist/cjs/types/platforms/nest/plugins/media/aws-s3/index.d.ts +4 -0
  13. package/dist/cjs/types/platforms/nest/plugins/media/aws-s3/module.d.ts +5 -0
  14. package/dist/cjs/types/platforms/nest/plugins/media/aws-s3/provider/media.d.ts +11 -0
  15. package/dist/cjs/types/platforms/nest/plugins/media/aws-s3/settings/index.d.ts +12 -0
  16. package/dist/cjs/types/platforms/nest/plugins/media/index.d.ts +1 -0
  17. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +6 -0
  18. package/dist/cjs/types/platforms/nest/services/index.d.ts +1 -0
  19. package/dist/cjs/types/platforms/nest/services/media/index.d.ts +21 -0
  20. package/dist/cjs/types/platforms/nest/services/providers.d.ts +2 -1
  21. package/dist/cjs/types/providers/services.d.ts +8 -1
  22. package/dist/cjs/types/symbols/ioc.d.ts +3 -0
  23. package/dist/esm/index.js +189 -3
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/types/abstractions/buckets.d.ts +2 -2
  26. package/dist/esm/types/abstractions/index.d.ts +2 -1
  27. package/dist/esm/types/abstractions/media.d.ts +77 -0
  28. package/dist/esm/types/abstractions/settings.d.ts +1 -0
  29. package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -0
  30. package/dist/esm/types/platforms/nest/decorators/media.d.ts +4 -0
  31. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +3 -0
  32. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/index.d.ts +1 -1
  33. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/errors/index.d.ts +3 -0
  34. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/index.d.ts +4 -0
  35. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/module.d.ts +5 -0
  36. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/provider/media.d.ts +11 -0
  37. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/settings/index.d.ts +12 -0
  38. package/dist/esm/types/platforms/nest/plugins/media/index.d.ts +1 -0
  39. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +6 -0
  40. package/dist/esm/types/platforms/nest/services/index.d.ts +1 -0
  41. package/dist/esm/types/platforms/nest/services/media/index.d.ts +21 -0
  42. package/dist/esm/types/platforms/nest/services/providers.d.ts +2 -1
  43. package/dist/esm/types/providers/services.d.ts +8 -1
  44. package/dist/esm/types/symbols/ioc.d.ts +3 -0
  45. package/dist/index.d.ts +121 -3
  46. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -30,6 +30,22 @@ exports.BucketItemType = void 0;
30
30
  BucketItemType["Folder"] = "folder";
31
31
  })(exports.BucketItemType || (exports.BucketItemType = {}));
32
32
 
33
+ const getOperationLabel = (operation) => {
34
+ switch (operation) {
35
+ case exports.EntityOperationType.Create:
36
+ return "create";
37
+ case exports.EntityOperationType.Read:
38
+ return "read";
39
+ case exports.EntityOperationType.Update:
40
+ return "update";
41
+ case exports.EntityOperationType.Delete:
42
+ return "delete";
43
+ case exports.EntityOperationType.Search:
44
+ return "search";
45
+ case exports.EntityOperationType.Find:
46
+ return "find";
47
+ }
48
+ };
33
49
  class EntityManagerException extends Error {
34
50
  constructor(message) {
35
51
  super(message);
@@ -53,7 +69,7 @@ class EntityManagerUnauthorizedException extends EntityManagerException {
53
69
  }
54
70
  class EntityOperationUnauthorizedException extends EntityManagerUnauthorizedException {
55
71
  constructor(operationType, entityName, entity) {
56
- super(`The current user is not authorized to ${operationType} the entity of type ${entityName}.`);
72
+ super(`The current user is not authorized to ${getOperationLabel(operationType)} the entity of type ${entityName}.`);
57
73
  this.entity = entity;
58
74
  this.operation = operationType;
59
75
  }
@@ -1195,6 +1211,9 @@ const GlobalServices = {
1195
1211
  IBucketProvider: "IBucketProvider",
1196
1212
  ISecretsProvider: "ISecretsProvider",
1197
1213
  IFileProvider: "IFileProvider",
1214
+ IMediaProvider: "IMediaProvider",
1215
+ IMediaFolderRepository: "IMediaFolderRepository",
1216
+ IMediaReferenceRepository: "IMediaReferenceRepository",
1198
1217
  },
1199
1218
  Settings: {
1200
1219
  EntityManagerSettings: "EntityManagerSettings",
@@ -1399,6 +1418,10 @@ class EntitiesServiceLocator {
1399
1418
  const settings = this.resolveSettings();
1400
1419
  return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, settings.defaultFilesProvider);
1401
1420
  }
1421
+ resolveDefaultMediaProvider() {
1422
+ const settings = this.resolveSettings();
1423
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IMediaProvider, settings.defaultMediaProvider);
1424
+ }
1402
1425
  resolveCacheInstance(name) {
1403
1426
  return this.provider.resolveMultipleNamed(GlobalServices.Plugins.ICacheInstance, name);
1404
1427
  }
@@ -1432,6 +1455,25 @@ class EntitiesServiceLocator {
1432
1455
  this.provider.registerMultiple(GlobalServices.Authentication.IAuthenticationMiddleware, name, instance);
1433
1456
  return this;
1434
1457
  }
1458
+ resolveMediaReferenceRepository() {
1459
+ return this.provider.resolve(GlobalServices.Plugins.IMediaReferenceRepository);
1460
+ }
1461
+ registerMediaReferenceRepository(instance) {
1462
+ this.provider.register(GlobalServices.Plugins.IMediaReferenceRepository, instance);
1463
+ }
1464
+ resolveMediaFolderRepository() {
1465
+ return this.provider.resolve(GlobalServices.Plugins.IMediaFolderRepository);
1466
+ }
1467
+ registerMediaFolderRepository(instance) {
1468
+ this.provider.register(GlobalServices.Plugins.IMediaFolderRepository, instance);
1469
+ }
1470
+ resolveMediaProvider(providerId) {
1471
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IMediaProvider, providerId);
1472
+ }
1473
+ registerMediaProvider(name, instance) {
1474
+ this.provider.registerMultiple(GlobalServices.Plugins.IMediaProvider, name, instance);
1475
+ return this;
1476
+ }
1435
1477
  resolveFileProvider(providerId) {
1436
1478
  return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, providerId);
1437
1479
  }
@@ -3297,6 +3339,9 @@ const EntityManagerSymbols = {
3297
3339
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
3298
3340
  EmailLogger: Symbol.for("WP:EMAIL_LOGGER"),
3299
3341
  BucketProvider: Symbol.for("WP:BUCKET_PROVIDER"),
3342
+ MediaProvider: Symbol.for("WP:MEDIA_PROVIDER"),
3343
+ MediaReferenceRepository: Symbol.for("WP:MEDIA_REFERENCE_REPOSITORY"),
3344
+ MediaFolderRepository: Symbol.for("WP:MEDIA_FOLDER_REPOSITORY"),
3300
3345
  SecretsProvider: Symbol.for("WP:SECRETS_PROVIDER"),
3301
3346
  FileProvider: Symbol.for("WP:FILE_PROVIDER"),
3302
3347
  FileReferenceRepository: Symbol.for("WP:FILE_REFERENCE_REPO"),
@@ -3372,6 +3417,10 @@ const WpEntityManager = (entityName, props = {}) => common.applyDecorators(commo
3372
3417
  ...props,
3373
3418
  }));
3374
3419
 
3420
+ const WpMediaProvider = (providerId) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.MediaProvider, {
3421
+ providerId,
3422
+ }));
3423
+
3375
3424
  const WpEntityQueryBuilder = (entityName, props = {}) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EntityQueryBuilder, {
3376
3425
  entityName,
3377
3426
  ...props,
@@ -21223,6 +21272,92 @@ exports.EntityManagerService = __decorate([
21223
21272
  __metadata("design:paramtypes", [exports.EntityManagerRegistry])
21224
21273
  ], exports.EntityManagerService);
21225
21274
 
21275
+ exports.MediaLibraryService = class MediaLibraryService {
21276
+ constructor(registry) {
21277
+ this.registry = registry;
21278
+ }
21279
+ async mediaUpload(input) {
21280
+ const reference = await this.defaultMediaProvider.mediaUpload(input);
21281
+ await this.mediaReferenceRepository.createReference(reference, input.folderId);
21282
+ return reference;
21283
+ }
21284
+ async mediaDelete(input) {
21285
+ await this.getMediaProvider(this.parseReferenceProviderId(input)).mediaDelete(input);
21286
+ await this.mediaReferenceRepository.deleteReference(input);
21287
+ }
21288
+ async mediaDownload(input) {
21289
+ return await this.getMediaProvider(this.parseReferenceProviderId(input)).mediaDownload(input);
21290
+ }
21291
+ async folderCreate(input) {
21292
+ return await this.mediaFolderRepository.folderCreate({
21293
+ name: input.folderName,
21294
+ parentId: input.parentId,
21295
+ });
21296
+ }
21297
+ async folderMove(input) {
21298
+ await this.mediaFolderRepository.folderMove(input.id, input.folderId);
21299
+ }
21300
+ async folderRename(input) {
21301
+ await this.mediaFolderRepository.folderRename(input.id, input.folderName ?? "");
21302
+ }
21303
+ async folderDelete(input) {
21304
+ const folderFiles = await this.mediaReferenceRepository.getFolderReferences(input.id);
21305
+ if (folderFiles.length > 0) {
21306
+ throw new Error("Cannot delete folder with files inside");
21307
+ }
21308
+ const subfolders = await this.mediaFolderRepository.foldersList(input.id);
21309
+ if (subfolders.length > 0) {
21310
+ throw new Error("Cannot delete folder with subfolders inside");
21311
+ }
21312
+ await this.mediaFolderRepository.folderDelete(input.id);
21313
+ }
21314
+ async foldersList(parent) {
21315
+ const subfolders = await this.mediaFolderRepository.foldersList(parent?.id);
21316
+ return subfolders.map((f) => ({
21317
+ id: f.id,
21318
+ name: f.name,
21319
+ }));
21320
+ }
21321
+ async getFolderMedia(input) {
21322
+ const folderFiles = await this.mediaReferenceRepository.getFolderReferences(input.id);
21323
+ return folderFiles.map((f) => ({
21324
+ ref: f.ref,
21325
+ fileName: this.getMediaProvider(this.parseReferenceProviderId(f)).getFileName(f),
21326
+ }));
21327
+ }
21328
+ parseReferenceProviderId(ref) {
21329
+ return ref.ref.split(":")[0];
21330
+ }
21331
+ getMediaProvider(providerId) {
21332
+ return this.registry
21333
+ .getContainer()
21334
+ .getEntitiesServicesLocator()
21335
+ .resolveMediaProvider(providerId);
21336
+ }
21337
+ get defaultMediaProvider() {
21338
+ return this.registry
21339
+ .getContainer()
21340
+ .getEntitiesServicesLocator()
21341
+ .resolveDefaultMediaProvider();
21342
+ }
21343
+ get mediaFolderRepository() {
21344
+ return this.registry
21345
+ .getContainer()
21346
+ .getEntitiesServicesLocator()
21347
+ .resolveMediaFolderRepository();
21348
+ }
21349
+ get mediaReferenceRepository() {
21350
+ return this.registry
21351
+ .getContainer()
21352
+ .getEntitiesServicesLocator()
21353
+ .resolveMediaReferenceRepository();
21354
+ }
21355
+ };
21356
+ exports.MediaLibraryService = __decorate([
21357
+ common.Injectable(),
21358
+ __metadata("design:paramtypes", [exports.EntityManagerRegistry])
21359
+ ], exports.MediaLibraryService);
21360
+
21226
21361
  exports.EmailService = class EmailService {
21227
21362
  constructor(registry) {
21228
21363
  this.registry = registry;
@@ -22157,8 +22292,9 @@ const Services$1 = [
22157
22292
  exports.EmailService,
22158
22293
  exports.EventsService,
22159
22294
  exports.FilesService,
22160
- exports.TrackingService,
22295
+ exports.MediaLibraryService,
22161
22296
  exports.SecretsService,
22297
+ exports.TrackingService,
22162
22298
  ];
22163
22299
 
22164
22300
  const IoC = [exports.EntityManagerRegistry];
@@ -22227,6 +22363,9 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22227
22363
  await this.registerEmailLogger();
22228
22364
  await this.registerFilesReferenceRepositoryProviders();
22229
22365
  await this.registerFileProviders();
22366
+ await this.registerMediaProviders();
22367
+ await this.registerMediaReferenceRepositoryProviders();
22368
+ await this.registerMediaFolderRepositoryProviders();
22230
22369
  await this.registerGlobalAuthenticationMiddlewares();
22231
22370
  await this.registerBucketProviders();
22232
22371
  await this.registerSecretsProviders();
@@ -22334,6 +22473,44 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22334
22473
  this.logger.log(`File provider ${provider.discoveredClass.name} registered 🚜`);
22335
22474
  }
22336
22475
  }
22476
+ async registerMediaProviders() {
22477
+ const providers = await this.discoverMediaProviders();
22478
+ if (!providers.length) {
22479
+ this.logger.warn("No media providers found ⚠️");
22480
+ return;
22481
+ }
22482
+ for (const provider of providers) {
22483
+ this.registry
22484
+ .getContainer()
22485
+ .getEntitiesServicesLocator()
22486
+ .registerMediaProvider(provider.meta.providerId, provider.discoveredClass.instance);
22487
+ this.logger.log(`Media provider ${provider.discoveredClass.name} registered 🚜`);
22488
+ }
22489
+ }
22490
+ async registerMediaReferenceRepositoryProviders() {
22491
+ const providers = await this.discoverMediaReferenceRepositories();
22492
+ if (!providers.length) {
22493
+ this.logger.warn("No media reference repository ⚠️");
22494
+ return;
22495
+ }
22496
+ this.registry
22497
+ .getContainer()
22498
+ .getEntitiesServicesLocator()
22499
+ .registerMediaReferenceRepository(providers[0].discoveredClass.instance);
22500
+ this.logger.log(`Media Reference Repository ${providers[0].discoveredClass.name} registered 🚜`);
22501
+ }
22502
+ async registerMediaFolderRepositoryProviders() {
22503
+ const providers = await this.discoverMediaFolderRepositories();
22504
+ if (!providers.length) {
22505
+ this.logger.warn("No media folder repository ⚠️");
22506
+ return;
22507
+ }
22508
+ this.registry
22509
+ .getContainer()
22510
+ .getEntitiesServicesLocator()
22511
+ .registerMediaFolderRepository(providers[0].discoveredClass.instance);
22512
+ this.logger.log(`Media Folder Repository ${providers[0].discoveredClass.name} registered 🚜`);
22513
+ }
22337
22514
  async registerGlobalAuthenticationMiddlewares() {
22338
22515
  const providers = await this.discoverGlobalAuthenticationMiddlewares();
22339
22516
  for (const provider of providers) {
@@ -22531,6 +22708,15 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22531
22708
  async discoverFilesReferenceRepositoryProviders() {
22532
22709
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.FileReferenceRepository);
22533
22710
  }
22711
+ async discoverMediaProviders() {
22712
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.MediaProvider);
22713
+ }
22714
+ async discoverMediaReferenceRepositories() {
22715
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.MediaReferenceRepository);
22716
+ }
22717
+ async discoverMediaFolderRepositories() {
22718
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.MediaFolderRepository);
22719
+ }
22534
22720
  };
22535
22721
  exports.EntityManagerInitializer = EntityManagerInitializer_1 = __decorate([
22536
22722
  common.Injectable(),
@@ -28944,7 +29130,7 @@ exports.AuthenticationEmailTemplates = AuthenticationEmailTemplates;
28944
29130
  exports.AuthenticationError = AuthenticationError;
28945
29131
  exports.AuthenticationEvents = AuthenticationEvents;
28946
29132
  exports.AuthenticationExtensionSymbols = AuthenticationExtensionSymbols;
28947
- exports.AwsS2BucketError = AwsS3BucketError;
29133
+ exports.AwsS3BucketError = AwsS3BucketError;
28948
29134
  exports.AwsSesEmailTemplate = AwsSesEmailTemplate;
28949
29135
  exports.CurrentUser = CurrentUser;
28950
29136
  exports.EntityManagerConfigurationError = EntityManagerConfigurationError;
@@ -29007,6 +29193,7 @@ exports.WpEventsTracker = WpEventsTracker;
29007
29193
  exports.WpFileProvider = WpFileProvider;
29008
29194
  exports.WpFileReferenceRepository = WpFileReferenceRepository;
29009
29195
  exports.WpGlobalAuthenticationMiddleware = WpGlobalAuthenticationMiddleware;
29196
+ exports.WpMediaProvider = WpMediaProvider;
29010
29197
  exports.WpPermissionsService = WpPermissionsService;
29011
29198
  exports.WpPipeline = WpPipeline;
29012
29199
  exports.WpRolesService = WpRolesService;