@zeeshan60/event-processor 1.0.8 → 1.0.10

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.
@@ -1,10 +1,12 @@
1
1
  import { UserCreated, PlaceholderUserCreated, UserCurrencyChanged, UserPhoneNumberChanged, UserDisplayNameChanged, UserDeleted, PlaceholderUserMerged, UserConvertedToPlaceholder, UserModel } from '.';
2
2
  import { UserModelStore } from '.';
3
+ import { UserEventStore } from '.';
3
4
  import { ActivityEventHandler } from './ActivityEventHandler';
4
5
  export declare class UserEventHandler {
5
6
  private modelStore;
7
+ private eventStore;
6
8
  private activityEventHandler?;
7
- constructor(modelStore: UserModelStore, activityEventHandler?: ActivityEventHandler | undefined);
9
+ constructor(modelStore: UserModelStore, eventStore: UserEventStore, activityEventHandler?: ActivityEventHandler | undefined);
8
10
  handleUserCreated(event: UserCreated): Promise<UserModel>;
9
11
  handlePlaceholderUserCreated(event: PlaceholderUserCreated): Promise<UserModel>;
10
12
  handleUserCurrencyChanged(event: UserCurrencyChanged): Promise<UserModel>;
@@ -1 +1 @@
1
- {"version":3,"file":"UserEventHandler.d.ts","sourceRoot":"","sources":["../src/UserEventHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,SAAS,EACZ,MAAM,GAAG,CAAC;AACX,OAAO,EAAC,cAAc,EAAC,MAAM,GAAG,CAAC;AACjC,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAG5D,qBAAa,gBAAgB;IAErB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,oBAAoB,CAAC;gBADrB,UAAU,EAAE,cAAc,EAC1B,oBAAoB,CAAC,EAAE,oBAAoB,YAAA;IAGjD,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAWzD,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU/E,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzE,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU/E,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU/E,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzD,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU7E,gCAAgC,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,SAAS,CAAC;CAShG"}
1
+ {"version":3,"file":"UserEventHandler.d.ts","sourceRoot":"","sources":["../src/UserEventHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,SAAS,EACZ,MAAM,GAAG,CAAC;AACX,OAAO,EAAC,cAAc,EAAC,MAAM,GAAG,CAAC;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,GAAG,CAAC;AACjC,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAI5D,qBAAa,gBAAgB;IAErB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,oBAAoB,CAAC;gBAFrB,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,cAAc,EAC1B,oBAAoB,CAAC,EAAE,oBAAoB,YAAA;IAGjD,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAczD,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU/E,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzE,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU/E,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU/E,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzD,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IAU7E,gCAAgC,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,SAAS,CAAC;CAShG"}
@@ -2,19 +2,24 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UserEventHandler = void 0;
4
4
  const EventBusSingleton_1 = require("./common/EventBusSingleton");
5
+ const environment_1 = require("./config/environment");
5
6
  class UserEventHandler {
6
- constructor(modelStore, activityEventHandler) {
7
+ constructor(modelStore, eventStore, activityEventHandler) {
7
8
  this.modelStore = modelStore;
9
+ this.eventStore = eventStore;
8
10
  this.activityEventHandler = activityEventHandler;
9
11
  }
10
12
  async handleUserCreated(event) {
11
13
  const existingModel = await this.modelStore.getByStreamIdWhereDeletedIsFalse(event.streamId);
12
14
  const updatedModel = event.apply(existingModel);
15
+ await this.eventStore.addEvent(event.firebaseUid, event);
13
16
  await this.modelStore.save(updatedModel);
14
17
  if (this.activityEventHandler) {
15
18
  await this.activityEventHandler.createActivityLog(event, existingModel, updatedModel);
16
19
  }
17
- (0, EventBusSingleton_1.getEventBus)().publish(event);
20
+ if ((0, environment_1.isClient)()) {
21
+ (0, EventBusSingleton_1.getEventBus)().publish(event);
22
+ }
18
23
  return updatedModel;
19
24
  }
20
25
  async handlePlaceholderUserCreated(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,oBAAY,oBAAoB;IAC9B,qBAAqB,0BAA0B;IAC/C,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,cAAM,yBAAyB;IAC7B,OAAO,CAAC,MAAM,CAAsD;;IAMpE,OAAO,CAAC,iBAAiB;IAYzB,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAI7C,SAAS,IAAI,oBAAoB;IAIjC,OAAO,IAAI,OAAO;IAIlB,QAAQ,IAAI,OAAO;IAInB,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,iBAAiB,2BAAkC,CAAC;AAEjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAE1E;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAE9D;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,oBAAY,oBAAoB;IAC9B,qBAAqB,0BAA0B;IAC/C,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,cAAM,yBAAyB;IAC7B,OAAO,CAAC,MAAM,CAAsD;;IAMpE,OAAO,CAAC,iBAAiB;IAkBzB,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAI7C,SAAS,IAAI,oBAAoB;IAIjC,OAAO,IAAI,OAAO;IAIlB,QAAQ,IAAI,OAAO;IAInB,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,iBAAiB,2BAAkC,CAAC;AAEjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAE1E;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAE9D;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -19,15 +19,22 @@ class EventProcessorEnvironment {
19
19
  this.initializeFromEnv();
20
20
  }
21
21
  initializeFromEnv() {
22
- const envSource = process.env.EVENT_PROCESSOR_SOURCE;
23
- if (envSource === EventProcessorSource.GOOGLE_CLOUD_FUNCTION) {
24
- this.source = EventProcessorSource.GOOGLE_CLOUD_FUNCTION;
25
- }
26
- else if (envSource === EventProcessorSource.CLIENT) {
27
- this.source = EventProcessorSource.CLIENT;
22
+ // Check if running in Node.js environment (not browser)
23
+ if (typeof process !== 'undefined' && process.env) {
24
+ const envSource = process.env.EVENT_PROCESSOR_SOURCE;
25
+ if (envSource === EventProcessorSource.GOOGLE_CLOUD_FUNCTION) {
26
+ this.source = EventProcessorSource.GOOGLE_CLOUD_FUNCTION;
27
+ }
28
+ else if (envSource === EventProcessorSource.CLIENT) {
29
+ this.source = EventProcessorSource.CLIENT;
30
+ }
31
+ else {
32
+ this.source = EventProcessorSource.UNKNOWN;
33
+ }
28
34
  }
29
35
  else {
30
- this.source = EventProcessorSource.UNKNOWN;
36
+ // Browser environment - default to CLIENT
37
+ this.source = EventProcessorSource.CLIENT;
31
38
  }
32
39
  }
33
40
  setSource(source) {
@@ -0,0 +1,25 @@
1
+ import { UserModelStore } from '../store/UserModelStore';
2
+ interface FirestoreTimestamp {
3
+ toDate(): Date;
4
+ seconds: number;
5
+ nanoseconds: number;
6
+ }
7
+ interface ClientFirestoreEventData {
8
+ id: string;
9
+ eventType: string;
10
+ streamId: string;
11
+ version: number;
12
+ createdAt: FirestoreTimestamp | Date;
13
+ createdBy: string;
14
+ systemGenerated?: boolean;
15
+ [key: string]: any;
16
+ }
17
+ export declare class UIEventHandler {
18
+ private userModelStore;
19
+ constructor(userModelStore: UserModelStore);
20
+ handleFirestoreEvent(eventData: ClientFirestoreEventData): Promise<void>;
21
+ private firestoreToEvent;
22
+ private toDate;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=UIEventHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UIEventHandler.d.ts","sourceRoot":"","sources":["../../src/controllers/UIEventHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAGvD,UAAU,kBAAkB;IACxB,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,wBAAwB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,qBAAa,cAAc;IAEnB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAGpC,oBAAoB,CAAC,SAAS,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9E,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,MAAM;CASjB"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UIEventHandler = void 0;
4
+ const __1 = require("..");
5
+ const EventBusSingleton_1 = require("../common/EventBusSingleton");
6
+ class UIEventHandler {
7
+ constructor(userModelStore) {
8
+ this.userModelStore = userModelStore;
9
+ }
10
+ async handleFirestoreEvent(eventData) {
11
+ const event = this.firestoreToEvent(eventData);
12
+ if (event instanceof __1.UserCreated) {
13
+ const existingModel = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(event.streamId);
14
+ const updatedModel = event.apply(existingModel);
15
+ await this.userModelStore.save(updatedModel);
16
+ (0, EventBusSingleton_1.getEventBus)().publish(event);
17
+ }
18
+ }
19
+ firestoreToEvent(data) {
20
+ const eventType = data.eventType;
21
+ const createdAt = this.toDate(data.createdAt);
22
+ if (eventType === 'UserCreated') {
23
+ return new __1.UserCreated({
24
+ userId: data.userId,
25
+ firebaseUid: data.firebaseUid,
26
+ displayName: data.displayName,
27
+ phoneNumber: data.phoneNumber,
28
+ email: data.email,
29
+ photoUrl: data.photoUrl,
30
+ emailVerified: data.emailVerified,
31
+ createdAt,
32
+ createdBy: data.createdBy,
33
+ streamId: data.streamId,
34
+ version: data.version,
35
+ systemGenerated: data.systemGenerated ?? false,
36
+ });
37
+ }
38
+ throw new Error(`Unsupported event type: ${eventType}`);
39
+ }
40
+ toDate(timestamp) {
41
+ if (timestamp instanceof Date) {
42
+ return timestamp;
43
+ }
44
+ if (typeof timestamp === 'object' && 'toDate' in timestamp) {
45
+ return timestamp.toDate();
46
+ }
47
+ return new Date(timestamp);
48
+ }
49
+ }
50
+ exports.UIEventHandler = UIEventHandler;
@@ -1,4 +1,9 @@
1
+ import { UserModelStore } from '../store/UserModelStore';
2
+ import { UserEventStore } from '../store/UserEventStore';
1
3
  export declare class UserController {
4
+ private modelStore;
5
+ private eventStore?;
6
+ constructor(modelStore: UserModelStore, eventStore?: UserEventStore | undefined);
2
7
  loginUser(userFSId: string): Promise<string>;
3
8
  }
4
9
  //# sourceMappingURL=UserController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserController.d.ts","sourceRoot":"","sources":["../../src/controllers/UserController.ts"],"names":[],"mappings":"AAIA,qBAAa,cAAc;IACjB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA0BrD"}
1
+ {"version":3,"file":"UserController.d.ts","sourceRoot":"","sources":["../../src/controllers/UserController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAGvD,qBAAa,cAAc;IAEnB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU,CAAC;gBADX,UAAU,EAAE,cAAc,EAC1B,UAAU,CAAC,EAAE,cAAc,YAAA;IAGjC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA+BrD"}
@@ -5,7 +5,15 @@ const EventBusSingleton_1 = require("../common/EventBusSingleton");
5
5
  const UserEvents_1 = require("../UserEvents");
6
6
  const rxjs_1 = require("rxjs");
7
7
  class UserController {
8
+ constructor(modelStore, eventStore) {
9
+ this.modelStore = modelStore;
10
+ this.eventStore = eventStore;
11
+ }
8
12
  async loginUser(userFSId) {
13
+ const existingUser = await this.modelStore.findByFirebaseUid(userFSId);
14
+ if (existingUser) {
15
+ return existingUser.userId;
16
+ }
9
17
  const eventBus = (0, EventBusSingleton_1.getEventBus)();
10
18
  const isUserCreatedForFirebaseUid = (event) => {
11
19
  return event instanceof UserEvents_1.UserCreated && event.firebaseUid === userFSId;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './events';
2
2
  export { UserController } from './controllers/UserController';
3
+ export { UIEventHandler } from './controllers/UIEventHandler';
3
4
  export { resetEventBus } from './common/EventBusSingleton';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AAGzB,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAG5D,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AAGzB,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAG5D,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -14,12 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.resetEventBus = exports.UserController = void 0;
17
+ exports.resetEventBus = exports.UIEventHandler = exports.UserController = void 0;
18
18
  // Export all backend event definitions here
19
19
  __exportStar(require("./events"), exports);
20
20
  // Export controllers
21
21
  var UserController_1 = require("./controllers/UserController");
22
22
  Object.defineProperty(exports, "UserController", { enumerable: true, get: function () { return UserController_1.UserController; } });
23
+ var UIEventHandler_1 = require("./controllers/UIEventHandler");
24
+ Object.defineProperty(exports, "UIEventHandler", { enumerable: true, get: function () { return UIEventHandler_1.UIEventHandler; } });
23
25
  // Export singleton utilities for testing
24
26
  var EventBusSingleton_1 = require("./common/EventBusSingleton");
25
27
  Object.defineProperty(exports, "resetEventBus", { enumerable: true, get: function () { return EventBusSingleton_1.resetEventBus; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeeshan60/event-processor",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Shared event sourcing infrastructure for Loan Tracker projects",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",