@zeeshan60/event-processor 1.0.25 → 1.0.27

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 (274) hide show
  1. package/dist/ActivityEventHandler.d.ts +1 -2
  2. package/dist/ActivityEventHandler.d.ts.map +1 -1
  3. package/dist/ActivityEventHandler.js +4 -27
  4. package/dist/ActivityEventHandler.js.map +1 -1
  5. package/dist/ActivityLogEvents.d.ts +5 -1
  6. package/dist/ActivityLogEvents.d.ts.map +1 -1
  7. package/dist/ActivityLogEvents.js +5 -0
  8. package/dist/ActivityLogEvents.js.map +1 -1
  9. package/dist/BaseEventHandler.d.ts +4 -3
  10. package/dist/BaseEventHandler.d.ts.map +1 -1
  11. package/dist/BaseEventHandler.js +35 -0
  12. package/dist/BaseEventHandler.js.map +1 -1
  13. package/dist/EventProcessorSDK.d.ts +29 -3
  14. package/dist/EventProcessorSDK.d.ts.map +1 -1
  15. package/dist/EventProcessorSDK.js +55 -2
  16. package/dist/EventProcessorSDK.js.map +1 -1
  17. package/dist/ExpenseAccountEventHandler.d.ts +24 -0
  18. package/dist/ExpenseAccountEventHandler.d.ts.map +1 -0
  19. package/dist/ExpenseAccountEventHandler.js +282 -0
  20. package/dist/ExpenseAccountEventHandler.js.map +1 -0
  21. package/dist/ExpenseAccountEvents.d.ts +150 -0
  22. package/dist/ExpenseAccountEvents.d.ts.map +1 -0
  23. package/dist/ExpenseAccountEvents.js +274 -0
  24. package/dist/ExpenseAccountEvents.js.map +1 -0
  25. package/dist/ExpenseEventHandler.d.ts +24 -0
  26. package/dist/ExpenseEventHandler.d.ts.map +1 -0
  27. package/dist/ExpenseEventHandler.js +180 -0
  28. package/dist/ExpenseEventHandler.js.map +1 -0
  29. package/dist/ExpenseEvents.d.ts +152 -0
  30. package/dist/ExpenseEvents.d.ts.map +1 -0
  31. package/dist/ExpenseEvents.js +304 -0
  32. package/dist/ExpenseEvents.js.map +1 -0
  33. package/dist/FriendEventHandler.d.ts +3 -4
  34. package/dist/FriendEventHandler.d.ts.map +1 -1
  35. package/dist/FriendEventHandler.js +24 -32
  36. package/dist/FriendEventHandler.js.map +1 -1
  37. package/dist/FriendEvents.d.ts +39 -0
  38. package/dist/FriendEvents.d.ts.map +1 -1
  39. package/dist/FriendEvents.js +67 -1
  40. package/dist/FriendEvents.js.map +1 -1
  41. package/dist/GroupEventHandler.d.ts +1 -4
  42. package/dist/GroupEventHandler.d.ts.map +1 -1
  43. package/dist/GroupEventHandler.js +16 -41
  44. package/dist/GroupEventHandler.js.map +1 -1
  45. package/dist/GroupEvents.d.ts +12 -0
  46. package/dist/GroupEvents.d.ts.map +1 -1
  47. package/dist/GroupEvents.js +13 -0
  48. package/dist/GroupEvents.js.map +1 -1
  49. package/dist/GroupTransactionEventHandler.d.ts +1 -4
  50. package/dist/GroupTransactionEventHandler.d.ts.map +1 -1
  51. package/dist/GroupTransactionEventHandler.js +8 -33
  52. package/dist/GroupTransactionEventHandler.js.map +1 -1
  53. package/dist/GroupTransactionEvents.d.ts +18 -0
  54. package/dist/GroupTransactionEvents.d.ts.map +1 -1
  55. package/dist/GroupTransactionEvents.js +19 -0
  56. package/dist/GroupTransactionEvents.js.map +1 -1
  57. package/dist/ModelChangeEmitter.d.ts +3 -4
  58. package/dist/ModelChangeEmitter.d.ts.map +1 -1
  59. package/dist/ModelChangeEmitter.js +2 -2
  60. package/dist/ModelChangeEmitter.js.map +1 -1
  61. package/dist/TransactionEventHandler.d.ts +1 -3
  62. package/dist/TransactionEventHandler.d.ts.map +1 -1
  63. package/dist/TransactionEventHandler.js +15 -148
  64. package/dist/TransactionEventHandler.js.map +1 -1
  65. package/dist/TransactionEvents.d.ts +20 -0
  66. package/dist/TransactionEvents.d.ts.map +1 -1
  67. package/dist/TransactionEvents.js +21 -0
  68. package/dist/TransactionEvents.js.map +1 -1
  69. package/dist/UserEventHandler.d.ts +1 -3
  70. package/dist/UserEventHandler.d.ts.map +1 -1
  71. package/dist/UserEventHandler.js +6 -31
  72. package/dist/UserEventHandler.js.map +1 -1
  73. package/dist/UserEvents.d.ts +16 -0
  74. package/dist/UserEvents.d.ts.map +1 -1
  75. package/dist/UserEvents.js +17 -0
  76. package/dist/UserEvents.js.map +1 -1
  77. package/dist/__tests__/test-helpers/IMActivityLogEventStore.d.ts +1 -0
  78. package/dist/__tests__/test-helpers/IMActivityLogEventStore.d.ts.map +1 -1
  79. package/dist/__tests__/test-helpers/IMActivityLogEventStore.js +3 -0
  80. package/dist/__tests__/test-helpers/IMActivityLogEventStore.js.map +1 -1
  81. package/dist/__tests__/test-helpers/IMActivityLogModelStore.d.ts +4 -0
  82. package/dist/__tests__/test-helpers/IMActivityLogModelStore.d.ts.map +1 -1
  83. package/dist/__tests__/test-helpers/IMActivityLogModelStore.js +8 -0
  84. package/dist/__tests__/test-helpers/IMActivityLogModelStore.js.map +1 -1
  85. package/dist/__tests__/test-helpers/IMCurrencyStore.d.ts.map +1 -1
  86. package/dist/__tests__/test-helpers/IMCurrencyStore.js.map +1 -1
  87. package/dist/__tests__/test-helpers/IMExpenseAccountEventStore.d.ts +9 -0
  88. package/dist/__tests__/test-helpers/IMExpenseAccountEventStore.d.ts.map +1 -0
  89. package/dist/__tests__/test-helpers/IMExpenseAccountEventStore.js +22 -0
  90. package/dist/__tests__/test-helpers/IMExpenseAccountEventStore.js.map +1 -0
  91. package/dist/__tests__/test-helpers/IMExpenseAccountModelStore.d.ts +15 -0
  92. package/dist/__tests__/test-helpers/IMExpenseAccountModelStore.d.ts.map +1 -0
  93. package/dist/__tests__/test-helpers/IMExpenseAccountModelStore.js +67 -0
  94. package/dist/__tests__/test-helpers/IMExpenseAccountModelStore.js.map +1 -0
  95. package/dist/__tests__/test-helpers/IMExpenseEventStore.d.ts +9 -0
  96. package/dist/__tests__/test-helpers/IMExpenseEventStore.d.ts.map +1 -0
  97. package/dist/__tests__/test-helpers/IMExpenseEventStore.js +22 -0
  98. package/dist/__tests__/test-helpers/IMExpenseEventStore.js.map +1 -0
  99. package/dist/__tests__/test-helpers/IMExpenseModelStore.d.ts +16 -0
  100. package/dist/__tests__/test-helpers/IMExpenseModelStore.d.ts.map +1 -0
  101. package/dist/__tests__/test-helpers/IMExpenseModelStore.js +76 -0
  102. package/dist/__tests__/test-helpers/IMExpenseModelStore.js.map +1 -0
  103. package/dist/__tests__/test-helpers/IMFriendEventStore.d.ts +1 -0
  104. package/dist/__tests__/test-helpers/IMFriendEventStore.d.ts.map +1 -1
  105. package/dist/__tests__/test-helpers/IMFriendEventStore.js +3 -0
  106. package/dist/__tests__/test-helpers/IMFriendEventStore.js.map +1 -1
  107. package/dist/__tests__/test-helpers/IMFriendModelStore.d.ts +2 -0
  108. package/dist/__tests__/test-helpers/IMFriendModelStore.d.ts.map +1 -1
  109. package/dist/__tests__/test-helpers/IMFriendModelStore.js +20 -0
  110. package/dist/__tests__/test-helpers/IMFriendModelStore.js.map +1 -1
  111. package/dist/__tests__/test-helpers/IMGroupEventStore.d.ts +1 -0
  112. package/dist/__tests__/test-helpers/IMGroupEventStore.d.ts.map +1 -1
  113. package/dist/__tests__/test-helpers/IMGroupEventStore.js +3 -0
  114. package/dist/__tests__/test-helpers/IMGroupEventStore.js.map +1 -1
  115. package/dist/__tests__/test-helpers/IMGroupModelStore.d.ts.map +1 -1
  116. package/dist/__tests__/test-helpers/IMGroupModelStore.js.map +1 -1
  117. package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.d.ts +1 -0
  118. package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.d.ts.map +1 -1
  119. package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.js +4 -0
  120. package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.js.map +1 -1
  121. package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.d.ts.map +1 -1
  122. package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.js.map +1 -1
  123. package/dist/__tests__/test-helpers/IMTransactionEventStore.d.ts.map +1 -1
  124. package/dist/__tests__/test-helpers/IMTransactionEventStore.js.map +1 -1
  125. package/dist/__tests__/test-helpers/IMTransactionModelStore.d.ts.map +1 -1
  126. package/dist/__tests__/test-helpers/IMTransactionModelStore.js.map +1 -1
  127. package/dist/__tests__/test-helpers/IMUserEventStore.d.ts +1 -0
  128. package/dist/__tests__/test-helpers/IMUserEventStore.d.ts.map +1 -1
  129. package/dist/__tests__/test-helpers/IMUserEventStore.js +3 -0
  130. package/dist/__tests__/test-helpers/IMUserEventStore.js.map +1 -1
  131. package/dist/__tests__/test-helpers/IMUserModelStore.d.ts.map +1 -1
  132. package/dist/__tests__/test-helpers/IMUserModelStore.js.map +1 -1
  133. package/dist/__tests__/test-helpers/MockFirebaseAdapter.d.ts.map +1 -1
  134. package/dist/__tests__/test-helpers/MockFirebaseAdapter.js.map +1 -1
  135. package/dist/adapters/FirebaseAdapter.d.ts.map +1 -1
  136. package/dist/client/controllers/ActivityController.d.ts +7 -0
  137. package/dist/client/controllers/ActivityController.d.ts.map +1 -0
  138. package/dist/client/controllers/ActivityController.js +35 -0
  139. package/dist/client/controllers/ActivityController.js.map +1 -0
  140. package/dist/client/controllers/ExpenseAccountController.d.ts +19 -0
  141. package/dist/client/controllers/ExpenseAccountController.d.ts.map +1 -0
  142. package/dist/client/controllers/ExpenseAccountController.js +249 -0
  143. package/dist/client/controllers/ExpenseAccountController.js.map +1 -0
  144. package/dist/client/controllers/ExpenseController.d.ts +20 -0
  145. package/dist/client/controllers/ExpenseController.d.ts.map +1 -0
  146. package/dist/client/controllers/ExpenseController.js +304 -0
  147. package/dist/client/controllers/ExpenseController.js.map +1 -0
  148. package/dist/client/controllers/FriendController.d.ts.map +1 -1
  149. package/dist/client/controllers/FriendController.js +31 -6
  150. package/dist/client/controllers/FriendController.js.map +1 -1
  151. package/dist/client/controllers/TransactionController.d.ts.map +1 -1
  152. package/dist/client/controllers/TransactionController.js +25 -8
  153. package/dist/client/controllers/TransactionController.js.map +1 -1
  154. package/dist/client/controllers/UserController.d.ts.map +1 -1
  155. package/dist/client/controllers/UserController.js.map +1 -1
  156. package/dist/client/handlers/UIEventHandler.d.ts +0 -1
  157. package/dist/client/handlers/UIEventHandler.d.ts.map +1 -1
  158. package/dist/client/handlers/UIEventHandler.js +2 -8
  159. package/dist/client/handlers/UIEventHandler.js.map +1 -1
  160. package/dist/common/CurrencyRate.d.ts.map +1 -1
  161. package/dist/common/DomainEvents.d.ts +4 -0
  162. package/dist/common/DomainEvents.d.ts.map +1 -1
  163. package/dist/common/Event.d.ts +3 -0
  164. package/dist/common/Event.d.ts.map +1 -1
  165. package/dist/common/EventTypes.d.ts +67 -0
  166. package/dist/common/EventTypes.d.ts.map +1 -0
  167. package/dist/common/EventTypes.js +76 -0
  168. package/dist/common/EventTypes.js.map +1 -0
  169. package/dist/common/LoggingContext.d.ts.map +1 -1
  170. package/dist/common/Model.d.ts.map +1 -1
  171. package/dist/contracts/activityLogs/index.d.ts +13 -0
  172. package/dist/contracts/activityLogs/index.d.ts.map +1 -0
  173. package/dist/contracts/activityLogs/index.js +3 -0
  174. package/dist/contracts/activityLogs/index.js.map +1 -0
  175. package/dist/contracts/common/index.d.ts +7 -0
  176. package/dist/contracts/common/index.d.ts.map +1 -1
  177. package/dist/contracts/expenses/index.d.ts.map +1 -1
  178. package/dist/contracts/expenses/index.js.map +1 -1
  179. package/dist/contracts/friends/index.d.ts.map +1 -1
  180. package/dist/contracts/groups/index.d.ts.map +1 -1
  181. package/dist/contracts/index.d.ts +1 -0
  182. package/dist/contracts/index.d.ts.map +1 -1
  183. package/dist/contracts/index.js +1 -0
  184. package/dist/contracts/index.js.map +1 -1
  185. package/dist/contracts/shared/index.d.ts.map +1 -1
  186. package/dist/contracts/transactions/index.d.ts.map +1 -1
  187. package/dist/contracts/transactions/index.js.map +1 -1
  188. package/dist/contracts/users/index.d.ts.map +1 -1
  189. package/dist/converters/ActivityLogConverters.d.ts.map +1 -1
  190. package/dist/converters/ActivityLogConverters.js +1 -3
  191. package/dist/converters/ActivityLogConverters.js.map +1 -1
  192. package/dist/converters/EventConverterCore.d.ts +13 -1
  193. package/dist/converters/EventConverterCore.d.ts.map +1 -1
  194. package/dist/converters/EventConverterCore.js +14 -2
  195. package/dist/converters/EventConverterCore.js.map +1 -1
  196. package/dist/converters/ExpenseAccountConverters.d.ts +33 -0
  197. package/dist/converters/ExpenseAccountConverters.d.ts.map +1 -0
  198. package/dist/converters/ExpenseAccountConverters.js +142 -0
  199. package/dist/converters/ExpenseAccountConverters.js.map +1 -0
  200. package/dist/converters/ExpenseConverters.d.ts +21 -0
  201. package/dist/converters/ExpenseConverters.d.ts.map +1 -0
  202. package/dist/converters/ExpenseConverters.js +128 -0
  203. package/dist/converters/ExpenseConverters.js.map +1 -0
  204. package/dist/converters/FriendConverters.d.ts.map +1 -1
  205. package/dist/converters/FriendConverters.js.map +1 -1
  206. package/dist/converters/GroupConverters.d.ts.map +1 -1
  207. package/dist/converters/GroupConverters.js.map +1 -1
  208. package/dist/converters/GroupTransactionConverters.d.ts.map +1 -1
  209. package/dist/converters/GroupTransactionConverters.js.map +1 -1
  210. package/dist/converters/TransactionConverters.d.ts.map +1 -1
  211. package/dist/converters/TransactionConverters.js +4 -0
  212. package/dist/converters/TransactionConverters.js.map +1 -1
  213. package/dist/converters/UserConverters.d.ts.map +1 -1
  214. package/dist/converters/UserConverters.js.map +1 -1
  215. package/dist/converters/eventConverter.d.ts.map +1 -1
  216. package/dist/converters/eventConverter.js +57 -38
  217. package/dist/converters/eventConverter.js.map +1 -1
  218. package/dist/events.d.ts +8 -0
  219. package/dist/events.d.ts.map +1 -1
  220. package/dist/events.js +11 -1
  221. package/dist/events.js.map +1 -1
  222. package/dist/index.d.ts +10 -2
  223. package/dist/index.d.ts.map +1 -1
  224. package/dist/index.js +21 -1
  225. package/dist/index.js.map +1 -1
  226. package/dist/store/ActivityLogEventStore.d.ts +2 -2
  227. package/dist/store/ActivityLogEventStore.d.ts.map +1 -1
  228. package/dist/store/ActivityLogModelStore.d.ts +4 -0
  229. package/dist/store/ActivityLogModelStore.d.ts.map +1 -1
  230. package/dist/store/CurrencyStore.d.ts.map +1 -1
  231. package/dist/store/EventStore.d.ts +6 -0
  232. package/dist/store/EventStore.d.ts.map +1 -0
  233. package/dist/store/EventStore.js +3 -0
  234. package/dist/store/EventStore.js.map +1 -0
  235. package/dist/store/ExpenseAccountEventStore.d.ts +5 -0
  236. package/dist/store/ExpenseAccountEventStore.d.ts.map +1 -0
  237. package/dist/store/ExpenseAccountEventStore.js +3 -0
  238. package/dist/store/ExpenseAccountEventStore.js.map +1 -0
  239. package/dist/store/ExpenseAccountModelStore.d.ts +11 -0
  240. package/dist/store/ExpenseAccountModelStore.d.ts.map +1 -0
  241. package/dist/store/ExpenseAccountModelStore.js +3 -0
  242. package/dist/store/ExpenseAccountModelStore.js.map +1 -0
  243. package/dist/store/ExpenseEventStore.d.ts +5 -0
  244. package/dist/store/ExpenseEventStore.d.ts.map +1 -0
  245. package/dist/store/ExpenseEventStore.js +3 -0
  246. package/dist/store/ExpenseEventStore.js.map +1 -0
  247. package/dist/store/ExpenseModelStore.d.ts +12 -0
  248. package/dist/store/ExpenseModelStore.d.ts.map +1 -0
  249. package/dist/store/ExpenseModelStore.js +3 -0
  250. package/dist/store/ExpenseModelStore.js.map +1 -0
  251. package/dist/store/FriendEventStore.d.ts +2 -2
  252. package/dist/store/FriendEventStore.d.ts.map +1 -1
  253. package/dist/store/FriendModelStore.d.ts +2 -0
  254. package/dist/store/FriendModelStore.d.ts.map +1 -1
  255. package/dist/store/GroupEventStore.d.ts +2 -2
  256. package/dist/store/GroupEventStore.d.ts.map +1 -1
  257. package/dist/store/GroupModelStore.d.ts.map +1 -1
  258. package/dist/store/GroupTransactionEventStore.d.ts +2 -2
  259. package/dist/store/GroupTransactionEventStore.d.ts.map +1 -1
  260. package/dist/store/GroupTransactionModelStore.d.ts.map +1 -1
  261. package/dist/store/ModelStore.d.ts.map +1 -1
  262. package/dist/store/TransactionEventStore.d.ts +2 -3
  263. package/dist/store/TransactionEventStore.d.ts.map +1 -1
  264. package/dist/store/TransactionModelStore.d.ts.map +1 -1
  265. package/dist/store/UserEventStore.d.ts +2 -2
  266. package/dist/store/UserEventStore.d.ts.map +1 -1
  267. package/dist/store/UserModelStore.d.ts.map +1 -1
  268. package/dist/utils/BalanceUtil.d.ts.map +1 -1
  269. package/dist/utils/BalanceUtil.js.map +1 -1
  270. package/dist/utils/splitTypeUtils.d.ts +4 -0
  271. package/dist/utils/splitTypeUtils.d.ts.map +1 -1
  272. package/dist/utils/splitTypeUtils.js +21 -0
  273. package/dist/utils/splitTypeUtils.js.map +1 -1
  274. package/package.json +1 -1
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpenseAccountController = void 0;
4
+ const ExpenseAccountEvents_1 = require("../../ExpenseAccountEvents");
5
+ const EventProcessorSDK_1 = require("../../EventProcessorSDK");
6
+ const uuid_1 = require("uuid");
7
+ const BalanceUtil_1 = require("../../utils/BalanceUtil");
8
+ class ExpenseAccountController {
9
+ get modelStore() {
10
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig()
11
+ .expenseAccountModelStore;
12
+ }
13
+ get expenseAccountEventHandler() {
14
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getExpenseAccountEventHandler();
15
+ }
16
+ get userModelStore() {
17
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig().userModelStore;
18
+ }
19
+ get expenseModelStore() {
20
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig().expenseModelStore;
21
+ }
22
+ get currencyStore() {
23
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig().currencyStore;
24
+ }
25
+ get balanceUtil() {
26
+ return new BalanceUtil_1.BalanceUtil(this.userModelStore, this.currencyStore);
27
+ }
28
+ async createExpenseAccount(userId, request) {
29
+ const accountId = (0, uuid_1.v4)();
30
+ const streamId = (0, uuid_1.v4)();
31
+ const createdAt = new Date();
32
+ const members = request.memberIds ?? [];
33
+ if (!members.includes(userId)) {
34
+ members.push(userId);
35
+ }
36
+ const event = new ExpenseAccountEvents_1.ExpenseAccountCreated({
37
+ eventId: (0, uuid_1.v4)(),
38
+ userId,
39
+ accountId,
40
+ name: request.name.trim(),
41
+ description: request.description?.trim(),
42
+ photoUrl: request.photoUrl?.trim(),
43
+ members,
44
+ createdAt,
45
+ createdBy: userId,
46
+ streamId,
47
+ version: 1,
48
+ systemGenerated: false,
49
+ });
50
+ await this.expenseAccountEventHandler.handleEvent(event);
51
+ return accountId;
52
+ }
53
+ async updateExpenseAccount(userId, accountId, request) {
54
+ const accountModel = await this.modelStore.findByUserIdAndAccountIdAndDeletedIsFalse(userId, accountId);
55
+ if (!accountModel) {
56
+ throw new Error(`ExpenseAccount not found: ${accountId}`);
57
+ }
58
+ const createdAt = new Date();
59
+ const event = new ExpenseAccountEvents_1.ExpenseAccountUpdated({
60
+ eventId: (0, uuid_1.v4)(),
61
+ userId,
62
+ name: request.name.trim(),
63
+ description: request.description?.trim(),
64
+ photoUrl: request.photoUrl?.trim(),
65
+ createdAt,
66
+ createdBy: userId,
67
+ streamId: accountModel.streamId,
68
+ version: accountModel.version + 1,
69
+ systemGenerated: false,
70
+ });
71
+ await this.expenseAccountEventHandler.handleEvent(event);
72
+ }
73
+ async addMembers(userId, accountId, request) {
74
+ const accountModel = await this.modelStore.findByUserIdAndAccountIdAndDeletedIsFalse(userId, accountId);
75
+ if (!accountModel) {
76
+ throw new Error(`ExpenseAccount not found: ${accountId}`);
77
+ }
78
+ if (!request.memberIds || request.memberIds.length === 0) {
79
+ throw new Error("No members to add");
80
+ }
81
+ const createdAt = new Date();
82
+ const event = new ExpenseAccountEvents_1.ExpenseAccountMembersAdded({
83
+ eventId: (0, uuid_1.v4)(),
84
+ userId,
85
+ members: request.memberIds,
86
+ createdAt,
87
+ createdBy: userId,
88
+ streamId: accountModel.streamId,
89
+ version: accountModel.version + 1,
90
+ systemGenerated: false,
91
+ });
92
+ await this.expenseAccountEventHandler.handleEvent(event);
93
+ }
94
+ async removeMembers(userId, accountId, request) {
95
+ const accountModel = await this.modelStore.findByUserIdAndAccountIdAndDeletedIsFalse(userId, accountId);
96
+ if (!accountModel) {
97
+ throw new Error(`ExpenseAccount not found: ${accountId}`);
98
+ }
99
+ if (!request.memberIds || request.memberIds.length === 0) {
100
+ throw new Error("No members to remove");
101
+ }
102
+ const createdAt = new Date();
103
+ const event = new ExpenseAccountEvents_1.ExpenseAccountMembersRemoved({
104
+ eventId: (0, uuid_1.v4)(),
105
+ userId,
106
+ members: request.memberIds,
107
+ createdAt,
108
+ createdBy: userId,
109
+ streamId: accountModel.streamId,
110
+ version: accountModel.version + 1,
111
+ systemGenerated: false,
112
+ });
113
+ await this.expenseAccountEventHandler.handleEvent(event);
114
+ }
115
+ async deleteExpenseAccount(userId, accountId) {
116
+ const accountModel = await this.modelStore.findByUserIdAndAccountIdAndDeletedIsFalse(userId, accountId);
117
+ if (!accountModel) {
118
+ throw new Error(`ExpenseAccount not found: ${accountId}`);
119
+ }
120
+ const createdAt = new Date();
121
+ const event = new ExpenseAccountEvents_1.ExpenseAccountDeleted({
122
+ eventId: (0, uuid_1.v4)(),
123
+ userId,
124
+ createdAt,
125
+ createdBy: userId,
126
+ streamId: accountModel.streamId,
127
+ version: accountModel.version + 1,
128
+ systemGenerated: false,
129
+ });
130
+ await this.expenseAccountEventHandler.handleEvent(event);
131
+ }
132
+ async getExpenseAccount(userId, accountId) {
133
+ const accountModel = await this.modelStore.findByUserIdAndAccountIdAndDeletedIsFalse(userId, accountId);
134
+ if (!accountModel) {
135
+ throw new Error(`ExpenseAccount not found: ${accountId}`);
136
+ }
137
+ const expenses = await this.expenseModelStore.findAllByAccountIdAndDeletedIsFalse(accountId);
138
+ const userExpenses = expenses.filter((e) => e.userId === userId);
139
+ const balance = await this.calculateAccountBalance(userExpenses, userId);
140
+ const members = await this.mapMembersToResponse(accountModel.members ?? []);
141
+ return {
142
+ accountId: accountModel.accountId,
143
+ name: accountModel.name,
144
+ description: accountModel.description,
145
+ photoUrl: accountModel.photoUrl,
146
+ members,
147
+ balance,
148
+ };
149
+ }
150
+ async getAllExpenseAccounts(userId) {
151
+ const accounts = await this.modelStore.findAllByUserIdAndDeletedIsFalse(userId);
152
+ const accountResponses = [];
153
+ const allUserExpenses = [];
154
+ for (const account of accounts) {
155
+ const expenses = await this.expenseModelStore.findAllByAccountIdAndDeletedIsFalse(account.accountId);
156
+ const userExpenses = expenses.filter((e) => e.userId === userId);
157
+ allUserExpenses.push(...userExpenses);
158
+ const balance = await this.calculateAccountBalance(userExpenses, userId);
159
+ const members = await this.mapMembersToResponse(account.members ?? []);
160
+ accountResponses.push({
161
+ accountId: account.accountId,
162
+ name: account.name,
163
+ description: account.description,
164
+ photoUrl: account.photoUrl,
165
+ members,
166
+ balance,
167
+ });
168
+ }
169
+ const totalBalance = await this.calculateAccountBalance(allUserExpenses, userId);
170
+ return {
171
+ accounts: accountResponses,
172
+ balance: totalBalance,
173
+ };
174
+ }
175
+ async calculateAccountBalance(expenses, userId) {
176
+ if (expenses.length === 0) {
177
+ return {
178
+ main: undefined,
179
+ other: [],
180
+ };
181
+ }
182
+ const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
183
+ const toCurrency = user?.currency ?? "USD";
184
+ const currencyRates = (await this.currencyStore.getCurrencyRates())?.rates ?? {};
185
+ const currencyBalances = new Map();
186
+ for (const expense of expenses) {
187
+ const existing = currencyBalances.get(expense.currency) || 0;
188
+ const signedAmount = expense.transactionType === "INCOME"
189
+ ? expense.amount
190
+ : -expense.amount;
191
+ currencyBalances.set(expense.currency, existing + signedAmount);
192
+ }
193
+ const nonZeroBalances = new Map();
194
+ for (const [currency, balance] of currencyBalances.entries()) {
195
+ if (balance !== 0) {
196
+ nonZeroBalances.set(currency, balance);
197
+ }
198
+ }
199
+ if (nonZeroBalances.size === 0) {
200
+ return {
201
+ main: undefined,
202
+ other: [],
203
+ };
204
+ }
205
+ const other = [];
206
+ let totalConvertedAmount = 0;
207
+ for (const [currency, balance] of nonZeroBalances.entries()) {
208
+ const convertedAmount = this.balanceUtil.convertAmount(balance, currency, toCurrency, currencyRates);
209
+ other.push({
210
+ amount: {
211
+ amount: Math.abs(balance),
212
+ currency: currency,
213
+ isOwed: balance > 0,
214
+ },
215
+ convertedAmount: {
216
+ amount: Math.abs(convertedAmount.amount),
217
+ currency: toCurrency,
218
+ isOwed: convertedAmount.amount < 0,
219
+ },
220
+ });
221
+ totalConvertedAmount += convertedAmount.amount;
222
+ }
223
+ return {
224
+ main: {
225
+ amount: Math.abs(totalConvertedAmount),
226
+ currency: toCurrency,
227
+ isOwed: totalConvertedAmount < 0,
228
+ },
229
+ other,
230
+ };
231
+ }
232
+ async mapMembersToResponse(memberIds) {
233
+ const members = [];
234
+ for (const memberId of memberIds) {
235
+ const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(memberId);
236
+ if (user) {
237
+ members.push({
238
+ memberId: user.userId,
239
+ memberPhoneNumber: user.phoneNumber,
240
+ memberEmail: user.email,
241
+ memberName: user.displayName,
242
+ });
243
+ }
244
+ }
245
+ return members;
246
+ }
247
+ }
248
+ exports.ExpenseAccountController = ExpenseAccountController;
249
+ //# sourceMappingURL=ExpenseAccountController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpenseAccountController.js","sourceRoot":"","sources":["../../../src/client/controllers/ExpenseAccountController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ExpenseCreateRequest, ExpenseUpdateRequest, ExpenseResponse, ExpensesByMonthResponse } from "../../contracts/expenses";
2
+ export declare class ExpenseController {
3
+ private get modelStore();
4
+ private get expenseEventHandler();
5
+ private get userModelStore();
6
+ private get expenseAccountModelStore();
7
+ private get currencyStore();
8
+ private get balanceUtil();
9
+ createExpense(userId: string, request: ExpenseCreateRequest): Promise<string>;
10
+ updateExpense(userId: string, expenseId: string, request: ExpenseUpdateRequest): Promise<void>;
11
+ deleteExpense(userId: string, expenseId: string): Promise<void>;
12
+ getExpense(userId: string, expenseId: string): Promise<ExpenseResponse>;
13
+ getExpensesByMonth(userId: string, timeZone: string): Promise<ExpensesByMonthResponse>;
14
+ getExpensesByAccountAndMonth(userId: string, accountId: string, timeZone: string): Promise<ExpensesByMonthResponse>;
15
+ private calculateBalance;
16
+ private groupExpensesByMonth;
17
+ private startOfMonth;
18
+ private toExpenseResponse;
19
+ }
20
+ //# sourceMappingURL=ExpenseController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpenseController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/ExpenseController.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EAOxB,MAAM,0BAA0B,CAAC;AAKlC,qBAAa,iBAAiB;IAC5B,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,mBAAmB,GAE9B;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,wBAAwB,GAGnC;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,WAAW,GAEtB;IAEK,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;IA0CZ,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAmDV,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAmBvE,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,CAAC;IAsC7B,4BAA4B,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,CAAC;YAwCrB,gBAAgB;IA+E9B,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,iBAAiB;CAmD1B"}
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpenseController = void 0;
4
+ const ExpenseEvents_1 = require("../../ExpenseEvents");
5
+ const expenses_1 = require("../../contracts/expenses");
6
+ const EventProcessorSDK_1 = require("../../EventProcessorSDK");
7
+ const uuid_1 = require("uuid");
8
+ const BalanceUtil_1 = require("../../utils/BalanceUtil");
9
+ class ExpenseController {
10
+ get modelStore() {
11
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig().expenseModelStore;
12
+ }
13
+ get expenseEventHandler() {
14
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getExpenseEventHandler();
15
+ }
16
+ get userModelStore() {
17
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig().userModelStore;
18
+ }
19
+ get expenseAccountModelStore() {
20
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig()
21
+ .expenseAccountModelStore;
22
+ }
23
+ get currencyStore() {
24
+ return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig().currencyStore;
25
+ }
26
+ get balanceUtil() {
27
+ return new BalanceUtil_1.BalanceUtil(this.userModelStore, this.currencyStore);
28
+ }
29
+ async createExpense(userId, request) {
30
+ const account = await this.expenseAccountModelStore.findByUserIdAndAccountIdAndDeletedIsFalse(userId, request.accountId);
31
+ if (!account) {
32
+ throw new Error(`ExpenseAccount not found: ${request.accountId}`);
33
+ }
34
+ const expenseId = (0, uuid_1.v4)();
35
+ const streamId = (0, uuid_1.v4)();
36
+ const createdAt = new Date();
37
+ const transactionDate = new Date(request.transactionDate);
38
+ const event = new ExpenseEvents_1.ExpenseCreated({
39
+ eventId: (0, uuid_1.v4)(),
40
+ userId,
41
+ expenseId,
42
+ accountId: request.accountId,
43
+ title: request.title.trim(),
44
+ description: request.description?.trim(),
45
+ amount: request.amount,
46
+ currency: request.currency,
47
+ transactionType: request.transactionType,
48
+ category: request.category,
49
+ paymentMethod: request.paymentMethod,
50
+ tags: request.tags,
51
+ transactionDate,
52
+ recurring: request.recurring,
53
+ recurringDetails: request.recurringDetails,
54
+ createdAt,
55
+ createdBy: userId,
56
+ streamId,
57
+ version: 1,
58
+ systemGenerated: false,
59
+ });
60
+ await this.expenseEventHandler.handleEvent(event);
61
+ return expenseId;
62
+ }
63
+ async updateExpense(userId, expenseId, request) {
64
+ const expenseModel = await this.modelStore.findByUserIdAndExpenseIdAndDeletedIsFalse(userId, expenseId);
65
+ if (!expenseModel) {
66
+ throw new Error(`Expense not found: ${expenseId}`);
67
+ }
68
+ const account = await this.expenseAccountModelStore.findByUserIdAndAccountIdAndDeletedIsFalse(userId, request.accountId);
69
+ if (!account) {
70
+ throw new Error(`ExpenseAccount not found: ${request.accountId}`);
71
+ }
72
+ const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
73
+ const createdAt = new Date();
74
+ const transactionDate = new Date(request.transactionDate);
75
+ const event = new ExpenseEvents_1.ExpenseUpdated({
76
+ eventId: (0, uuid_1.v4)(),
77
+ userId,
78
+ title: request.title.trim(),
79
+ description: request.description?.trim(),
80
+ amount: request.amount,
81
+ currency: request.currency,
82
+ transactionType: request.transactionType,
83
+ category: request.category,
84
+ paymentMethod: request.paymentMethod,
85
+ tags: request.tags,
86
+ transactionDate,
87
+ recurring: request.recurring,
88
+ recurringDetails: request.recurringDetails,
89
+ createdAt,
90
+ createdBy: userId,
91
+ createdByName: user?.displayName,
92
+ createdByPhoto: user?.photoUrl,
93
+ streamId: expenseModel.streamId,
94
+ version: expenseModel.version + 1,
95
+ systemGenerated: false,
96
+ });
97
+ await this.expenseEventHandler.handleEvent(event);
98
+ }
99
+ async deleteExpense(userId, expenseId) {
100
+ const expenseModel = await this.modelStore.findByUserIdAndExpenseIdAndDeletedIsFalse(userId, expenseId);
101
+ if (!expenseModel) {
102
+ throw new Error(`Expense not found: ${expenseId}`);
103
+ }
104
+ const createdAt = new Date();
105
+ const event = new ExpenseEvents_1.ExpenseDeleted({
106
+ eventId: (0, uuid_1.v4)(),
107
+ userId,
108
+ streamId: expenseModel.streamId,
109
+ version: expenseModel.version + 1,
110
+ createdAt,
111
+ createdBy: userId,
112
+ systemGenerated: false,
113
+ });
114
+ await this.expenseEventHandler.handleEvent(event);
115
+ }
116
+ async getExpense(userId, expenseId) {
117
+ const expenseModel = await this.modelStore.findByUserIdAndExpenseIdAndDeletedIsFalse(userId, expenseId);
118
+ if (!expenseModel) {
119
+ throw new Error(`Expense not found: ${expenseId}`);
120
+ }
121
+ const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
122
+ const toCurrency = user?.currency ?? "USD";
123
+ const currencyRates = (await this.currencyStore.getCurrencyRates())?.rates ?? {};
124
+ return this.toExpenseResponse(expenseModel, toCurrency, currencyRates);
125
+ }
126
+ async getExpensesByMonth(userId, timeZone) {
127
+ if (!timeZone || timeZone.trim() === "") {
128
+ throw new Error("Invalid timezone");
129
+ }
130
+ try {
131
+ new Date().toLocaleString("en-US", { timeZone });
132
+ }
133
+ catch (error) {
134
+ throw new Error("Invalid timezone");
135
+ }
136
+ const expenses = await this.modelStore.findAllByUserIdAndDeletedIsFalse(userId);
137
+ const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
138
+ const toCurrency = user?.currency ?? "USD";
139
+ const currencyRates = (await this.currencyStore.getCurrencyRates())?.rates ?? {};
140
+ const sortedExpenses = expenses
141
+ .sort((a, b) => new Date(b.transactionDate).getTime() -
142
+ new Date(a.transactionDate).getTime())
143
+ .map((e) => this.toExpenseResponse(e, toCurrency, currencyRates));
144
+ const groupedByMonth = this.groupExpensesByMonth(sortedExpenses, timeZone);
145
+ const balance = await this.calculateBalance(expenses, userId);
146
+ return {
147
+ perMonth: groupedByMonth,
148
+ balance,
149
+ };
150
+ }
151
+ async getExpensesByAccountAndMonth(userId, accountId, timeZone) {
152
+ if (!timeZone || timeZone.trim() === "") {
153
+ throw new Error("Invalid timezone");
154
+ }
155
+ try {
156
+ new Date().toLocaleString("en-US", { timeZone });
157
+ }
158
+ catch (error) {
159
+ throw new Error("Invalid timezone");
160
+ }
161
+ const expenses = await this.modelStore.findAllByAccountIdAndDeletedIsFalse(accountId);
162
+ const userExpenses = expenses.filter((e) => e.userId === userId);
163
+ const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
164
+ const toCurrency = user?.currency ?? "USD";
165
+ const currencyRates = (await this.currencyStore.getCurrencyRates())?.rates ?? {};
166
+ const sortedExpenses = userExpenses
167
+ .sort((a, b) => new Date(b.transactionDate).getTime() -
168
+ new Date(a.transactionDate).getTime())
169
+ .map((e) => this.toExpenseResponse(e, toCurrency, currencyRates));
170
+ const groupedByMonth = this.groupExpensesByMonth(sortedExpenses, timeZone);
171
+ const balance = await this.calculateBalance(userExpenses, userId);
172
+ return {
173
+ perMonth: groupedByMonth,
174
+ balance,
175
+ };
176
+ }
177
+ async calculateBalance(expenses, userId) {
178
+ if (expenses.length === 0) {
179
+ return {
180
+ main: undefined,
181
+ other: [],
182
+ };
183
+ }
184
+ const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
185
+ const toCurrency = user?.currency ?? "USD";
186
+ const currencyRates = (await this.currencyStore.getCurrencyRates())?.rates ?? {};
187
+ const currencyBalances = new Map();
188
+ for (const expense of expenses) {
189
+ const existing = currencyBalances.get(expense.currency) || 0;
190
+ const signedAmount = expense.transactionType === expenses_1.TransactionType.INCOME
191
+ ? expense.amount
192
+ : -expense.amount;
193
+ currencyBalances.set(expense.currency, existing + signedAmount);
194
+ }
195
+ const nonZeroBalances = new Map();
196
+ for (const [currency, balance] of currencyBalances.entries()) {
197
+ if (balance !== 0) {
198
+ nonZeroBalances.set(currency, balance);
199
+ }
200
+ }
201
+ if (nonZeroBalances.size === 0) {
202
+ return {
203
+ main: undefined,
204
+ other: [],
205
+ };
206
+ }
207
+ const other = [];
208
+ let totalConvertedAmount = 0;
209
+ for (const [currency, balance] of nonZeroBalances.entries()) {
210
+ const convertedAmount = this.balanceUtil.convertAmount(balance, currency, toCurrency, currencyRates);
211
+ other.push({
212
+ amount: {
213
+ amount: Math.abs(balance),
214
+ currency: currency,
215
+ isOwed: balance < 0,
216
+ },
217
+ convertedAmount: {
218
+ amount: Math.abs(convertedAmount.amount),
219
+ currency: toCurrency,
220
+ isOwed: convertedAmount.amount < 0,
221
+ },
222
+ });
223
+ totalConvertedAmount += convertedAmount.amount;
224
+ }
225
+ return {
226
+ main: {
227
+ amount: Math.abs(totalConvertedAmount),
228
+ currency: toCurrency,
229
+ isOwed: totalConvertedAmount < 0,
230
+ },
231
+ other,
232
+ };
233
+ }
234
+ groupExpensesByMonth(expenses, timeZone) {
235
+ const grouped = new Map();
236
+ for (const expense of expenses) {
237
+ const monthStart = this.startOfMonth(expense.date, timeZone);
238
+ const key = monthStart;
239
+ if (!grouped.has(key)) {
240
+ grouped.set(key, []);
241
+ }
242
+ grouped.get(key).push(expense);
243
+ }
244
+ return Array.from(grouped.entries())
245
+ .sort((a, b) => new Date(b[0]).getTime() - new Date(a[0]).getTime())
246
+ .map(([date, transactions]) => ({
247
+ date,
248
+ transactions,
249
+ }));
250
+ }
251
+ startOfMonth(dateString, timeZone) {
252
+ const date = new Date(dateString);
253
+ const year = date.toLocaleString("en-US", {
254
+ year: "numeric",
255
+ timeZone,
256
+ });
257
+ const month = date.toLocaleString("en-US", {
258
+ month: "2-digit",
259
+ timeZone,
260
+ });
261
+ return new Date(`${year}-${month}-01T00:00:00.000Z`).toISOString();
262
+ }
263
+ toExpenseResponse(expenseModel, toCurrency, rates) {
264
+ const convertedAmount = this.balanceUtil.convertAmount(expenseModel.amount, expenseModel.currency, toCurrency, rates);
265
+ const amount = {
266
+ amount: expenseModel.amount,
267
+ currency: expenseModel.currency,
268
+ };
269
+ const defaultCurrencyAmount = {
270
+ amount: convertedAmount.amount,
271
+ currency: convertedAmount.currency,
272
+ };
273
+ return {
274
+ transactionId: expenseModel.expenseId,
275
+ title: expenseModel.title,
276
+ description: expenseModel.description,
277
+ category: expenseModel.category,
278
+ paymentMethod: expenseModel.paymentMethod,
279
+ tags: expenseModel.tags,
280
+ transactionType: expenseModel.transactionType,
281
+ date: expenseModel.transactionDate.toISOString(),
282
+ createdAt: expenseModel.createdAt.toISOString(),
283
+ updatedAt: expenseModel.updatedAt.toISOString(),
284
+ createdBy: {
285
+ name: "User",
286
+ id: expenseModel.createdBy,
287
+ },
288
+ updatedBy: expenseModel.updatedBy
289
+ ? {
290
+ name: "User",
291
+ id: expenseModel.updatedBy,
292
+ }
293
+ : undefined,
294
+ amount,
295
+ defaultCurrencyAmount,
296
+ history: expenseModel.history.entries,
297
+ deleted: expenseModel.deleted,
298
+ recurring: expenseModel.recurring,
299
+ recurringDetails: expenseModel.recurringDetails,
300
+ };
301
+ }
302
+ }
303
+ exports.ExpenseController = ExpenseController;
304
+ //# sourceMappingURL=ExpenseController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpenseController.js","sourceRoot":"","sources":["../../../src/client/controllers/ExpenseController.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FriendController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/FriendController.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAMjC,qBAAa,gBAAgB;IACzB,OAAO,KAAK,UAAU,GAGrB;IAED,OAAO,KAAK,qBAAqB,GAGhC;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,KAAK,WAAW,GAEtB;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAqDlE,YAAY,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAgGV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkCpE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU9D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA4C7D,OAAO,CAAC,gBAAgB;CAoB3B"}
1
+ {"version":3,"file":"FriendController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/FriendController.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAMjC,qBAAa,gBAAgB;IAC3B,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,qBAAqB,GAGhC;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,KAAK,WAAW,GAEtB;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAsFlE,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAgGV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkCpE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU9D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAiD7D,OAAO,CAAC,gBAAgB;CAoBzB"}