@zeeshan60/event-processor 1.0.5 → 1.0.7

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 (99) hide show
  1. package/README.md +71 -2
  2. package/dist/ActivityLogEvents.d.ts +2 -0
  3. package/dist/ActivityLogEvents.d.ts.map +1 -1
  4. package/dist/ActivityLogEvents.js +1 -0
  5. package/dist/FriendEventHandler.d.ts.map +1 -1
  6. package/dist/FriendEventHandler.js +5 -0
  7. package/dist/FriendEvents.d.ts +10 -0
  8. package/dist/FriendEvents.d.ts.map +1 -1
  9. package/dist/FriendEvents.js +9 -0
  10. package/dist/GroupEventHandler.d.ts.map +1 -1
  11. package/dist/GroupEventHandler.js +8 -0
  12. package/dist/GroupEvents.d.ts +12 -0
  13. package/dist/GroupEvents.d.ts.map +1 -1
  14. package/dist/GroupEvents.js +12 -0
  15. package/dist/GroupTransactionEventHandler.d.ts.map +1 -1
  16. package/dist/GroupTransactionEventHandler.js +7 -0
  17. package/dist/GroupTransactionEvents.d.ts +18 -0
  18. package/dist/GroupTransactionEvents.d.ts.map +1 -1
  19. package/dist/GroupTransactionEvents.js +18 -0
  20. package/dist/TransactionEventHandler.d.ts.map +1 -1
  21. package/dist/TransactionEventHandler.js +26 -0
  22. package/dist/TransactionEvents.d.ts +16 -0
  23. package/dist/TransactionEvents.d.ts.map +1 -1
  24. package/dist/TransactionEvents.js +16 -0
  25. package/dist/UserEventHandler.d.ts.map +1 -1
  26. package/dist/UserEventHandler.js +2 -0
  27. package/dist/UserEvents.d.ts +16 -0
  28. package/dist/UserEvents.d.ts.map +1 -1
  29. package/dist/UserEvents.js +12 -0
  30. package/dist/__tests__/test-helpers/IMActivityLogEventStore.d.ts +9 -0
  31. package/dist/__tests__/test-helpers/IMActivityLogEventStore.d.ts.map +1 -0
  32. package/dist/__tests__/test-helpers/IMActivityLogEventStore.js +21 -0
  33. package/dist/__tests__/test-helpers/IMActivityLogModelStore.d.ts +11 -0
  34. package/dist/__tests__/test-helpers/IMActivityLogModelStore.d.ts.map +1 -0
  35. package/dist/{store/InMemoryModelStore.js → __tests__/test-helpers/IMActivityLogModelStore.js} +14 -13
  36. package/dist/__tests__/test-helpers/IMFriendEventStore.d.ts +9 -0
  37. package/dist/__tests__/test-helpers/IMFriendEventStore.d.ts.map +1 -0
  38. package/dist/__tests__/test-helpers/IMFriendEventStore.js +20 -0
  39. package/dist/__tests__/test-helpers/IMFriendModelStore.d.ts +16 -0
  40. package/dist/__tests__/test-helpers/IMFriendModelStore.d.ts.map +1 -0
  41. package/dist/__tests__/test-helpers/IMFriendModelStore.js +74 -0
  42. package/dist/__tests__/test-helpers/IMGroupEventStore.d.ts +9 -0
  43. package/dist/__tests__/test-helpers/IMGroupEventStore.d.ts.map +1 -0
  44. package/dist/__tests__/test-helpers/IMGroupEventStore.js +20 -0
  45. package/dist/__tests__/test-helpers/IMGroupModelStore.d.ts +14 -0
  46. package/dist/__tests__/test-helpers/IMGroupModelStore.d.ts.map +1 -0
  47. package/dist/__tests__/test-helpers/IMGroupModelStore.js +53 -0
  48. package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.d.ts +9 -0
  49. package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.d.ts.map +1 -0
  50. package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.js +22 -0
  51. package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.d.ts +14 -0
  52. package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.d.ts.map +1 -0
  53. package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.js +55 -0
  54. package/dist/__tests__/test-helpers/IMTransactionEventStore.d.ts +10 -0
  55. package/dist/__tests__/test-helpers/IMTransactionEventStore.d.ts.map +1 -0
  56. package/dist/__tests__/test-helpers/IMTransactionEventStore.js +23 -0
  57. package/dist/__tests__/test-helpers/IMTransactionModelStore.d.ts +14 -0
  58. package/dist/__tests__/test-helpers/IMTransactionModelStore.d.ts.map +1 -0
  59. package/dist/__tests__/test-helpers/IMTransactionModelStore.js +56 -0
  60. package/dist/__tests__/test-helpers/IMUserEventStore.d.ts +10 -0
  61. package/dist/__tests__/test-helpers/IMUserEventStore.d.ts.map +1 -0
  62. package/dist/{store/InMemoryEventStore.js → __tests__/test-helpers/IMUserEventStore.js} +5 -5
  63. package/dist/__tests__/test-helpers/IMUserModelStore.d.ts +15 -0
  64. package/dist/__tests__/test-helpers/IMUserModelStore.d.ts.map +1 -0
  65. package/dist/__tests__/test-helpers/IMUserModelStore.js +58 -0
  66. package/dist/common/Event.d.ts +1 -0
  67. package/dist/common/Event.d.ts.map +1 -1
  68. package/dist/common/EventBus.d.ts +12 -0
  69. package/dist/common/EventBus.d.ts.map +1 -0
  70. package/dist/common/EventBus.js +26 -0
  71. package/dist/common/EventBusSingleton.d.ts +4 -0
  72. package/dist/common/EventBusSingleton.d.ts.map +1 -0
  73. package/dist/common/EventBusSingleton.js +18 -0
  74. package/dist/config/Environment.d.ts +25 -0
  75. package/dist/config/Environment.d.ts.map +1 -0
  76. package/dist/config/Environment.js +70 -0
  77. package/dist/controllers/UserController.d.ts +4 -0
  78. package/dist/controllers/UserController.d.ts.map +1 -0
  79. package/dist/controllers/UserController.js +28 -0
  80. package/dist/events.d.ts +1 -0
  81. package/dist/events.d.ts.map +1 -1
  82. package/dist/events.js +11 -1
  83. package/dist/index.d.ts +2 -0
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +7 -0
  86. package/package.json +2 -1
  87. package/dist/common/EventStore.d.ts +0 -5
  88. package/dist/common/EventStore.d.ts.map +0 -1
  89. package/dist/common/EventStore.js +0 -6
  90. package/dist/common/ModelStore.d.ts +0 -6
  91. package/dist/common/ModelStore.d.ts.map +0 -1
  92. package/dist/common/ModelStore.js +0 -6
  93. package/dist/store/InMemoryEventStore.d.ts +0 -10
  94. package/dist/store/InMemoryEventStore.d.ts.map +0 -1
  95. package/dist/store/InMemoryModelStore.d.ts +0 -11
  96. package/dist/store/InMemoryModelStore.d.ts.map +0 -1
  97. package/dist/utils/eventConverter.d.ts +0 -23
  98. package/dist/utils/eventConverter.d.ts.map +0 -1
  99. package/dist/utils/eventConverter.js +0 -370
@@ -0,0 +1,14 @@
1
+ import { GroupModelStore } from '../..';
2
+ import { GroupModel } from '../..';
3
+ export declare class IMGroupModelStore extends GroupModelStore {
4
+ private models;
5
+ getByStreamId(streamId: string): Promise<GroupModel | undefined>;
6
+ getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<GroupModel | undefined>;
7
+ findByUserIdAndGroupIdAndDeletedIsFalse(userId: string, groupId: string): Promise<GroupModel | undefined>;
8
+ findAllByGroupIdAndDeletedIsFalse(groupId: string): Promise<GroupModel[]>;
9
+ save(model: GroupModel): Promise<void>;
10
+ getAll(): GroupModel[];
11
+ getAllWhereDeletedIsFalse(): GroupModel[];
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=IMGroupModelStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMGroupModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,OAAO,CAAC;AAEjC,qBAAa,iBAAkB,SAAQ,eAAe;IAClD,OAAO,CAAC,MAAM,CAAsC;IAE9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAKhE,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAQnF,uCAAuC,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAW5B,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAUzE,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,IAAI,UAAU,EAAE;IAItB,yBAAyB,IAAI,UAAU,EAAE;IAIzC,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMGroupModelStore = void 0;
4
+ const __1 = require("../..");
5
+ class IMGroupModelStore extends __1.GroupModelStore {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.models = new Map();
9
+ }
10
+ async getByStreamId(streamId) {
11
+ const model = this.models.get(streamId);
12
+ return model;
13
+ }
14
+ async getByStreamIdWhereDeletedIsFalse(streamId) {
15
+ const model = this.models.get(streamId);
16
+ if (!model || model.deleted) {
17
+ return undefined;
18
+ }
19
+ return model;
20
+ }
21
+ async findByUserIdAndGroupIdAndDeletedIsFalse(userId, groupId) {
22
+ for (const model of this.models.values()) {
23
+ if (model.userId === userId &&
24
+ model.groupId === groupId &&
25
+ !model.deleted) {
26
+ return model;
27
+ }
28
+ }
29
+ return undefined;
30
+ }
31
+ async findAllByGroupIdAndDeletedIsFalse(groupId) {
32
+ const results = [];
33
+ for (const model of this.models.values()) {
34
+ if (model.groupId === groupId && !model.deleted) {
35
+ results.push(model);
36
+ }
37
+ }
38
+ return results;
39
+ }
40
+ async save(model) {
41
+ this.models.set(model.streamId, model);
42
+ }
43
+ getAll() {
44
+ return Array.from(this.models.values());
45
+ }
46
+ getAllWhereDeletedIsFalse() {
47
+ return Array.from(this.models.values()).filter((model) => !model.deleted);
48
+ }
49
+ clear() {
50
+ this.models.clear();
51
+ }
52
+ }
53
+ exports.IMGroupModelStore = IMGroupModelStore;
@@ -0,0 +1,9 @@
1
+ import { GroupTransactionEventStore } from '../..';
2
+ import { Event } from '../..';
3
+ export declare class IMGroupTransactionEventStore extends GroupTransactionEventStore {
4
+ private events;
5
+ addEvent(userId: string, event: Event): Promise<void>;
6
+ getEvents(userId: string): Event[];
7
+ clear(): void;
8
+ }
9
+ //# sourceMappingURL=IMGroupTransactionEventStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMGroupTransactionEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupTransactionEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,OAAO,CAAC;AAE5B,qBAAa,4BAA6B,SAAQ,0BAA0B;IACxE,OAAO,CAAC,MAAM,CAAmC;IAE3C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE;IAIlC,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMGroupTransactionEventStore = void 0;
4
+ const __1 = require("../..");
5
+ class IMGroupTransactionEventStore extends __1.GroupTransactionEventStore {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.events = new Map();
9
+ }
10
+ async addEvent(userId, event) {
11
+ const userEvents = this.events.get(userId) || [];
12
+ userEvents.push(event);
13
+ this.events.set(userId, userEvents);
14
+ }
15
+ getEvents(userId) {
16
+ return this.events.get(userId) || [];
17
+ }
18
+ clear() {
19
+ this.events.clear();
20
+ }
21
+ }
22
+ exports.IMGroupTransactionEventStore = IMGroupTransactionEventStore;
@@ -0,0 +1,14 @@
1
+ import { GroupTransactionModelStore } from '../..';
2
+ import { GroupTransactionModel } from '../..';
3
+ export declare class IMGroupTransactionModelStore extends GroupTransactionModelStore {
4
+ private models;
5
+ getByStreamId(streamId: string): Promise<GroupTransactionModel | undefined>;
6
+ getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<GroupTransactionModel | undefined>;
7
+ findAllByGroupIdAndTransactionIdAndDeletedIsFalse(groupId: string, transactionId: string): Promise<GroupTransactionModel[]>;
8
+ findByUserIdAndTransactionId(userId: string, transactionId: string): Promise<GroupTransactionModel | undefined>;
9
+ save(model: GroupTransactionModel): Promise<void>;
10
+ getAll(): GroupTransactionModel[];
11
+ getAllWhereDeletedIsFalse(): GroupTransactionModel[];
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=IMGroupTransactionModelStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMGroupTransactionModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupTransactionModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAE5C,qBAAa,4BAA6B,SAAQ,0BAA0B;IACxE,OAAO,CAAC,MAAM,CAAiD;IAEzD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAK3E,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAQ9F,iDAAiD,CACnD,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAY7B,4BAA4B,CAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAWvC,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,MAAM,IAAI,qBAAqB,EAAE;IAIjC,yBAAyB,IAAI,qBAAqB,EAAE;IAIpD,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMGroupTransactionModelStore = void 0;
4
+ const __1 = require("../..");
5
+ class IMGroupTransactionModelStore extends __1.GroupTransactionModelStore {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.models = new Map();
9
+ }
10
+ async getByStreamId(streamId) {
11
+ const model = this.models.get(streamId);
12
+ return model;
13
+ }
14
+ async getByStreamIdWhereDeletedIsFalse(streamId) {
15
+ const model = this.models.get(streamId);
16
+ if (!model || model.deleted) {
17
+ return undefined;
18
+ }
19
+ return model;
20
+ }
21
+ async findAllByGroupIdAndTransactionIdAndDeletedIsFalse(groupId, transactionId) {
22
+ const results = [];
23
+ for (const model of this.models.values()) {
24
+ if (model.groupId === groupId &&
25
+ model.transactionId === transactionId &&
26
+ !model.deleted) {
27
+ results.push(model);
28
+ }
29
+ }
30
+ return results;
31
+ }
32
+ async findByUserIdAndTransactionId(userId, transactionId) {
33
+ for (const model of this.models.values()) {
34
+ if (model.userId === userId &&
35
+ model.transactionId === transactionId &&
36
+ !model.deleted) {
37
+ return model;
38
+ }
39
+ }
40
+ return undefined;
41
+ }
42
+ async save(model) {
43
+ this.models.set(model.streamId, model);
44
+ }
45
+ getAll() {
46
+ return Array.from(this.models.values());
47
+ }
48
+ getAllWhereDeletedIsFalse() {
49
+ return Array.from(this.models.values()).filter((model) => !model.deleted);
50
+ }
51
+ clear() {
52
+ this.models.clear();
53
+ }
54
+ }
55
+ exports.IMGroupTransactionModelStore = IMGroupTransactionModelStore;
@@ -0,0 +1,10 @@
1
+ import { TransactionEventStore } from '../..';
2
+ import { Event } from '../..';
3
+ export declare class IMTransactionEventStore extends TransactionEventStore {
4
+ private events;
5
+ addEvent(_userId: string, event: Event): Promise<void>;
6
+ getEvents(): Event[];
7
+ getEventsByStreamId(streamId: string): Event[];
8
+ clear(): void;
9
+ }
10
+ //# sourceMappingURL=IMTransactionEventStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMTransactionEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMTransactionEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,OAAO,CAAC;AAE5B,qBAAa,uBAAwB,SAAQ,qBAAqB;IAC9D,OAAO,CAAC,MAAM,CAAe;IAEvB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,SAAS,IAAI,KAAK,EAAE;IAIpB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE;IAI9C,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMTransactionEventStore = void 0;
4
+ const __1 = require("../..");
5
+ class IMTransactionEventStore extends __1.TransactionEventStore {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.events = [];
9
+ }
10
+ async addEvent(_userId, event) {
11
+ this.events.push(event);
12
+ }
13
+ getEvents() {
14
+ return [...this.events];
15
+ }
16
+ getEventsByStreamId(streamId) {
17
+ return this.events.filter((event) => event.streamId === streamId);
18
+ }
19
+ clear() {
20
+ this.events = [];
21
+ }
22
+ }
23
+ exports.IMTransactionEventStore = IMTransactionEventStore;
@@ -0,0 +1,14 @@
1
+ import { TransactionModelStore } from '../..';
2
+ import { TransactionModel } from '../..';
3
+ export declare class IMTransactionModelStore extends TransactionModelStore {
4
+ private models;
5
+ getByStreamId(streamId: string): Promise<TransactionModel | undefined>;
6
+ getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<TransactionModel | undefined>;
7
+ findByUserAndLogicalTransactionId(userId: string, recipientUserId: string, logicalTransactionId: string): Promise<TransactionModel | undefined>;
8
+ findByGroupTransactionId(userId: string, groupTransactionId: string): Promise<TransactionModel[]>;
9
+ save(model: TransactionModel): Promise<void>;
10
+ getAll(): TransactionModel[];
11
+ getAllWhereDeletedIsFalse(): TransactionModel[];
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=IMTransactionModelStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMTransactionModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMTransactionModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,gBAAgB,EAAC,MAAM,OAAO,CAAC;AAEvC,qBAAa,uBAAwB,SAAQ,qBAAqB;IAC9D,OAAO,CAAC,MAAM,CAA4C;IAEpD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAKtE,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQzF,iCAAiC,CACnC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,GAC7B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAclC,wBAAwB,CAC1B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAcxB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,MAAM,IAAI,gBAAgB,EAAE;IAI5B,yBAAyB,IAAI,gBAAgB,EAAE;IAI/C,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMTransactionModelStore = void 0;
4
+ const __1 = require("../..");
5
+ class IMTransactionModelStore extends __1.TransactionModelStore {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.models = new Map();
9
+ }
10
+ async getByStreamId(streamId) {
11
+ const model = this.models.get(streamId);
12
+ return model;
13
+ }
14
+ async getByStreamIdWhereDeletedIsFalse(streamId) {
15
+ const model = this.models.get(streamId);
16
+ if (!model || model.deleted) {
17
+ return undefined;
18
+ }
19
+ return model;
20
+ }
21
+ async findByUserAndLogicalTransactionId(userId, recipientUserId, logicalTransactionId) {
22
+ for (const model of this.models.values()) {
23
+ if (model.userId === userId &&
24
+ model.recipientUserId === recipientUserId &&
25
+ model.logicalTransactionId === logicalTransactionId &&
26
+ !model.deleted) {
27
+ return model;
28
+ }
29
+ }
30
+ return undefined;
31
+ }
32
+ async findByGroupTransactionId(userId, groupTransactionId) {
33
+ const results = [];
34
+ for (const model of this.models.values()) {
35
+ if (model.userId === userId &&
36
+ model.groupTransactionId === groupTransactionId &&
37
+ !model.deleted) {
38
+ results.push(model);
39
+ }
40
+ }
41
+ return results;
42
+ }
43
+ async save(model) {
44
+ this.models.set(model.streamId, model);
45
+ }
46
+ getAll() {
47
+ return Array.from(this.models.values());
48
+ }
49
+ getAllWhereDeletedIsFalse() {
50
+ return Array.from(this.models.values()).filter((model) => !model.deleted);
51
+ }
52
+ clear() {
53
+ this.models.clear();
54
+ }
55
+ }
56
+ exports.IMTransactionModelStore = IMTransactionModelStore;
@@ -0,0 +1,10 @@
1
+ import { UserEventStore } from '../..';
2
+ import { Event } from '../..';
3
+ export declare class IMUserEventStore extends UserEventStore {
4
+ private events;
5
+ addEvent(_userId: string, event: Event): Promise<void>;
6
+ getEvents(): Event[];
7
+ getEventsByStreamId(streamId: string): Event[];
8
+ clear(): void;
9
+ }
10
+ //# sourceMappingURL=IMUserEventStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMUserEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMUserEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,EAAC,KAAK,EAAC,MAAM,OAAO,CAAC;AAE5B,qBAAa,gBAAiB,SAAQ,cAAc;IAChD,OAAO,CAAC,MAAM,CAAe;IAEvB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,SAAS,IAAI,KAAK,EAAE;IAIpB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE;IAI9C,KAAK,IAAI,IAAI;CAGhB"}
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InMemoryEventStore = void 0;
4
- const EventStore_1 = require("../common/EventStore");
5
- class InMemoryEventStore extends EventStore_1.EventStore {
3
+ exports.IMUserEventStore = void 0;
4
+ const __1 = require("../..");
5
+ class IMUserEventStore extends __1.UserEventStore {
6
6
  constructor() {
7
7
  super(...arguments);
8
8
  this.events = [];
9
9
  }
10
- async addEvent(event) {
10
+ async addEvent(_userId, event) {
11
11
  this.events.push(event);
12
12
  }
13
13
  getEvents() {
@@ -20,4 +20,4 @@ class InMemoryEventStore extends EventStore_1.EventStore {
20
20
  this.events = [];
21
21
  }
22
22
  }
23
- exports.InMemoryEventStore = InMemoryEventStore;
23
+ exports.IMUserEventStore = IMUserEventStore;
@@ -0,0 +1,15 @@
1
+ import { UserModelStore } from '../..';
2
+ import { UserModel } from '../..';
3
+ export declare class IMUserModelStore extends UserModelStore {
4
+ private models;
5
+ getByStreamId(streamId: string): Promise<UserModel | undefined>;
6
+ getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<UserModel | undefined>;
7
+ save(model: UserModel): Promise<void>;
8
+ findByEmail(email: string): Promise<UserModel | undefined>;
9
+ findByPhone(phone: string): Promise<UserModel | undefined>;
10
+ findByFirebaseUid(uid: string): Promise<UserModel | undefined>;
11
+ getAll(): UserModel[];
12
+ getAllWhereDeletedIsFalse(): UserModel[];
13
+ clear(): void;
14
+ }
15
+ //# sourceMappingURL=IMUserModelStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMUserModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMUserModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAEhC,qBAAa,gBAAiB,SAAQ,cAAc;IAChD,OAAO,CAAC,MAAM,CAAqC;IAE7C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK/D,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAQlF,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAS1D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAS1D,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IASpE,MAAM,IAAI,SAAS,EAAE;IAIrB,yBAAyB,IAAI,SAAS,EAAE;IAIxC,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMUserModelStore = void 0;
4
+ const __1 = require("../..");
5
+ class IMUserModelStore extends __1.UserModelStore {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.models = new Map();
9
+ }
10
+ async getByStreamId(streamId) {
11
+ const model = this.models.get(streamId);
12
+ return model;
13
+ }
14
+ async getByStreamIdWhereDeletedIsFalse(streamId) {
15
+ const model = this.models.get(streamId);
16
+ if (!model || model.deleted) {
17
+ return undefined;
18
+ }
19
+ return model;
20
+ }
21
+ async save(model) {
22
+ this.models.set(model.streamId, model);
23
+ }
24
+ async findByEmail(email) {
25
+ for (const model of this.models.values()) {
26
+ if (model.email === email && !model.deleted) {
27
+ return model;
28
+ }
29
+ }
30
+ return undefined;
31
+ }
32
+ async findByPhone(phone) {
33
+ for (const model of this.models.values()) {
34
+ if (model.phoneNumber === phone && !model.deleted) {
35
+ return model;
36
+ }
37
+ }
38
+ return undefined;
39
+ }
40
+ async findByFirebaseUid(uid) {
41
+ for (const model of this.models.values()) {
42
+ if (model.uid === uid && !model.deleted) {
43
+ return model;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ getAll() {
49
+ return Array.from(this.models.values());
50
+ }
51
+ getAllWhereDeletedIsFalse() {
52
+ return Array.from(this.models.values()).filter((model) => !model.deleted);
53
+ }
54
+ clear() {
55
+ this.models.clear();
56
+ }
57
+ }
58
+ exports.IMUserModelStore = IMUserModelStore;
@@ -5,6 +5,7 @@ export interface Event {
5
5
  version: number;
6
6
  createdAt: Date;
7
7
  createdBy: string;
8
+ systemGenerated: boolean;
8
9
  apply(existing?: Model): Model;
9
10
  activityLog?(existingModel?: Model, actorName?: string): ActivityLogCreatedProps | undefined;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/common/Event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC/B,WAAW,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAAC;CAC9F"}
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/common/Event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC/B,WAAW,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAAC;CAC9F"}
@@ -0,0 +1,12 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Event } from './Event';
3
+ export type EventFilter<T extends Event = Event> = (event: Event) => event is T;
4
+ export declare class EventBus {
5
+ private subject;
6
+ constructor();
7
+ publish(event: Event): void;
8
+ subscribe<T extends Event = Event>(eventFilter: EventFilter<T>, callback: (event: T) => void): () => void;
9
+ observable<T extends Event = Event>(eventFilter: EventFilter<T>): Observable<T>;
10
+ complete(): void;
11
+ }
12
+ //# sourceMappingURL=EventBus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventBus.d.ts","sourceRoot":"","sources":["../../src/common/EventBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAE,MAAM,MAAM,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC;AAEhF,qBAAa,QAAQ;IACjB,OAAO,CAAC,OAAO,CAAiB;;IAMhC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI3B,SAAS,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAC7B,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAC7B,MAAM,IAAI;IAQb,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAI/E,QAAQ,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventBus = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ class EventBus {
7
+ constructor() {
8
+ this.subject = new rxjs_1.Subject();
9
+ }
10
+ publish(event) {
11
+ this.subject.next(event);
12
+ }
13
+ subscribe(eventFilter, callback) {
14
+ const subscription = this.subject
15
+ .pipe((0, operators_1.filter)(eventFilter))
16
+ .subscribe(callback);
17
+ return () => subscription.unsubscribe();
18
+ }
19
+ observable(eventFilter) {
20
+ return this.subject.pipe((0, operators_1.filter)(eventFilter));
21
+ }
22
+ complete() {
23
+ this.subject.complete();
24
+ }
25
+ }
26
+ exports.EventBus = EventBus;
@@ -0,0 +1,4 @@
1
+ import { EventBus } from './EventBus';
2
+ export declare function getEventBus(): EventBus;
3
+ export declare function resetEventBus(): void;
4
+ //# sourceMappingURL=EventBusSingleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventBusSingleton.d.ts","sourceRoot":"","sources":["../../src/common/EventBusSingleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,wBAAgB,WAAW,IAAI,QAAQ,CAKtC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEventBus = getEventBus;
4
+ exports.resetEventBus = resetEventBus;
5
+ const EventBus_1 = require("./EventBus");
6
+ let eventBusInstance;
7
+ function getEventBus() {
8
+ if (!eventBusInstance) {
9
+ eventBusInstance = new EventBus_1.EventBus();
10
+ }
11
+ return eventBusInstance;
12
+ }
13
+ function resetEventBus() {
14
+ if (eventBusInstance) {
15
+ eventBusInstance.complete();
16
+ }
17
+ eventBusInstance = undefined;
18
+ }
@@ -0,0 +1,25 @@
1
+ export declare enum EventProcessorSource {
2
+ GOOGLE_CLOUD_FUNCTION = "GOOGLE_CLOUD_FUNCTION",
3
+ CLIENT = "CLIENT",
4
+ UNKNOWN = "UNKNOWN"
5
+ }
6
+ declare class EventProcessorEnvironment {
7
+ private source;
8
+ constructor();
9
+ private initializeFromEnv;
10
+ setSource(source: EventProcessorSource): void;
11
+ getSource(): EventProcessorSource;
12
+ isGCFun(): boolean;
13
+ isClient(): boolean;
14
+ isUnknown(): boolean;
15
+ reset(): void;
16
+ }
17
+ export declare const eventProcessorEnv: EventProcessorEnvironment;
18
+ export declare function setEventProcessorSource(source: EventProcessorSource): void;
19
+ export declare function getEventProcessorSource(): EventProcessorSource;
20
+ export declare function isGCFun(): boolean;
21
+ export declare function isClient(): boolean;
22
+ export declare function isUnknown(): boolean;
23
+ export declare function resetEventProcessorSource(): void;
24
+ export {};
25
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.eventProcessorEnv = exports.EventProcessorSource = void 0;
4
+ exports.setEventProcessorSource = setEventProcessorSource;
5
+ exports.getEventProcessorSource = getEventProcessorSource;
6
+ exports.isGCFun = isGCFun;
7
+ exports.isClient = isClient;
8
+ exports.isUnknown = isUnknown;
9
+ exports.resetEventProcessorSource = resetEventProcessorSource;
10
+ var EventProcessorSource;
11
+ (function (EventProcessorSource) {
12
+ EventProcessorSource["GOOGLE_CLOUD_FUNCTION"] = "GOOGLE_CLOUD_FUNCTION";
13
+ EventProcessorSource["CLIENT"] = "CLIENT";
14
+ EventProcessorSource["UNKNOWN"] = "UNKNOWN";
15
+ })(EventProcessorSource || (exports.EventProcessorSource = EventProcessorSource = {}));
16
+ class EventProcessorEnvironment {
17
+ constructor() {
18
+ this.source = EventProcessorSource.UNKNOWN;
19
+ this.initializeFromEnv();
20
+ }
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;
28
+ }
29
+ else {
30
+ this.source = EventProcessorSource.UNKNOWN;
31
+ }
32
+ }
33
+ setSource(source) {
34
+ this.source = source;
35
+ }
36
+ getSource() {
37
+ return this.source;
38
+ }
39
+ isGCFun() {
40
+ return this.source === EventProcessorSource.GOOGLE_CLOUD_FUNCTION;
41
+ }
42
+ isClient() {
43
+ return this.source === EventProcessorSource.CLIENT;
44
+ }
45
+ isUnknown() {
46
+ return this.source === EventProcessorSource.UNKNOWN;
47
+ }
48
+ reset() {
49
+ this.initializeFromEnv();
50
+ }
51
+ }
52
+ exports.eventProcessorEnv = new EventProcessorEnvironment();
53
+ function setEventProcessorSource(source) {
54
+ exports.eventProcessorEnv.setSource(source);
55
+ }
56
+ function getEventProcessorSource() {
57
+ return exports.eventProcessorEnv.getSource();
58
+ }
59
+ function isGCFun() {
60
+ return exports.eventProcessorEnv.isGCFun();
61
+ }
62
+ function isClient() {
63
+ return exports.eventProcessorEnv.isClient();
64
+ }
65
+ function isUnknown() {
66
+ return exports.eventProcessorEnv.isUnknown();
67
+ }
68
+ function resetEventProcessorSource() {
69
+ exports.eventProcessorEnv.reset();
70
+ }
@@ -0,0 +1,4 @@
1
+ export declare class UserController {
2
+ loginUser(userFSId: string): Promise<string>;
3
+ }
4
+ //# sourceMappingURL=UserController.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserController = void 0;
4
+ const EventBusSingleton_1 = require("../common/EventBusSingleton");
5
+ const UserEvents_1 = require("../UserEvents");
6
+ const rxjs_1 = require("rxjs");
7
+ class UserController {
8
+ async loginUser(userFSId) {
9
+ const eventBus = (0, EventBusSingleton_1.getEventBus)();
10
+ const isUserCreatedForFirebaseUid = (event) => {
11
+ return event instanceof UserEvents_1.UserCreated && event.firebaseUid === userFSId;
12
+ };
13
+ try {
14
+ const event = await (0, rxjs_1.firstValueFrom)(eventBus.observable(isUserCreatedForFirebaseUid).pipe((0, rxjs_1.timeout)(10000)));
15
+ if (!event.userId) {
16
+ throw new Error('UserCreated event missing userId');
17
+ }
18
+ return event.userId;
19
+ }
20
+ catch (error) {
21
+ if (error.name === 'TimeoutError') {
22
+ throw new Error(`Timeout waiting for UserCreated event for firebaseUid: ${userFSId}`);
23
+ }
24
+ throw error;
25
+ }
26
+ }
27
+ }
28
+ exports.UserController = UserController;