@punks/backend-entity-manager 0.0.211 → 0.0.213

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 +173 -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 +12 -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 +2 -0
  17. package/dist/cjs/types/platforms/nest/plugins/media/testing/index.d.ts +1 -0
  18. package/dist/cjs/types/platforms/nest/plugins/media/testing/mock.d.ts +10 -0
  19. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +6 -0
  20. package/dist/cjs/types/platforms/nest/services/index.d.ts +1 -0
  21. package/dist/cjs/types/platforms/nest/services/media/index.d.ts +21 -0
  22. package/dist/cjs/types/platforms/nest/services/providers.d.ts +2 -1
  23. package/dist/cjs/types/providers/services.d.ts +8 -1
  24. package/dist/cjs/types/symbols/ioc.d.ts +3 -0
  25. package/dist/esm/index.js +172 -3
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/types/abstractions/buckets.d.ts +2 -2
  28. package/dist/esm/types/abstractions/index.d.ts +2 -1
  29. package/dist/esm/types/abstractions/media.d.ts +77 -0
  30. package/dist/esm/types/abstractions/settings.d.ts +1 -0
  31. package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -0
  32. package/dist/esm/types/platforms/nest/decorators/media.d.ts +12 -0
  33. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +3 -0
  34. package/dist/esm/types/platforms/nest/plugins/buckets/aws-s3/index.d.ts +1 -1
  35. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/errors/index.d.ts +3 -0
  36. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/index.d.ts +4 -0
  37. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/module.d.ts +5 -0
  38. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/provider/media.d.ts +11 -0
  39. package/dist/esm/types/platforms/nest/plugins/media/aws-s3/settings/index.d.ts +12 -0
  40. package/dist/esm/types/platforms/nest/plugins/media/index.d.ts +2 -0
  41. package/dist/esm/types/platforms/nest/plugins/media/testing/index.d.ts +1 -0
  42. package/dist/esm/types/platforms/nest/plugins/media/testing/mock.d.ts +10 -0
  43. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +6 -0
  44. package/dist/esm/types/platforms/nest/services/index.d.ts +1 -0
  45. package/dist/esm/types/platforms/nest/services/media/index.d.ts +21 -0
  46. package/dist/esm/types/platforms/nest/services/providers.d.ts +2 -1
  47. package/dist/esm/types/providers/services.d.ts +8 -1
  48. package/dist/esm/types/symbols/ioc.d.ts +3 -0
  49. package/dist/index.d.ts +121 -3
  50. package/package.json +1 -1
  51. package/dist/cjs/types/utils/labels.d.ts +0 -2
  52. package/dist/esm/types/utils/labels.d.ts +0 -2
@@ -44,10 +44,10 @@ export type BucketFileUploadInput = {
44
44
  content: Buffer;
45
45
  contentType?: string;
46
46
  };
47
- export interface BucketFileDeleteInput {
47
+ export type BucketFileDeleteInput = {
48
48
  bucket: string;
49
49
  filePath: string;
50
- }
50
+ };
51
51
  export interface IBucketProvider {
52
52
  folderList(input: BucketFolderListInput): Promise<BucketFolderListResult>;
53
53
  folderEnsure(input: BucketFolderEnsureInput): Promise<void>;
@@ -9,7 +9,7 @@ export { SortingType, ClassType, EnumType } from "./common";
9
9
  export { IEntityManagerServiceRoot, IEntityManagerServiceCollection, } from "./configuration";
10
10
  export { IEntityConverter } from "./converters";
11
11
  export * from "./email";
12
- export * from "./errors";
12
+ export { EntityManagerException, EntityOperationType, EntityManagerUnauthorizedException, EntityOperationUnauthorizedException, EntityNotFoundException, MultipleEntitiesFoundException, EntityManagerConfigurationError, MissingEntityIdError, } from "./errors";
13
13
  export { IEntityEventsManager } from "./events";
14
14
  export { EntitiesExportFile, EntitiesExportInput, EntitiesExportOptions, EntitiesExportResult, EntitiesImportExportSettings, EntitiesSampleDownloadOptions, EntitiesSampleDownloadResult, EntityExportBucketSettings, } from "./export";
15
15
  export * from "./files";
@@ -18,6 +18,7 @@ export { EntitiesImportInput, EntitiesImportResult, EntitiesImportStatistics, }
18
18
  export * from "./localization";
19
19
  export { IEntityManager } from "./manager";
20
20
  export { IEntityMapper } from "./mappers";
21
+ export * from "./media";
21
22
  export {} from "./pipelines";
22
23
  export { IEntitiesSearchQuery, IEntityGetQuery, IEntitiesQueryBuilder, IEntityExistsQuery, IEntitiesCountQuery, IEntityVersionsSearchQuery, } from "./queries";
23
24
  export { IReplicasConfiguration, ReplicationMode, ReplicaOptions, ReplicaConfiguration, IEntityReplicaDeleteManager, IEntityReplicaSyncManager, } from "./replication";
@@ -0,0 +1,77 @@
1
+ /// <reference types="node" />
2
+ export type MediaUploadInput = {
3
+ fileName: string;
4
+ content: Buffer;
5
+ contentType?: string;
6
+ folderId?: string;
7
+ };
8
+ export type MediaReference = {
9
+ ref: string;
10
+ };
11
+ export type IMediaProvider = {
12
+ mediaUpload(input: MediaUploadInput): Promise<MediaReference>;
13
+ mediaDelete(input: MediaReference): Promise<void>;
14
+ mediaDownload(input: MediaReference): Promise<Buffer>;
15
+ getFileName(input: MediaReference): string;
16
+ };
17
+ export type MediaReferenceRecord = {
18
+ id: string;
19
+ ref: string;
20
+ folderId?: string;
21
+ createdOn: Date;
22
+ updatedOn: Date;
23
+ };
24
+ export type IMediaReferenceRepository = {
25
+ getReference(file: MediaReference): Promise<MediaReferenceRecord>;
26
+ createReference(file: MediaReference, folderId: string | undefined): Promise<MediaReferenceRecord>;
27
+ updateReferenceFolder(file: MediaReference, folderId: string | undefined): Promise<void>;
28
+ deleteReference(file: MediaReference): Promise<void>;
29
+ getFolderReferences(folderId?: string): Promise<MediaReferenceRecord[]>;
30
+ };
31
+ export type MediaFolderRecord = {
32
+ id: string;
33
+ name: string;
34
+ createdOn: Date;
35
+ updatedOn: Date;
36
+ };
37
+ export type IMediaFolderRepository = {
38
+ folderCreate(input: {
39
+ name: string;
40
+ parentId?: string;
41
+ }): Promise<MediaFolderRecord>;
42
+ folderRename(id: string, name: string): Promise<void>;
43
+ folderMove(id: string, parentId?: string): Promise<void>;
44
+ folderDelete(id: string): Promise<void>;
45
+ foldersList(parentId?: string): Promise<MediaFolderRecord[]>;
46
+ };
47
+ export type MediaFolderCreateInput = {
48
+ folderName: string;
49
+ parentId?: string;
50
+ };
51
+ export type MediaFolderReference = {
52
+ id: string;
53
+ name: string;
54
+ };
55
+ export type MediaFolderRenameInput = {
56
+ id: string;
57
+ folderName?: string;
58
+ };
59
+ export type MediaFolderMoveInput = {
60
+ id: string;
61
+ folderId?: string;
62
+ };
63
+ export type MediaInfo = {
64
+ ref: string;
65
+ fileName: string;
66
+ };
67
+ export type IMediaLibraryManager = {
68
+ mediaUpload(input: MediaUploadInput): Promise<MediaReference>;
69
+ mediaDelete(input: MediaReference): Promise<void>;
70
+ mediaDownload(input: MediaReference): Promise<Buffer>;
71
+ folderCreate(input: MediaFolderCreateInput): Promise<MediaFolderReference>;
72
+ folderDelete(input: MediaFolderReference): Promise<void>;
73
+ folderMove(input: MediaFolderMoveInput): Promise<void>;
74
+ folderRename(input: MediaFolderRenameInput): Promise<void>;
75
+ foldersList(parent?: MediaFolderReference): Promise<MediaFolderReference[]>;
76
+ getFolderMedia(input: MediaFolderReference): Promise<MediaInfo[]>;
77
+ };
@@ -3,6 +3,7 @@ export type EntityManagerSettings = {
3
3
  importExport: EntitiesImportExportSettings;
4
4
  defaultBucketProvider: string;
5
5
  defaultFilesProvider: string;
6
+ defaultMediaProvider: string;
6
7
  };
7
8
  export type EntityVersioningOptions = {
8
9
  enabled: boolean;
@@ -12,6 +12,7 @@ export { WpFileProvider, FileProviderProps, WpFileReferenceRepository, FileRefer
12
12
  export { WpAppInitializer } from "./initializer";
13
13
  export { WpEntityRepository, EntityRepositoryProps } from "./repository";
14
14
  export { WpEntityManager, EntityManagerProps } from "./manager";
15
+ export { WpMediaProvider, MediaProviderProps } from "./media";
15
16
  export { WpEntityQueryBuilder, EntityQueryBuilderProps } from "./queryBuilder";
16
17
  export { WpPipeline, PipelineTemplateProps } from "./pipelines";
17
18
  export { WpEntitySeeder, EntitySeederProps } from "./seed";
@@ -0,0 +1,12 @@
1
+ export interface MediaProviderProps {
2
+ providerId: string;
3
+ }
4
+ export declare const WpMediaProvider: (providerId: string) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
5
+ export interface MediaReferenceRepositoryProps {
6
+ providerId: string;
7
+ }
8
+ export declare const WpMediaReferenceRepository: (providerId: string) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
9
+ export interface MediaReferenceRepositoryProps {
10
+ providerId: string;
11
+ }
12
+ export declare const WpMediaFolderRepository: (providerId: string) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
@@ -19,6 +19,9 @@ export declare const EntityManagerSymbols: {
19
19
  EmailTemplate: symbol;
20
20
  EmailLogger: symbol;
21
21
  BucketProvider: symbol;
22
+ MediaProvider: symbol;
23
+ MediaReferenceRepository: symbol;
24
+ MediaFolderRepository: symbol;
22
25
  SecretsProvider: symbol;
23
26
  FileProvider: symbol;
24
27
  FileReferenceRepository: symbol;
@@ -1,4 +1,4 @@
1
- export { AwsS3BucketError as AwsS2BucketError } from "./errors";
1
+ export { AwsS3BucketError } from "./errors";
2
2
  export { AwsBucketModule } from "./module";
3
3
  export { AwsS3BucketProvider } from "./provider/bucket";
4
4
  export { AwsBucketSettings } from "./settings";
@@ -0,0 +1,3 @@
1
+ export declare class AwsS3MediaError extends Error {
2
+ constructor(message: string);
3
+ }
@@ -0,0 +1,4 @@
1
+ export { AwsS3MediaError } from "./errors";
2
+ export { AwsS3MediaModule } from "./module";
3
+ export { AwsS3MediaProvider } from "./provider/media";
4
+ export { AwsMediaSettings } from "./settings";
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+ import { AwsMediaSettings } from "./settings";
3
+ export declare class AwsS3MediaModule {
4
+ static forRoot(input: AwsMediaSettings): DynamicModule;
5
+ }
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import { IMediaProvider, MediaReference, MediaUploadInput } from "../../../../../../abstractions";
3
+ export declare class AwsS3MediaProvider implements IMediaProvider {
4
+ private readonly client;
5
+ constructor();
6
+ getFileName(input: MediaReference): string;
7
+ mediaUpload(input: MediaUploadInput): Promise<MediaReference>;
8
+ mediaDelete(input: MediaReference): Promise<void>;
9
+ mediaDownload(input: MediaReference): Promise<Buffer>;
10
+ private buildUploadPath;
11
+ }
@@ -0,0 +1,12 @@
1
+ import { AppInMemorySettings } from "../../../../../../settings";
2
+ export type AwsBucketPaths = {
3
+ filesUpload: string;
4
+ };
5
+ export type AwsMediaSettings = {
6
+ awsAccessKeyId?: string;
7
+ awsSecretAccessKey?: string;
8
+ region?: string;
9
+ defaultBucket: string;
10
+ paths: AwsBucketPaths;
11
+ };
12
+ export declare const awsMediaSettings: AppInMemorySettings<AwsMediaSettings>;
@@ -0,0 +1,2 @@
1
+ export * from "./aws-s3";
2
+ export * from "./testing";
@@ -0,0 +1 @@
1
+ export { InMemoryMediaProvider } from "./mock";
@@ -0,0 +1,10 @@
1
+ /// <reference types="node" />
2
+ import { IMediaProvider, MediaReference, MediaUploadInput } from "../../../../../abstractions";
3
+ export declare class InMemoryMediaProvider implements IMediaProvider {
4
+ private readonly provider;
5
+ mediaUpload(input: MediaUploadInput): Promise<MediaReference>;
6
+ mediaDelete(input: MediaReference): Promise<void>;
7
+ mediaDownload(input: MediaReference): Promise<Buffer>;
8
+ getFileName(input: MediaReference): string;
9
+ getProviderId(): string;
10
+ }
@@ -21,6 +21,9 @@ export declare class EntityManagerInitializer {
21
21
  private executeInitializers;
22
22
  private executeSeeders;
23
23
  private registerFileProviders;
24
+ private registerMediaProviders;
25
+ private registerMediaReferenceRepositoryProviders;
26
+ private registerMediaFolderRepositoryProviders;
24
27
  private registerGlobalAuthenticationMiddlewares;
25
28
  private registerSecretsProviders;
26
29
  private registerBucketProviders;
@@ -54,4 +57,7 @@ export declare class EntityManagerInitializer {
54
57
  private discoverCacheInstances;
55
58
  private discoverFileProviders;
56
59
  private discoverFilesReferenceRepositoryProviders;
60
+ private discoverMediaProviders;
61
+ private discoverMediaReferenceRepositories;
62
+ private discoverMediaFolderRepositories;
57
63
  }
@@ -1,6 +1,7 @@
1
1
  export { AppSessionService } from "./session";
2
2
  export { AppHashingService } from "./hashing";
3
3
  export { EntityManagerService } from "./manager";
4
+ export { MediaLibraryService } from "./media";
4
5
  export { EmailService } from "./email";
5
6
  export { CacheService } from "./cache";
6
7
  export { FilesService } from "./files";
@@ -0,0 +1,21 @@
1
+ /// <reference types="node" />
2
+ import { IMediaLibraryManager, MediaFolderCreateInput, MediaFolderMoveInput, MediaFolderReference, MediaFolderRenameInput, MediaInfo, MediaReference, MediaUploadInput } from "../../../../abstractions";
3
+ import { EntityManagerRegistry } from "../../ioc";
4
+ export declare class MediaLibraryService implements IMediaLibraryManager {
5
+ private readonly registry;
6
+ constructor(registry: EntityManagerRegistry);
7
+ mediaUpload(input: MediaUploadInput): Promise<MediaReference>;
8
+ mediaDelete(input: MediaReference): Promise<void>;
9
+ mediaDownload(input: MediaReference): Promise<Buffer>;
10
+ folderCreate(input: MediaFolderCreateInput): Promise<MediaFolderReference>;
11
+ folderMove(input: MediaFolderMoveInput): Promise<void>;
12
+ folderRename(input: MediaFolderRenameInput): Promise<void>;
13
+ folderDelete(input: MediaFolderReference): Promise<void>;
14
+ foldersList(parent?: MediaFolderReference | undefined): Promise<MediaFolderReference[]>;
15
+ getFolderMedia(input: MediaFolderReference): Promise<MediaInfo[]>;
16
+ private parseReferenceProviderId;
17
+ private getMediaProvider;
18
+ private get defaultMediaProvider();
19
+ private get mediaFolderRepository();
20
+ private get mediaReferenceRepository();
21
+ }
@@ -4,7 +4,8 @@ import { EventsService } from "./events";
4
4
  import { FilesService } from "./files";
5
5
  import { AppHashingService } from "./hashing";
6
6
  import { EntityManagerService } from "./manager";
7
+ import { MediaLibraryService } from "./media";
7
8
  import { SecretsService } from "./secrets";
8
9
  import { AppSessionService } from "./session";
9
10
  import { TrackingService } from "./tracking";
10
- export declare const Services: (typeof AppSessionService | typeof AppHashingService | typeof EntityManagerService | typeof EmailService | typeof CacheService | typeof FilesService | typeof EventsService | typeof TrackingService | typeof SecretsService)[];
11
+ export declare const Services: (typeof AppSessionService | typeof AppHashingService | typeof EntityManagerService | typeof MediaLibraryService | typeof EmailService | typeof CacheService | typeof FilesService | typeof EventsService | typeof TrackingService | typeof SecretsService)[];
@@ -1,4 +1,4 @@
1
- import { IAuthenticationContext, IAuthenticationContextProvider, IAuthenticationMiddleware, IBucketProvider, ICacheInstance, IEmailLogger, IEmailProvider, IEmailTemplatesCollection, IEntityFacets, IEntitySerializer, IEntitySnapshotService, IEntityVersioningProvider, IEventLog, IEventsTracker, IFileProvider, IFilesReferenceRepository, ISecretsProvider } from "../abstractions";
1
+ import { IAuthenticationContext, IAuthenticationContextProvider, IAuthenticationMiddleware, IBucketProvider, ICacheInstance, IEmailLogger, IEmailProvider, IEmailTemplatesCollection, IEntityFacets, IEntitySerializer, IEntitySnapshotService, IEntityVersioningProvider, IEventLog, IEventsTracker, IFileProvider, IFilesReferenceRepository, IMediaFolderRepository, IMediaProvider, IMediaReferenceRepository, ISecretsProvider } from "../abstractions";
2
2
  import { IEntitiesCountAction, IEntitiesDeleteAction, IEntitiesExportAction, IEntitiesImportAction, IEntitiesSampleDownloadAction, IEntitiesSearchAction, IEntityActions, IEntityCreateAction, IEntityDeleteAction, IEntityExistsAction, IEntityGetAction, IEntityUpdateAction, IEntityUpsertAction, IEntityVersionsSearchAction } from "../abstractions/actions";
3
3
  import { IEntityAdapter } from "../abstractions/adapters";
4
4
  import { IEntityAuthorizationMiddleware } from "../abstractions/authorization";
@@ -83,6 +83,7 @@ export declare class EntitiesServiceLocator {
83
83
  registerEntityVersioningProvider<TEntityVersioningProvider extends IEntityVersioningProvider>(instance: TEntityVersioningProvider): void;
84
84
  resolveDefaultBucketProvider<TBucketProvider extends IBucketProvider>(): TBucketProvider;
85
85
  resolveDefaultFilesProvider<TFileProvider extends IFileProvider>(): TFileProvider;
86
+ resolveDefaultMediaProvider<TMediaProvider extends IMediaProvider>(): TMediaProvider;
86
87
  resolveCacheInstance<TCacheInstance extends ICacheInstance>(name: string): TCacheInstance;
87
88
  resolveCacheInstances<TCacheInstance extends ICacheInstance>(): TCacheInstance[];
88
89
  registerCacheInstance<TCacheInstance extends ICacheInstance>(name: string, instance: TCacheInstance): this;
@@ -92,6 +93,12 @@ export declare class EntitiesServiceLocator {
92
93
  registerSecretsProvider<TSecretsProvider extends ISecretsProvider>(name: string, instance: TSecretsProvider): this;
93
94
  resolveAuthenticationMiddlewares<TAuthenticationMiddleware extends IAuthenticationMiddleware<any, unknown>>(): TAuthenticationMiddleware[];
94
95
  registerAuthenticationMiddleware<TAuthenticationMiddleware extends IAuthenticationMiddleware<any, unknown>>(name: string, instance: TAuthenticationMiddleware): this;
96
+ resolveMediaReferenceRepository<TMediaReferenceRepository extends IMediaReferenceRepository>(): TMediaReferenceRepository;
97
+ registerMediaReferenceRepository<TMediaReferenceRepository extends IMediaReferenceRepository>(instance: TMediaReferenceRepository): void;
98
+ resolveMediaFolderRepository<TMediaFolderRepository extends IMediaFolderRepository>(): TMediaFolderRepository;
99
+ registerMediaFolderRepository<TMediaFolderRepository extends IMediaFolderRepository>(instance: TMediaFolderRepository): void;
100
+ resolveMediaProvider<TMediaProvider extends IMediaProvider>(providerId: string): TMediaProvider;
101
+ registerMediaProvider<TMediaProvider extends IMediaProvider>(name: string, instance: TMediaProvider): this;
95
102
  resolveFileProvider<TFileProvider extends IFileProvider>(providerId: string): TFileProvider;
96
103
  registerFileProvider<TFileProvider extends IFileProvider>(name: string, instance: TFileProvider): this;
97
104
  resolveFilesReferenceRepositoryProviders<TFilesReferenceRepo extends IFilesReferenceRepository>(): TFilesReferenceRepo;
@@ -92,6 +92,9 @@ export declare const GlobalServices: {
92
92
  IBucketProvider: string;
93
93
  ISecretsProvider: string;
94
94
  IFileProvider: string;
95
+ IMediaProvider: string;
96
+ IMediaFolderRepository: string;
97
+ IMediaReferenceRepository: string;
95
98
  };
96
99
  Settings: {
97
100
  EntityManagerSettings: string;
package/dist/esm/index.js CHANGED
@@ -38,7 +38,6 @@ const getOperationLabel = (operation) => {
38
38
  return "find";
39
39
  }
40
40
  };
41
-
42
41
  class EntityManagerException extends Error {
43
42
  constructor(message) {
44
43
  super(message);
@@ -1204,6 +1203,9 @@ const GlobalServices = {
1204
1203
  IBucketProvider: "IBucketProvider",
1205
1204
  ISecretsProvider: "ISecretsProvider",
1206
1205
  IFileProvider: "IFileProvider",
1206
+ IMediaProvider: "IMediaProvider",
1207
+ IMediaFolderRepository: "IMediaFolderRepository",
1208
+ IMediaReferenceRepository: "IMediaReferenceRepository",
1207
1209
  },
1208
1210
  Settings: {
1209
1211
  EntityManagerSettings: "EntityManagerSettings",
@@ -1408,6 +1410,10 @@ class EntitiesServiceLocator {
1408
1410
  const settings = this.resolveSettings();
1409
1411
  return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, settings.defaultFilesProvider);
1410
1412
  }
1413
+ resolveDefaultMediaProvider() {
1414
+ const settings = this.resolveSettings();
1415
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IMediaProvider, settings.defaultMediaProvider);
1416
+ }
1411
1417
  resolveCacheInstance(name) {
1412
1418
  return this.provider.resolveMultipleNamed(GlobalServices.Plugins.ICacheInstance, name);
1413
1419
  }
@@ -1441,6 +1447,25 @@ class EntitiesServiceLocator {
1441
1447
  this.provider.registerMultiple(GlobalServices.Authentication.IAuthenticationMiddleware, name, instance);
1442
1448
  return this;
1443
1449
  }
1450
+ resolveMediaReferenceRepository() {
1451
+ return this.provider.resolve(GlobalServices.Plugins.IMediaReferenceRepository);
1452
+ }
1453
+ registerMediaReferenceRepository(instance) {
1454
+ this.provider.register(GlobalServices.Plugins.IMediaReferenceRepository, instance);
1455
+ }
1456
+ resolveMediaFolderRepository() {
1457
+ return this.provider.resolve(GlobalServices.Plugins.IMediaFolderRepository);
1458
+ }
1459
+ registerMediaFolderRepository(instance) {
1460
+ this.provider.register(GlobalServices.Plugins.IMediaFolderRepository, instance);
1461
+ }
1462
+ resolveMediaProvider(providerId) {
1463
+ return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IMediaProvider, providerId);
1464
+ }
1465
+ registerMediaProvider(name, instance) {
1466
+ this.provider.registerMultiple(GlobalServices.Plugins.IMediaProvider, name, instance);
1467
+ return this;
1468
+ }
1444
1469
  resolveFileProvider(providerId) {
1445
1470
  return this.provider.resolveMultipleNamed(GlobalServices.Plugins.IFileProvider, providerId);
1446
1471
  }
@@ -3306,6 +3331,9 @@ const EntityManagerSymbols = {
3306
3331
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
3307
3332
  EmailLogger: Symbol.for("WP:EMAIL_LOGGER"),
3308
3333
  BucketProvider: Symbol.for("WP:BUCKET_PROVIDER"),
3334
+ MediaProvider: Symbol.for("WP:MEDIA_PROVIDER"),
3335
+ MediaReferenceRepository: Symbol.for("WP:MEDIA_REFERENCE_REPOSITORY"),
3336
+ MediaFolderRepository: Symbol.for("WP:MEDIA_FOLDER_REPOSITORY"),
3309
3337
  SecretsProvider: Symbol.for("WP:SECRETS_PROVIDER"),
3310
3338
  FileProvider: Symbol.for("WP:FILE_PROVIDER"),
3311
3339
  FileReferenceRepository: Symbol.for("WP:FILE_REFERENCE_REPO"),
@@ -3381,6 +3409,10 @@ const WpEntityManager = (entityName, props = {}) => applyDecorators(Injectable()
3381
3409
  ...props,
3382
3410
  }));
3383
3411
 
3412
+ const WpMediaProvider = (providerId) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.MediaProvider, {
3413
+ providerId,
3414
+ }));
3415
+
3384
3416
  const WpEntityQueryBuilder = (entityName, props = {}) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EntityQueryBuilder, {
3385
3417
  entityName,
3386
3418
  ...props,
@@ -21232,6 +21264,92 @@ EntityManagerService = __decorate([
21232
21264
  __metadata("design:paramtypes", [EntityManagerRegistry])
21233
21265
  ], EntityManagerService);
21234
21266
 
21267
+ let MediaLibraryService = class MediaLibraryService {
21268
+ constructor(registry) {
21269
+ this.registry = registry;
21270
+ }
21271
+ async mediaUpload(input) {
21272
+ const reference = await this.defaultMediaProvider.mediaUpload(input);
21273
+ await this.mediaReferenceRepository.createReference(reference, input.folderId);
21274
+ return reference;
21275
+ }
21276
+ async mediaDelete(input) {
21277
+ await this.getMediaProvider(this.parseReferenceProviderId(input)).mediaDelete(input);
21278
+ await this.mediaReferenceRepository.deleteReference(input);
21279
+ }
21280
+ async mediaDownload(input) {
21281
+ return await this.getMediaProvider(this.parseReferenceProviderId(input)).mediaDownload(input);
21282
+ }
21283
+ async folderCreate(input) {
21284
+ return await this.mediaFolderRepository.folderCreate({
21285
+ name: input.folderName,
21286
+ parentId: input.parentId,
21287
+ });
21288
+ }
21289
+ async folderMove(input) {
21290
+ await this.mediaFolderRepository.folderMove(input.id, input.folderId);
21291
+ }
21292
+ async folderRename(input) {
21293
+ await this.mediaFolderRepository.folderRename(input.id, input.folderName ?? "");
21294
+ }
21295
+ async folderDelete(input) {
21296
+ const folderFiles = await this.mediaReferenceRepository.getFolderReferences(input.id);
21297
+ if (folderFiles.length > 0) {
21298
+ throw new Error("Cannot delete folder with files inside");
21299
+ }
21300
+ const subfolders = await this.mediaFolderRepository.foldersList(input.id);
21301
+ if (subfolders.length > 0) {
21302
+ throw new Error("Cannot delete folder with subfolders inside");
21303
+ }
21304
+ await this.mediaFolderRepository.folderDelete(input.id);
21305
+ }
21306
+ async foldersList(parent) {
21307
+ const subfolders = await this.mediaFolderRepository.foldersList(parent?.id);
21308
+ return subfolders.map((f) => ({
21309
+ id: f.id,
21310
+ name: f.name,
21311
+ }));
21312
+ }
21313
+ async getFolderMedia(input) {
21314
+ const folderFiles = await this.mediaReferenceRepository.getFolderReferences(input.id);
21315
+ return folderFiles.map((f) => ({
21316
+ ref: f.ref,
21317
+ fileName: this.getMediaProvider(this.parseReferenceProviderId(f)).getFileName(f),
21318
+ }));
21319
+ }
21320
+ parseReferenceProviderId(ref) {
21321
+ return ref.ref.split(":")[0];
21322
+ }
21323
+ getMediaProvider(providerId) {
21324
+ return this.registry
21325
+ .getContainer()
21326
+ .getEntitiesServicesLocator()
21327
+ .resolveMediaProvider(providerId);
21328
+ }
21329
+ get defaultMediaProvider() {
21330
+ return this.registry
21331
+ .getContainer()
21332
+ .getEntitiesServicesLocator()
21333
+ .resolveDefaultMediaProvider();
21334
+ }
21335
+ get mediaFolderRepository() {
21336
+ return this.registry
21337
+ .getContainer()
21338
+ .getEntitiesServicesLocator()
21339
+ .resolveMediaFolderRepository();
21340
+ }
21341
+ get mediaReferenceRepository() {
21342
+ return this.registry
21343
+ .getContainer()
21344
+ .getEntitiesServicesLocator()
21345
+ .resolveMediaReferenceRepository();
21346
+ }
21347
+ };
21348
+ MediaLibraryService = __decorate([
21349
+ Injectable(),
21350
+ __metadata("design:paramtypes", [EntityManagerRegistry])
21351
+ ], MediaLibraryService);
21352
+
21235
21353
  let EmailService = class EmailService {
21236
21354
  constructor(registry) {
21237
21355
  this.registry = registry;
@@ -22166,8 +22284,9 @@ const Services$1 = [
22166
22284
  EmailService,
22167
22285
  EventsService,
22168
22286
  FilesService,
22169
- TrackingService,
22287
+ MediaLibraryService,
22170
22288
  SecretsService,
22289
+ TrackingService,
22171
22290
  ];
22172
22291
 
22173
22292
  const IoC = [EntityManagerRegistry];
@@ -22236,6 +22355,9 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
22236
22355
  await this.registerEmailLogger();
22237
22356
  await this.registerFilesReferenceRepositoryProviders();
22238
22357
  await this.registerFileProviders();
22358
+ await this.registerMediaProviders();
22359
+ await this.registerMediaReferenceRepositoryProviders();
22360
+ await this.registerMediaFolderRepositoryProviders();
22239
22361
  await this.registerGlobalAuthenticationMiddlewares();
22240
22362
  await this.registerBucketProviders();
22241
22363
  await this.registerSecretsProviders();
@@ -22343,6 +22465,44 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
22343
22465
  this.logger.log(`File provider ${provider.discoveredClass.name} registered 🚜`);
22344
22466
  }
22345
22467
  }
22468
+ async registerMediaProviders() {
22469
+ const providers = await this.discoverMediaProviders();
22470
+ if (!providers.length) {
22471
+ this.logger.warn("No media providers found ⚠️");
22472
+ return;
22473
+ }
22474
+ for (const provider of providers) {
22475
+ this.registry
22476
+ .getContainer()
22477
+ .getEntitiesServicesLocator()
22478
+ .registerMediaProvider(provider.meta.providerId, provider.discoveredClass.instance);
22479
+ this.logger.log(`Media provider ${provider.discoveredClass.name} registered 🚜`);
22480
+ }
22481
+ }
22482
+ async registerMediaReferenceRepositoryProviders() {
22483
+ const providers = await this.discoverMediaReferenceRepositories();
22484
+ if (!providers.length) {
22485
+ this.logger.warn("No media reference repository ⚠️");
22486
+ return;
22487
+ }
22488
+ this.registry
22489
+ .getContainer()
22490
+ .getEntitiesServicesLocator()
22491
+ .registerMediaReferenceRepository(providers[0].discoveredClass.instance);
22492
+ this.logger.log(`Media Reference Repository ${providers[0].discoveredClass.name} registered 🚜`);
22493
+ }
22494
+ async registerMediaFolderRepositoryProviders() {
22495
+ const providers = await this.discoverMediaFolderRepositories();
22496
+ if (!providers.length) {
22497
+ this.logger.warn("No media folder repository ⚠️");
22498
+ return;
22499
+ }
22500
+ this.registry
22501
+ .getContainer()
22502
+ .getEntitiesServicesLocator()
22503
+ .registerMediaFolderRepository(providers[0].discoveredClass.instance);
22504
+ this.logger.log(`Media Folder Repository ${providers[0].discoveredClass.name} registered 🚜`);
22505
+ }
22346
22506
  async registerGlobalAuthenticationMiddlewares() {
22347
22507
  const providers = await this.discoverGlobalAuthenticationMiddlewares();
22348
22508
  for (const provider of providers) {
@@ -22540,6 +22700,15 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
22540
22700
  async discoverFilesReferenceRepositoryProviders() {
22541
22701
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.FileReferenceRepository);
22542
22702
  }
22703
+ async discoverMediaProviders() {
22704
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.MediaProvider);
22705
+ }
22706
+ async discoverMediaReferenceRepositories() {
22707
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.MediaReferenceRepository);
22708
+ }
22709
+ async discoverMediaFolderRepositories() {
22710
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.MediaFolderRepository);
22711
+ }
22543
22712
  };
22544
22713
  EntityManagerInitializer = EntityManagerInitializer_1 = __decorate([
22545
22714
  Injectable(),
@@ -28945,5 +29114,5 @@ AwsSecretsModule = AwsSecretsModule_1 = __decorate([
28945
29114
  })
28946
29115
  ], AwsSecretsModule);
28947
29116
 
28948
- export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsBucketModule, AwsEmailModule, AwsS3BucketError as AwsS2BucketError, AwsS3BucketProvider, AwsSecretsModule, AwsSecretsProvider, AwsSesEmailTemplate, BucketItemType, CacheService, CurrentUser, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EntitySerializationFormat, EntitySerializer, EntitySnapshotService, EntityVersionOperation, EventsService, FilesService, IEntityVersionsCursor, InMemoryBucketProvider, InMemoryEmailProvider, InvalidCredentialsError, MemberOf, MissingEntityIdError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestEntitySerializer, NestEntitySnapshotService, NestPipelineTemplate, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, Permissions, PipelineController, PipelineErrorType, PipelineInvocationError, PipelineStatus, PipelineStepErrorType, PipelinesBuilder, PipelinesRunner, PlatformEvents, Public, QueryBuilderBase, QueryBuilderOperation, ReplicationMode, Roles, SecretsService, SendgridEmailModule, SendgridEmailTemplate, SortDirection, TrackingService, TypeOrmQueryBuilder, TypeOrmRepository, TypeormCacheInstance, UserCreationError, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpBucketProvider, WpCacheInstance, WpEmailLogger, WpEmailProvider, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEntitySerializer, WpEntitySnapshotService, WpEntityVersioningProvider, WpEventsTracker, WpFileProvider, WpFileReferenceRepository, WpGlobalAuthenticationMiddleware, WpPermissionsService, WpPipeline, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, buildPermissionsGuard, buildRolesGuard, createContainer, createExpressFileResponse, getLocalizedText, newUuid, renderHandlebarsTemplate, toEntitiesImportInput };
29117
+ export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsBucketModule, AwsEmailModule, AwsS3BucketError, AwsS3BucketProvider, AwsSecretsModule, AwsSecretsProvider, AwsSesEmailTemplate, BucketItemType, CacheService, CurrentUser, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EntitySerializationFormat, EntitySerializer, EntitySnapshotService, EntityVersionOperation, EventsService, FilesService, IEntityVersionsCursor, InMemoryBucketProvider, InMemoryEmailProvider, InvalidCredentialsError, MediaLibraryService, MemberOf, MissingEntityIdError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestEntitySerializer, NestEntitySnapshotService, NestPipelineTemplate, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, Permissions, PipelineController, PipelineErrorType, PipelineInvocationError, PipelineStatus, PipelineStepErrorType, PipelinesBuilder, PipelinesRunner, PlatformEvents, Public, QueryBuilderBase, QueryBuilderOperation, ReplicationMode, Roles, SecretsService, SendgridEmailModule, SendgridEmailTemplate, SortDirection, TrackingService, TypeOrmQueryBuilder, TypeOrmRepository, TypeormCacheInstance, UserCreationError, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpBucketProvider, WpCacheInstance, WpEmailLogger, WpEmailProvider, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEntitySerializer, WpEntitySnapshotService, WpEntityVersioningProvider, WpEventsTracker, WpFileProvider, WpFileReferenceRepository, WpGlobalAuthenticationMiddleware, WpMediaProvider, WpPermissionsService, WpPipeline, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, buildPermissionsGuard, buildRolesGuard, createContainer, createExpressFileResponse, getLocalizedText, newUuid, renderHandlebarsTemplate, toEntitiesImportInput };
28949
29118
  //# sourceMappingURL=index.js.map