@punks/backend-entity-manager 0.0.49 → 0.0.51

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 (36) hide show
  1. package/dist/cjs/index.js +45 -5
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/abstractions/index.d.ts +1 -0
  4. package/dist/cjs/types/abstractions/tracking.d.ts +9 -0
  5. package/dist/cjs/types/events/index.d.ts +1 -1
  6. package/dist/cjs/types/events/{globalEvents.d.ts → platformEvents.d.ts} +1 -1
  7. package/dist/cjs/types/platforms/nest/__test__/server/database/core/entities/eventLog.entity.d.ts +10 -0
  8. package/dist/cjs/types/platforms/nest/decorators/index.d.ts +1 -0
  9. package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +1 -0
  10. package/dist/cjs/types/platforms/nest/decorators/tracking.d.ts +4 -0
  11. package/dist/cjs/types/platforms/nest/extensions/authentication/events/consts.d.ts +7 -0
  12. package/dist/cjs/types/platforms/nest/extensions/authentication/events/index.d.ts +2 -0
  13. package/dist/cjs/types/platforms/nest/extensions/authentication/events/types.d.ts +26 -0
  14. package/dist/cjs/types/platforms/nest/extensions/authentication/index.d.ts +2 -0
  15. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +2 -0
  16. package/dist/cjs/types/providers/services.d.ts +3 -1
  17. package/dist/cjs/types/symbols/ioc.d.ts +1 -0
  18. package/dist/esm/index.js +43 -5
  19. package/dist/esm/index.js.map +1 -1
  20. package/dist/esm/types/abstractions/index.d.ts +1 -0
  21. package/dist/esm/types/abstractions/tracking.d.ts +9 -0
  22. package/dist/esm/types/events/index.d.ts +1 -1
  23. package/dist/esm/types/events/{globalEvents.d.ts → platformEvents.d.ts} +1 -1
  24. package/dist/esm/types/platforms/nest/__test__/server/database/core/entities/eventLog.entity.d.ts +10 -0
  25. package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -0
  26. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +1 -0
  27. package/dist/esm/types/platforms/nest/decorators/tracking.d.ts +4 -0
  28. package/dist/esm/types/platforms/nest/extensions/authentication/events/consts.d.ts +7 -0
  29. package/dist/esm/types/platforms/nest/extensions/authentication/events/index.d.ts +2 -0
  30. package/dist/esm/types/platforms/nest/extensions/authentication/events/types.d.ts +26 -0
  31. package/dist/esm/types/platforms/nest/extensions/authentication/index.d.ts +2 -0
  32. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +2 -0
  33. package/dist/esm/types/providers/services.d.ts +3 -1
  34. package/dist/esm/types/symbols/ioc.d.ts +1 -0
  35. package/dist/index.d.ts +67 -12
  36. package/package.json +1 -1
@@ -18,3 +18,4 @@ export { IReplicasConfiguration, ReplicationMode, ReplicaOptions, ReplicaConfigu
18
18
  export { IEntityRepository } from "./repository";
19
19
  export * from "./searchParameters";
20
20
  export { IEntitySearchResults, ISearchResultsPaging } from "./searchResults";
21
+ export * from "./tracking";
@@ -0,0 +1,9 @@
1
+ export interface IEventLog<TPayload> {
2
+ type: string;
3
+ payload: TPayload;
4
+ userId?: string;
5
+ timestamp: Date;
6
+ }
7
+ export interface IEventsTracker<TEventLog extends IEventLog<unknown>> {
8
+ track(log: TEventLog): Promise<void>;
9
+ }
@@ -1,2 +1,2 @@
1
- export * from "./globalEvents";
1
+ export * from "./platformEvents";
2
2
  export * from "./types";
@@ -1,4 +1,4 @@
1
- export declare const GlobalEvents: {
1
+ export declare const PlatformEvents: {
2
2
  Messaging: {
3
3
  EmailSent: string;
4
4
  };
@@ -0,0 +1,10 @@
1
+ export declare class EventLogEntity {
2
+ id: string;
3
+ type: string;
4
+ userId?: string;
5
+ userName?: string;
6
+ payload?: any;
7
+ timestamp: Date;
8
+ createdOn: Date;
9
+ updatedOn: Date;
10
+ }
@@ -10,3 +10,4 @@ export { WpEntityRepository, EntityRepositoryProps } from "./repository";
10
10
  export { WpEntityManager, EntityManagerProps } from "./manager";
11
11
  export { WpEntityQueryBuilder, EntityQueryBuilderProps } from "./queryBuilder";
12
12
  export { EntityManagerSymbols } from "./symbols";
13
+ export { WpEventsTracker, EventsTrackerProps } from "./tracking";
@@ -1,5 +1,6 @@
1
1
  export declare const EntityManagerSymbols: {
2
2
  AppInitializer: symbol;
3
+ EventsTracker: symbol;
3
4
  Entity: symbol;
4
5
  EntityActions: symbol;
5
6
  EntityAdapter: symbol;
@@ -0,0 +1,4 @@
1
+ export interface EventsTrackerProps {
2
+ disabled?: boolean;
3
+ }
4
+ export declare const WpEventsTracker: (props?: EventsTrackerProps) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
@@ -0,0 +1,7 @@
1
+ export declare const AuthenticationEvents: {
2
+ UserLogin: string;
3
+ UserRegistrationStarted: string;
4
+ UserRegistrationCompleted: string;
5
+ UserPasswordResetStarted: string;
6
+ UserPasswordResetCompleted: string;
7
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./consts";
2
+ export * from "./types";
@@ -0,0 +1,26 @@
1
+ export type UserProfile = {
2
+ firstName: string;
3
+ lastName: string;
4
+ };
5
+ export type UserLoginEventPayload = {
6
+ userId: string;
7
+ email: string;
8
+ profile: UserProfile;
9
+ };
10
+ export type UserRegistrationStartedEventPayload = {
11
+ email: string;
12
+ profile: UserProfile;
13
+ };
14
+ export type UserRegistrationCompletedEventPayload = {
15
+ userId: string;
16
+ email: string;
17
+ profile: UserProfile;
18
+ };
19
+ export type UserPasswordResetStartedEventPayload = {
20
+ email: string;
21
+ };
22
+ export type UserPasswordResetCompletedEventPayload = {
23
+ userId: string;
24
+ email: string;
25
+ profile: UserProfile;
26
+ };
@@ -1,6 +1,8 @@
1
1
  export * from "./abstractions";
2
2
  export * from "./decorators";
3
3
  export * from "./email";
4
+ export * from "./errors";
5
+ export * from "./events";
4
6
  export * from "./handlers";
5
7
  export * from "./errors";
6
8
  export * from "./services";
@@ -20,6 +20,7 @@ export declare class EntityManagerInitializer {
20
20
  private registerAuthentication;
21
21
  private registerEntities;
22
22
  private executeInitializers;
23
+ private registerEventTrackingProviders;
23
24
  private registerEmailProviders;
24
25
  private registerEmailTemplates;
25
26
  private initializeProviders;
@@ -31,4 +32,5 @@ export declare class EntityManagerInitializer {
31
32
  private discoverAppInitializers;
32
33
  private discoverEmailTemplates;
33
34
  private discoverEmailProviders;
35
+ private discoverEventTrackingProviders;
34
36
  }
@@ -1,4 +1,4 @@
1
- import { IAuthenticationContext, IAuthenticationContextProvider, IEmailProvider, IEmailTemplatesCollection } from "../abstractions";
1
+ import { IAuthenticationContext, IAuthenticationContextProvider, IEmailProvider, IEmailTemplatesCollection, IEventLog, IEventsTracker } from "../abstractions";
2
2
  import { IEntitiesSearchAction, IEntityActions, IEntityCreateAction, IEntityDeleteAction, IEntityGetAction, IEntityUpdateAction, IEntityUpsertAction } from "../abstractions/actions";
3
3
  import { IEntityAdapter } from "../abstractions/adapters";
4
4
  import { IEntityAuthorizationMiddleware } from "../abstractions/authorization";
@@ -55,6 +55,8 @@ export declare class EntitiesServiceLocator {
55
55
  registerEventEmitter<TEventEmitter extends IEventEmitter>(instance: TEventEmitter): void;
56
56
  resolveEmailProvider<TEmailProvider extends IEmailProvider<unknown>>(): TEmailProvider;
57
57
  registerEmailProvider<TEmailProvider extends IEmailProvider<unknown>>(instance: TEmailProvider): void;
58
+ resolveEventsTracker<TEventsTracker extends IEventsTracker<TEventLog>, TEventLog extends IEventLog<unknown>>(): TEventsTracker;
59
+ registerEventsTracker<TEventsTracker extends IEventsTracker<TEventLog>, TEventLog extends IEventLog<unknown>>(instance: TEventsTracker): void;
58
60
  resolveEmailTemplatesCollection(): IEmailTemplatesCollection;
59
61
  registerEmailTemplatesCollection(instance: IEmailTemplatesCollection): void;
60
62
  resolveAuthenticationContextProvider<TAuthenticationContextProvider extends IAuthenticationContextProvider<TUserContext>, TUserContext>(): TAuthenticationContextProvider;
@@ -51,6 +51,7 @@ export declare const EntityServices: {
51
51
  export declare const GlobalServices: {
52
52
  Events: {
53
53
  IEventEmitter: string;
54
+ IEventsTracker: string;
54
55
  };
55
56
  Authentication: {
56
57
  IAuthenticationContextProvider: string;
package/dist/esm/index.js CHANGED
@@ -79,9 +79,9 @@ var SortDirection;
79
79
  SortDirection["Desc"] = "desc";
80
80
  })(SortDirection || (SortDirection = {}));
81
81
 
82
- const GlobalEvents = {
82
+ const PlatformEvents = {
83
83
  Messaging: {
84
- EmailSent: "messaging:email.sent",
84
+ EmailSent: "platform:messaging:email.sent",
85
85
  },
86
86
  };
87
87
 
@@ -119,6 +119,7 @@ class NestEntityManager {
119
119
 
120
120
  const EntityManagerSymbols = {
121
121
  AppInitializer: Symbol.for("WP:APP_INITIALIZER"),
122
+ EventsTracker: Symbol.for("WP:EVENTS_TRACKER"),
122
123
  Entity: Symbol.for("WP:ENTITY"),
123
124
  EntityActions: Symbol.for("WP:ENTITY_ACTIONS"),
124
125
  EntityAdapter: Symbol.for("WP:ENTITY_ADAPTER"),
@@ -186,6 +187,10 @@ const WpEntityQueryBuilder = (entityName, props = {}) => applyDecorators(Injecta
186
187
  ...props,
187
188
  }));
188
189
 
190
+ const WpEventsTracker = (props = {}) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EventsTracker, {
191
+ ...props,
192
+ }));
193
+
189
194
  const AuthenticationExtensionSymbols = {
190
195
  UserService: Symbol.for("WP.EXT:AUTHENTICATION.USER_SERVICE"),
191
196
  };
@@ -217,6 +222,14 @@ class OperationTokenMismatchError extends AuthenticationError {
217
222
  }
218
223
  }
219
224
 
225
+ const AuthenticationEvents = {
226
+ UserLogin: "authentication:user.login",
227
+ UserRegistrationStarted: "authentication:user.registrationStarted",
228
+ UserRegistrationCompleted: "authentication:user.registrationCompleted",
229
+ UserPasswordResetStarted: "authentication:user.passwordResetStarted",
230
+ UserPasswordResetCompleted: "authentication:user.passwordResetCompleted",
231
+ };
232
+
220
233
  /******************************************************************************
221
234
  Copyright (c) Microsoft Corporation.
222
235
 
@@ -650,6 +663,7 @@ const EntityServices = {
650
663
  const GlobalServices = {
651
664
  Events: {
652
665
  IEventEmitter: "IEventEmitter",
666
+ IEventsTracker: "IEventsTracker",
653
667
  },
654
668
  Authentication: {
655
669
  IAuthenticationContextProvider: "IAuthenticationContextProvider",
@@ -777,6 +791,12 @@ class EntitiesServiceLocator {
777
791
  registerEmailProvider(instance) {
778
792
  this.provider.register(GlobalServices.Messaging.IEmailProvider, instance);
779
793
  }
794
+ resolveEventsTracker() {
795
+ return this.provider.resolve(GlobalServices.Events.IEventsTracker);
796
+ }
797
+ registerEventsTracker(instance) {
798
+ this.provider.register(GlobalServices.Events.IEventsTracker, instance);
799
+ }
780
800
  resolveEmailTemplatesCollection() {
781
801
  return this.provider.resolve(GlobalServices.Messaging.IEmailTemplatesCollection);
782
802
  }
@@ -19547,6 +19567,7 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19547
19567
  }
19548
19568
  await this.registerEmailTemplates();
19549
19569
  await this.registerEmailProviders();
19570
+ await this.registerEventTrackingProviders();
19550
19571
  await this.executeInitializers(app);
19551
19572
  this.logger.log("Entity manager initialization completed 🚀");
19552
19573
  }
@@ -19600,6 +19621,19 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19600
19621
  this.logger.log(`Entity manager app initializer ${initializer.discoveredClass.name} initialized 💪`);
19601
19622
  }
19602
19623
  }
19624
+ async registerEventTrackingProviders() {
19625
+ const providers = await this.discoverEventTrackingProviders();
19626
+ if (!providers.length) {
19627
+ this.logger.warn("No events tracker ⚠️");
19628
+ return;
19629
+ }
19630
+ // todo: handle multiple trackers
19631
+ this.registry
19632
+ .getContainer()
19633
+ .getEntitiesServicesLocator()
19634
+ .registerEventsTracker(providers[0].discoveredClass.instance);
19635
+ this.logger.log(`Events tracker ${providers[0].discoveredClass.name} registered 🚜`);
19636
+ }
19603
19637
  async registerEmailProviders() {
19604
19638
  const providers = await this.discoverEmailProviders();
19605
19639
  if (!providers.length) {
@@ -19655,6 +19689,9 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19655
19689
  async discoverEmailProviders() {
19656
19690
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EmailProvider);
19657
19691
  }
19692
+ async discoverEventTrackingProviders() {
19693
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EventsTracker);
19694
+ }
19658
19695
  };
19659
19696
  EntityManagerInitializer = EntityManagerInitializer_1 = __decorate([
19660
19697
  Injectable(),
@@ -25095,7 +25132,7 @@ let SendgridEmailProvider = class SendgridEmailProvider {
25095
25132
  });
25096
25133
  }
25097
25134
  await this.client.send(request);
25098
- await this.eventsService.emitEvent(GlobalEvents.Messaging.EmailSent, {
25135
+ await this.eventsService.emitEvent(PlatformEvents.Messaging.EmailSent, {
25099
25136
  from: request.from,
25100
25137
  to: request.to,
25101
25138
  cc: request.cc,
@@ -25136,7 +25173,7 @@ let SendgridEmailProvider = class SendgridEmailProvider {
25136
25173
  });
25137
25174
  }
25138
25175
  await this.client.send(request);
25139
- await this.eventsService.emitEvent(GlobalEvents.Messaging.EmailSent, {
25176
+ await this.eventsService.emitEvent(PlatformEvents.Messaging.EmailSent, {
25140
25177
  from: request.from,
25141
25178
  to: request.to,
25142
25179
  cc: request.cc,
@@ -25160,6 +25197,7 @@ SendgridEmailProvider = __decorate([
25160
25197
 
25161
25198
  var SendgridEmailModule_1;
25162
25199
  const ModuleData = {
25200
+ imports: [EntityManagerModule],
25163
25201
  providers: [SendgridEmailProvider],
25164
25202
  };
25165
25203
  let SendgridEmailModule = SendgridEmailModule_1 = class SendgridEmailModule {
@@ -25214,5 +25252,5 @@ AppSessionMiddleware = __decorate([
25214
25252
  Injectable()
25215
25253
  ], AppSessionMiddleware);
25216
25254
 
25217
- export { AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthenticationEmailTemplates, AuthenticationError, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EventsService, GlobalEvents, InvalidCredentialsError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, QueryBuilderBase, ReplicationMode, SendgridEmailModule, SendgridEmailTemplate, SortDirection, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpSendgridEmailTemplate, WpUserService, getLocalizedText, newUuid, renderHandlebarsTemplate };
25255
+ export { AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EventsService, InvalidCredentialsError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, PlatformEvents, QueryBuilderBase, ReplicationMode, SendgridEmailModule, SendgridEmailTemplate, SortDirection, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEventsTracker, WpSendgridEmailTemplate, WpUserService, getLocalizedText, newUuid, renderHandlebarsTemplate };
25218
25256
  //# sourceMappingURL=index.js.map